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 mejoras significativas en el 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
for R usa LibTorch como backend. Esta es la misma biblioteca que alimenta a 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 envuelven bases de código C++ (por ejemplo, ‘, xgboost
). Allí, la sobrecarga es insignificante porque solo hay unas pocas llamadas a la función R antes de que comencemos a entrenar el modelo; todo el entrenamiento ocurre sin tener que salir de C++. En torch
, las funciones de C++ están envueltas 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 tratando de identificar cuellos de botella de rendimiento en torch
características. En algunos de los puntos de referencia, pudimos hacer que la nueva versión fuera hasta 250 veces más rápida que la última versión de CRAN. En 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 por (new_time/old_time)^-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 R. Ver más detalles en el Artículo ‘Gestión de la memoria’ en el torch
documentación.
En el dispositivo de 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 de rendimiento que se ha resuelto es el uso de un nuevo subproceso para cada llamada hacia atrás. Ahora usamos un grupo de subprocesos, haciendo que el hacia atrás y optimo compara casi 25 veces más rápido para algunos tamaños de lote.

Figura 2: rendimiento relativo de v0.8.1 frente a v0.9.0 en el dispositivo de CPU. El rendimiento relativo se mide por (new_time/old_time)^-1.
El código de referencia está totalmente 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.
Compatibilidad con Apple Silicon
torch
v0.9.0 ahora puede ejecutarse de forma nativa en dispositivos equipados con Apple Silicon. Al instalar torch
de una compilación ARM R, torch
descargará automáticamente los archivos binarios de LibTorch preconstruidos que apuntan a esta plataforma.
Además, ahora puede ejecutar torch
operaciones en la GPU de su Mac. Esta función se implementa en LibTorch a través de la API de sombreadores de rendimiento de steel, lo que significa que es appropriate tanto con dispositivos Mac equipados con GPU AMD como con chips Apple Silicon. Hasta ahora, solo se ha probado en dispositivos Apple Silicon. No dude en abrir un problema si tiene problemas para probar esta función.
Para usar la GPU macOS, debe colocar tensores en el dispositivo MPS. Luego, las operaciones en esos tensores ocurrirán en la GPU. Por ejemplo:
x <- torch_randn(100, 100, system="mps")
torch_mm(x, x)
Si estás usando nn_module
s también necesita mover el módulo al dispositivo MPS, usando el $to(system="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
asi que 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:
- Actualizar a LibTorch v1.12.1
- Agregado
torch_serialize()
para permitir la creación de un vector en bruto a partir detorch
objetos. torch_movedim()
y$movedim()
ahora ambos están indexados en base a 1.
Lea el registro de cambios completo disponible aquí.
Reutilizar
El texto y las figuras tienen licencia de Inventive Commons Attribution CC POR 4.0. Las figuras que se han reutilizado de otras fuentes no se incluyen en esta licencia y se pueden reconocer por una nota en su título: “Figura de…”.
Citación
Para la 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, writer = {Falbel, Daniel}, title = {Posit AI Weblog: torch 0.9.0}, url = {https://blogs.rstudio.com/tensorflow/posts/2022-10-25-torch-0-9/}, 12 months = {2022} }