大模型权重下载慢、易中断?从hf-mirror、ModelScope到aria2并发与团队缓存,讲清可用命令、授权边界、完整性校验和真实带宽上限。
下载一个70B级模型,真正费时间的往往不是敲命令,而是选错下载源、重复拉取权重,以及中断后无法确认文件是否完整。
以BF16 / FP16权重估算,700亿参数约占 140GB。面对这样的文件量,下载方案需要解决三个问题:链路是否通畅、失败后能否恢复、团队能否复用已经下载的文件。
本文围绕这三个问题,给出五类方案和可复制的命令。公网下载没有固定的速度排名,应以目标节点上的实际表现选择来源。
说明
适用范围:命令以Linux / Bash为主;Windows可使用WSL,文中另附PowerShell环境变量示例。Hugging Face部分采用当前的 hf CLI写法。文档核对日期为2026年9月20日;本文的时间对比是带宽估算,不是下载服务基准测试。
先选路径:不必一上来就调并发
模型权重下载遵循「先选源、再校验、最后复用」:按节点实际网络选择入口。
| 你的场景 | 建议起点 | 需要确认的条件 |
|---|---|---|
| 官方源连通稳定 | 官方 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_ENDPOINTPowerShell对应写法:
$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、是否自动批准,以具体仓库页面为准。
- 在Hugging Face官网登录,打开目标模型页面并提交访问申请。
- 确认已经获批;需要人工审核时,提交申请并不等于取得权限。
- 在 Token设置页 创建满足下载需求的最小权限Token。
- 在官方入口认证并下载。
# 交互式输入 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的理论最短时间;下半部分是千兆网络下两种典型场景的估算——按千兆正常发挥能否如期传完、更短的完成时间需要什么条件;图底另附计算口径。
估算公式:
理论时间(秒)= 文件大小(GB)× 8,000 ÷ 链路速率(Mbps)| 链路速率 | 理论字节速率 | 140GB的理论最短时间 |
|---|---|---|
| 100 Mbps | 12.5 MB/s | 约186.7分钟 |
| 1 Gbps | 125 MB/s | 约18.7分钟 |
| 10 Gbps | 1,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 / 403 | Token、账号授权、凭据是否发送;签名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路径,但不能保证重定向后的地址就一定可达。环境变量说明
稳定的模型下载流程,最终应沉淀为一份可追溯的交付记录:从哪里下载、使用哪个版本、包含哪些文件、怎样校验、哪些节点可以复用。 下载源和并发参数可以随网络变化调整,这份记录则让下一次部署不必从头排查。
最后更新于
