文章目录
-
- 前言
- 一、部署目标与服务器基本情况
-
- [1.1 部署目标](#1.1 部署目标)
- [1.2 服务器硬件配置](#1.2 服务器硬件配置)
- 二、先选对磁盘目录
-
- [2.1 为什么不能把模型放到 `/home/user`](#2.1 为什么不能把模型放到
/home/user) - [2.2 推荐目录结构](#2.2 推荐目录结构)
- [2.3 处理目录权限](#2.3 处理目录权限)
- [2.1 为什么不能把模型放到 `/home/user`](#2.1 为什么不能把模型放到
- [三、准备 Hugging Face 模型文件](#三、准备 Hugging Face 模型文件)
-
- [3.1 安装 Hugging Face 命令行工具](#3.1 安装 Hugging Face 命令行工具)
- [3.2 配置 Hugging Face 镜像](#3.2 配置 Hugging Face 镜像)
- [3.3 下载模型](#3.3 下载模型)
- [四、为什么不能直接安装最新版 vLLM](#四、为什么不能直接安装最新版 vLLM)
-
- [4.1 第一次失败的原因](#4.1 第一次失败的原因)
- [4.2 最终选择的版本组合](#4.2 最终选择的版本组合)
- [五、安装 Miniconda 到 `/data2`](#五、安装 Miniconda 到
/data2) -
- [5.1 为什么要自己安装 Miniconda](#5.1 为什么要自己安装 Miniconda)
- [5.2 下载 Miniconda](#5.2 下载 Miniconda)
- [5.3 安装 Miniconda](#5.3 安装 Miniconda)
- [六、配置 conda 和 pip 镜像源](#六、配置 conda 和 pip 镜像源)
-
- [6.1 conda 配置文件在哪里](#6.1 conda 配置文件在哪里)
- [6.2 配置 conda 清华镜像](#6.2 配置 conda 清华镜像)
- [6.3 配置 pip 镜像](#6.3 配置 pip 镜像)
- [七、创建 vLLM 兼容环境](#七、创建 vLLM 兼容环境)
-
- [7.1 创建环境](#7.1 创建环境)
- [7.2 设置缓存目录](#7.2 设置缓存目录)
- [八、安装 torch、vLLM 和 transformers](#八、安装 torch、vLLM 和 transformers)
-
- [8.1 安装基础工具](#8.1 安装基础工具)
- [8.2 安装 CUDA 12.1 版 PyTorch](#8.2 安装 CUDA 12.1 版 PyTorch)
- [8.3 安装 vLLM 旧版](#8.3 安装 vLLM 旧版)
- [8.4 处理 transformers 版本不匹配](#8.4 处理 transformers 版本不匹配)
- [九、使用 tmux 保持 vLLM 后台运行](#九、使用 tmux 保持 vLLM 后台运行)
-
- [9.1 为什么要用 tmux](#9.1 为什么要用 tmux)
- [9.2 创建 tmux 会话](#9.2 创建 tmux 会话)
- [9.3 离开 tmux 但不停止服务](#9.3 离开 tmux 但不停止服务)
- [十、启动 Qwen2.5-Coder-7B-CL](#十、启动 Qwen2.5-Coder-7B-CL)
-
- [10.1 vLLM 启动命令](#10.1 vLLM 启动命令)
- [10.2 参数解释](#10.2 参数解释)
- [10.3 启动成功标志](#10.3 启动成功标志)
- [十一、测试 vLLM 服务](#十一、测试 vLLM 服务)
-
- [11.1 测试模型列表](#11.1 测试模型列表)
- [11.2 测试对话接口](#11.2 测试对话接口)
- [11.3 查看 GPU 占用](#11.3 查看 GPU 占用)
- [十二、API 地址和 API Key 怎么填](#十二、API 地址和 API Key 怎么填)
-
- [12.1 服务器本机调用](#12.1 服务器本机调用)
- [12.2 其他机器访问](#12.2 其他机器访问)
- [12.3 是否需要 API Key](#12.3 是否需要 API Key)
- 十三、常见问题总结
-
- [13.1 `conda: command not found`](#13.1
conda: command not found) - [13.2 `CondaToSNonInteractiveError`](#13.2
CondaToSNonInteractiveError) - [13.3 `Permission denied`](#13.3
Permission denied) - [13.4 `The NVIDIA driver on your system is too old`](#13.4
The NVIDIA driver on your system is too old) - [13.5 `torch has no attribute float8_e8m0fnu`](#13.5
torch has no attribute float8_e8m0fnu) - [13.6 `Address already in use`](#13.6
Address already in use)
- [13.1 `conda: command not found`](#13.1
- 总结
前言
这篇笔记记录一次在实验室服务器上使用 vLLM 部署本地 Qwen2.5-Coder-7B-CL 模型的完整过程。
这次部署并不是简单执行一条命令就完成,中间遇到了很多真实问题:
- 服务器磁盘很多,不知道模型和环境应该放哪里
- 服务器没有 conda,需要手动安装 Miniconda
- conda 默认源慢,需要配置国内镜像
- vLLM 最新版和服务器 NVIDIA 驱动不兼容
- torch / vLLM / transformers 版本不匹配
- SSH 断开后服务可能停止,需要 tmux 保活
最终我们成功在服务器上用两张 RTX A6000 部署了 Qwen2.5-Coder-7B-CL,并提供 OpenAI 兼容 API 接口。
本文将从服务器环境检查开始,逐步整理模型下载、环境配置、vLLM 安装、模型启动、接口测试和常见问题处理。
一、部署目标与服务器基本情况
1.1 部署目标
本次要部署的模型是:
text
czlll/Qwen2.5-Coder-7B-CL
服务器本地模型路径是:
bash
/data2/like/models/Qwen2.5-Coder-7B-CL
目标是用 vLLM 启动一个 OpenAI 兼容接口:
text
API Base: http://127.0.0.1:8002/v1
Model: qwen-7B
API Key: EMPTY
后续 就可以像调用 OpenAI API 一样调用这个本地模型。
1.2 服务器硬件配置
服务器主要配置如下:
text
CPU: Intel Xeon Silver 4210,40 逻辑核心
内存: 157GB
GPU: 2 × NVIDIA RTX A6000,每张 48GB
驱动: NVIDIA Driver 535.261.03
CUDA: 12.2
系统: Ubuntu 20.04
GPU 配置非常适合部署 7B 模型,尤其是两张 RTX A6000,每张 48GB,适合尝试:
text
双卡张量并行
128K 上下文
低并发推理
二、先选对磁盘目录
2.1 为什么不能把模型放到 /home/user
使用服务器前,首先要看磁盘空间:
bash
df -h
命令含义:
text
df = disk free,查看磁盘空间
-h = human-readable,用 GB、TB 等易读单位显示
服务器磁盘大致情况如下:
text
/ 388G,已用 357G,只剩 11G,98%
/ssd_data 1.8T,已用 1.7T,只剩 15G,100%
/data2 3.6T,已用 2.5T,还剩 942G,73%
结论很明确:
text
/ 和 /home/user 不适合放大模型
/ssd_data 已经满了,也不适合
/data2 还有将近 1TB 空间,最适合
所以所有大文件都放到:
bash
/data2/like
2.2 推荐目录结构
创建自己的工作目录:
bash
mkdir -p /data2/like/models
mkdir -p /data2/like/envs
mkdir -p /data2/like/tmp
mkdir -p /data2/like/pip-cache
mkdir -p /data2/like/hf-cache
mkdir -p /data2/like/conda-pkgs
各目录作用:
text
/data2/like/models 放模型文件
/data2/like/envs 放 conda 虚拟环境
/data2/like/tmp 放临时文件
/data2/like/pip-cache 放 pip 缓存
/data2/like/hf-cache 放 Hugging Face 缓存
/data2/like/conda-pkgs 放 conda 包缓存
2.3 处理目录权限
如果创建目录时出现:
bash
mkdir: cannot create directory 'models': Permission denied
说明当前用户没有写权限。
有时用:
bash
sudo mkdir models
可以创建成功,但会导致目录属于 root,后面普通用户下载模型时又会遇到:
text
PermissionError: [Errno 13] Permission denied
正确做法是把自己的工作目录改成当前用户拥有:
bash
sudo chown -R user:user /data2/like
命令含义:
text
sudo = 用管理员权限执行
chown = change owner,修改所有者
-R = recursive,递归修改所有子目录和文件
user:user = 用户名:用户组
/data2/like = 要修改的目录
检查权限:
bash
ls -ld /data2/like
ls -ld /data2/like/models
如果看到:
text
drwxr-xr-x 4 user user ... /data2/like
drwxr-xr-x 2 user user ... /data2/like/models
说明权限已经正常。
三、准备 Hugging Face 模型文件
3.1 安装 Hugging Face 命令行工具
如果服务器没有:
bash
hf
huggingface-cli
可以安装:
bash
pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple
如果安装后提示:
text
hf, huggingface-cli are installed in '/home/user/.local/bin' which is not on PATH
说明命令已经安装,但终端找不到。
临时加入 PATH:
bash
export PATH="$HOME/.local/bin:$PATH"
永久加入:
bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
检查:
bash
which hf
which huggingface-cli
3.2 配置 Hugging Face 镜像
如果服务器访问 Hugging Face 慢,可以设置镜像:
bash
export HF_ENDPOINT=https://hf-mirror.com
永久生效:
bash
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc
注意:
HF_ENDPOINT 只影响 Hugging Face 模型下载,它不影响 conda,也不影响 pip
3.3 下载模型
推荐用新版命令:
bash
hf download czlll/Qwen2.5-Coder-7B-CL \
--local-dir /data2/like/models/Qwen2.5-Coder-7B-CL
下载完成后检查:
bash
ls -lh /data2/like/models/Qwen2.5-Coder-7B-CL
du -sh /data2/like/models/Qwen2.5-Coder-7B-CL
正常应该能看到:
text
config.json
generation_config.json
tokenizer.json
tokenizer_config.json
model.safetensors.index.json
*.safetensors
四、为什么不能直接安装最新版 vLLM
4.1 第一次失败的原因
最开始直接安装最新版 vLLM 后,启动模型时报错:
text
RuntimeError: The NVIDIA driver on your system is too old
服务器驱动信息是:
text
NVIDIA Driver 535.261.03
CUDA Version 12.2
而最新版 vLLM / PyTorch 可能依赖更新的 CUDA 运行时,例如 CUDA 12.8 或 12.9。这样就会出现:
text
服务器驱动较旧
新版 PyTorch / vLLM 要求更高
GPU 初始化失败
可以理解成:
text
服务器驱动 = 老插座
最新版 vLLM = 新电器
规格对不上,插上就报错
所以我们不能继续用最新版 vLLM,而要安装适配 CUDA 12.1 的旧版本组合。
4.2 最终选择的版本组合
最终采用:
text
Python 3.10
torch 2.5.1 + cu121
vLLM 0.6.6.post1
transformers 4.46.3
tokenizers 0.20.3
这里的 cu121 表示 CUDA 12.1,对当前服务器 CUDA 12.2 驱动更友好。
五、安装 Miniconda 到 /data2
5.1 为什么要自己安装 Miniconda
服务器当前没有可用的 conda:
bash
conda: command not found
所以需要自己安装 Miniconda。
不要装到 /home/user,因为系统盘快满了。统一装到:
bash
/data2/like/miniconda3
5.2 下载 Miniconda
bash
mkdir -p /data2/like/software
cd /data2/like/software
wget -O Miniconda3-latest-Linux-x86_64.sh \
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
命令含义:
text
wget = 从网络下载文件
-O = output,指定保存文件名
如果 wget 不可用,也可以用:
bash
curl -L -o Miniconda3-latest-Linux-x86_64.sh \
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
5.3 安装 Miniconda
bash
bash Miniconda3-latest-Linux-x86_64.sh -b -p /data2/like/miniconda3
命令含义:
text
bash = 执行 shell 脚本
-b = batch,静默安装
-p = prefix,指定安装路径
加载 conda:
bash
source /data2/like/miniconda3/etc/profile.d/conda.sh
检查:
bash
conda --version
永久生效:
bash
echo 'source /data2/like/miniconda3/etc/profile.d/conda.sh' >> ~/.bashrc
source ~/.bashrc
六、配置 conda 和 pip 镜像源
6.1 conda 配置文件在哪里
虽然 Miniconda 装在:
bash
/data2/like/miniconda3
但 conda 的用户配置文件默认在:
bash
~/.condarc
也就是:
bash
/home/user/.condarc
这很正常。
可以理解为:
text
/data2/like/miniconda3 = conda 程序本体
~/.condarc = 当前用户的 conda 配置文件
6.2 配置 conda 清华镜像
备份旧配置:
bash
cp ~/.condarc ~/.condarc.bak 2>/dev/null || true
写入新配置:
bash
cat > ~/.condarc <<'EOF'
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
envs_dirs:
- /data2/like/envs
pkgs_dirs:
- /data2/like/conda-pkgs
EOF
这个配置做了三件事:
text
1. conda create / conda install 走清华镜像
2. 虚拟环境默认放到 /data2/like/envs
3. conda 包缓存放到 /data2/like/conda-pkgs
创建缓存目录:
bash
mkdir -p /data2/like/envs
mkdir -p /data2/like/conda-pkgs
清理旧索引:
bash
conda clean -i -y
检查配置:
bash
conda config --show-sources
如果看到 mirrors.tuna.tsinghua.edu.cn,说明镜像配置成功。
6.3 配置 pip 镜像
bash
mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 120
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
检查:
bash
pip config list
注意:
text
conda 镜像用于 conda create / conda install
pip 镜像用于 pip install
HF_ENDPOINT 用于 Hugging Face 模型下载
它们是三套不同的配置。
七、创建 vLLM 兼容环境
7.1 创建环境
bash
conda create -p /data2/like/envs/vllm-cu121 python=3.10 -y
命令含义:
text
conda create = 创建 conda 环境
-p = prefix,指定环境路径
python=3.10 = 使用 Python 3.10
-y = 自动确认
激活环境:
bash
conda activate /data2/like/envs/vllm-cu121
检查:
bash
which python
python --version
正常输出类似:
text
/data2/like/envs/vllm-cu121/bin/python
Python 3.10.x
7.2 设置缓存目录
bash
export TMPDIR=/data2/like/tmp
export PIP_CACHE_DIR=/data2/like/pip-cache
export HF_HOME=/data2/like/hf-cache
这些目录可以防止 pip、临时文件、Hugging Face 缓存占用系统盘。
八、安装 torch、vLLM 和 transformers
8.1 安装基础工具
bash
python -m pip install -U pip setuptools wheel
命令含义:
text
python -m pip = 使用当前环境的 pip
install = 安装
-U = upgrade,升级
pip setuptools wheel = Python 包安装基础工具
8.2 安装 CUDA 12.1 版 PyTorch
bash
python -m pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 \
--index-url https://download.pytorch.org/whl/cu121
这里:
text
cu121 = CUDA 12.1
如果官方源下载慢,可以尝试 PyTorch 国内镜像。但核心原则不变:要安装 cu121 版本。
安装完成后检查:
bash
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
期望输出:
text
2.5.1+cu121 12.1 True
8.3 安装 vLLM 旧版
bash
python -m pip install vllm==0.6.6.post1 \
--extra-index-url https://download.pytorch.org/whl/cu121
不要执行:
bash
python -m pip install -U vllm
因为 -U 可能会把 vLLM 或相关依赖升级到不兼容的新版本。
8.4 处理 transformers 版本不匹配
安装后出现过:
text
AttributeError: module 'torch' has no attribute 'float8_e8m0fnu'
原因是:
text
torch = 2.5.1
transformers = 太新
新版 transformers 调用了 torch 2.5.1 没有的属性,所以需要降级 transformers。
执行:
bash
python -m pip uninstall -y transformers tokenizers
安装兼容版本:
bash
python -m pip install "transformers==4.46.3" "tokenizers==0.20.3" \
-i https://pypi.tuna.tsinghua.edu.cn/simple
然后检查:
bash
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
python -c "import transformers; print(transformers.__version__)"
python -c "import tokenizers; print(tokenizers.__version__)"
python -c "import vllm; print(vllm.__version__)"
期望结果:
text
torch: 2.5.1+cu121,cuda available True
transformers: 4.46.3
tokenizers: 0.20.3
vllm: 0.6.6.post1
九、使用 tmux 保持 vLLM 后台运行
9.1 为什么要用 tmux
如果直接在 SSH 终端里运行:
bash
vllm serve ...
一旦本地 SSH 工具关闭、网络断开、电脑关机,vLLM 服务可能会一起停止。
tmux 可以理解为服务器里的"后台终端房间"。
text
普通 SSH:
你关闭连接,终端可能没了,程序可能停了
tmux:
终端房间开在服务器内部
你断开 SSH,只是离开房间
里面的 vLLM 继续运行
9.2 创建 tmux 会话
bash
tmux new -s vllm_qwen7b_128k
命令含义:
text
tmux = 终端复用工具
new = 新建会话
-s = session name,指定会话名字
vllm_qwen7b_128k = 会话名
进入 tmux 后重新激活环境:
bash
source /data2/like/miniconda3/etc/profile.d/conda.sh
conda activate /data2/like/envs/vllm-cu121
9.3 离开 tmux 但不停止服务
vLLM 启动成功后,如果想离开:
text
Ctrl + B
然后按 D
这叫 detach。
重新进入:
bash
tmux attach -t vllm_qwen7b_128k
查看会话:
bash
tmux ls
停止服务:
text
进入 tmux 后按 Ctrl + C
十、启动 Qwen2.5-Coder-7B-CL
10.1 vLLM 启动命令
最终使用的启动命令是:
bash
CUDA_VISIBLE_DEVICES=0,1 vllm serve /data2/like/models/Qwen2.5-Coder-7B-CL \
--tensor-parallel-size 2 \
--host 0.0.0.0 \
--port 8002 \
--served-model-name qwen-7B \
--dtype auto \
--gpu-memory-utilization 0.92 \
--max-model-len 131072 \
--max-num-seqs 1
10.2 参数解释
text
CUDA_VISIBLE_DEVICES=0,1
使用第 0、1 两张 GPU。
text
vllm serve /data2/like/models/Qwen2.5-Coder-7B-CL
用 vLLM 启动本地模型目录。
text
--tensor-parallel-size 2
使用双卡张量并行,把模型切到两张 GPU 上运行。
text
--host 0.0.0.0
监听所有网卡。这样服务器内部和其他机器都有机会访问。
text
--port 8002
服务端口是 8002。
之前 8001 被占用,所以换成 8002。
text
--served-model-name qwen-7B
对外暴露的模型名叫 qwen-7B。
后面请求 API 时,model 字段就写:
json
"model": "qwen-7B"
--dtype auto
让 vLLM 自动选择模型精度。
text
--gpu-memory-utilization 0.92
允许 vLLM 使用每张 GPU 大约 92% 的显存。
text
--max-model-len 131072
最大上下文长度是 131072 token,也就是 128K。
text
--max-num-seqs 1
低并发,同一时间最多处理 1 个请求序列。因为 128K 上下文非常吃 KV Cache,所以先低并发最稳。
10.3 启动成功标志
如果日志出现:
text
Application startup complete.
Uvicorn running on http://0.0.0.0:8002
说明 vLLM 已经成功启动。
这时不要按 Ctrl + C,否则服务会停止。
十一、测试 vLLM 服务
11.1 测试模型列表
另开一个终端,执行:
bash
curl http://127.0.0.1:8002/v1/models
如果返回中有:
json
"id": "qwen-7B"
说明服务正常。
11.2 测试对话接口
bash
curl http://127.0.0.1:8002/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-7B",
"messages": [
{"role": "user", "content": "你好,请用一句话介绍你自己。"}
],
"temperature": 0.2,
"max_tokens": 128
}'
如果返回模型回复,说明部署成功。
11.3 查看 GPU 占用
bash
nvidia-smi
如果两张 GPU 都有明显显存占用,说明模型已经加载到 GPU 上。
十二、API 地址和 API Key 怎么填
12.1 服务器本机调用
如果 LocAgent 和 vLLM 在同一台服务器上:
bash
export OPENAI_API_BASE="http://127.0.0.1:8002/v1"
export OPENAI_API_KEY="EMPTY"
模型名:
bash
--model openai/qwen-7B
这里的 qwen-7B 必须和启动 vLLM 时的:
bash
--served-model-name qwen-7B
一致。
12.2 其他机器访问
如果要从本地电脑访问服务器,可以用服务器 IP
前提是:
text
你的电脑能访问这台服务器
服务器 8002 端口没有被防火墙拦截
你和服务器在同一个内网或有可达网络
12.3 是否需要 API Key
如果启动 vLLM 时没有加 --api-key,通常可以用:
text
API Key: EMPTY
如果想加 API Key,可以启动时加:
bash
--api-key like-qwen7b-key
然后请求时添加:
bash
-H "Authorization: Bearer like-qwen7b-key"
LocAgent 中对应:
bash
export OPENAI_API_KEY="like-qwen7b-key"
十三、常见问题总结
13.1 conda: command not found
原因:
text
当前服务器没有 conda
或者 conda 没有加入当前 shell
解决:
bash
source /data2/like/miniconda3/etc/profile.d/conda.sh
如果 Miniconda 不存在,就先安装。
13.2 CondaToSNonInteractiveError
原因:
text
conda 默认访问 Anaconda 官方源,需要接受服务条款
解决方式一:接受条款。
bash
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
解决方式二:配置国内镜像源,减少访问官方源。
13.3 Permission denied
原因:
text
目录属于 root,当前用户没有写权限
解决:
bash
sudo chown -R user:user /data2/like
13.4 The NVIDIA driver on your system is too old
原因:
text
最新版 vLLM / PyTorch 需要更高版本 NVIDIA 驱动
当前服务器驱动只适合 CUDA 12.2 左右
解决:
text
不用最新版 vLLM
改用 torch 2.5.1+cu121 + vLLM 0.6.6.post1
13.5 torch has no attribute float8_e8m0fnu
原因:
text
transformers 太新,和 torch 2.5.1 不兼容
解决:
bash
python -m pip install "transformers==4.46.3" "tokenizers==0.20.3" \
-i https://pypi.tuna.tsinghua.edu.cn/simple
13.6 Address already in use
原因:
text
端口已经被占用
解决:
bash
ss -ltnp | grep 8001
或者直接换端口:
bash
--port 8002
总结
这次服务器部署 Qwen2.5-Coder-7B-CL 的核心流程可以总结为:
text
第一,选择正确磁盘:所有大文件放到 /data2/like。
第二,安装 Miniconda:不要占用 /home/user,安装到 /data2/like/miniconda3。
第三,配置镜像源:conda、pip、Hugging Face 分别配置。
第四,创建兼容环境:vllm-cu121,使用 Python 3.10。
第五,安装兼容版本:torch 2.5.1+cu121、vLLM 0.6.6.post1。
第六,修复依赖问题:transformers 降级到 4.46.3。
第七,用 tmux 启动 vLLM,避免 SSH 断开导致服务停止。
最终启动命令是:
bash
# ============================================================
# 0. 基础路径约定
# ============================================================
# 模型目录
MODEL_DIR=/data2/like/models/Qwen2.5-Coder-7B-CL
# 工作目录
WORK_DIR=/data2/like
# Miniconda 安装目录
CONDA_DIR=/data2/like/miniconda3
# vLLM 虚拟环境目录
VLLM_ENV=/data2/like/envs/vllm-cu121
# vLLM 服务端口
PORT=8002
# vLLM 对外暴露的模型名
MODEL_NAME=qwen-7B
# ============================================================
# 1. 检查磁盘与 GPU
# ============================================================
df -h
nvidia-smi
# ============================================================
# 2. 创建工作目录
# ============================================================
mkdir -p /data2/like/models
mkdir -p /data2/like/envs
mkdir -p /data2/like/tmp
mkdir -p /data2/like/pip-cache
mkdir -p /data2/like/hf-cache
mkdir -p /data2/like/conda-pkgs
mkdir -p /data2/like/software
# 如果 /data2/like 是自己使用的目录,但权限异常,可以修复权限
sudo chown -R user:user /data2/like
# 检查权限
ls -ld /data2/like
ls -ld /data2/like/models
# ============================================================
# 3. 安装 Hugging Face 命令行工具
# ============================================================
pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple
# 如果 hf / huggingface-cli 安装到了 ~/.local/bin,但命令找不到
export PATH="$HOME/.local/bin:$PATH"
# 永久加入 PATH
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
# 设置 Hugging Face 镜像源
export HF_ENDPOINT=https://hf-mirror.com
# 永久设置 Hugging Face 镜像源
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
# 检查命令
which hf
which huggingface-cli
# ============================================================
# 4. 下载 Qwen2.5-Coder-7B-CL 模型
# ============================================================
hf download czlll/Qwen2.5-Coder-7B-CL \
--local-dir /data2/like/models/Qwen2.5-Coder-7B-CL
# 检查模型文件
ls -lh /data2/like/models/Qwen2.5-Coder-7B-CL
du -sh /data2/like/models/Qwen2.5-Coder-7B-CL
# ============================================================
# 5. 安装 Miniconda 到 /data2
# ============================================================
cd /data2/like/software
wget -O Miniconda3-latest-Linux-x86_64.sh \
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 如果 wget 不可用,可以用 curl
# curl -L -o Miniconda3-latest-Linux-x86_64.sh \
# https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /data2/like/miniconda3
# 加载 conda
source /data2/like/miniconda3/etc/profile.d/conda.sh
# 永久加载 conda
echo 'source /data2/like/miniconda3/etc/profile.d/conda.sh' >> ~/.bashrc
# 检查 conda
conda --version
# ============================================================
# 6. 配置 conda 清华镜像源
# ============================================================
cp ~/.condarc ~/.condarc.bak 2>/dev/null || true
cat > ~/.condarc <<'EOF'
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
envs_dirs:
- /data2/like/envs
pkgs_dirs:
- /data2/like/conda-pkgs
EOF
mkdir -p /data2/like/envs
mkdir -p /data2/like/conda-pkgs
# 清理旧索引缓存
conda clean -i -y
# 检查配置
conda config --show-sources
# ============================================================
# 7. 配置 pip 清华镜像源
# ============================================================
mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 120
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
# 检查 pip 配置
pip config list
# ============================================================
# 8. 创建 vLLM 兼容环境
# ============================================================
source /data2/like/miniconda3/etc/profile.d/conda.sh
conda create -p /data2/like/envs/vllm-cu121 python=3.10 -y
conda activate /data2/like/envs/vllm-cu121
# 检查 Python 路径
which python
python --version
# ============================================================
# 9. 设置缓存目录,避免占用系统盘
# ============================================================
export TMPDIR=/data2/like/tmp
export PIP_CACHE_DIR=/data2/like/pip-cache
export HF_HOME=/data2/like/hf-cache
# ============================================================
# 10. 安装基础工具
# ============================================================
python -m pip install -U pip setuptools wheel
# ============================================================
# 11. 安装 CUDA 12.1 版 PyTorch
# ============================================================
python -m pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 \
--index-url https://download.pytorch.org/whl/cu121
# 检查 PyTorch 和 GPU
python - <<'PY'
import torch
print("torch:", torch.__version__)
print("torch cuda:", torch.version.cuda)
print("cuda available:", torch.cuda.is_available())
print("gpu count:", torch.cuda.device_count())
if torch.cuda.is_available():
for i in range(torch.cuda.device_count()):
print(i, torch.cuda.get_device_name(i))
PY
# ============================================================
# 12. 安装 vLLM 兼容版本
# ============================================================
python -m pip install vllm==0.6.6.post1 \
--extra-index-url https://download.pytorch.org/whl/cu121
# ============================================================
# 13. 修复 transformers 版本不匹配问题
# ============================================================
python -m pip uninstall -y transformers tokenizers
python -m pip install "transformers==4.46.3" "tokenizers==0.20.3" \
-i https://pypi.tuna.tsinghua.edu.cn/simple
# 检查关键依赖版本
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
python -c "import transformers; print(transformers.__version__)"
python -c "import tokenizers; print(tokenizers.__version__)"
python -c "import vllm; print(vllm.__version__)"
# ============================================================
# 14. 使用 tmux 创建后台会话
# ============================================================
tmux new -s vllm_qwen7b_128k
# 进入 tmux 后,重新加载 conda 并激活环境
source /data2/like/miniconda3/etc/profile.d/conda.sh
conda activate /data2/like/envs/vllm-cu121
# ============================================================
# 15. 启动 vLLM 部署 Qwen2.5-Coder-7B-CL
# ============================================================
CUDA_VISIBLE_DEVICES=0,1 vllm serve /data2/like/models/Qwen2.5-Coder-7B-CL \
--tensor-parallel-size 2 \
--host 0.0.0.0 \
--port 8002 \
--served-model-name qwen-7B \
--dtype auto \
--gpu-memory-utilization 0.92 \
--max-model-len 131072 \
--max-num-seqs 1
# 启动成功标志:
# Application startup complete.
# Uvicorn running on http://0.0.0.0:8002
# 在 tmux 中离开但不停止服务:
# Ctrl + B,然后按 D
# 重新进入 tmux:
# tmux attach -t vllm_qwen7b_128k
# 查看 tmux 会话:
# tmux ls
# ============================================================
# 16. 另开终端测试 vLLM 服务
# ============================================================
curl http://127.0.0.1:8002/v1/models
curl http://127.0.0.1:8002/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-7B",
"messages": [
{"role": "user", "content": "你好,请用一句话介绍你自己。"}
],
"temperature": 0.2,
"max_tokens": 128
}'
# ============================================================
# 17. 查看 GPU 占用
# ============================================================
nvidia-smi
# ============================================================
# 18. 给 LocAgent 或其他 OpenAI 兼容客户端使用
# ============================================================
export OPENAI_API_BASE="http://127.0.0.1:8002/v1"
export OPENAI_API_KEY="EMPTY"
服务启动成功后,使用:
text
API Base: http://127.0.0.1:8002/v1
API Key: EMPTY
Model: qwen-7B
如果给其他地方使用,则配置环境:
bash
export OPENAI_API_BASE="http://127.0.0.1:8002/v1"
export OPENAI_API_KEY="EMPTY"
模型参数写:
bash
--model openai/qwen-7B
这次部署最大的经验是:部署大模型不只是 GPU 够不够,还要看磁盘路径、权限、conda 环境、PyTorch CUDA 版本、vLLM 版本、transformers 版本、服务保活方式和调用协议兼容性。