适用场景:服务器无法访问 huggingface.co、下载大文件频繁断连、单线程速度龟速,想用最稳最快的方式把模型权重和数据集拉下来。
一、背景:为什么 HuggingFace 在国内这么难用?
对于国内的 AI 开发者和竞赛选手来说,HuggingFace 几乎是绕不开的资源站——无论是预训练权重、数据集还是 tokenizer 配置,十有八九都托管在上面。然而由于众所周知的网络原因,直接访问 huggingface.co 往往要么超时,要么速度慢到令人崩溃。
更糟糕的是,当你在云 GPU 实例(比如 AutoDL、恒源云)上训练模型时,服务器本身也无法出境访问,wget 挂着跑了几个小时,结果下载到一半直接断开——什么都没留下。
本文以 AGIBot World Challenge @ ICRA 2026 参赛过程中下载模型权重和训练数据集为实际案例,系统整理一套国内环境下 HuggingFace 大文件下载的最优实践。
二、核心思路:使用 HF-Mirror 镜像站
hf-mirror.com 是目前国内最稳定的 HuggingFace 镜像站之一,使用方式极其简单——将原始 URL 中的 huggingface.co 替换为 hf-mirror.com 即可,其余路径完全一致。
原始地址(无法访问):
https://huggingface.co/agibot-world/EnerVerse-AC/resolve/main/EnerV_AC_deepspeed_v0.1.pt镜像地址(国内可用):
https://hf-mirror.com/agibot-world/EnerVerse-AC/resolve/main/EnerV_AC_deepspeed_v0.1.pt规则通用,数据集也适用:
# 原始https://huggingface.co/datasets/agibot-world/AgiBotWorldChallenge-2026/resolve/main/WorldModel/train.tar.gz# 镜像https://hf-mirror.com/datasets/agibot-world/AgiBotWorldChallenge-2026/resolve/main/WorldModel/train.tar.gz三、方案一:wget(简单但有局限)
wget 是最基础的下载工具,配合 -c 参数可以实现断点续传,适合网络稳定、文件不太大的场景。
基本用法
# 下载模型权重wget -c \ -O /coding/AgiBotWorldChallenge/weights/evac/EnerV_AC_deepspeed_v0.1.pt \ "https://hf-mirror.com/agibot-world/EnerVerse-AC/resolve/main/EnerV_AC_deepspeed_v0.1.pt"# 下载 CLIP 权重wget -c \ -O /coding/AgiBotWorldChallenge/weights/clip/open_clip_pytorch_model.bin \ "https://hf-mirror.com/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/resolve/main/open_clip_pytorch_model.bin"参数说明
-c | |
-O <路径> |
wget 的致命弱点
• 单线程:无论网速多好,wget 只用一个连接,大文件速度天花板极低 • 重试机制弱:默认遇到连接失败会放弃,需要手动加 --tries=0才能无限重试• 没有并发:10 GB 的数据集,单线程跑一晚上都是常事
💡 对于 GB 级别的大文件,强烈建议跳过 wget,直接用下面的 aria2。
四、方案二:aria2(推荐,多线程碾压级提速)
aria2 是一款支持多协议、多线程的命令行下载工具,16 线程并发相比 wget 单线程,实测速度可以提升 5~10 倍甚至更多,且原生支持断点续传和自动重试。
安装
# Ubuntu / Debiansudo apt-get update && sudo apt-get install -y aria2# 或者用 conda(不需要 sudo,更适合云实例)conda install -c conda-forge aria2 -y完整下载命令(以训练数据集为例)
aria2c -c \ -x 16 -s 16 -k 1M \ --file-allocation=none \ --max-tries=0 --retry-wait=5 \ -d /coding/AgiBotWorldChallenge/data/WorldModel/archives \ -o train.tar.gz \ "https://hf-mirror.com/datasets/agibot-world/AgiBotWorldChallenge-2026/resolve/main/WorldModel/train.tar.gz"参数详解
-c | ||
-x 16 | ||
-s 16 | -x 保持一致 | |
-k 1M | ||
--file-allocation=none | ||
--max-tries=0 | ||
--retry-wait=5 | ||
-d <目录> | ||
-o <文件名> |
下载模型权重的完整示例
# 下载 EnerVerse-AC 权重aria2c -c -x 16 -s 16 -k 1M \ --file-allocation=none \ --max-tries=0 --retry-wait=5 \ -d /coding/AgiBotWorldChallenge/weights/evac \ -o EnerV_AC_deepspeed_v0.1.pt \ "https://hf-mirror.com/agibot-world/EnerVerse-AC/resolve/main/EnerV_AC_deepspeed_v0.1.pt"# 下载 CLIP 权重aria2c -c -x 16 -s 16 -k 1M \ --file-allocation=none \ --max-tries=0 --retry-wait=5 \ -d /coding/AgiBotWorldChallenge/weights/clip \ -o open_clip_pytorch_model.bin \ "https://hf-mirror.com/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/resolve/main/open_clip_pytorch_model.bin"五、进阶技巧
5.1 使用 tmux/screen 防止会话断开
在云服务器或远程 SSH 环境中,一旦终端断开,下载进程就会被杀掉。哪怕 aria2 有断点续传,重新连上之后还得重新执行命令——非常麻烦。
解决方案:在 tmux 或 screen 里跑下载命令。
# 新建 tmux 会话tmux new -s download# 在 tmux 内执行 aria2 命令aria2c -c -x 16 -s 16 ... "https://hf-mirror.com/..."# Ctrl+B, D 可以安全脱离会话(进程继续在后台跑)# 需要查看进度时:tmux attach -t download用 screen 也一样:
screen -S download# 执行下载命令后按 Ctrl+A, D 脱离screen -r download # 重新连接这一步是长时间大文件下载的必备操作,别省。
5.2 配置代理加速
如果你的服务器或本地机器有 HTTP/HTTPS 代理,可以在下载前临时设置环境变量,所有命令行工具(wget、aria2、curl 等)都会自动走代理:
# 临时设置,仅对当前 shell 会话生效export https_proxy=http://你的代理IP:端口export http_proxy=http://你的代理IP:端口# 验证是否生效curl -I https://huggingface.co# 下载完成后取消unset https_proxy http_proxy⚠️ 注意:云 GPU 实例(AutoDL 等)一般不允许出境流量,即使设置代理也可能无效。此时应优先使用 hf-mirror 镜像站。
5.3 并发数的选择策略
并发数并不是越高越好,服务器端可能会对单 IP 的并发请求做限速甚至封禁。
-x 16 -s 16 | |
-x 8 -s 8 | |
-x 4 -s 4 | |
5.4 下载前先确认目标路径存在
aria2 不会自动创建目录,如果 -d 指定的目录不存在会直接报错。养成下载前先建目录的习惯:
mkdir -p /coding/AgiBotWorldChallenge/weights/evacmkdir -p /coding/AgiBotWorldChallenge/weights/clipmkdir -p /coding/AgiBotWorldChallenge/data/WorldModel/archives六、wget vs aria2 对比总结
-c) | -c) | |
七、完整快速参考脚本
把以下内容保存为 download_weights.sh,按需修改路径和 URL 后直接运行:
#!/bin/bashset -e# ========== 配置区 ==========BASE_DIR="/coding/AgiBotWorldChallenge"WEIGHTS_EVAC="$BASE_DIR/weights/evac"WEIGHTS_CLIP="$BASE_DIR/weights/clip"DATA_DIR="$BASE_DIR/data/WorldModel/archives"HF_MIRROR="https://hf-mirror.com"ARIA2_ARGS="-c -x 16 -s 16 -k 1M --file-allocation=none --max-tries=0 --retry-wait=5"# ============================echo "[1/3] 创建目录..."mkdir -p "$WEIGHTS_EVAC" "$WEIGHTS_CLIP" "$DATA_DIR"echo "[2/3] 下载模型权重..."aria2c $ARIA2_ARGS \ -d "$WEIGHTS_EVAC" -o "EnerV_AC_deepspeed_v0.1.pt" \ "$HF_MIRROR/agibot-world/EnerVerse-AC/resolve/main/EnerV_AC_deepspeed_v0.1.pt"aria2c $ARIA2_ARGS \ -d "$WEIGHTS_CLIP" -o "open_clip_pytorch_model.bin" \ "$HF_MIRROR/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/resolve/main/open_clip_pytorch_model.bin"echo "[3/3] 下载训练数据集..."aria2c $ARIA2_ARGS \ -d "$DATA_DIR" -o "train.tar.gz" \ "$HF_MIRROR/datasets/agibot-world/AgiBotWorldChallenge-2026/resolve/main/WorldModel/train.tar.gz"echo "✅ 全部下载完成!"运行方式:
chmod +x download_weights.sh# 建议在 tmux 内运行tmux new -s downloadbash download_weights.sh八、小结
huggingface.co 替换为 hf-mirror.com | |
aria2(apt install aria2 或 conda install aria2) | |
aria2c -c -x 16 -s 16 ... 多线程下载 | |
tmux 或 screen 包裹命令,防止断会话 | |
-x 8 或 -x 4 |
一套流程跑通后,再大的模型权重和数据集都可以稳稳地拉下来,专注在真正重要的训练和调参上。
夜雨聆风