Safetensors 文档

元数据解析

您正在查看 主分支 版本,需要从源代码安装。如果您想使用常规的 pip 安装,请查看最新的稳定版本(v0.3.2)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

元数据解析

鉴于格式的简单性,获取和解析有关 Safetensors 权重元数据(即张量列表、其类型以及其形状或参数数量)非常简单高效,可以使用小的(范围) HTTP 请求

此解析已在 JS 中的 huggingface.js 中实现(以下为示例代码),但在任何语言中都类似。

使用示例

可能有许多潜在的用例。例如,我们在 HuggingFace Hub 上使用它来显示有关具有 safetensors 权重的模型的信息。

用法

HTTP
JavaScript
Python

🤗 Hub,您可以使用 HTTP 范围请求 获取模型的元数据,而不是下载包含所有权重的整个 safetensors 文件。在此示例 Python 脚本中(您可以使用任何支持 HTTP 请求的语言),我们正在解析 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]
#   },
#   ...
# }

输出示例

例如,以下是在 HuggingFace Hub 上一些模型的每个数据类型的参数数量。另请参阅 此问题 以获取更多使用示例。

模型 Safetensors 参数
gpt2 单个文件 { ‘F32’ => 137022720 }
roberta-base 单个文件 { ‘F32’ => 124697433, ‘I64’ => 514 }
Jean-Baptiste/camembert-ner 单个文件 { ‘F32’ => 110035205, ‘I64’ => 514 }
roberta-large 单个文件 { ‘F32’ => 355412057, ‘I64’ => 514 }
distilbert-base-german-cased 单个文件 { ‘F32’ => 67431550 }
EleutherAI/gpt-neox-20b 分片 { ‘F16’ => 20554568208, ‘U8’ => 184549376 }
bigscience/bloom-560m 单个文件 { ‘F16’ => 559214592 }
bigscience/bloom 分片 { ‘BF16’ => 176247271424 }
bigscience/bloom-3b 单个文件 { ‘F16’ => 3002557440 }
< > 在 GitHub 上更新