This commit is contained in:
2026-03-10 23:57:37 +08:00
parent a48423d817
commit 65ccd278c9
4 changed files with 63 additions and 312 deletions
+5 -17
View File
@@ -15,7 +15,7 @@ ARG ROCM_MAJOR_VER=7
ARG GFX=gfx120X-all
RUN set -euo pipefail; \
BASE="https://therock-nightly-tarball.s3.amazonaws.com"; \
PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}"; \
PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}-${ROCM_MAJOR_VER}"; \
KEY="$(curl -s "${BASE}?list-type=2&prefix=${PREFIX}" \
| tr '<' '\n' \
| grep -o "therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}\..*\.tar\.gz" \
@@ -80,7 +80,7 @@ RUN echo "import sys, re" > patch_vllm.py && \
echo "p = Path('vllm/platforms/__init__.py')" >> patch_vllm.py && \
echo "txt = p.read_text()" >> patch_vllm.py && \
echo "txt = txt.replace('import amdsmi', '# import amdsmi')" >> patch_vllm.py && \
echo "txt = re.sub(r'is_rocm = .*', 'is_rocm = True', txt)" >> patch_vllm.py && \
echo "txt = re.sub(r'import is_rocm = .*', 'is_rocm = True', txt)" >> patch_vllm.py && \
echo "txt = re.sub(r'if len\(amdsmi\.amdsmi_get_processor_handles\(\)\) > 0:', 'if True:', txt)" >> patch_vllm.py && \
echo "txt = txt.replace('amdsmi.amdsmi_init()', 'pass')" >> patch_vllm.py && \
echo "txt = txt.replace('amdsmi.amdsmi_shut_down()', 'pass')" >> patch_vllm.py && \
@@ -145,21 +145,9 @@ RUN chmod -R a+rwX /opt && \
rm -rf /root/.cache/pip || true && \
dnf clean all && rm -rf /var/cache/dnf/*
# Create vLLM configuration directory
RUN mkdir -p /etc/vllm
# Create default YAML configuration file
RUN printf '# model_config.yaml - 多模型配置\n# 默认启动的模型\ndefault: "deepseek_r1_distill_qwen_32b_awq"\n\n# 模型配置\nmodels:\n deepseek_r1_distill_qwen_14b:\n path: "/app/vllm/models/DeepSeek-R1-Distill-Qwen-14B"\n name: "DeepSeek-R1-Distill-Qwen-14B"\n max_model_len: 8192\n gpu_memory_utilization: 0.9\n port: 2001\n dtype: "float16"\n quantization: "awq"\n tensor_parallel_size: 1\n enforce_eager: true\n api_key: "sk-14b-20240101-abcdef123456"\n \n deepseek_r1_distill_qwen_32b_awq:\n path: "/app/vllm/models/DeepSeek-R1-Distill-Qwen-32B-AWQ"\n name: "DeepSeek-R1-Distill-Qwen-32B-AWQ"\n \n # 模型性能参数\n max_model_len: 32768\n gpu_memory_utilization: 0.95\n enforce_eager: true\n max_num_seqs: 2\n max_num_batched_tokens: 1024\n block_size: 16\n tensor_parallel_size: 1\n swap_space: 0\n \n # 新增:采样参数默认值\n sampling_defaults:\n temperature: 0.6\n max_tokens: 4096\n top_p: 0.9\n frequency_penalty: 0.0\n presence_penalty: 0.0\n stop:\n - "用户:"
- "助手:"
- "###"
- "问题:"
- "回答:"
\n # 其他配置\n dtype: "auto"\n quantization: "awq"\n port: 2001\n api_key: "sk-32b-20240101-ghijk789012"\n \n glm_4_7_flash_awq:\n path: "/app/vllm/models/GLM-4.7-Flash-AWQ"\n name: "GLM-4.7-Flash-AWQ"\n \n # 模型性能参数\n max_model_len: 32768\n gpu_memory_utilization: 0.9\n enforce_eager: false\n max_num_seqs: 2\n max_num_batched_tokens: 1024\n block_size: 16\n tensor_parallel_size: 1\n swap_space: 0\n \n # 新增:采样参数默认值\n sampling_defaults:\n temperature: 0.6\n max_tokens: 4096\n top_p: 0.9\n frequency_penalty: 0.0\n presence_penalty: 0.0\n stop:\n - "用户:"
- "助手:"
- "###"
- "问题:"
- "回答:"
\n # 其他配置\n dtype: "auto"\n quantization: "awq"\n port: 2001\n api_key: "sk-32b-20240101-ghijk789012"\n \n qwen3_vl_32b_instruct_awq:\n path: "/app/vllm/models/Qwen3-VL-32B-Instruct-AWQ"\n name: "Qwen3-VL-32B-Instruct-AWQ"\n max_model_len: 32768\n gpu_memory_utilization: 0.7\n port: 2001\n dtype: "auto"\n quantization: "awq"\n tensor_parallel_size: 1\n enforce_eager: true\n api_key: "sk-glm-20240101-lmnop345678"\n\n# 服务器通用设置\nserver:\n host: "0.0.0.0"\n log_level: "info"\n # 全局管理员密钥(拥有所有模型的访问权限)\n admin_key: "sk-admin-20240101-xyz789"\n # 允许的请求头名称(支持多个,按顺序检查)\n api_key_headers: ["Authorization", "X-API-Key", "api-key"]\n # 是否允许通过查询参数传递密钥\n allow_query_param: true\n # 查询参数名称\n api_key_param: "api_key"' > /etc/vllm/model_config.yaml
# Create vLLM configuration directory and model directory
RUN mkdir -p /etc/vllm && \
mkdir -p /model
# Copy necessary scripts
COPY scripts/01-rocm-envs.sh /etc/profile.d/01-rocm-envs.sh
+39 -18
View File
@@ -36,8 +36,8 @@ docker build -t custom-vllm-r9700:latest .
# 运行容器
docker run -it --device /dev/dri --device /dev/kfd \
--group-add video --group-add render --security-opt seccomp=unconfined \
-v /path/to/models:/models \
-v /path/to/model_config.yaml:/etc/vllm/model_config.yaml \
-v /opt/models:/models \
-v /opt/model_config.yaml:/etc/vllm/model_config.yaml \
-e LOCAL_MODEL_DIR=/models \
custom-vllm-r9700:latest
```
@@ -57,8 +57,8 @@ docker build -t custom-vllm-r9700:latest .
```bash
docker run -it --device /dev/dri --device /dev/kfd \
--group-add video --group-add render --security-opt seccomp=unconfined \
-v /path/to/models:/models \
-v /path/to/model_config.yaml:/etc/vllm/model_config.yaml \
-v /opt/models:/models \
-v /opt/model_config.yaml:/etc/vllm/model_config.yaml \
-e LOCAL_MODEL_DIR=/models \
custom-vllm-r9700:latest
```
@@ -86,7 +86,7 @@ distrobox enter vllm-custom
## 配置文件
容器使用 YAML 格式的配置文件来设置 vLLM 服务器参数。默认配置文件位于 `/etc/vllm/model_config.yaml`。项目根目录中提供了配置文件示例 `model_config.yaml.example`,您可以参考它来创建自己的配置文件。
容器使用 YAML 格式的配置文件来设置 vLLM 服务器参数。配置文件需要挂载到 `/etc/vllm/model_config.yaml`。项目根目录中提供了配置文件示例 `model_config.yaml.example`,您可以参考它来创建自己的配置文件。
### 配置文件示例
@@ -98,7 +98,7 @@ default: "deepseek_r1_distill_qwen_32b_awq"
# 模型配置
models:
deepseek_r1_distill_qwen_14b:
path: "/app/vllm/models/DeepSeek-R1-Distill-Qwen-14B"
path: "/models/DeepSeek-R1-Distill-Qwen-14B"
name: "DeepSeek-R1-Distill-Qwen-14B"
max_model_len: 8192
gpu_memory_utilization: 0.9
@@ -110,7 +110,7 @@ models:
api_key: "sk-14b-20240101-abcdef123456"
deepseek_r1_distill_qwen_32b_awq:
path: "/app/vllm/models/DeepSeek-R1-Distill-Qwen-32B-AWQ"
path: "/models/DeepSeek-R1-Distill-Qwen-32B-AWQ"
name: "DeepSeek-R1-Distill-Qwen-32B-AWQ"
# 模型性能参数
@@ -144,7 +144,7 @@ models:
api_key: "sk-32b-20240101-ghijk789012"
glm_4_7_flash_awq:
path: "/app/vllm/models/GLM-4.7-Flash-AWQ"
path: "/models/GLM-4.7-Flash-AWQ"
name: "GLM-4.7-Flash-AWQ"
# 模型性能参数
@@ -178,7 +178,7 @@ models:
api_key: "sk-32b-20240101-ghijk789012"
qwen3_vl_32b_instruct_awq:
path: "/app/vllm/models/Qwen3-VL-32B-Instruct-AWQ"
path: "/models/Qwen3-VL-32B-Instruct-AWQ"
name: "Qwen3-VL-32B-Instruct-AWQ"
max_model_len: 32768
gpu_memory_utilization: 0.7
@@ -208,7 +208,7 @@ server:
- `default`:默认启动的模型名称
- `models`:模型配置列表
- 每个模型包含:
- `path`:模型路径
- `path`:模型路径(相对于 LOCAL_MODEL_DIR)
- `name`:模型名称
- `max_model_len`:最大模型上下文长度
- `gpu_memory_utilization`:GPU 内存利用率
@@ -233,7 +233,7 @@ server:
## 环境变量
- `LOCAL_MODEL_DIR`:本地模型目录路径(必须设置)
- `LOCAL_MODEL_DIR`:本地模型目录路径(必须设置,默认:/models)
- `VLLM_CONFIG_FILE`:配置文件路径(默认:/etc/vllm/model_config.yaml)
## 启动 vLLM 服务器
@@ -276,7 +276,7 @@ chmod +x build_and_run.sh
./build_and_run.sh -p 8080
# 指定配置文件和模型目录
./build_and_run.sh -c /path/to/config.yaml -m /path/to/models
./build_and_run.sh -c /opt/model_config.yaml -m /opt/models
# 交互式运行(前台运行)
./build_and_run.sh -i
@@ -313,8 +313,8 @@ docker build -t custom-vllm-r9700:latest .
# 2. 运行容器
docker run -it --device /dev/dri --device /dev/kfd \
--group-add video --group-add render --security-opt seccomp=unconfined \
-v /path/to/models:/models \
-v /path/to/model_config.yaml:/etc/vllm/model_config.yaml \
-v /opt/models:/models \
-v /opt/model_config.yaml:/etc/vllm/model_config.yaml \
-e LOCAL_MODEL_DIR=/models \
custom-vllm-r9700:latest
```
@@ -425,7 +425,7 @@ print(response.choices[0].text)
正确的目录结构示例:
```
/models/
/opt/models/
├── deepseek_r1_distill_qwen_14b/
│ ├── config.json
│ └── model.safetensors
@@ -463,7 +463,28 @@ print(response.choices[0].text)
- `Dockerfile` - Docker 镜像构建文件
- `README.md` - 项目说明文档
- `model_config.yaml.example` - 配置文件示例
- `params_config.yaml` - 参数配置文件(定义各类参数的类型和验证规则)
- `model_config.yaml.example` - 配置文件示例(包含所有模型配置参数)
- `build_and_run.sh` - 智能部署脚本(自动检测 Git 更新)
- `scripts/start_vllm.py` - vLLM 启动脚本
- `scripts/` - 脚本目录
- `start_vllm.py` - vLLM 启动脚本
- `01-rocm-envs.sh` - ROCm 环境配置
- `99-toolbox-banner.sh` - Toolbox 横幅
- `zz-venv-last.sh` - 虚拟环境配置
## 部署说明
### Docker 运行命令
```bash
docker run -it --device /dev/dri --device /dev/kfd \
--group-add video --group-add render --security-opt seccomp=unconfined \
-v /opt/models:/models \
-v /opt/model_config.yaml:/etc/vllm/model_config.yaml \
-e LOCAL_MODEL_DIR=/models \
custom-vllm-r9700:latest
```
**挂载说明:**
- `/opt/models` - 本地模型目录,挂载到容器的 `/models`
- `/opt/model_config.yaml` - 本地配置文件,挂载到容器的 `/etc/vllm/model_config.yaml`
- `LOCAL_MODEL_DIR=/models` - 指定模型目录环境变量
+18 -7
View File
@@ -5,15 +5,26 @@
set -e
# 配置变量
# ============== 配置变量(可修改) ==============
# 项目目录
PROJECT_DIR="/opt/project/vllm-r9700-container"
# 挂载配置
MODEL_DIR="${MODEL_DIR:-/opt/model}" # 本地模型目录(独立于项目目录)
CONFIG_FILE="${CONFIG_FILE:-${PROJECT_DIR}/model_config.yaml}" # 本地配置文件(项目根目录下)
# 容器内配置
LOCAL_MODEL_DIR="${LOCAL_MODEL_DIR:-/model}" # 容器内模型目录(与 Dockerfile 保持一致)
CONFIG_FILE_IN_CONTAINER="/etc/vllm/model_config.yaml" # 容器内配置文件路径
# Docker 镜像配置
IMAGE_NAME="custom-vllm-r9700"
IMAGE_TAG="latest"
CONTAINER_NAME="custom-vllm-r9700"
PROJECT_DIR="/opt/project/vllm-r9700-container"
MODEL_DIR="${MODEL_DIR:-/opt/models}"
CONFIG_FILE="${CONFIG_FILE:-/opt/model_config.yaml}"
LOCAL_MODEL_DIR="${LOCAL_MODEL_DIR:-/models}"
# Git 配置
GIT_BRANCH="${GIT_BRANCH:-main}"
# ================================================
# 颜色定义
RED='\033[0;31m'
@@ -286,8 +297,8 @@ run_container() {
fi
if [ -f "$CONFIG_FILE" ]; then
VOLUME_ARGS="$VOLUME_ARGS -v ${CONFIG_FILE}:/etc/vllm/model_config.yaml"
print_info "配置文件:${CONFIG_FILE}"
VOLUME_ARGS="$VOLUME_ARGS -v ${CONFIG_FILE}:${CONFIG_FILE_IN_CONTAINER}"
print_info "配置文件:${CONFIG_FILE} -> ${CONFIG_FILE_IN_CONTAINER}"
else
print_warning "配置文件不存在:${CONFIG_FILE}"
print_info "将使用容器内默认配置"
-269
View File
@@ -1,269 +0,0 @@
# vLLM 参数配置文件
# 用于定义和识别 vLLM 服务器的各类参数
# 模型参数配置
model_params:
# 必需参数
required:
- path # 模型路径
# 可选参数
optional:
- name # 模型名称
- dtype # 数据类型 (auto, float16, float32, bfloat16)
- quantization # 量化方式 (awq, gptq, squeezellm)
- trust_remote # 是否信任远程代码
# 性能参数配置
performance_params:
# GPU 相关
gpu:
- tensor_parallel_size # 张量并行度
- pipeline_parallel_size # 流水线并行度
- gpu_memory_utilization # GPU 内存利用率 (0.0-1.0)
- swap_space # CPU 交换空间大小 (GB)
- max_num_batched_tokens # 最大批量 tokens 数
- max_num_seqs # 最大并发请求数
- num_scheduler_steps # 调度器步数
# 内存管理
memory:
- block_size # 块大小 (8, 16, 32)
- max_model_len # 最大模型上下文长度
- max_logprobs # 最大 logprobs 数
- disable_sliding_window # 禁用滑动窗口
# 服务参数配置
server_params:
# 网络配置
network:
- host # 服务器主机地址
- port # 服务器端口
- ssl_keyfile # SSL 密钥文件
- ssl_certfile # SSL 证书文件
- ssl_ca_certs # SSL CA 证书
- ssl_keyfile_password # SSL 密钥密码
# API 配置
api:
- api_key # API 密钥
- allowed_origins # 允许的源
- timeout_keep_alive # 保持连接超时时间
# 采样参数配置
sampling_params:
# 温度控制
- temperature # 温度 (0.0-2.0)
- top_p # 核采样参数 (0.0-1.0)
- top_k # Top-K 采样
- min_p # 最小概率
# 惩罚参数
- frequency_penalty # 频率惩罚 (-2.0 到 2.0)
- presence_penalty # 存在惩罚 (-2.0 到 2.0)
- repetition_penalty # 重复惩罚
# 生成长度
- max_tokens # 最大生成 tokens 数
- min_tokens # 最小生成 tokens 数
- stop # 停止词列表
- stop_token_ids # 停止 token IDs
# 其他采样选项
- seed # 随机种子
- use_beam_search # 使用束搜索
- best_of # 束搜索的最佳候选数
- length_penalty # 长度惩罚
- early_stopping # 早期停止
- ignore_eos # 忽略 EOS token
- skip_special_tokens # 跳过特殊 tokens
- spaces_between_special_tokens # 特殊 tokens 之间的空格
# 日志参数配置
logging_params:
- log_level # 日志级别 (debug, info, warning, error)
- log_requests # 是否记录请求
- log_responses # 是否记录响应
# 高级参数配置
advanced_params:
# 执行模式
- enforce_eager # 强制使用 eager 模式
- cuda_graphs # CUDA 图
- use_v2_block_manager # 使用 V2 块管理器
# 注意力后端
- use_rocm_attn # 使用 ROCm 注意力后端
- attention_backend # 注意力后端类型
# 分布式
- distributed_executor_backend # 分布式执行器后端
- ray_workers_use_nsight # Ray workers 使用 nsight
# 其他
- load_format # 加载格式
- download_dir # 下载目录
- revision # 模型版本
- code_revision # 代码版本
- tokenizer_revision # tokenizer 版本
# 参数类型映射
param_types:
# 整数类型
integer:
- tensor_parallel_size
- pipeline_parallel_size
- max_num_batched_tokens
- max_num_seqs
- block_size
- max_model_len
- max_tokens
- min_tokens
- top_k
- best_of
- seed
- num_scheduler_steps
- max_logprobs
- swap_space
- timeout_keep_alive
# 浮点数类型
float:
- gpu_memory_utilization
- temperature
- top_p
- min_p
- frequency_penalty
- presence_penalty
- repetition_penalty
- length_penalty
# 布尔类型
boolean:
- trust_remote
- enforce_eager
- use_rocm_attn
- use_beam_search
- early_stopping
- ignore_eos
- skip_special_tokens
- spaces_between_special_tokens
- log_requests
- log_responses
- disable_sliding_window
- use_v2_block_manager
# 字符串类型
string:
- path
- name
- dtype
- quantization
- host
- port
- api_key
- ssl_keyfile
- ssl_certfile
- ssl_ca_certs
- ssl_keyfile_password
- log_level
- attention_backend
- load_format
- download_dir
- revision
- code_revision
- tokenizer_revision
# 列表类型
list:
- stop
- stop_token_ids
- allowed_origins
# 参数默认值
param_defaults:
host: "0.0.0.0"
port: 8000
dtype: "auto"
gpu_memory_utilization: 0.9
max_model_len: 8192
tensor_parallel_size: 1
max_num_seqs: 256
block_size: 16
temperature: 0.7
top_p: 0.9
max_tokens: 256
enforce_eager: false
trust_remote: false
log_level: "info"
# 参数验证规则
param_validation:
gpu_memory_utilization:
min: 0.0
max: 1.0
temperature:
min: 0.0
max: 2.0
top_p:
min: 0.0
max: 1.0
min_p:
min: 0.0
max: 1.0
frequency_penalty:
min: -2.0
max: 2.0
presence_penalty:
min: -2.0
max: 2.0
tensor_parallel_size:
min: 1
max: 8
block_size:
allowed_values: [8, 16, 32]
# 参数分组(用于配置文件组织)
param_groups:
basic:
name: "基础配置"
params:
- path
- name
- port
- api_key
performance:
name: "性能配置"
params:
- tensor_parallel_size
- gpu_memory_utilization
- max_model_len
- max_num_seqs
- block_size
sampling:
name: "采样配置"
params:
- temperature
- top_p
- max_tokens
- frequency_penalty
- presence_penalty
- stop
advanced:
name: "高级配置"
params:
- dtype
- quantization
- enforce_eager
- trust_remote
- swap_space