模型训练、部署遇到的问题
1.在 AutoDL 实例 上手动设置 Hugging Face 镜像(如 hf-mirror.com
)
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc # 立即生效
2.缓存迁移和设置
# ✅ 1. 创建目标缓存目录
mkdir -p /root/autodl-tmp/cache# ✅ 2. 移动 huggingface 缓存(去掉重复目录名)
mv ~/.cache/huggingface /root/autodl-tmp/cache/# ✅ 3. 删除原目录或符号链接
rm -rf ~/.cache/huggingface# ✅ 4. 创建新的符号链接
ln -s /root/autodl-tmp/cache/huggingface ~/.cache/huggingface# ✅ 5. 可选:设置环境变量(确保 transformers 使用这个目录)
export HF_HOME=/root/autodl-tmp/cache/huggingface
echo 'export HF_HOME=/root/autodl-tmp/cache/huggingface' >> ~/.bashrc
3.版本问题
ValueError: Due to a serious vulnerability issue in torch.load...
we now require users to upgrade torch to at least v2.6
This version restriction does not apply when loading files with safetensors
发生原因:
这是由 HuggingFace 的 transformers
库(从 v4.41.0 开始)引入的强制安全限制:
-
torch.load()
存在严重安全漏洞(编号 CVE-2025-32434):-
攻击者可通过篡改的
.bin
权重文件执行任意代码。
-
-
所以 HuggingFace 限制了旧版本 PyTorch(<2.6)加载
.bin
权重,即使你设置了weights_only=True
,也不再信任。
解决方法汇总
方法 | 是否推荐 | 说明 |
---|---|---|
✅ 方法 1:升级 PyTorch ≥ 2.6.0 | 推荐 | 根本解决安全限制,兼容所有模型 |
✅ 方法 2:降级 transformers 到 ≤4.40.2 | 推荐 | 绕过版本检查,适用于 PyTorch < 2.6 用户 |
✅ 方法 3:确保模型完整使用 .safetensors 格式 | 条件有限 | 仅当模型发布了 safetensors-only 权重时可行 |
4.显存不足
加载并运行 Qwen/Qwen1.5-7B-Chat 本地大模型(7B参数量) 时,显存出现了爆满:
原因 | 说明 |
---|---|
✅ 模型过大 | Qwen 7B 模型全量 FP32 加载时通常占用 16~22GB 显存 |
✅ 未使用混合精度(FP16) | 默认是 FP32 精度,内存翻倍消耗 |
✅ 生成参数太大 | max_new_tokens=512 ,一次生成太多token,占显存 |
✅ 缓存碎片/未释放 | PyTorch 默认会预分配并保留部分显存,导致申请新内存失败 |
✅ 其他进程占用显存 | 比如你在容器或多模型环境下,还有其他程序也占用显存 |
方法 | 是否推荐 | 效果说明 |
---|---|---|
✅ 开启 FP16(混合精度) | ⭐⭐⭐⭐ | 显存直接减少约 40%~50% |
✅ 减少 max_new_tokens 数量 | ⭐⭐⭐ | 建议从 512 改为 256 或更低 |
✅ 清理显存碎片 (torch.cuda.empty_cache() ) | ⭐⭐⭐ | 每次推理前释放未使用缓存显存 |
✅ 设置环境变量优化显存分配 | ⭐⭐ | 防止碎片:export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True |
✅ 重启程序/杀掉旧进程 | ⭐⭐⭐ | 清空旧模型或推理留下的显存 |
✅ 使用小模型(如 Qwen-1.5B)测试 | ⭐⭐ | 先验证流程,避免大模型调试成本 |
✅ 启用 device_map="auto" 分配模型到多卡 | ⭐⭐ | 多GPU部署时有效,单卡无法解决 |