Antorcha 0.11.0

La versión 0.11.0 de Antorcha ya está disponible en CRAN. En este artículo se resaltan algunos de los cambios incluidos en esta versión. Para acceder al registro de cambios completo, siempre puedes visitar el sitio web de Antorcha.

Mejora en la carga de estados dictados.

Hasta ahora, era posible utilizar Antorcha de R para cargar estados dictados (es decir, pesos de modelos) entrenados con PyTorch utilizando la función load_state_dict(). Sin embargo, era común encontrarse con el siguiente error:

Error in cpp_load_state_dict(path) :  isGenericDict() INTERNAL ASSERT FAILED at

Esto ocurría debido a que al guardar el state_dict en Python, este no era realmente un diccionario, sino un diccionario ordenado. Los pesos en PyTorch se serializan como archivos de Pickle: un formato específico de Python similar a nuestro RDS. Para cargarlos en C++, sin un tiempo de ejecución de Python, LibTorch implementa un lector de pickle que solo puede leer un subconjunto del formato de archivo, el cual no incluye diccionarios ordenados.

Esta versión agrega soporte para leer los diccionarios ordenados, eliminando así este error.

Además, la lectura de estos archivos ahora utiliza la mitad de la memoria máxima y, en consecuencia, también es mucho más rápida. Estos son los tiempos para leer un modelo de parámetros 3B (StableLM-3B) con la versión 0.10.0:

   user  system elapsed 
662.300  26.859 713.484 

Y con la versión 0.11.0:

   user  system elapsed 
  0.022   3.016   4.016 

Es decir, el tiempo de lectura se redujo de minutos a solo unos segundos.

Utilizando operaciones JIT

Una de las formas más comunes de expandir LibTorch/PyTorch es a través de la implementación de operaciones JIT. Esto permite a los desarrolladores escribir código personalizado y optimizado en C++ y utilizarlo directamente en PyTorch, con soporte completo para script y rastreo JIT. Para obtener más información al respecto, puedes consultar nuestra publicación en el blog ’Antorcha fuera de la caja'.

Anteriormente, usar operadores JIT en R requería que los desarrolladores de paquetes implementaran C++/Rcpp para cada operador si deseaban llamarlos directamente desde R. En esta versión, se añadió soporte para llamar a operadores JIT sin necesidad de que los autores implementen los contenedores.

El único cambio visible es la introducción de un nuevo símbolo en el espacio de nombres de Antorcha, llamado jit_ops. Al cargar torchvisionlib, una extensión de torch que registra diversas operaciones JIT, estos operadores estarán disponibles para su uso en torch tan pronto como cargues el paquete con library(torchvisionlib), ya que el mecanismo que registra los operadores actúa al cargar la biblioteca compartida (DLL).

Por ejemplo, vamos a utilizar el operador read_file, que lee eficientemente un archivo en un tensor de Antorcha sin formato (bytes).


library(torchvisionlib)
torch::jit_ops$image$read_file("img.png")

El resultado se muestra a continuación, aunque se ha truncado para su visualización.


torch_tensor
 137
  80
  78
  71
 ...
   0
   0
 103
 ... (la salida fue truncada (usa n=-1 para deshabilitar))
( CPUByteType{325862} )

Otras pequeñas mejoras

Esta nueva versión también incorpora varias mejoras que hacen que trabajar con Antorcha sea más intuitivo:

  • Ahora puedes especificar el tipo de tensor utilizando una cadena, por ejemplo: torch_randn(3, dtype = "float64"). Anteriormente, tenías que especificar el tipo utilizando una función de Antorcha, como torch_float64().
    
    torch_randn(3, dtype = "float64")
    

    El resultado se muestra a continuación:

    
    torch_tensor
    -1.0919
     1.3140
     1.3559
    ( CPUDoubleType{3} )
    
  • Ahora puedes utilizar with_device() y local_device() para modificar temporalmente el dispositivo en el que se crean los tensores. Anteriormente, tenías que especificar device en cada llamada a la función de creación de tensor. Este cambio te permite inicializar un módulo en un dispositivo específico.
    
    with_device(device="mps", {
      linear <- nn_linear(10, 1)
    })
    linear$weight$device
    

    El resultado se muestra a continuación:

    
    torch_device(type='mps', index=0)
    
  • Ahora es posible modificar temporalmente la semilla de Antorcha, lo que facilita la creación de programas reproducibles.
    
    with_torch_manual_seed(seed = 1, {
      torch_randn(1)
    })
    

    El resultado se muestra a continuación:

    
    torch_tensor
     0.6614
    ( CPUFloatType{1} )
    

Un agradecimiento a todos los contribuyentes del ecosistema de Antorcha. Este trabajo no sería posible sin todas las valiosas colaboraciones, problemas abiertos que has reportado y tu arduo trabajo.

Si eres nuevo en el uso de Antorcha y deseas obtener más información, te recomendamos encarecidamente el libro recientemente anunciado ’Aprendizaje profundo y computación científica con R torch'.

Si deseas comenzar a contribuir con Torch, no dudes en contactarnos en GitHub y consultar nuestra guía para contribuyentes.

Puedes encontrar el registro de cambios completo para esta versión aquí.

Foto por Ian Schneider en desempaquetar

Reutilizar

El texto y las figuras tienen licencia Creative 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 (2023, June 7). Posit AI Blog: torch 0.11.0. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2023-06-07-torch-0-11/

Cita BibTeX

@misc{torch-0-11-0,
  author = {Falbel, Daniel},
  title = {Posit AI Blog: torch 0.11.0},
  url = {https://blogs.rstudio.com/tensorflow/posts/2023-06-07-torch-0-11/},
  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í