O Que São Safetensors e Por Que São Melhores Que .ckpt (pickletensor)

Categorizado como AI/ML, Open Source Etiquetas: , , , , ,
Save and Share:

Safetensors é um formato de modelo notável, concebido para armazenar tensores de forma segura, oferecendo velocidade e desempenho impressionantes em comparação com muitas das alternativas existentes. Safetensors não é apenas incrivelmente rápido, como também foi projetado com simplicidade e segurança no seu núcleo, o que o distingue de muitos formatos tradicionais utilizados em machine learning.

Por Que Escolher Safetensors?

Com uma panóplia de formatos disponíveis para machine learning e armazenamento de dados, poderá questionar-se o que distingue o Safetensors. Vejamos alguns destes formatos para entender como o Safetensors se destaca em parâmetros cruciais:

  • Seguro: Um ficheiro descarregado aleatoriamente não executará código arbitrário?
  • Cópia zero: A leitura do ficheiro exige mais memória do que o ficheiro original?
  • Carregamento preguiçoso: É possível inspecionar o ficheiro sem carregar tudo? E é possível carregar apenas alguns tensores sem digitalizar todo o ficheiro (importante num contexto distribuído)?
  • Controlo de layout: É possível controlar a localização dos tensores dentro do ficheiro para garantir um acesso rápido a tensores individuais?
  • Sem limite de tamanho de ficheiro: Existe um limite para o tamanho do ficheiro?
  • Flexibilidade: É possível guardar código personalizado no formato e utilizá-lo mais tarde sem código adicional?
  • Bfloat16: O formato suporta bfloat16 nativo sem necessidade de soluções estranhas?

Cada símbolo ✔ representa a presença, ❌ a ausência, ~ presença parcial e ? presença desconhecida de uma funcionalidade.

FormatoSeguroCópia zeroCarregamento preguiçosoSem limite de tamanho de ficheiroControlo de layoutFlexibilidadeBfloat16
SafeTensors
pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
pdparams (Paddle)

A partir desta comparação, pode constatar que o Safetensors cumpre ou supera as funcionalidades oferecidas por outros formatos de modelo. É particularmente notável pela sua capacidade de manipulação de dados com “cópia zero” e carregamento preguiçoso, o que pode aumentar significativamente a eficiência do processamento de dados em tarefas de machine learning.

Algumas Comparações Notáveis

Embora todos os formatos tenham os seus pontos fortes únicos, analisemos como o Safetensors se comporta em comparação com alguns dos mais comuns:

  • Pickle (PyTorch): Um formato amplamente utilizado, mas o pickle tem uma desvantagem significativa – não é seguro, pois permite a execução de código arbitrário.
  • H5 (Tensorflow): Embora seguro, não suporta a cópia zero, uma funcionalidade essencial para a manipulação eficiente de dados.
  • SavedModel (Tensorflow): Este formato é específico do Tensorflow e carece de flexibilidade para outras aplicações.
  • Numpy (npz): Embora popular, este formato não suporta bfloat16, uma funcionalidade cada vez mais crucial no mundo do ML.

Por Dentro do Safetensors

Aprofundando um pouco mais o Safetensors, verificamos que não é apenas um formato de dados, mas uma combinação de escolhas de design ponderadas que melhoram a segurança, a eficiência e a utilidade:

  • Cópia zero: O design do Safetensors permite uma verdadeira cópia zero na CPU se o ficheiro já estiver na cache. Na GPU, embora uma cópia seja sempre necessária devido à ausência de uma cache de disco, o design evita a necessidade de alocar todos os tensores na CPU em qualquer ponto.
  • Endianness: O Safetensors utiliza a ordenação little-endian, uma escolha popular no armazenamento de dados.
  • Ordem: Adota a ordenação ‘C’ ou por linhas. Esta escolha está alinhada com o padrão prevalecente no armazenamento de dados.
  • Stride: O striding não é suportado. Todos os tensores precisam de ser empacotados antes de serem serializados. Esta decisão de design foi tomada com base nos padrões de utilização atuais em formatos serializados.

A Milha Extra

Para além de ser simplesmente um formato de armazenamento de dados eficiente e seguro, o Safetensors também traz algumas vantagens adicionais:

  • Prevenção de ataques DoS: O design do Safetensors mitiga a possibilidade de ficheiros maliciosos causarem ataques DoS. Existe um limite no tamanho do cabeçalho para evitar a análise de JSON extremamente grandes e existe uma garantia de que os endereços no ficheiro não se sobrepõem, o que significa que carregar um ficheiro nunca deve exceder o tamanho do ficheiro na memória.
  • Carregamento mais rápido: O Safetensors ignora a cópia extra da CPU no PyTorch, permitindo tempos de carregamento da CPU extremamente rápidos em comparação com o pickle. Os tempos de carregamento da GPU são tão rápidos ou mais rápidos do que o seu equivalente PyTorch.
  • Carregamento preguiçoso: Em configurações distribuídas (vários nós ou várias GPUs), o Safetensors permite carregar apenas parte dos tensores, acelerando significativamente os tempos de carregamento do modelo e melhorando os ciclos de feedback de desenvolvimento.

Em Utilização

O Safetensors já está a ser amplamente adotado em empresas líderes de IA como a  Hugging FaceEleutherAI, e StabilityAI. Vários projetos proeminentes que utilizam Safetensors incluem:

Em conclusão, o Safetensors, com o seu conjunto único de funcionalidades e vantagens, está preparado para mudar o panorama no mundo do machine learning e do armazenamento de dados. Por isso, avance e experimente – o futuro dos formatos de modelo espera por si!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *