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

Categorizado como AI/ML, Código aberto Marcado com , , , , ,
Save and Share:

Safetensors é um formato de modelo notável, projetado para armazenar tensores de forma segura, com velocidade e desempenho impressionantes em comparação com muitas das alternativas na área. Além de ser incrivelmente rápido, o Safetensors foi projetado com simplicidade e segurança em sua essência, o que o diferencia de muitos formatos tradicionais usados em aprendizado de máquina.

Por Que Escolher Safetensors?

Com uma infinidade de formatos disponíveis para aprendizado de máquina e armazenamento de dados, você pode se perguntar o que diferencia o Safetensors. Bem, vamos dedicar um momento para comparar alguns desses formatos para entender como o Safetensors atende aos principais parâmetros:

  • Segurança: Um arquivo baixado aleatoriamente não executará código arbitrário?
  • Cópia zero: A leitura do arquivo requer mais memória do que o arquivo original?
  • Carregamento preguiçoso (Lazy loading): O arquivo pode ser inspecionado sem carregar tudo? E apenas alguns tensores nele podem ser carregados sem examinar todo o arquivo (importante em um ambiente distribuído)?
  • Controle de layout: A localização dos tensores dentro do arquivo pode ser controlada para garantir acesso rápido a tensores individuais?
  • Sem limite de tamanho de arquivo: Existe um limite para o tamanho do arquivo?
  • Flexibilidade: O código personalizado pode ser salvo no formato e usado posteriormente sem nenhum código extra?
  • Bfloat16: O formato oferece suporte nativo a bfloat16 sem a necessidade de soluções alternativas estranhas?

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

FormatoSeguroCópia zeroCarregamento preguiçosoSem limite de tamanho de arquivoControle 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, você pode ver que o Safetensors atende ou supera os recursos oferecidos por outros formatos de modelo. É particularmente notável por sua capacidade de manipulação de dados com ‘cópia zero’ e carregamento preguiçoso, o que pode aumentar significativamente a eficiência do manuseio de dados em tarefas de aprendizado de máquina.

Algumas Comparações Notáveis

Embora todos os formatos tenham seus pontos fortes exclusivos, vamos examinar como o Safetensors se compara a alguns dos mais usados:

  • 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 oferece suporte à cópia zero, um recurso fundamental 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 oferece suporte a bfloat16, um recurso cada vez mais crucial no mundo do ML.

Por Dentro do Safetensors

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

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

Indo Além

Além de ser 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 arquivos maliciosos causarem ataques DOS. Há um limite no tamanho do cabeçalho para evitar a análise de JSONs extremamente grandes, e há uma garantia de que os endereços no arquivo não se sobreponham, o que significa que carregar um arquivo nunca deve exceder o tamanho do arquivo 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 seus equivalentes em PyTorch.
  • Carregamento Preguiçoso: Em ambientes distribuídos (multi-nó ou multi-gpu), o Safetensors permite carregar apenas parte dos tensores, acelerando significativamente os tempos de carregamento do modelo e melhorando os ciclos de feedback de desenvolvimento.

Na Prática

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

Em conclusão, o Safetensors, com seu conjunto único de recursos e benefícios, está preparado para ser um divisor de águas no mundo do aprendizado de máquina e armazenamento de dados. Então, vá em frente e experimente – o futuro dos formatos de modelo espera por você!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *