Safetensors documentation

Analyse des métadonnées

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.5.0-rc.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Analyse des métadonnées

Compte tenu de la simplicité du format, il est très simple et efficace de récupérer et d’analyser les métadonnées relatives aux poids Safetensors – c’est-à-dire la liste des tenseurs, leurs types et leurs formes ou nombres de paramètres – à l’aide de petites requêtes HTTP (Range).

Cette analyse a été implémentée en JS dans huggingface.js (un exemple de code suit ci-dessous), mais elle serait similaire dans n’importe quel langage.

Cas d'utilisation d'exemple

Il peut exister de nombreux cas d'utilisation potentiels. Par exemple, nous l'utilisons sur le HuggingFace Hub pour afficher des informations sur les modèles qui possèdent des poids au format safetensors :

Utilisation

http
javascript
python

Depuis 🤗 Hub, vous pouvez obtenir les métadonnées d'un modèle via des requêtes HTTP range au lieu de télécharger le fichier safetensors complet avec tous les poids. Dans le script python ci-dessous (vous pouvez utiliser n'importe quel langage prenant en charge les requêtes HTTP), nous analysons les métadonnées de gpt2.

import requests # pip install requests
import struct

def parse_single_file(url):
    # Fetch the first 8 bytes of the file
    headers = {'Range': 'bytes=0-7'}
    response = requests.get(url, headers=headers)
    # Interpret the bytes as a little-endian unsigned 64-bit integer
    length_of_header = struct.unpack('<Q', response.content)[0]
    # Fetch length_of_header bytes starting from the 9th byte
    headers = {'Range': f'bytes=8-{7 + length_of_header}'}
    response = requests.get(url, headers=headers)
    # Interpret the response as a JSON object
    header = response.json()
    return header

url = "https://huggingface.co/gpt2/resolve/main/model.safetensors"
header = parse_single_file(url)

print(header)
# {
#   "__metadata__": { "format": "pt" },
#   "h.10.ln_1.weight": {
#     "dtype": "F32",
#     "shape": [768],
#     "data_offsets": [223154176, 223157248]
#   },
#   ...
# }

Exemple de sortie

Par exemple, voici le nombre de paramètres par dtype pour quelques modèles sur le HuggingFace Hub. Consultez également cette issue pour d'autres exemples d'utilisation.

modelsafetensorsparams
gpt2fichier unique{ ‘F32’ => 137022720 }
roberta-basefichier unique{ ‘F32’ => 124697433, ‘I64’ => 514 }
Jean-Baptiste/camembert-nerfichier unique{ ‘F32’ => 110035205, ‘I64’ => 514 }
roberta-largefichier unique{ ‘F32’ => 355412057, ‘I64’ => 514 }
distilbert-base-german-casedfichier unique{ ‘F32’ => 67431550 }
EleutherAI/gpt-neox-20bshardé{ ‘F16’ => 20554568208, ‘U8’ => 184549376 }
bigscience/bloom-560mfichier unique{ ‘F16’ => 559214592 }
bigscience/bloomshardé{ ‘BF16’ => 176247271424 }
bigscience/bloom-3bfichier unique{ ‘F16’ => 3002557440 }
Update on GitHub