九章智算云
Hugging Face模型权重加速下载实战:镜像、ModelScope与团队缓存

大模型权重下载慢、易中断?从hf-mirror、ModelScope到aria2并发与团队缓存,讲清可用命令、授权边界、完整性校验和真实带宽上限。

下载一个70B级模型,真正费时间的往往不是敲命令,而是选错下载源、重复拉取权重,以及中断后无法确认文件是否完整。

以BF16 / FP16权重估算,700亿参数约占 140GB。面对这样的文件量,下载方案需要解决三个问题:链路是否通畅、失败后能否恢复、团队能否复用已经下载的文件。

本文围绕这三个问题,给出五类方案和可复制的命令。公网下载没有固定的速度排名,应以目标节点上的实际表现选择来源。

说明

适用范围:命令以Linux / Bash为主;Windows可使用WSL,文中另附PowerShell环境变量示例。Hugging Face部分采用当前的 hf CLI写法。文档核对日期为2026年9月20日;本文的时间对比是带宽估算,不是下载服务基准测试。

先选路径:不必一上来就调并发

模型权重下载遵循「先选源、再校验、最后复用」:按节点实际网络选择入口。

01选择下载来源02固定与校验03团队复用Hugging Face 官方源官方 CLI · hf xet适合官方文件链路可达的节点hf-mirrorHub 客户端切换入口公开模型先验证可用性ModelScope确认发布者与对应版本显式选择来源,不会自动回退本地模型目录固定 revision检查索引与全部分片核验来源与文件哈希记录来源、版本、许可证团队缓存共享目录 / 对象存储按版本发布,控制访问计算节点拉取指定版本校验后按本地路径加载受限模型的共同前提先取得账号授权;向第三方镜像发送 Token,意味着该服务会接触凭据。 架构示意,非性能排名图 1:先选择可达的下载源,再校验和复用文件;受限模型始终需要有效授权。
你的场景建议起点需要确认的条件
官方源连通稳定官方 hf download,必要时尝试Xet性能模式文件存储域名也可访问
官方源连接不稳定,下载公开模型hf download 配合hf-mirror镜像可达,目标版本可用
发布方在ModelScope提供对应版本ModelScope下载发布者、权重格式和版本一致
大文件吞吐偏低,链路仍有余量hfd + aria2服务支持分段请求,并发不会触发限流
多人、多节点反复使用同一模型团队缓存已完成校验,有明确的版本和访问权限

Gated模型,也就是需要申请访问权限的模型,是上述方案共同面对的授权问题,不是另一种加速协议。

下载前:确认模型、文件量和工具版本

使用真实、明确的仓库名称

下文统一使用 Qwen/Qwen2.5-72B-Instruct 演示。模型名称必须以发布方仓库为准,不能按“系列名 + 参数规模”自行拼接。

“70B约140GB”只是按每参数2字节做的数量级估算,不代表示例72B仓库恰好为140GB。量化格式、额外权重副本和仓库附件都会改变实际下载量;下载完成也不代表当前机器有足够显存运行模型。

在独立环境中安装下载工具

python3 -m venv .venv-hf
source .venv-hf/bin/activate
python -m pip install -U huggingface_hub

hf --help
python -m pip show huggingface_hub hf-xet

新版工具使用 hf download 和 hf auth login;huggingface-cli 已在 huggingface_hub 1.0中移除。不要将新旧版本的参数混在一起使用。团队脚本应在验证后锁定依赖版本,而不是每次运行都升级。迁移说明

正式下载前,先看文件清单和剩余空间:

hf download Qwen/Qwen2.5-72B-Instruct \
  --local-dir ./qwen2.5-72b \
  --dry-run

df -h .

--dry-run 仍需访问仓库元数据,但不会下载权重;如果官方源不可达,可为这条命令加上下一节的 HF_ENDPOINT。磁盘除容纳目标文件外,还应留出临时文件、缓存和后续转换所需空间。CLI参数说明

方案一:hf-mirror,适合公开模型的便捷入口

hf-mirror 是社区提供的镜像服务。对通过Hugging Face Hub客户端发起的请求,可以用 HF_ENDPOINT 切换服务入口。

CLI:只对当前命令切换入口

HF_ENDPOINT=https://hf-mirror.com \
HF_HUB_DISABLE_IMPLICIT_TOKEN=1 \
hf download Qwen/Qwen2.5-72B-Instruct \
  --local-dir ./qwen2.5-72b

这里下载的是公开模型,因此关闭隐式Token发送,避免客户端自动带上已保存的凭据。受限模型的认证方式见后文。

如果希望当前终端后续命令都使用镜像,也可以设置:

export HF_ENDPOINT=https://hf-mirror.com

# 恢复默认入口
unset HF_ENDPOINT

PowerShell对应写法:

$env:HF_ENDPOINT = "https://hf-mirror.com"

# 恢复默认入口
Remove-Item Env:HF_ENDPOINT

是否写入shell启动文件应由使用场景决定。需要切换官方源、私有仓库和第三方镜像时,按命令设置更容易追踪请求去向。

Python:先下载,再加载

import os

# 在导入 Hugging Face 相关库之前设置
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

from huggingface_hub import snapshot_download

model_dir = snapshot_download(
    repo_id="Qwen/Qwen2.5-72B-Instruct",
    local_dir="./qwen2.5-72b",
    token=False,  # 本例为公开模型
)
print(model_dir)

这段代码只下载文件,不会把72B权重加载进内存或显存。

HF_ENDPOINT 在Hub客户端导入时读取。Notebook如果已经导入相关库,应重启内核后再设置;不要用未经确认的 HUGGINGFACE_HUB_ENDPOINT 作为通用兼容办法。客户端配置源码

切换入口不等于所有流量都经过镜像。 数据集外部链接、库自行实现的下载逻辑,以及文件重定向或Xet存储访问,可能使用其他域名。transformers、datasets、peft 中通过Hub客户端进行的下载通常会受该设置影响,但不能据此承诺“所有调用都无需改动”。镜像自身也没有本文能够保证的持续可用性或吞吐下限。镜像使用说明

方案二:ModelScope,优先核对发布者和版本

如果发布方在ModelScope提供所需模型,可以直接使用对应仓库。Qwen官方提供了Hugging Face和ModelScope两个分发入口;这不意味着两站所有仓库、修订和文件都自动保持一致。Qwen发布说明

python -m pip install -U modelscope

modelscope download \
  --model Qwen/Qwen2.5-72B-Instruct \
  --local_dir ./qwen2.5-72b-ms

注意两套CLI的参数拼写不同:Hugging Face使用 --local-dir,ModelScope使用 --local_dir。ModelScope CLI文档

也可以只在下载步骤使用ModelScope:

from modelscope import snapshot_download

model_dir = snapshot_download(
    "Qwen/Qwen2.5-72B-Instruct",
    local_dir="./qwen2.5-72b-ms",
)
print(model_dir)

下载后,让推理框架读取本地目录即可。这不是Hugging Face的自动fallback:来源选择和失败后的切换仍需由应用明确实现。ModelScope下载实现

切换来源前,至少核对发布者身份、模型变体、量化格式、配置文件和tokenizer。两个平台的revision标识不一定互通;需要证明文件相同时,应进一步比对哈希值。

方案三:hfd + aria2,按瓶颈调整并发

hfd 是社区维护的下载脚本,可调用aria2下载仓库文件。它适合需要手动控制分段连接数和同时下载文件数的场景。

先准备依赖。以下安装命令适用于Debian / Ubuntu:

sudo apt-get update
sudo apt-get install -y curl aria2 jq

curl -fL https://hf-mirror.com/hfd/hfd.sh -o hfd.sh
less hfd.sh

阅读脚本后再运行,并保留所用版本;hfd.sh 下载地址中的脚本会更新。可以用 sha256sum hfd.sh 记录本次脚本的指纹。

bash hfd.sh --help

HF_ENDPOINT=https://hf-mirror.com \
bash hfd.sh Qwen/Qwen2.5-72B-Instruct \
  --tool aria2c -x 4 -j 2 \
  --local-dir ./qwen2.5-72b-hfd
参数控制什么如何调整
-x 4每个下载任务对单个服务器的最大连接数可从4尝试到8,观察有效吞吐
-j 2同时下载的文件数有带宽和磁盘余量时逐步增加

-x 4 -j 2 可以粗略理解为两个文件分别尝试多连接下载;实际连接数还取决于分片大小、重定向和服务端限制。标准aria2的 -x 上限为16,hfd脚本还可能施加更低的限制,应以所用脚本为准。因此,“万兆机器直接设为32–64”并不适用。aria2手册、参数范围实现

如果出口已经饱和、磁盘持续写满,或者出现HTTP 429,增加连接数通常无益。先降低并发、等待限流恢复,再判断瓶颈。

官方源可达时,也可以尝试Xet

当前Hub客户端支持 hf_xet。在网络、CPU和磁盘都有余量的机器上,可单独测试高性能模式:

HF_ENDPOINT=https://huggingface.co \
HF_XET_HIGH_PERFORMANCE=1 \
hf download Qwen/Qwen2.5-72B-Instruct \
  --local-dir ./qwen2.5-72b

该模式会更积极地使用资源,不能修复不可达的网络。hf_transfer 及其旧加速开关已被弃用,不应继续作为新版工具链的默认方案。Xet下载说明、性能开关说明

方案四:受限模型先授权,再选择下载链路

部分Llama、Gemma等模型仓库要求先申请访问。是否gated、是否自动批准,以具体仓库页面为准。

  1. 在Hugging Face官网登录,打开目标模型页面并提交访问申请。
  2. 确认已经获批;需要人工审核时,提交申请并不等于取得权限。
  3. 在 Token设置页 创建满足下载需求的最小权限Token。
  4. 在官方入口认证并下载。
# 交互式输入 Token,避免把明文凭据写入命令历史
HF_ENDPOINT=https://huggingface.co hf auth login

HF_ENDPOINT=https://huggingface.co \
hf download meta-llama/Llama-3.3-70B-Instruct \
  --local-dir ./llama3.3-70b

自动化任务可由密钥管理系统注入 HF_TOKEN;若使用fine-grained Token,还需赋予目标资源所需的读取权限。Token权限不能替代账号本身的访问批准。受限模型文档、Token权限说明

hf-mirror提供携带Token下载的用法,但将Token用于第三方镜像意味着凭据会发送到该服务,不能把“透传”理解为镜像无法接触凭据。受限或私有仓库优先使用官方源或组织认可的下载链路;第三方镜像也不能绕过仓库的访问控制。镜像认证说明

方案五:团队缓存,把一次下载变成可复用的版本

如果十台节点都要用同一版本,优化一次公网下载的收益,通常比十台机器分别调并发更大。

建议按下面的顺序建立流程:

固定仓库版本 → 下载完整文件 → 校验 → 写入只读缓存目录 → 节点拉取并复核。

固定revision,避免目录里的模型悄悄变化

首次试用可以下载默认分支;正式任务应记录完整commit hash,并显式指定:

# 将占位内容替换为目标仓库真实的完整提交哈希
MODEL_REVISION='REPLACE_WITH_FULL_COMMIT_HASH'

hf download Qwen/Qwen2.5-72B-Instruct \
  --revision "$MODEL_REVISION" \
  --local-dir "./qwen2.5-72b-$MODEL_REVISION"

--revision 支持分支、标签和提交哈希。为了让之后的任务准确复现同一份文件,推荐记录完整哈希;若通过镜像下载,也要确认该修订在镜像可用。版本下载说明

缓存可以是共享文件系统,也可以是S3兼容对象存储。目录建议包含仓库名、完整revision、文件清单、来源记录和校验文件。更新模型时新建版本目录,校验完成后再标记为可用。

使用S3兼容存储同步

以下示例假设已安装AWS CLI、配置凭据并创建bucket。MODEL_DIR 指向已下载和校验的目录,其他占位值必须替换为实际配置。

MODEL_DIR='./qwen2.5-72b-REPLACE_WITH_FULL_COMMIT_HASH'
MODEL_REVISION='REPLACE_WITH_FULL_COMMIT_HASH'
S3_ENDPOINT='https://YOUR_S3_COMPATIBLE_ENDPOINT'
S3_PREFIX="s3://YOUR_BUCKET/Qwen/Qwen2.5-72B-Instruct/$MODEL_REVISION"

# 首次发布:排除下载器状态和未完成文件
aws s3 sync "$MODEL_DIR/" "$S3_PREFIX/" \
  --endpoint-url "$S3_ENDPOINT" \
  --exclude '.cache/*' --exclude '.hfd/*' \
  --exclude '*.incomplete' --exclude '*.aria2'

# 计算节点:拉取这个确定的版本
aws s3 sync "$S3_PREFIX/" "$MODEL_DIR/" \
  --endpoint-url "$S3_ENDPOINT"

aws s3 sync 是对象同步工具,不会自动赋予普通bucket Hugging Face Hub API、版本审批或模型注册中心能力,也不等于逐字节校验。AWS CLI文档

Cloudflare R2可通过S3兼容接口使用,常规endpoint形如 https://<ACCOUNT_ID>.r2.cloudflarestorage.com,但它不会因此成为计算节点的“内网存储”。能否走内网,取决于存储部署位置、云厂商网络和endpoint。使用阿里云OSS等服务时,应按其官方工具或兼容接口文档配置,不能直接套用任意S3 endpoint。R2配置说明

对于九章智算云的部署项目,可按具体地域和CCI / CCS节点的网络配置评估对象存储缓存;交付时应记录端到端吞吐和测试条件,再给出对应的下载时间。

下载完成:确认文件可用,再对外分发

保留恢复下载所需的信息

下载中断后,优先使用相同工具、相同revision、相同目录重新执行命令。不要先删掉部分文件或下载状态目录。已完成文件可以复用;未完成文件的恢复粒度取决于下载后端和服务器支持,不能保证所有故障都从最后一个字节续传。

当前 --local-dir 会在目标目录下维护 .cache/huggingface/ 元数据。旧教程中的 --local-dir-use-symlinks False 不应再作为新CLI的必填参数;Hub默认共享缓存的软链接机制也应与 --local-dir 区分。本地目录说明

检查文件清单与校验值

至少核对配置、tokenizer、权重索引及索引列出的全部分片。只有一个 config.json 或若干个权重分片,并不代表模型完整。

团队分发前,可以为已确认完整的目录生成SHA-256清单。下面使用Linux的GNU工具,计算大文件哈希会额外读取一遍磁盘:

(
  set -euo pipefail
  cd ./qwen2.5-72b
  find . -type f \
    ! -path './.cache/*' ! -path './.hfd/*' \
    ! -name '*.incomplete' ! -name '*.aria2' \
    ! -name 'SHA256SUMS' -print0 \
    | sort -z \
    | xargs -0 sha256sum > SHA256SUMS
)

# 在接收方目录执行,核对文件是否与发布时一致
(cd ./qwen2.5-72b && sha256sum -c SHA256SUMS)

本地生成的哈希只能帮助验证后续分发是否一致,不能自行证明首次下载可信或文件齐全。 应先对照固定revision的文件清单;发布方提供可验证校验值时,再进行来源校验。校验清单本身也应由可信渠道提供。

保留模型许可证和来源记录,并按模型条款及组织权限要求管理缓存的分发范围。

速度该怎么看:140GB在千兆网络上有物理下限

下图从两个角度展示这一下限:上半部分是三档常见链路速率(100 Mbps / 1 Gbps / 10 Gbps)传完140GB的理论最短时间;下半部分是千兆网络下两种典型场景的估算——按千兆正常发挥能否如期传完、更短的完成时间需要什么条件;图底另附计算口径。

100 Mbps186.7分钟 · 理论最短时间理论字节速率 12.5 MB/s1 Gbps18.7分钟 · 理论最短时间理论字节速率 125 MB/s10 Gbps1.9分钟 · 理论最短时间理论字节速率 1,250 MB/s千兆下载 22 分钟:有可能若端到端平均吞吐达到 100–110 MB/s,140GB 约需 21–23 分钟。这是条件估算,不是某个镜像的速度承诺。3 分钟传完:需超过千兆140GB ÷ 180 秒 ≈ 778 MB/s即约 6.22 Gbps 的有效吞吐。万兆链路具备可能性,还需磁盘与服务端配合。计算口径:1GB = 1,000,000,000 字节;1Gbps = 1,000,000,000 bit/s;不计协议开销、重试、校验和服务端限速,非实测数据。图 2:理论值由文件大小与链路速率计算,不能代表某个下载源的实测表现。GB 使用十进制单位。

估算公式:

理论时间(秒)= 文件大小(GB)× 8,000 ÷ 链路速率(Mbps)
链路速率理论字节速率140GB的理论最短时间
100 Mbps12.5 MB/s约186.7分钟
1 Gbps125 MB/s约18.7分钟
10 Gbps1,250 MB/s约1.9分钟

如果实测端到端平均吞吐为 100–110 MB/s,传完140GB约需 21–23分钟。因此,22分钟在千兆环境中是可能达到的结果,但不是hf-mirror或aria2的固定表现。

反过来,140GB在3分钟内传完,需要约 778 MB/s、6.22 Gbps 的有效吞吐。这样的结果可以出现在满足条件的万兆链路中,却不能归因于单条千兆链路。GiB与GB的口径也不能混用。

如何发布一张可信的实测表

比较下载方案时,应记录仓库及revision、实际文件总字节数、工具版本、节点地域、出口带宽、磁盘类型、并发参数,以及本地缓存是否命中。镜像端缓存状态无法控制时,也应说明。

每个方案执行多轮测试,分别报告冷启动下载和本地缓存命中的结果;列出总耗时、平均吞吐、重试次数与失败原因。成功率应写成“成功次数 / 总次数”,并定义是否把重试后完成计为成功。

缺少这些记录,就不宜发布“某方案100% 成功”“直连成功率低于30%”一类统计结论。

常见问题速查

现象优先检查建议处理
401 / 403Token、账号授权、凭据是否发送;签名URL是否过期区分仓库API错误与文件存储错误;授权确认后重新获取下载链接
404仓库ID、文件名、revision;私有仓库权限先在原站核对,再检查镜像同步情况
429服务限流、并发过高降低连接和文件并发,按服务端提示等待
页面能打开,权重仍下载失败重定向目标、Xet / CAS存储域名根据日志检查实际文件链路,仅测试首页不足以判断可达性
设置镜像后仍访问旧入口是否在导入库之后才设置;程序是否另行指定endpoint重启进程并在导入前设置,检查代码中的覆盖配置
Broken pipe 或超时网络中断、代理、服务限流及具体失败阶段保留下载状态后重试;仅在等待响应过短时增加超时
进度条不动,du 也不可靠下载器预分配、磁盘I/O、活动连接综合日志、实际吞吐和文件状态判断,目录大小不能单独代表进度
下载后无法离线加载缺少分片、tokenizer或索引;加载路径错误对照清单补齐文件,再按推理框架要求加载本地路径

HTTP下载等待过短时,可以单独调整 HF_HUB_ETAG_TIMEOUT 和 HF_HUB_DOWNLOAD_TIMEOUT;这不会增加带宽,也不意味着修改了所有Xet超时。排查确认问题来自Xet路径时,可对单次命令设置 HF_HUB_DISABLE_XET=1 比较HTTP路径,但不能保证重定向后的地址就一定可达。环境变量说明

稳定的模型下载流程,最终应沉淀为一份可追溯的交付记录:从哪里下载、使用哪个版本、包含哪些文件、怎样校验、哪些节点可以复用。 下载源和并发参数可以随网络变化调整,这份记录则让下一次部署不必从头排查。

最后更新于

这篇文档对你有帮助吗?

目录