luz 0.4.0

Una nueva versión de luz ya está disponible en CRAN. luz es una interfaz de alto nivel para torch. Su objetivo es reducir el código repetitivo necesario para entrenar modelos de aprendizaje profundo y, al mismo tiempo, ser lo más flexible posible para que pueda adaptarlo para ejecutar todo tipo de modelos de estudios profundos.

Si estás interesado en luz, te recomendamos leer el post de blog de lanzamiento anterior y también el capítulo ’Entrenando con luz' del libro ’Aprendizaje profundo y computación científica con antorcha R'.

Esta versión incluye numerosas funciones nuevas y puedes revisar el registro de cambios completo aquí. En este post de blog destacaremos las funciones que más nos entusiasman.

Soporte para Apple Silicon

Desde torch v0.9.0, ahora es posible realizar cálculos en la GPU de Mac con Apple Silicon. Anteriormente, luz no aprovechaba la GPU, ejecutando los modelos en la CPU por defecto.

A partir de esta versión, luz utilizará automáticamente el dispositivo 'mps' al ejecutar modelos en computadoras con Apple Silicon, permitiéndote así beneficiarte de la aceleración al ejecutar modelos en la GPU.

Por ejemplo, ejecutar un modelo CNN simple en MNIST desde este ejemplo durante una época en un chip Apple M1 Pro llevaría 24 segundos cuando se usa la GPU:

  user  system elapsed 
19.793   1.463  24.231 

Mientras que en la CPU tomaría 60 segundos:

  user  system elapsed 
83.783  40.196  60.253 

¡Una gran mejora en velocidad!

Cabe destacar que esta función aún está en desarrollo y no todas las operaciones de norte son compatibles con MPS. Es posible que veas un mensaje de advertencia explicando que es probable que se requiera utilizar el respaldo de la CPU para algunas operaciones:

(W MPSFallback.mm:11) Warning: The operator 'at:****' is not currently supported on the MPS backend and will fall back to run on the CPU. This may have performance implications. (function operator())

Puntos de control

La funcionalidad de puntos de control ha sido refactorizada en luz y ahora es más fácil reanudar los entrenamientos en caso de fallos inesperados. Todo lo que necesitas hacer es agregar un resume al entrenar el modelo:

# ... model definition omitted
# ...
# ...
resume <- luz_callback_resume_from_checkpoint(path = "checkpoints/")

results <- model %>% fit(
  list(x, y),
  callbacks = list(resume),
  verbose = FALSE
)

Ahora también es más sencillo mantener el estado del modelo en cada época, o si el modelo ha logrado mejores resultados hasta el momento. Obtén más información en el artículo de ’Puntos de control'.

Corrección de errores

Esta versión también incluye algunas correcciones de errores menores, como priorizar el uso de la CPU (incluso cuando hay un dispositivo más rápido disponible) o hacer que los entornos de métricas sean más consistentes.

Sin embargo, hay una corrección de error en particular que nos gustaría destacar en este post de blog. Descubrimos que el método que estábamos utilizando para registrar la pérdida durante el entrenamiento tenía una complejidad exponencial; por lo tanto, en modelos con muchos pasos por época, luz era muy lenta.

Por ejemplo, con un modelo ficticio que realiza 500 pasos por época, luz tardaría 61 segundos:

Epoch 1/1
Train metrics: Loss: 1.389                                                                
   user  system elapsed 
 35.533   8.686  61.201 

Con la corrección, el mismo modelo ahora tarda 5 segundos:

Epoch 1/1
Train metrics: Loss: 1.2499                                                                                             
   user  system elapsed 
  4.801   0.469   5.209

Esta corrección de errores se traduce en una velocidad 10 veces mayor para este modelo. No obstante, la velocidad puede variar según el tipo de modelo. Aquellos modelos que sean más rápidos por paso y tengan más iteraciones por época se beneficiarán más de esta corrección de errores.

Agradecemos tu lectura de este post de blog. Como siempre, recibimos con agrado cualquier contribución al ecosistema de aprendizaje profundo. No dudes en comentar problemas para proponer nuevas funciones, mejorar la documentación o ampliar la base del código.

La semana pasada anunciamos el lanzamiento de la versión 0.10.0 de luz: aquí tienes un enlace al post de blog del lanzamiento, en caso de que te lo hayas perdido.

Foto por Peter John Maridable en Unsplash

Reutilización

El texto y las figuras tienen licencia Creative Commons Attribution. CC BY 4.0. Las figuras que han sido reutilizadas de otras fuentes no están cubiertas por esta licencia y pueden identificarse por una nota en su pie de foto: "Figura de…".

Cita

Para atribuir, cita este trabajo como

Falbel (2023, April 17). Posit AI Blog: luz 0.4.0. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2023-04-17-luz-0-4/

Cita BibTeX

@misc{luz-0-4,
  author = {Falbel, Daniel},
  title = {Posit AI Blog: luz 0.4.0},
  url = {https://blogs.rstudio.com/tensorflow/posts/2023-04-17-luz-0-4/},
  year = {2023}
}

¿Nos apoyarás hoy?

Creemos que todos merecen entender el mundo en el que viven. Este conocimiento ayuda a crear mejores ciudadanos, vecinos, amigos y custodios de nuestro planeta. Producir periodismo explicativo y profundamente investigado requiere recursos. Puedes apoyar esta misión haciendo una donación económica a Gelipsis hoy. ¿Te sumarás a nosotros?

Suscríbete para recibir nuestro boletín:

Recent Articles

Related Stories

DEJA UN COMENTARIO

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí