Safetensors es una nueva herramienta de almacenamiento de tensores que es sencilla, rápida y segura. Este formato de archivo está diseñado para almacenar tensores y ha sido desarrollado por Hugging Face, siendo ampliamente adoptado en su popular framework de 'transformers'. El paquete Safetensor R es una implementación pura de R que permite la lectura y escritura de archivos Safetensor.
La versión inicial (0.1.0) de Safetensors ya está disponible en CRAN.
Motivación
La principal motivación detrás de Safetensors en la comunidad Python es la seguridad. Según la documentación oficial:
El objetivo principal de esta iniciativa es eliminar la necesidad de usar pickle en PyTorch, que es el formato predeterminado.
Se considera que pickle es un formato inseguro, ya que la carga de un archivo pickle puede resultar en la ejecución de código arbitrario. Aunque esto no ha sido una preocupación para los usuarios de R, ya que el analizador pickle incluido en LibTorch solo admite un subconjunto del formato pickle que no permite la ejecución de código.
Además, este formato de archivo presenta ventajas sobre otros formatos comunes, que incluyen:
-
Soporte para carga diferida: permite leer solo un subconjunto de los tensores almacenados en el archivo.
-
Copia cero: la lectura del archivo no requiere más memoria que el propio archivo. Aunque la implementación actual en R realiza una copia única, se puede optimizar si es necesario en el futuro.
-
Sencillez: la implementación de este formato de archivo es simple y no requiere dependencias complejas, lo que lo convierte en un buen formato para intercambiar tensores entre diferentes frameworks de aprendizaje automático y también entre distintos lenguajes de programación. Por ejemplo, puedes guardar un archivo de tensores Safetensors en R y luego cargarlo en Python, y viceversa.
Existen más ventajas en comparación con otros formatos de archivos comunes en este ámbito, y puedes consultar una tabla comparativa aquí.
Formato
El formato de Safetensors se describe en la siguiente figura. Básicamente, consiste en un archivo de encabezado que contiene metadatos, seguido de buffers de tensores sin procesar.
Uso básico
Para instalar Safetensors desde CRAN, puedes usar el siguiente comando:
install.packages("safetensors")
Luego, puedes crear una lista con nombres de tensores de antorcha de la siguiente manera:
library(torch)
library(safetensors)
<- list(
tensors x = torch_randn(10, 10),
y = torch_ones(10, 10)
)
str(tensors)
#> List of 2
#> $ x:Float (1:10, 1:10)
#> $ y:Float (1:10, 1:10)
<- tempfile()
tmp safe_save_file(tensors, tmp)
Si deseas agregar metadatos adicionales al archivo guardado, puedes proporcionar un parámetro metadata
que contenga una lista con nombres.
Para leer archivos de Safetensors, puedes utilizar la función safe_load_file
, que devolverá una lista con nombres de tensores junto con el atributo metadata
que contiene el encabezado del archivo analizado.
<- safe_load_file(tmp)
tensors str(tensors)
#> List of 2
#> $ x:Float (1:10, 1:10)
#> $ y:Float (1:10, 1:10)
#> - attr(*, "metadata")=List of 2
#> ..$ x:List of 3
#> .. ..$ shape : int (1:2) 10 10
#> .. ..$ dtype : chr "F32"
#> .. ..$ data_offsets: int (1:2) 0 400
#> ..$ y:List of 3
#> .. ..$ shape : int (1:2) 10 10
#> .. ..$ dtype : chr "F32"
#> .. ..$ data_offsets: int (1:2) 400 800
#> - attr(*, "max_offset")= int 929
En la actualidad,
Los tensores de seguridad actualmente solo admiten la escritura de tensores de antorcha, sin embargo, estamos planeando incorporar soporte para escribir matrices simples de R y tensores de flujo tensor en versiones futuras.
Direcciones futuras
La próxima versión de Torch utilizará safetensors
como su formato de serialización. Esto significa que al llamar a torch_save()
en un modelo, lista de tensores u otros tipos de objetos soportados por torch_save
, obtendrá un archivo de tensores de seguridad válido.
Esta mejora con respecto a la implementación anterior se justifica por:
-
Un importante aumento en la velocidad, con más de 10 veces más rapidez para modelos de tamaño mediano, e incluso mayor para archivos grandes. También mejora el rendimiento de los cargadores de datos paralelos en aproximadamente un 30%.
-
Mejora la compatibilidad entre idiomas y frameworks. Ahora podrá entrenar su modelo en R y utilizarlo en Python (y viceversa), o entrenar su modelo en TensorFlow y ejecutarlo con Torch.
Si desea probarlo, puede instalar la versión de desarrollo de Torch mediante el siguiente comando:
::install_github("mlverse/torch") remotes
Foto por Nick Fewings 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 15). Posit AI Blog: safetensors 0.1.0. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2023-06-15-safetensors/
Cita BibTeX
@misc{safetensors, author = {Falbel, Daniel}, title = {Posit AI Blog: safetensors 0.1.0}, url = {https://blogs.rstudio.com/tensorflow/posts/2023-06-15-safetensors/}, year = {2023} }