Nos complace anunciar que torch v0.10.0 ahora está en CRAN. En esta entrada de weblog destacamos algunos de los cambios que se han introducido en esta versión. Puedes consultar el registro de cambios completo. aquí.
Precisión mixta automática
La precisión mixta automática (AMP) es una técnica que permite un entrenamiento más rápido de modelos de aprendizaje profundo, manteniendo al mismo tiempo la precisión del modelo mediante el uso de una combinación de formatos de punto flotante de precisión easy (FP32) y media precisión (FP16).
Para utilizar la precisión mixta automática con soplete, necesitará utilizar el with_autocast
conmutador de contexto para permitir que la antorcha utilice diferentes implementaciones de operaciones que pueden ejecutarse con media precisión. En basic, también se recomienda escalar la función de pérdida para preservar pequeños gradientes, ya que se acercan a cero en la mitad de precisión.
Aquí hay un ejemplo mínimo, omitiendo el proceso de generación de datos. Puedes encontrar más información en el artículo amplificador.
...
loss_fn <- nn_mse_loss()$cuda()
web <- make_model(in_size, out_size, num_layers)
choose <- optim_sgd(web$parameters, lr=0.1)
scaler <- cuda_amp_grad_scaler()
for (epoch in seq_len(epochs)) {
for (i in seq_along(information)) {
with_autocast(device_type = "cuda", {
output <- web(information[[i]])
loss <- loss_fn(output, targets[[i]])
})
scaler$scale(loss)$backward()
scaler$step(choose)
scaler$replace()
choose$zero_grad()
}
}
En este ejemplo, el uso de precisión mixta generó una aceleración de alrededor del 40%. Esta aceleración es aún mayor si solo está ejecutando inferencia, es decir, no necesita escalar la pérdida.
Binarios prediseñados
Con los archivos binarios prediseñados, la instalación de torch se vuelve mucho más fácil y rápida, especialmente si está en Linux y utiliza compilaciones habilitadas para CUDA. Los binarios prediseñados incluyen LibLantern y LibTorch, ambas dependencias externas necesarias para ejecutar Torch. Además, si instala las compilaciones habilitadas para CUDA, las bibliotecas CUDA y cuDNN ya están incluidas.
Para instalar los binarios prediseñados, puede utilizar:
choices(timeout = 600) # growing timeout is beneficial since we might be downloading a 2GB file.
<- "cu117" # "cpu", "cu117" are the one at the moment supported.
variety <- "0.10.0"
model choices(repos = c(
torch = sprintf("https://storage.googleapis.com/torch-lantern-builds/packages/%s/%s/", variety, model),
CRAN = "https://cloud.r-project.org" # or some other from which you need to set up the opposite R dependencies.
))set up.packages("torch")
Como buen ejemplo, ¡puedes poner en marcha una GPU en Google Colaboratory en menos de 3 minutos!

Aceleraciones
gracias a un asunto abierto por @egillaxpudimos encontrar y corregir un error que causaba que las funciones de antorcha que devolvían una lista de tensores fueran muy lentas. La función en el caso period torch_split()
.
Este problema se solucionó en la versión 0.10.0 y confiar en este comportamiento debería ser mucho más rápido ahora. Aquí hay un punto de referencia mínimo que compara la v0.9.1 con la v0.10.0:
::mark(
bench::torch_split(1:100000, split_size = 10)
torch )
Con v0.9.1 obtenemos:
# A tibble: 1 × 13
expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total_time
<bch:expr> <bch:tm> <bch:t> <dbl> <bch:byt> <dbl> <int> <dbl> <bch:tm>
1 x 322ms 350ms 2.85 397MB 24.3 2 17 701ms
# ℹ 4 extra variables: end result <checklist>, reminiscence <checklist>, time <checklist>, gc <checklist>
mientras que con v0.10.0:
# A tibble: 1 × 13
expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total_time
<bch:expr> <bch:tm> <bch:t> <dbl> <bch:byt> <dbl> <int> <dbl> <bch:tm>
1 x 12ms 12.8ms 65.7 120MB 8.96 22 3 335ms
# ℹ 4 extra variables: end result <checklist>, reminiscence <checklist>, time <checklist>, gc <checklist>
Refactorización del sistema de compilación
El paquete torch R depende de LibLantern, una interfaz C para LibTorch. Lantern es parte del repositorio de torch, pero hasta la versión 0.9.1 sería necesario compilar LibLantern en un paso separado antes de compilar el paquete R.
Este enfoque tenía varias desventajas, entre ellas:
- La instalación del paquete desde GitHub no period confiable/reproducible, ya que dependería de un binario transitorio prediseñado.
- Común
devtools
flujos de trabajo comodevtools::load_all()
no funcionaría si el usuario no construyera Lantern antes, lo que dificultaba la contribución a la antorcha.
De ahora en adelante, la creación de LibLantern es parte del flujo de trabajo de creación de paquetes de R y se puede habilitar configurando el parámetro BUILD_LANTERN=1
variable de entorno. No está habilitado de forma predeterminada porque la construcción de Lantern requiere cmake
y otras herramientas (especialmente si se construye con soporte de GPU), y en esos casos es preferible usar los archivos binarios prediseñados. Con este conjunto de variables de entorno, los usuarios pueden ejecutar devtools::load_all()
para construir y probar localmente la antorcha.
Esta bandera también se puede utilizar al instalar versiones de desarrollo de torch desde GitHub. Si está configurado en 1
Lantern se construirá desde el código fuente en lugar de instalar los binarios prediseñados, lo que debería conducir a una mejor reproducibilidad con las versiones de desarrollo.
Además, como parte de estos cambios, hemos mejorado el proceso de instalación automática de la antorcha. Ahora tiene mensajes de error mejorados para ayudar a depurar problemas relacionados con la instalación. También es más fácil de personalizar usando variables de entorno, consulte assist(install_torch)
para más información.
Gracias a todos los contribuyentes al ecosistema de la antorcha. Este trabajo no sería posible sin todos los útiles temas abiertos, los RP que usted creó y su arduo trabajo.
Si es nuevo en el uso de la antorcha y desea obtener más información, le recomendamos encarecidamente el anunciado recientemente libro ‘Aprendizaje profundo y computación científica con R torch
‘.
Si desea comenzar a contribuir con torch, no dude en comunicarse con GitHub y ver nuestra guía contribuyente.
Puede encontrar el registro de cambios completo para esta versión. aquí.