¿Qué son los Safetensors y por qué son mejores que .ckpt (pickletensor)?

Categorizado como AI/ML, Código abierto Etiquetado como , , , , ,
Save and Share:

Safetensors es un formato de modelo extraordinario diseñado para almacenar tensores de forma segura, que presume de una velocidad y un rendimiento impresionantes en comparación con muchas de las alternativas en el campo. Safetensors no solo es increíblemente rápido, sino que también ha sido diseñado teniendo en cuenta la simplicidad y la seguridad, lo que lo diferencia de muchos formatos tradicionales utilizados en el aprendizaje automático.

¿Por qué elegir Safetensors?

Con la gran cantidad de formatos disponibles para el aprendizaje automático y el almacenamiento de datos, te preguntarás qué diferencia a Safetensors. Bien, dediquemos un momento a comparar algunos de estos formatos para comprender cómo Safetensors cumple con los parámetros clave:

  • Seguridad: ¿Un archivo descargado al azar no ejecutará código arbitrario?
  • Copia cero: ¿Leer el archivo requiere más memoria que el archivo original?
  • Carga diferida: ¿Se puede inspeccionar el archivo sin cargar todo? ¿Y se pueden cargar solo algunos tensores sin escanear todo el archivo (importante en un entorno distribuido)?
  • Control de diseño: ¿Se puede controlar la ubicación de los tensores dentro del archivo para garantizar un acceso rápido a los tensores individuales?
  • Sin límite de tamaño de archivo: ¿Existe un límite para el tamaño del archivo?
  • Flexibilidad: ¿Se puede guardar código personalizado en el formato y utilizarlo más tarde sin código adicional?
  • Bfloat16: ¿El formato es compatible con bfloat16 nativo sin necesidad de soluciones extrañas?

Cada símbolo ✔ representa la presencia, ❌ la ausencia, ~ la presencia parcial y ? la presencia desconocida de una característica.

FormatoSeguridadCopia ceroCarga diferidaSin límite de tamaño de archivoControl de diseñoFlexibilidadBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

De esta comparación, se puede observar que Safetensors cumple o supera las características que ofrecen otros formatos de modelo. Destaca especialmente por su capacidad de manipulación de datos de «copia cero» y carga diferida, lo que puede aumentar significativamente la eficiencia del manejo de datos en las tareas de aprendizaje automático.

Algunas comparaciones destacables

Si bien todos los formatos tienen sus puntos fuertes únicos, examinemos cómo le va a Safetensors frente a algunos de los más utilizados:

  • Pickle (PyTorch): Un formato muy utilizado, pero pickle tiene un inconveniente importante: no es seguro, ya que permite la ejecución de código arbitrario.
  • H5 (Tensorflow): Aunque es seguro, no admite la copia cero, una característica esencial para la manipulación eficiente de datos.
  • SavedModel (Tensorflow): Este formato es específico de Tensorflow y carece de flexibilidad para otras aplicaciones.
  • Numpy (npz): Aunque es popular, este formato no es compatible con bfloat16, una característica cada vez más importante en el mundo del ML.

Bajo el capó de Safetensors

Profundizando un poco más en Safetensors, descubrimos que no es solo un formato de datos, sino una combinación de elecciones de diseño bien pensadas que mejoran la seguridad, la eficiencia y la utilidad:

  • Copia cero: El diseño de Safetensors permite una verdadera copia cero en la CPU si el archivo ya está en la caché. En la GPU, aunque siempre es necesaria una copia debido a la ausencia de una caché de disco, el diseño evita la necesidad de asignar todos los tensores en la CPU en un momento dado.
  • Endianness: Safetensors utiliza el ordenamiento little-endian, una opción popular en el almacenamiento de datos.
  • Orden: Adopta el orden ‘C’ o row-major. Esta elección se alinea con el estándar prevalente en el almacenamiento de datos.
  • Stride: No se admite el striding. Todos los tensores deben empaquetarse antes de ser serializados. Esta decisión de diseño se tomó en función de los patrones de uso actuales en los formatos serializados.

Un paso más allá

Más allá de ser simplemente un formato de almacenamiento de datos eficiente y seguro, Safetensors también aporta algunas ventajas adicionales:

  • Prevención de ataques DOS: El diseño de Safetensors mitiga la posibilidad de que archivos maliciosos causen ataques DOS. Existe un límite en el tamaño del encabezado para evitar el análisis de JSON extremadamente grandes, y existe la garantía de que las direcciones en el archivo no se superponen, lo que significa que la carga de un archivo nunca debería exceder el tamaño del archivo en la memoria.
  • Carga más rápida: Safetensors evita la copia extra de la CPU en PyTorch, lo que permite tiempos de carga de la CPU extremadamente rápidos en comparación con pickle. Los tiempos de carga de la GPU son tan rápidos o más rápidos que su equivalente en PyTorch.
  • Carga diferida: En entornos distribuidos (multinodo o multigpu), Safetensors permite cargar solo parte de los tensores, lo que acelera significativamente los tiempos de carga del modelo y mejora los bucles de retroalimentación del desarrollo.

En la naturaleza

Safetensors ya está siendo ampliamente adoptado en empresas de IA líderes como  Hugging FaceEleutherAI, y StabilityAI. Varios proyectos destacados que utilizan Safetensors incluyen:

En conclusión, Safetensors, con su conjunto único de características y beneficios, está preparado para cambiar las reglas del juego en el mundo del aprendizaje automático y el almacenamiento de datos. Así que, adelante, pruébalo: ¡el futuro de los formatos de modelo te espera!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *