Posit AI Blog: antorcha 0.9.0

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 similar 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 caracteristicas. 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 la Figura 1 podemos ver el desempeño 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:


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.

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.


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.

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 metal, lo que significa que es compatible 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, device="mps")
torch_mm(x, x)

Si estás usando nn_modules también necesita mover el módulo al dispositivo MPS, usando el $to(device="mps") método.

Tenga en cuenta que esta característica está en beta a partir de esta publicación de blog, 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=1asi 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
  • Adicional torch_serialize() para permitir la creación de un vector en bruto a partir de torch 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 Creative 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 Blog: torch 0.9.0. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2022-10-25-torch-0-9/

cita BibTeX

@misc

Fuente del artículo

Deja un comentario