Formatul safetensors în Hugging Face Hub & Transformers

Format de stocare a tensorilor creat de Hugging Face: sigur față de pickle (nu execută cod la încărcare), rapid, cu încărcare parțială (lazy) a tensorilor.

Sintaxă & invocare Python
from safetensors.torch import save_file, load_file

save_file(tensors, "model.safetensors")
tensors = load_file("model.safetensors", device="cpu")

Ce face Formatul safetensors

Checkpoint-urile PyTorch clasice (.bin, .pt) folosesc pickle, care poate executa cod arbitrar la încărcarea unui fișier descărcat. safetensors a fost creat ca alternativă sigură: fișierul conține doar un antet JSON cu metadatele tensorilor și octeții de date.

Structura fișierului: primii 8 octeți sunt un întreg pe 64 de biți cu dimensiunea antetului, urmat de antetul JSON (pentru fiecare tensor: dtype, shape, data_offsets, plus un câmp opțional __metadata__), apoi datele. Formatul permite citirea unui singur tensor fără restul fișierului (lazy loading).

Despre viteză, documentația spune că încărcarea pe CPU este foarte rapidă față de pickle, iar pe GPU este cel puțin la fel de rapidă ca echivalentul PyTorch. Zero-copy real există doar pe CPU, când fișierul este deja în cache-ul sistemului; pe GPU o copie de pe disc este mereu necesară.

Sintaxă și opțiuni

Opțiune / Parametru Descriere
save_file(tensors, cale) Salvează un dicționar de tensori.
load_file(cale, device=...) Încarcă toți tensorii pe dispozitivul dat.
safe_open(cale, framework="pt", device=...) Deschide fișierul pentru citire parțială.
f.get_tensor(nume) Citește un singur tensor.
__metadata__ Metadate libere în antet; doar perechi text-text.

Exemple practice

Exemplul 1: Salvare și încărcare

import torch
from safetensors.torch import save_file, load_file

tensors = {
    "weight1": torch.zeros((1024, 1024)),
    "weight2": torch.zeros((1024, 1024)),
}
save_file(tensors, "model.safetensors")
loaded = load_file("model.safetensors")

Exemplul 2: Un singur tensor dintr-un fișier mare

from safetensors import safe_open

with safe_open("model.safetensors", framework="pt", device="cpu") as f:
    strat = f.get_tensor("model.layers.0.self_attn.q_proj.weight")

Greșeli frecvente și bune practici

  • Încarci fișiere .bin / .pt din surse necunoscute. Pickle poate rula cod; preferă variantele .safetensors.
  • Presupui că safetensors copiază direct de pe disc în memoria GPU. Documentația spune că pe GPU o copie este mereu necesară.
  • Pui valori non-text în __metadata__. Formatul acceptă doar perechi șir-șir.

Comenzi înrudite

Învață AI • Comunitate & Q&A

Întrebări & Exemple practice: Formatul safetensors

Ai o întrebare despre Formatul safetensors sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!

🤖

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.

Comunitate AI Adaugă o întrebare sau distribuie un cod / prompt

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.