服务器下载 Hugging Face 模型笔记:以 Qwen2.5-Coder-7B-CL 为例

文章目录

    • 前言
    • 一、先选择正确的磁盘目录
      • [1.1 为什么不能随便下载到 `/home/user`](#1.1 为什么不能随便下载到 /home/user)
      • [1.2 建议的目录规划](#1.2 建议的目录规划)
    • 二、处理目录权限问题
      • [2.1 为什么会出现 Permission denied](#2.1 为什么会出现 Permission denied)
      • [2.2 正确做法:把自己的工作目录改回当前用户](#2.2 正确做法:把自己的工作目录改回当前用户)
    • [三、安装 Hugging Face 命令行工具](#三、安装 Hugging Face 命令行工具)
      • [3.1 安装 huggingface_hub](#3.1 安装 huggingface_hub)
      • [3.2 为什么安装后还是 command not found](#3.2 为什么安装后还是 command not found)
      • [3.3 让 PATH 永久生效](#3.3 让 PATH 永久生效)
    • [四、配置 Hugging Face 镜像源](#四、配置 Hugging Face 镜像源)
      • [4.1 为什么要配置镜像源](#4.1 为什么要配置镜像源)
    • 五、正式下载模型
      • [5.1 推荐使用新版 `hf download`](#5.1 推荐使用新版 hf download)
      • [5.2 不建议继续使用 `--resume-download`](#5.2 不建议继续使用 --resume-download)
      • [5.3 如果仍然使用 huggingface-cli](#5.3 如果仍然使用 huggingface-cli)
    • 六、下载完成后的检查
      • [6.1 查看模型目录](#6.1 查看模型目录)
      • [6.2 查看模型目录大小](#6.2 查看模型目录大小)
      • [6.3 查看所在磁盘剩余空间](#6.3 查看所在磁盘剩余空间)
    • 七、常见错误总结
      • [7.1 `huggingface-cli: command not found`](#7.1 huggingface-cli: command not found)
      • [7.2 `hf: command not found`](#7.2 hf: command not found)
      • [7.3 `Permission denied`](#7.3 Permission denied)
      • [7.4 `Could not resolve host`](#7.4 Could not resolve host)
    • 八、完整推荐流程
    • 总结

前言

在服务器上部署大模型时,第一步通常是把 Hugging Face 上的模型下载到服务器本地。

这件事看起来只是一个下载命令:

bash 复制代码
hf download xxx/xxx

但实际操作中经常会遇到几个问题:

  1. 服务器磁盘很多,不知道模型该放哪里
  2. huggingface-cli / hf 命令找不到
  3. 服务器访问 Hugging Face 慢,需要镜像源
  4. 目录权限不够,下载时 Permission denied
  5. 下载完成后不知道如何检查文件是否完整

本文以下载模型:

text 复制代码
czlll/Qwen2.5-Coder-7B-CL

到服务器目录:

text 复制代码
/data2/like/models/Qwen2.5-Coder-7B-CL

为例,完整整理一次服务器下载 Hugging Face 模型的过程。

一、先选择正确的磁盘目录

1.1 为什么不能随便下载到 /home/user

服务器上通常有多个磁盘目录,比如:

不能看到一个目录就直接用,必须先看它所在磁盘还有多少空间,,通常一个数据集或者模型占据的空间比较大。

查看磁盘空间:

bash 复制代码
df -h

命令含义:

text 复制代码
df = disk free,查看磁盘剩余空间
-h = human-readable,用人容易读懂的单位显示,比如 G、T

如果看到类似:

text 复制代码
/dev/sdb4       388G  357G   11G  98% /
/dev/sda        1.8T  1.7T   15G 100% /ssd_data
/dev/sdc1       3.6T  2.5T  942G  73% /data2

说明:

text 复制代码
/        只剩 11G,不适合放模型
/ssd_data 只剩 15G,也不适合
/data2   还剩 942G,适合放大模型

所以模型、代码、实验输出都应该放到:

bash 复制代码
/data2

而不是:

bash 复制代码
/home/user

1.2 建议的目录规划

进入大数据盘:

bash 复制代码
cd /data2

命令含义:

text 复制代码
cd = change directory,切换目录

创建自己的工作目录:

bash 复制代码
mkdir -p /data2/like/models
mkdir -p /data2/like/loccode
mkdir -p /data2/like/outputs
mkdir -p /data2/like/hf-cache

命令含义:

text 复制代码
mkdir = make directory,创建目录
-p = parents,父目录不存在就一起创建,目录已存在也不报错

建议用途:

二、处理目录权限问题

2.1 为什么会出现 Permission denied

如果执行:

bash 复制代码
mkdir models

报错:

text 复制代码
mkdir: cannot create directory 'models': Permission denied

说明当前用户没有权限在这个目录下创建文件夹。

有些时候会直接用:

bash 复制代码
sudo mkdir models

这虽然能创建成功,但会带来一个新问题:这个目录可能属于 root 用户。

后面普通用户执行:

bash 复制代码
hf download ...

时,就可能写不进去,报错:

text 复制代码
PermissionError: [Errno 13] Permission denied

2.2 正确做法:把自己的工作目录改回当前用户

如果 /data2/like 是自己的工作目录,可以执行:

bash 复制代码
sudo chown -R user:user /data2/like

命令含义:

text 复制代码
sudo = superuser do,用管理员权限执行
chown = change owner,修改文件或目录的所有者
-R = recursive,递归修改目录里面的所有文件和子目录
user:user = 用户名:用户组
/data2/like = 要修改权限的目录

这条命令的意思是:

text 复制代码
把 /data2/like 以及里面所有内容的拥有者改成 user。

执行后检查权限:

bash 复制代码
ls -ld /data2/like
ls -ld /data2/like/models

命令含义:

text 复制代码
ls = list,列出文件
-l = long format,显示详细信息
-d = directory,只显示目录本身,不展开目录内容

如果看到:

text 复制代码
drwxr-xr-x 4 user user 4096 ... /data2/like
drwxr-xr-x 2 user user 4096 ... /data2/like/models

重点看这里:

text 复制代码
user user

说明目录已经属于当前用户,后面可以正常下载模型。

三、安装 Hugging Face 命令行工具

3.1 安装 huggingface_hub

如果服务器没有 hfhuggingface-cli 命令,可以安装:

bash 复制代码
pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple

命令含义:

text 复制代码
pip = Python 包管理工具
install = 安装
-U = upgrade,升级到较新版本
huggingface_hub = Hugging Face 官方 Python 工具包
-i = index-url,指定 Python 包下载源
https://pypi.tuna.tsinghua.edu.cn/simple = 清华 PyPI 镜像源

这条命令的作用是:

text 复制代码
从清华镜像源安装或升级 Hugging Face Hub 工具。

3.2 为什么安装后还是 command not found

安装成功后,可能看到提示:

text 复制代码
The scripts hf, huggingface-cli and tiny-agents are installed in '/home/user/.local/bin' which is not on PATH.

意思是:

text 复制代码
hf 和 huggingface-cli 命令已经安装了,
但是它们被放在 /home/user/.local/bin,
而当前终端的 PATH 没有包含这个目录。

PATH 可以理解为 Linux 的"命令搜索路径"。

当你输入:hf或者huggingface-cli命令

系统会去 PATH 记录的目录里找这个命令。如果 /home/user/.local/bin 不在 PATH 中,系统就找不到 hf

临时解决:

bash 复制代码
export PATH="$HOME/.local/bin:$PATH"

命令含义:

text 复制代码
export = 导出环境变量,让当前终端后续命令可以使用
PATH = 命令搜索路径
$HOME = 当前用户主目录,比如 /home/user
:$PATH = 保留原来的 PATH

这条命令的意思是:

text 复制代码
把 /home/user/.local/bin 加到命令搜索路径最前面。

然后测试:

bash 复制代码
hf --help
huggingface-cli --help

如果能看到帮助信息,说明命令已经可用。

3.3 让 PATH 永久生效

临时 export 只对当前终端有效。为了以后每次登录都自动生效,可以写入 ~/.bashrc

bash 复制代码
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

命令含义:

text 复制代码
echo = 输出一段文本
>> = 追加写入文件末尾
~/.bashrc = Bash 终端启动时会读取的配置文件
source = 重新加载配置文件,让修改立即生效

执行后再检查:

bash 复制代码
which hf
which huggingface-cli

命令含义:

text 复制代码
which = 查看某个命令实际来自哪个路径

正常输出类似:

text 复制代码
/home/user/.local/bin/hf
/home/user/.local/bin/huggingface-cli

四、配置 Hugging Face 镜像源

4.1 为什么要配置镜像源

国内服务器访问 Hugging Face 官方站点可能比较慢,甚至失败。因此可以使用镜像源:

bash 复制代码
export HF_ENDPOINT=https://hf-mirror.com

命令含义:

text 复制代码
HF_ENDPOINT = Hugging Face Hub 的访问入口
https://hf-mirror.com = Hugging Face 镜像站

这条命令的意思是:

text 复制代码
后续 hf / huggingface-cli 下载模型时,优先从 hf-mirror.com 访问。

注意:

text 复制代码
HF_ENDPOINT 只决定"从哪里下载模型",
不能解决 hf command not found,
也不能解决本地目录权限问题。

五、正式下载模型

5.1 推荐使用新版 hf download

新版推荐命令是:

bash 复制代码
hf download czlll/Qwen2.5-Coder-7B-CL \
  --local-dir /data2/like/models/Qwen2.5-Coder-7B-CL

命令含义:

text 复制代码
hf = Hugging Face 新版命令行工具
download = 下载模型或数据集文件
czlll/Qwen2.5-Coder-7B-CL = Hugging Face 上的模型仓库名
--local-dir = local directory,指定下载到本地哪个目录
/data2/like/models/Qwen2.5-Coder-7B-CL = 模型保存路径

完整意思是:

text 复制代码
从 Hugging Face 下载 czlll/Qwen2.5-Coder-7B-CL 模型,
并保存到 /data2/like/models/Qwen2.5-Coder-7B-CL。

5.2 不建议继续使用 --resume-download

旧命令里经常会写:

bash 复制代码
--resume-download

它的意思是断点续传。

但是新版 Hugging Face 工具已经会尽可能自动续传,所以这个参数会提示 deprecated,也就是即将废弃。

因此推荐:

bash 复制代码
hf download czlll/Qwen2.5-Coder-7B-CL \
  --local-dir /data2/like/models/Qwen2.5-Coder-7B-CL

而不是:

bash 复制代码
huggingface-cli download ... --resume-download

5.3 如果仍然使用 huggingface-cli

旧命令也可以用,但会提示:

text 复制代码
huggingface-cli download is deprecated. Use hf download instead.

意思是:

text 复制代码
huggingface-cli download 已经不推荐使用了,请改用 hf download。

所以优先用:

bash 复制代码
hf download

六、下载完成后的检查

6.1 查看模型目录

bash 复制代码
ls -lh /data2/like/models/Qwen2.5-Coder-7B-CL

命令含义:

text 复制代码
ls = list,列出文件
-l = long format,显示详细信息
-h = human-readable,文件大小用 G、M 这种好读的单位显示

正常应该看到:

text 复制代码
config.json
generation_config.json
tokenizer.json
tokenizer_config.json
model.safetensors.index.json
*.safetensors

6.2 查看模型目录大小

bash 复制代码
du -sh /data2/like/models/Qwen2.5-Coder-7B-CL

命令含义:

text 复制代码
du = disk usage,查看磁盘占用
-s = summary,只显示总大小
-h = human-readable,用 G、M 等单位显示

如果输出类似:

text 复制代码
15G    /data2/like/models/Qwen2.5-Coder-7B-CL

说明模型大约占 15GB。

6.3 查看所在磁盘剩余空间

bash 复制代码
df -h /data2

这一步很重要,防止模型下载到一半把磁盘塞满。

七、常见错误总结

7.1 huggingface-cli: command not found

原因:

text 复制代码
没有安装 huggingface_hub,
或者命令安装到了 /home/user/.local/bin,但 PATH 没有包含这个目录。

解决:

bash 复制代码
pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple
export PATH="$HOME/.local/bin:$PATH"

永久生效:

bash 复制代码
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

7.2 hf: command not found

原因同上:

text 复制代码
hf 已经安装,但当前终端找不到。

解决:

bash 复制代码
export PATH="$HOME/.local/bin:$PATH"
hf --help

7.3 Permission denied

常见报错:

text 复制代码
PermissionError: [Errno 13] Permission denied

原因:

text 复制代码
目标目录属于 root,普通用户没有写权限。

典型来源是之前用了:

bash 复制代码
sudo mkdir models

导致 models 目录由 root 创建。

解决:

bash 复制代码
sudo chown -R user:user /data2/like

然后检查:

bash 复制代码
ls -ld /data2/like
ls -ld /data2/like/models

确认目录属于:

text 复制代码
user user

7.4 Could not resolve host

原因:

text 复制代码
服务器 DNS 或网络有问题,无法解析域名。

可以测试:

bash 复制代码
getent hosts hf-mirror.com
getent hosts huggingface.co
curl -I https://hf-mirror.com
curl -I https://huggingface.co

如果服务器网络一直不稳定,可以换成:

text 复制代码
本地电脑下载模型
打包成 tar
scp 上传服务器
服务器解压

八、完整推荐流程

最终推荐命令如下:

bash 复制代码
# 1. 进入大数据盘
cd /data2

# 2. 创建自己的工作目录
mkdir -p /data2/like/models
mkdir -p /data2/like/loccode
mkdir -p /data2/like/outputs
mkdir -p /data2/like/hf-cache

# 3. 如果之前 sudo 创建过目录,修复权限
sudo chown -R user:user /data2/like

# 4. 安装 Hugging Face 工具
pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple

# 5. 加入 PATH
export PATH="$HOME/.local/bin:$PATH"

# 6. 永久加入 PATH
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# 7. 设置 Hugging Face 镜像源
export HF_ENDPOINT=https://hf-mirror.com

# 8. 下载模型
hf download czlll/Qwen2.5-Coder-7B-CL \
  --local-dir /data2/like/models/Qwen2.5-Coder-7B-CL

# 9. 检查模型文件
ls -lh /data2/like/models/Qwen2.5-Coder-7B-CL
du -sh /data2/like/models/Qwen2.5-Coder-7B-CL

总结

服务器下载 Hugging Face 模型的关键不是只记住一条 hf download 命令,而是要按顺序处理好四件事:

text 复制代码
第一,选对磁盘目录,模型要放到大数据盘,比如 /data2。
第二,装好 huggingface_hub,并把 /home/user/.local/bin 加入 PATH。
第三,根据网络情况设置 HF_ENDPOINT 镜像源。
第四,保证目标目录属于当前用户,避免 Permission denied。

这次问题的本质是两层:

text 复制代码
第一层:hf / huggingface-cli 安装成功了,但不在 PATH 里,所以 command not found。
第二层:models 目录最开始用 sudo 创建,属于 root,所以普通用户下载模型时 Permission denied。

最终修复思路是:

bash 复制代码
export PATH="$HOME/.local/bin:$PATH"
sudo chown -R user:user /data2/like
hf download czlll/Qwen2.5-Coder-7B-CL \
  --local-dir /data2/like/models/Qwen2.5-Coder-7B-CL

只要这三步处理好,服务器下载 Hugging Face 模型就会顺畅很多。

另外,旧命令 huggingface-cli download 仍可用,但日志已经提示它被弃用,推荐改用 hf download--resume-download 也只是未来会废弃的提示,不是你这次失败的根因。

相关推荐
是上好佳佳佳呀3 小时前
【数据分析|Day02】Matplotlib 数据可视化笔记
笔记·matplotlib
峥无10 小时前
Linux进程信号:从基础概念到内核底层原理
linux·运维·服务器·信号处理
广州灵眸科技有限公司10 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发(编译)方式说明
linux·服务器·单片机·嵌入式硬件·电脑
土星云SaturnCloud11 小时前
土星云AI边缘计算SE110S系列模型部署实战-YOLOv5
服务器·人工智能·yolo·docker·边缘计算
北山有鸟11 小时前
用开发板的.config替换ubuntu中内核源码目录的.config
linux·运维·ubuntu
三品吉他手会点灯11 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
qq_4523962311 小时前
第二十篇:《Docker 故障排查常用命令与技巧》
运维·docker·容器
jcbut11 小时前
离线安装dify 1.7
linux·运维·dify
艾iYYY12 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法