33.6 C
Colombia
sábado, julio 5, 2025

Weblog de Posit AI: antorcha 0.11.0



Weblog de Posit AI: antorcha 0.11.0

¡La antorcha v0.11.0 ahora está en CRAN! Esta publicación de weblog destaca algunos de los cambios incluidos en esta versión. Pero siempre puedes encontrar el completo. registro de cambios
en el sitio net de la antorcha.

Carga mejorada de dictados estatales.

Durante mucho tiempo ha sido posible utilizar la antorcha de R para cargar dictados de estado (es decir, pesos de modelos) entrenados con PyTorch utilizando el load_state_dict() función. Sin embargo, period común recibir el error:

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

Esto sucedió porque al guardar el state_dict de Python, no period realmente un diccionario, sino un ordenado diccionario. Los pesos en PyTorch se serializan como Conservar en vinagre archivos: un formato específico de Python related a nuestro RDS. Para cargarlos en C++, sin un tiempo de ejecución de Python, LibTorch implementa un lector pickle que puede leer solo un subconjunto del formato de archivo, y este subconjunto no incluye dictados ordenados.

Esta versión agrega soporte para leer los diccionarios ordenados, por lo que ya no verá este error.

Además de eso, leer estos archivos requiere la mitad del uso máximo de memoria y, en consecuencia, también es mucho más rápido. Estos son los tiempos para leer un modelo de parámetros 3B (StableLM-3B) con v0.10.0:

system.time({
  x <- torch::load_state_dict("~/Downloads/pytorch_model-00001-of-00002.bin")
  y <- torch::load_state_dict("~/Downloads/pytorch_model-00002-of-00002.bin")
})
   consumer  system elapsed 
662.300  26.859 713.484 

y con v0.11.0

   consumer  system elapsed 
  0.022   3.016   4.016 

Es decir, pasamos de minutos a solo unos segundos.

Usando operaciones JIT

Una de las formas más comunes de ampliar LibTorch/PyTorch es mediante la implementación de operaciones JIT. Esto permite a los desarrolladores escribir código personalizado y optimizado en C++ y usarlo directamente en PyTorch, con soporte completo para scripting y rastreo JIT. Vea nuestro ‘Antorcha fuera de la caja’
publicación de weblog si desea obtener más información al respecto.

El uso de operadores JIT en R solía requerir que los desarrolladores de paquetes implementaran C++/Rcpp para cada operador si querían poder llamarlos directamente desde R. Esta versión agregó soporte para llamar a operadores JIT sin requerir que los autores implementen los contenedores.

El único cambio seen es que ahora tenemos un nuevo símbolo en el espacio de nombres de la antorcha, llamado
jit_ops. Carguemos torchvisionlib, una extensión de torch que registra muchas operaciones JIT diferentes. Simplemente cargando el paquete con library(torchvisionlib) hará que sus operadores estén disponibles para que los use torch; esto se debe a que el mecanismo que registra los operadores actúa cuando se carga el paquete DLL (o biblioteca compartida).

Por ejemplo, usemos el read_file Operador que lee eficientemente un archivo en un tensor de antorcha sin formato (bytes).

torch_tensor
 137
  80
  78
  71
 ...
   0
   0
 103
... [the output was truncated (use n=-1 to disable)]
[ CPUByteType{325862} ]

Lo hemos hecho para que la función de autocompletar funcione bien, de modo que pueda explorar interactivamente los operadores disponibles usando jit_ops$ y presionando para activar el autocompletado de RStudio.

Otras pequeñas mejoras

Esta versión también agrega muchas pequeñas mejoras que hacen que la antorcha sea más intuitiva:

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

    torch_randn(3, dtype = "float64")
    torch_tensor
    -1.0919
     1.3140
     1.3559
    [ CPUDoubleType{3} ]
  • Ahora puedes usar with_device() y local_device() para modificar temporalmente el dispositivo en el que se crean los tensores. Antes había que usar machine en cada llamada a la función de creación de tensor. Esto permite inicializar un módulo en un dispositivo específico:

    with_device(machine="mps", {
      linear <- nn_linear(10, 1)
    })
    linear$weight$machine
    torch_device(kind='mps', index=0)
  • Ahora es posible modificar temporalmente la semilla de la antorcha, lo que facilita la creación de programas reproducibles.

    with_torch_manual_seed(seed = 1, {
      torch_randn(1)
    })
    torch_tensor
     0.6614
    [ CPUFloatType{1} ]

Gracias a todos los contribuyentes al ecosistema de la antorcha. Este trabajo no sería posible sin todos los útiles problemas 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í.

Foto por Ian Schneider en desempaquetar

Reutilizar

El texto y las figuras tienen licencia Artistic 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 Weblog: 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,
  creator = {Falbel, Daniel},
  title = {Posit AI Weblog: torch 0.11.0},
  url = {https://blogs.rstudio.com/tensorflow/posts/2023-06-07-torch-0-11/},
  yr = {2023}
}

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles