Estamos felices de anunciar que torch
v0.9.0 ahora está en CRAN. Esta versión agrega soporte para sistemas ARM que ejecutan macOS y brinda importantes mejoras de rendimiento. Esta versión también incluye muchas funciones y correcciones de errores menores. El registro de cambios completo se puede encontrar aquí.
Mejoras de rendimiento
torch
para R usa LibTorch como backend. Esta es la misma biblioteca que impulsa PyTorch, lo que significa que deberíamos ver un rendimiento muy comparable al comparar programas.
Sin embargo, torch
tiene un diseño muy diferente, en comparación con otras bibliotecas de aprendizaje automático que incluyen bases de código C++ (p. ej., xgboost
). Allí, la sobrecarga es insignificante porque solo hay unas pocas llamadas a funciones R antes de comenzar a entrenar el modelo; Luego, todo el entrenamiento se realiza sin salir de C++. En torch
Las funciones de C++ están empaquetadas en el nivel de operación. Y dado que un modelo consta de múltiples llamadas a operadores, esto puede hacer que la sobrecarga de llamadas a la función R sea más sustancial.
Hemos establecido un conjunto de puntos de referencia, cada uno de los cuales intenta identificar cuellos de botella en el desempeño en áreas específicas. torch
características. En algunas de las pruebas pudimos hacer que la nueva versión fuera hasta 250 veces más rápida que la última versión de CRAN. En la figura 1 podemos ver el rendimiento relativo de torch
v0.9.0 y torch
v0.8.1 en cada uno de los puntos de referencia que se ejecutan en el dispositivo CUDA:

Figura 1: Rendimiento relativo de v0.8.1 frente a v0.9.0 en el dispositivo CUDA. El rendimiento relativo se mide mediante (tiempo_nuevo/tiempo_antiguo)^-1.
La principal fuente de mejoras de rendimiento en la GPU se debe a una mejor gestión de la memoria, al evitar llamadas innecesarias al recolector de basura de R. Ver más detalles en el Artículo ‘Gestión de la memoria’ en el torch
documentación.
En el dispositivo con CPU tenemos resultados menos expresivos, aunque algunos de los puntos de referencia son 25 veces más rápidos con v0.9.0. En la CPU, el principal cuello de botella para el rendimiento que se ha solucionado es el uso de un nuevo hilo para cada llamada hacia atrás. Ahora usamos un grupo de subprocesos, haciendo que hacia atrás y optimo comparaciones casi 25 veces más rápidas para algunos tamaños de lote.

Figura 2: Rendimiento relativo de v0.8.1 frente a v0.9.0 en el dispositivo CPU. El rendimiento relativo se mide mediante (tiempo_nuevo/tiempo_antiguo)^-1.
El código de referencia está completamente disponible para reproducibilidad. Aunque esta versión trae mejoras significativas en torch
para el rendimiento de R, continuaremos trabajando en este tema y esperamos mejorar aún más los resultados en las próximas versiones.
Soporte para Apple Silicio
torch
v0.9.0 ahora se puede ejecutar de forma nativa en dispositivos equipados con Apple Silicon. Al instalar torch
desde una compilación ARM R, torch
descargará automáticamente los archivos binarios prediseñados de LibTorch destinados a esta plataforma.
Además ahora puedes ejecutar torch
operaciones en la GPU de tu Mac. Esta característica se implementa en LibTorch a través del API de sombreadores de rendimiento de steello que significa que es appropriate tanto con dispositivos Mac equipados con GPU AMD como con chips Apple Silicon. Hasta ahora, sólo se ha probado en dispositivos Apple Silicon. No dude en abrir un problema si tiene problemas para probar esta función.
Para utilizar la GPU macOS, debe colocar tensores en el dispositivo MPS. Luego, las operaciones sobre esos tensores se realizarán en la GPU. Por ejemplo:
x <- torch_randn(100, 100, gadget="mps")
torch_mm(x, x)
Si estas usando nn_module
También es necesario mover el módulo al dispositivo MPS, utilizando el $to(gadget="mps")
método.
Tenga en cuenta que esta característica está en beta a partir de esta publicación de weblog, y es posible que encuentre operaciones que aún no están implementadas en la GPU. En este caso, es posible que deba configurar la variable de entorno PYTORCH_ENABLE_MPS_FALLBACK=1
entonces torch
utiliza automáticamente la CPU como respaldo para esa operación.
Otro
Se han agregado muchos otros pequeños cambios en esta versión, que incluyen:
- Actualización a LibTorch v1.12.1
- Agregado
torch_serialize()
para permitir la creación de un vector sin formato a partir detorch
objetos. torch_movedim()
y$movedim()
ahora ambos están indexados en base 1.
Lea el registro de cambios completo disponible aquí.
Reutilizar
El texto y las figuras tienen licencia Inventive Commons Attribution. CC POR 4.0. Las figuras que han sido reutilizadas de otras fuentes no están cubiertas por esta licencia y pueden reconocerse por una nota en su pie de foto: “Figura de…”.
Citación
Para atribución, cite este trabajo como
Falbel (2022, Oct. 25). Posit AI Weblog: torch 0.9.0. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2022-10-25-torch-0-9/
Cita BibTeX
@misc{torch-0-9-0, creator = {Falbel, Daniel}, title = {Posit AI Weblog: torch 0.9.0}, url = {https://blogs.rstudio.com/tensorflow/posts/2022-10-25-torch-0-9/}, yr = {2022} }