您正在查看 主分支 版本,需要从源代码安装。如果您想使用常规的 pip 安装,请查看最新的稳定版本(v0.3.2)。
元数据解析
鉴于格式的简单性,获取和解析有关 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 } |