vllm Docker镜像 GLM4.5v 大模型
本文介绍了使用vllm Docker镜像部署GLM4.5v大模型的完整指南。
使用 vllm Docker 镜像部署 GLM4.5v 大模型的全面指南
一、部署环境准备
1.1 硬件环境要求
要成功部署 GLM4.5v 模型并满足 10 人高并发使用需求,首先需要确保硬件环境符合要求:
服务器配置建议:
-
GPU:8 张 NVIDIA A100 80GB PCIe 显卡,这是因为 GLM4.5v 模型规模较大,需要充足的显存和计算能力(9)
-
CPU:至少 32 核以上的处理器,用于处理调度和非 GPU 计算任务
-
内存:系统内存≥64GB,用于存储交换空间和非 GPU 数据处理(9)
-
存储:至少 500GB 可用磁盘空间,用于存储模型文件和临时数据
-
网络:高速内部网络,确保 GPU 间通信顺畅(建议使用 NVLink 连接)(21)
A100 80GB GPU 特性:
-
单卡提供 80GB HBM2e 显存,总带宽高达 2TB/s
-
支持 FP16、BF16 和 FP8 等多种精度计算
-
通过 NVLink 技术可实现多 GPU 高速互联,带宽高达 600GB/s(双卡互联)(22)
-
8 张 A100 80GB 总显存可达 640GB,为大模型部署提供充足显存空间(9)
1.2 软件环境准备
在部署前,需要准备好以下软件环境:
基础软件依赖:
-
操作系统:Linux 系统(推荐 Ubuntu 22.04 LTS 或更高版本)(9)
-
NVIDIA 驱动:版本≥535.171.04(与 CUDA 12.2 兼容)(9)
-
CUDA 工具包:版本 12.2 或更高,以支持 FP8 等高级特性(31)
-
cuDNN:与 CUDA 版本匹配的深度神经网络加速库
-
Docker:最新版本的 Docker 引擎,用于容器化部署(2)
-
Docker Compose:(可选)用于多容器编排
vllm 相关组件:
-
vllm 框架:建议安装最新版本,可通过
pip install -U vllm --pre --extra-index-url ``https://wheels.vllm.ai/nightly
命令安装(30) -
transformers 库:与 vllm 兼容的版本,可通过
pip install transformers
安装 -
模型文件:GLM4.5v 的权重文件,可从 Hugging Face Hub 或 ModelScope 获取(30)
二、vllm Docker 镜像使用基础
2.1 获取官方 vllm Docker 镜像
vllm 提供了官方 Docker 镜像,可通过以下步骤获取:
拉取最新镜像:
docker pull vllm/vllm-openai
或者构建自定义镜像:
如果需要定制环境,可以创建 Dockerfile:
FROM nvidia/cuda:12.2.0-base-ubuntu22.04
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip install vllm==0.8.0 transformers==4.40.0
CMD \["python", "-m", "vllm.entrypoints.openai.api\_server"]
构建镜像:
docker build -t my-vllm-image .
2.2 基本容器启动命令
启动 vllm Docker 容器的基本命令格式如下:
docker run --gpus all \
--p 8000:8000 \
--name vllm-container \
vllm/vllm-openai \
--model glm4.5v \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.9 \
--max-model-len 8192
关键参数说明:
-
--gpus all
:允许 Docker 容器访问所有 GPU 设备 -
-p 8000:8000
:将容器的 8000 端口映射到主机的 8000 端口 -
--name vllm-container
:为容器指定名称 -
--model glm4.5v
:指定要加载的模型名称或路径 -
--tensor-parallel-size 8
:使用 8 个 GPU 进行张量并行计算(5) -
--gpu-memory-utilization 0.9
:设置 GPU 内存使用率阈值为 90%(8) -
--max-model-len 8192
:设置模型支持的最大上下文长度为 8192 tokens(5)
三、vllm 参数详细配置
3.1 分布式推理参数配置
在 8 张 A100 80G 环境下,分布式推理参数的正确配置至关重要:
张量并行配置:
--tensor-parallel-size 8 \
--pipeline-parallel-size 1 \
--distributed-executor-backend ray \
--worker-use-ray \
参数说明:
-
--tensor-parallel-size 8
:将模型参数分布到 8 个 GPU 上进行并行计算,必须与实际使用的 GPU 数量一致(5) -
--pipeline-parallel-size 1
:由于我们主要关注张量并行,管道并行大小保持为 1(10) -
--distributed-executor-backend ray
:使用 Ray 作为分布式执行后端,支持多节点部署(31) -
--worker-use-ray
:指示工作进程使用 Ray 进行分布式执行(31)
CUDA 环境变量设置:
在启动容器前,设置以下环境变量:
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
多 GPU 启动建议:
对于生产环境,建议使用torchrun
启动多进程服务:
torchrun --nproc_per_node=8 --master_port=12345 \
vllm serve glm4.5v \
--tensor-parallel-size 8 \
--pipeline-parallel-size 1 \
--distributed-executor-backend mp
3.2 内存管理参数优化
在 8 张 A100 80G 环境下,内存管理参数的优化对性能至关重要:
GPU 内存配置:
--gpu-memory-utilization 0.9 \
--swap-space 16 \
--cpu-offload-gb 0 \
--num-gpu-blocks-override 0 \
参数说明:
-
--gpu-memory-utilization 0.9
:设置 GPU 内存使用率上限为 90%,在高负载场景下推荐 0.9~0.95(8) -
--swap-space 16
:为每个 GPU 分配 16GB 的交换空间,用于处理超出显存的情况(5) -
--cpu-offload-gb 0
:不启用 CPU 卸载(将部分数据从 GPU 卸载到 CPU 内存),因为 A100 80G 显存充足(5) -
--num-gpu-blocks-override 0
:使用自动计算的 GPU 块数
KV 缓存优化:
--kv-cache-dtype fp8 \
--quantization-param-path fp8\_scales.json \
--calculate-kv-scales \
参数说明:
-
--kv-cache-dtype fp8
:使用 FP8 数据类型存储 KV 缓存,可节省约 50% 的 KV 缓存内存(31) -
--quantization-param-path
:指定包含 KV 缓存缩放因子的 JSON 文件路径(31) -
--calculate-kv-scales
:动态计算 KV 缓存缩放因子,提高 FP8 精度下的模型性能(31)
3.3 性能调优参数配置
为了满足 10 人同时高并发使用,需要对以下参数进行优化:
批处理参数:
--max-num-batched-tokens 4096 \
--max-num-seqs 20 \
--max-logprobs 5 \
参数说明:
-
--max-num-batched-tokens 4096
:每次推理处理的最大 token 数,平衡吞吐量和延迟(31) -
--max-num-seqs 20
:最大并发序列数,根据测试设置为 20 以支持 10 人同时使用(每人可能有多个请求)(31) -
--max-logprobs 5
:返回每个位置的前 5 个概率最高的 token(31)
解码参数:
--temperature 0.7 \
--top-p 0.95 \
--presence-penalty 0 \
--frequency-penalty 0 \
参数说明:
-
--temperature 0.7
:控制生成的随机性,值越低越确定性(31) -
--top-p 0.95
:核采样参数,保留概率质量在 95% 以上的 token(31) -
--presence-penalty 0
:禁用存在惩罚 -
--frequency-penalty 0
:禁用频率惩罚
高级优化参数:
--enable-chunked-prefill \
--speculative-model ngram \
--num-speculative-tokens 4 \
--speculative-disable-by-batch-size 10 \
参数说明:
-
--enable-chunked-prefill
:启用分块预填充,优化长序列的处理效率(10) -
--speculative-model ngram
:启用基于 n-gram 的推测解码,提高吞吐量(31) -
--num-speculative-tokens 4
:每次推测生成 4 个 token,增加并行度(31) -
--speculative-disable-by-batch-size 10
:当批处理大小超过 10 时,禁用推测解码以保证延迟(31)
四、显存优化策略
4.1 模型量化技术
在 A100 80G 环境下,采用适当的量化技术可以显著提升性能:
FP8 量化:
--kv-cache-dtype fp8 \
--quantization-param-path fp8\_scales.json \
--calculate-kv-scales \
参数说明:
-
--kv-cache-dtype fp8
:将 KV 缓存数据类型设置为 FP8,可节省约 50% 的显存(31) -
--quantization-param-path
:指定包含 FP8 缩放因子的文件路径,通常由模型提供者提供(31) -
--calculate-kv-scales
:动态计算 KV 缓存的缩放因子,提高 FP8 精度下的模型性能(31)
AWQ 激活感知量化:
--quantization awq \
--awq-group-size 128 \
--awq-bit-width 4 \
参数说明:
-
--quantization awq
:启用激活感知权重量化 (AWQ)(6) -
--awq-group-size 128
:设置量化组大小为 128,平衡精度和压缩率(6) -
--awq-bit-width 4
:使用 4 位量化,可将模型大小减少 75%(6)
混合精度策略:
--dtype float16 \
--kv-cache-dtype fp8 \
参数说明:
-
--dtype float16
:模型权重使用 FP16 精度 -
--kv-cache-dtype fp8
:KV 缓存使用 FP8 精度,实现精度和内存的平衡(31)
4.2 内存管理优化
针对 8 张 A100 80G 环境,以下内存管理策略可有效提升性能:
块大小优化:
--block-size 16 \
--use-v2-block-manager \
--num-lookahead-slots 2 \
参数说明:
-
--block-size 16
:设置连续 token 块的大小为 16,平衡内存利用率和计算效率(31) -
--use-v2-block-manager
:使用第二代块管理器,提高内存管理效率(31) -
--num-lookahead-slots 2
:设置预看槽数量,优化调度和执行效率(31)
CPU 卸载与交换空间:
--swap-space 16 \
--cpu-offload-gb 0 \
--preemption-mode recompute \
参数说明:
-
--swap-space 16
:为每个 GPU 分配 16GB 的交换空间,用于处理突发的内存压力(5) -
--cpu-offload-gb 0
:在 A100 80G 环境下,通常不需要 CPU 卸载,可以设置为 0(5) -
--preemption-mode recompute
:使用重新计算的方式实现抢占,而不是交换块,提高性能(31)
内存利用率调整:
--gpu-memory-utilization 0.9 \
--num-gpu-blocks-override 0 \
参数说明:
-
--gpu-memory-utilization 0.9
:设置 GPU 内存利用率阈值为 90%,在高负载下可提高至 0.95(8) -
--num-gpu-blocks-override 0
:自动确定 GPU 块数,无需手动覆盖(31)
4.3 模型特定优化
针对 GLM4.5v 模型的特性,以下优化策略尤为重要:
模型加载优化:
--load-format safetensors \
--config-format hf \
--trust-remote-code \
--revision main \
参数说明:
-
--load-format safetensors
:使用 safetensors 格式加载模型,比 PyTorch 格式更安全高效(31) -
--config-format hf
:使用 Hugging Face 格式的配置文件(31) -
--trust-remote-code
:信任来自 Hugging Face Hub 的远程代码,必要时启用(31) -
--revision main
:指定要加载的模型版本,默认为主分支(31)
上下文长度优化:
--max-model-len 16384 \
--rope-scaling dynamic \
--rope-theta 10000 \
参数说明:
-
--max-model-len 16384
:设置模型支持的最大上下文长度为 16384 tokens(31) -
--rope-scaling dynamic
:启用动态旋转位置编码缩放,支持超长上下文(31) -
--rope-theta 10000
:设置旋转位置编码的 theta 值,调整位置编码的频率(31)
多模态支持优化:
--limit-mm-per-prompt image=4,video=1 \
--mm-processor-kwargs '{"num\_crops": 4}' \
--disable-mm-preprocessor-cache \
参数说明:
-
--limit-mm-per-prompt image=4,video=1
:限制每个提示中最多包含 4 张图像或 1 个视频(31) -
--mm-processor-kwargs '{"num_crops": 4}'
:设置图像处理器参数,每个图像生成 4 个裁剪(31) -
--disable-mm-preprocessor-cache
:禁用多模态预处理器缓存,释放内存(31)
五、GPU 指定与资源分配
5.1 多 GPU 环境配置
在 8 张 A100 80G 环境下,正确的 GPU 指定和资源分配至关重要:
CUDA_VISIBLE_DEVICES 设置:
在启动容器前,设置以下环境变量:
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
参数说明:
-
CUDA_DEVICE_ORDER=PCI_BUS_ID
:按 PCI 总线 ID 排序 GPU 设备 -
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
:指定所有 8 个 GPU 设备可见
Docker GPU 访问设置:
使用--gpus
参数指定 GPU 访问:
docker run --gpus '"device=0,1,2,3,4,5,6,7"' \
-p 8000:8000 \
--name vllm-container \
vllm/vllm-openai \
--model glm4.5v \
--tensor-parallel-size 8 \
...
参数说明:
--gpus '"device=0,1,2,3,4,5,6,7"'
:指定容器可以访问的 GPU 设备列表
NVIDIA 容器工具包设置:
确保安装了 NVIDIA 容器工具包,并在启动时使用:
docker run --runtime=nvidia --gpus all -p 8000:8000 --name \
vllm-container vllm/vllm-openai \
--model glm4.5v \
--tensor-parallel-size 8 \
...
5.2 分布式执行优化
在多 GPU 环境下,分布式执行的优化对性能至关重要:
Ray 分布式执行配置:
--distributed-executor-backend ray \
--worker-use-ray \
--ray-workers-use-nsight \
参数说明:
-
--distributed-executor-backend ray
:使用 Ray 作为分布式执行后端,支持高效的多 GPU 协作(31) -
--worker-use-ray
:指示工作进程使用 Ray 进行分布式执行(31) -
--ray-workers-use-nsight
:启用 NSight 系统分析器,用于性能分析(31)
多进程执行配置:
对于单节点多 GPU 部署,推荐使用多进程执行:
--distributed-executor-backend mp \
--max-parallel-loading-workers 8 \
参数说明:
-
--distributed-executor-backend mp
:使用多进程作为分布式执行后端,适用于单节点部署(31) -
--max-parallel-loading-workers 8
:设置最大并行加载工作进程数为 8,与 GPU 数量匹配(31)
GPU 亲和性设置:
在 Docker 中,可以通过以下方式设置 GPU 亲和性:
--cpuset-cpus 0-31 \
--cpu-shares 1024 \
参数说明:
-
--cpuset-cpus 0-31
:将容器绑定到 0-31 号 CPU 核心 -
--cpu-shares 1024
:设置 CPU 资源份额为 1024
5.3 负载均衡策略
在高并发场景下,有效的负载均衡策略对服务流畅性至关重要:
请求调度策略:
--scheduling-policy priority \
--scheduler-cls vllm.core.scheduler.Scheduler \
--max-num-batched-tokens 4096 \
参数说明:
-
--scheduling-policy priority
:使用优先级调度策略,优先处理延迟敏感的请求(31) -
--scheduler-cls vllm.core.scheduler.Scheduler
:使用默认的调度器类(31) -
--max-num-batched-tokens 4096
:设置每次批处理的最大 token 数,平衡吞吐量和延迟(31)
并发请求限制:
--max-num-seqs 20 \
--max-num-partial-prefills 4 \
--max-long-partial-prefills 2 \
参数说明:
-
--max-num-seqs 20
:设置最大并发序列数为 20,支持 10 人同时使用(每人可能有多个请求)(31) -
--max-num-partial-prefills 4
:设置最大并发部分预填充数为 4(31) -
--max-long-partial-prefills 2
:设置长提示的最大并发预填充数为 2(31)
资源监控与动态调整:
--enable-server-load-tracking \
--scheduler-delay-factor 0.1 \
--preemption-mode recompute \
参数说明:
-
--enable-server-load-tracking
:启用服务器负载跟踪,优化调度决策(33) -
--scheduler-delay-factor 0.1
:设置调度延迟因子为 0.1,调整请求处理速度(31) -
--preemption-mode recompute
:使用重新计算的方式实现抢占,而不是交换块,提高性能(31)
六、高并发性能优化
6.1 并发请求处理优化
在 10 人同时高并发使用场景下,以下优化策略可显著提升性能:
异步 API 服务:
--api-type async \
--async-workers 16 \
--uvicorn-log-level info \
参数说明:
-
--api-type async
:启用异步 API 服务,提高并发处理能力(31) -
--async-workers 16
:设置 16 个异步工作进程,根据 CPU 核心数调整(31) -
--uvicorn-log-level info
:设置日志级别为 info,减少日志开销(31)
批处理参数优化:
--max-num-batched-tokens 4096 \
--max-num-seqs 20 \
--max-num-partial-prefills 4 \
参数说明:
-
--max-num-batched-tokens 4096
:设置每次推理处理的最大 token 数,平衡吞吐量和延迟(31) -
--max-num-seqs 20
:设置最大并发序列数为 20,支持 10 人同时使用(31) -
--max-num-partial-prefills 4
:设置最大并发部分预填充数为 4,优化长序列处理(31)
推测解码优化:
--speculative-model ngram \
--num-speculative-tokens 4 \
--speculative-disable-by-batch-size 10 \
参数说明:
-
--speculative-model ngram
:启用基于 n-gram 的推测解码,提高吞吐量(31) -
--num-speculative-tokens 4
:每次推测生成 4 个 token,增加并行度(31) -
--speculative-disable-by-batch-size 10
:当批处理大小超过 10 时,禁用推测解码以保证延迟(31)
6.2 延迟与吞吐量平衡
在高并发场景下,需要平衡推理延迟和吞吐量:
预热请求:
在服务启动后,发送预热请求:
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{"model": "glm4.5v",
"messages": [{"role": "user", "content": "预热请求"}] }'
参数说明:
- 预热请求可以触发模型编译和缓存初始化,减少后续请求的延迟
批处理大小调整:
根据负载情况动态调整批处理大小:
--max-num-batched-tokens 4096 \
--max-num-seqs 20 \
--max-logprobs 5 \\
参数说明:
-
--max-num-batched-tokens 4096
:设置每次批处理的最大 token 数,平衡吞吐量和延迟(31) -
--max-num-seqs 20
:设置最大并发序列数为 20,支持 10 人同时使用(31) -
--max-logprobs 5
:设置返回的最大 logprobs 数为 5,减少处理开销(31)
流式响应优化:
对于长响应,使用流式响应:
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{"model": "glm4.5v","messages": [{"role": "user", "content": "长响应请求"}],"stream": true}'
参数说明:
stream: true
:启用流式响应,逐步返回结果,减少客户端等待时间
6.3 监控与调优工具
有效的监控是确保高并发服务流畅性的关键:
Prometheus 指标监控:
--prometheus-port 8001 \
--prometheus-block-addr 0.0.0.0 \
--prometheus-block-port 8002 \
参数说明:
-
--prometheus-port 8001
:启用 Prometheus 指标服务器,端口 8001(31) -
--prometheus-block-addr ``0.0.0.0
:设置 Prometheus 指标服务器监听地址(31) -
--prometheus-block-port 8002
:设置 Prometheus 块服务器端口(31)
关键监控指标:
-
vllm_num_requests_running
:当前处理中的请求数 -
vllm_gpu_utilization
:GPU 利用率 -
vllm_model_latency_seconds
:模型推理延迟 -
vllm_throughput_tokens_per_second
:吞吐量(每秒处理的 token 数)
监控工具推荐:
-
Prometheus:用于指标收集和存储
-
Grafana:用于指标可视化
-
NVIDIA System Management Interface (nvidia-smi):用于 GPU 状态监控
-
nvtop:用于实时 GPU 使用情况监控
动态调优策略:
根据监控数据,动态调整以下参数:
--max-num-seqs 20 \
--max-num-batched-tokens 4096 \
--gpu-memory-utilization 0.9 \
七、完整部署命令示例
7.1 单节点多 GPU 部署命令
在 8 张 A100 80G 单节点环境下,完整的部署命令如下:
Docker 部署命令:
docker run --gpus '"device=0,1,2,3,4,5,6,7"' \
-p 8000:8000 \
-p 8001:8001 \
-p 8002:8002 \
--name vllm-glm4.5v \
--shm-size=1g \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
vllm/vllm-openai \
--model glm4.5v \
--tokenizer glm4.5v \
--tokenizer-mode mistral \
--trust-remote-code \
--load-format safetensors \
--config-format hf \
--dtype float16 \
--kv-cache-dtype fp8 \
--quantization-param-path fp8\_scales.json \
--calculate-kv-scales \
--max-model-len 16384 \
--guided-decoding-backend outlines \
--distributed-executor-backend ray \
--worker-use-ray \
--tensor-parallel-size 8 \
--pipeline-parallel-size 1 \
--block-size 16 \
--enable-prefix-caching \
--use-v2-block-manager \
--swap-space 16 \
--cpu-offload-gb 0 \
--gpu-memory-utilization 0.9 \
--max-num-batched-tokens 4096 \
--max-num-seqs 20 \
--max-logprobs 5 \
--enable-chunked-prefill \
--speculative-model ngram \
--num-speculative-tokens 4 \
--speculative-disable-by-batch-size 10 \
--scheduling-policy priority \
--scheduler-cls vllm.core.scheduler.Scheduler \
--prometheus-port 8001 \
--prometheus-block-addr 0.0.0.0 \
--prometheus-block-port 8002 \
--server-name glm4.5v-server \
--served-model-name glm4.5v \
--api-type async \
--async-workers 16 \
--uvicorn-log-level info \
--enable-server-load-tracking \
--preemption-mode recompute
7.2 使用 torchrun 启动多进程服务
对于生产环境,推荐使用torchrun
启动多进程服务:
torchrun 启动命令:
torchrun --nproc_per_node=8 --master_port=12345 vllm serve glm4.5v \
--model glm4.5v \
--tokenizer glm4.5v \
--tokenizer-mode mistral \
--trust-remote-code \
--load-format safetensors \
--config-format hf \
--dtype float16 \
--kv-cache-dtype fp8 \
--quantization-param-path fp8\_scales.json \
--calculate-kv-scales \
--max-model-len 16384 \
--guided-decoding-backend outlines \
--distributed-executor-backend mp \
--tensor-parallel-size 8 \
--pipeline-parallel-size 1 \
--block-size 16 \
--enable-prefix-caching \
--use-v2-block-manager \
--swap-space 16 \
--cpu-offload-gb 0 \
--gpu-memory-utilization 0.9 \
--max-num-batched-tokens 4096 \
--max-num-seqs 20 \
--max-logprobs 5 \
--enable-chunked-prefill \
--speculative-model ngram \
--num-speculative-tokens 4 \
--speculative-disable-by-batch-size 10 \
--scheduling-policy priority \
--scheduler-cls vllm.core.scheduler.Scheduler \
--prometheus-port 8001 \
--prometheus-block-addr 0.0.0.0 \
--prometheus-block-port 8002 \
--server-name glm4.5v-server \
--served-model-name glm4.5v \
--api-type async \
--async-workers 16 \
--uvicorn-log-level info \
--enable-server-load-tracking \
--preemption-mode recompute
7.3 Docker Compose 部署配置
对于复杂的生产环境,可以使用 Docker Compose 进行多容器编排:
docker-compose.yml 配置文件:
version: '3'
services:
vllm-glm4.5v:
image: vllm/vllm-openai
command: >
--model glm4.5v
--tokenizer glm4.5v
--tokenizer-mode mistral
--trust-remote-code
--load-format safetensors
--config-format hf
--dtype float16
--kv-cache-dtype fp8
--quantization-param-path fp8\_scales.json
--calculate-kv-scales
--max-model-len 16384
--guided-decoding-backend outlines
--distributed-executor-backend ray
--worker-use-ray
--tensor-parallel-size 8
--pipeline-parallel-size 1
--block-size 16
--enable-prefix-caching
--use-v2-block-manager
--swap-space 16
--cpu-offload-gb 0
--gpu-memory-utilization 0.9
--max-num-batched-tokens 4096
--max-num-seqs 20
--max-logprobs 5
--enable-chunked-prefill
--speculative-model ngram
--num-speculative-tokens 4
--speculative-disable-by-batch-size 10
--scheduling-policy priority
--scheduler-cls vllm.core.scheduler.Scheduler
--prometheus-port 8001
--prometheus-block-addr 0.0.0.0
--prometheus-block-port 8002
--server-name glm4.5v-server
--served-model-name glm4.5v
--api-type async
--async-workers 16
--uvicorn-log-level info
--enable-server-load-tracking
--preemption-mode recompute
deploy:
resources:
reservations:
devices:
- driver: nvidia
device\_ids: \[0,1,2,3,4,5,6,7]
capabilities: \[gpu]
ports:
- "8000:8000"
- "8001:8001"
- "8002:8002"
shm\_size: 1g
ulimits:
memlock:
soft: -1
hard: -1
stack: 67108864
八、性能测试与优化建议
8.1 基准测试方法
在部署完成后,需要进行性能测试以验证配置的有效性:
并发测试工具:
-
wrk:用于 HTTP 请求基准测试
-
locust:用于分布式负载测试
-
vegeta:用于 HTTP 负载测试
测试脚本示例:
import requests
import time
import asyncio
async def test\_concurrency():
url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}
payload = {
"model": "glm4.5v",
"messages": \[{"role": "user", "content": "测试请求"}],
"temperature": 0.7,
"max\_tokens": 100
}
start\_time = time.time()
tasks = \[asyncio.ensure\_future(requests.post(url, json=payload, headers=headers)) for \_ in range(10)]
responses = await asyncio.gather(\*tasks)
end\_time = time.time()
print(f"完成10个并发请求耗时:{end\_time - start\_time}秒")
for response in responses:
print(response.json())
asyncio.run(test\_concurrency())
性能指标评估:
-
平均响应时间:应≤1 秒(对于短查询)
-
吞吐量:应≥200 tokens / 秒
-
95% 百分位延迟:应≤2 秒
-
GPU 利用率:应保持在 80%-95% 之间
8.2 性能优化建议
根据测试结果,以下是一些性能优化建议:
参数调整建议:
-
如果延迟过高,增加
--max-num-batched-tokens
值(如从 4096 增加到 8192) -
如果吞吐量不足,增加
--max-num-seqs
值(如从 20 增加到 25) -
如果出现 OOM 错误,降低
--max-num-seqs
和--max-num-batched-tokens
值 -
如果 GPU 利用率低,增加
--gpu-memory-utilization
值(如从 0.9 增加到 0.95)
硬件优化建议:
-
确保所有 GPU 通过 NVLink 互联,提高多 GPU 通信效率(21)
-
使用支持 ECC 的内存,提高系统稳定性
-
确保系统散热良好,避免 GPU 降频
-
考虑使用 H100 GPU 替代 A100,H100 提供更高的内存带宽和计算能力
软件优化建议:
-
升级到最新版本的 vllm 和 transformers 库
-
使用 FP8 量化技术,提高内存使用效率
-
启用推测解码(speculative decoding),提高吞吐量
-
使用异步 API 服务,提高并发处理能力
生产环境建议:
-
实施负载均衡,将请求分发到多个 vllm 实例
-
实现请求队列,平滑处理突发流量
-
实施限流和熔断机制,防止系统过载
-
定期监控和优化模型性能,随着负载变化调整参数
8.3 常见问题及解决方案
在部署和使用过程中,可能会遇到以下问题:
OOM(内存不足)错误:
-
原因:模型参数、KV 缓存或激活值超出 GPU 显存容量
-
解决方案:降低
--max-num-seqs
和--max-num-batched-tokens
值,启用量化技术,增加交换空间
响应延迟高:
-
原因:GPU 利用率低,批处理大小不合适,或模型优化不足
-
解决方案:增加
--max-num-batched-tokens
值,调整--tensor-parallel-size
,启用推测解码
吞吐量不足:
-
原因:批处理大小过小,并发请求数限制过低,或模型优化不足
-
解决方案:增加
--max-num-batched-tokens
和--max-num-seqs
值,启用异步 API 服务,调整调度策略
GPU 利用率低:
-
原因:模型并行度不足,批处理大小过小,或计算资源分配不均
-
解决方案:增加
--tensor-parallel-size
,调整--max-num-batched-tokens
,优化模型并行配置
API 服务不稳定:
-
原因:并发请求处理能力不足,资源竞争,或系统过载
-
解决方案:增加
--async-workers
值,实施负载均衡,实现请求队列,调整调度策略
九、总结与最佳实践
9.1 部署最佳实践
在 8 张 A100 80G 环境下部署 GLM4.5v 模型的最佳实践包括:
硬件配置最佳实践:
-
使用 8 张 A100 80GB PCIe GPU,通过 NVLink 互联
-
确保系统内存≥64GB,存储≥500GB
-
安装最新的 NVIDIA 驱动和 CUDA 工具包
-
确保系统散热和电源供应充足
软件配置最佳实践:
-
使用官方 vllm Docker 镜像,确保环境一致性
-
使用 FP16 精度和 FP8 KV 缓存,优化内存使用
-
设置
--tensor-parallel-size 8
,充分利用所有 GPU -
使用 Ray 作为分布式执行后端,支持高效的多 GPU 协作
-
启用推测解码和分块预填充,提高吞吐量和效率
参数配置最佳实践:
-
设置
--max-model-len 16384
,支持长上下文 -
设置
--max-num-seqs 20
,支持 10 人同时使用 -
设置
--max-num-batched-tokens 4096
,平衡吞吐量和延迟 -
设置
--gpu-memory-utilization 0.9
,优化 GPU 内存使用 -
设置
--scheduling-policy priority
,优化请求调度
性能优化最佳实践:
-
实施负载均衡,将请求分发到多个 vllm 实例
-
使用异步 API 服务,提高并发处理能力
-
启用监控和日志记录,及时发现和解决问题
-
定期测试和优化系统性能,适应负载变化
9.2 持续优化策略
为了确保系统性能持续满足业务需求,建议实施以下持续优化策略:
性能监控与分析:
-
建立全面的监控体系,监控 GPU 利用率、内存使用、延迟和吞吐量等指标
-
定期进行性能分析,识别系统瓶颈
-
使用 NVIDIA Nsight Compute 等工具进行 GPU 性能分析
参数调优周期:
-
建立定期的参数调优周期,根据负载变化调整配置
-
在业务高峰期前进行压力测试和参数优化
-
记录和分析参数调整的效果,建立优化知识库
模型更新与优化:
-
关注 vllm 和 GLM4.5v 模型的更新,及时应用性能优化
-
定期评估新模型版本的性能和准确性
-
考虑模型量化、剪枝等优化技术,提高部署效率
资源扩展策略:
-
建立明确的资源扩展策略,根据业务增长调整硬件资源
-
考虑混合部署模式,结合 CPU 和 GPU 资源
-
实施资源隔离,确保关键业务不受其他工作负载影响
故障排除与恢复:
-
建立完善的故障排除流程,快速识别和解决问题
-
实施灾难恢复计划,确保服务连续性
-
定期进行故障演练,验证恢复流程的有效性
通过遵循上述最佳实践和持续优化策略,您可以在 8 张 A100 80G 环境下高效部署 GLM4.5v 模型,满足 10 人同时高并发使用的需求,同时兼顾推理延迟和吞吐量,为用户提供优质的 AI 服务体验。
十、附录:参数参考表
10.1 关键参数参考表
以下是部署 GLM4.5v 模型的关键参数及其推荐值:
参数 | 推荐值 | 说明 |
---|---|---|
--tensor-parallel-size |
8 | 将模型参数分布到 8 个 GPU 上进行并行计算 |
--pipeline-parallel-size |
1 | 管道并行大小,设置为 1 表示不使用管道并行 |
--distributed-executor-backend |
ray | 使用 Ray 作为分布式执行后端 |
--worker-use-ray |
true | 指示工作进程使用 Ray 进行分布式执行 |
--dtype |
float16 | 使用 FP16 精度 |
--kv-cache-dtype |
fp8 | 使用 FP8 精度存储 KV 缓存 |
--quantization-param-path |
fp8_scales.json | FP8 缩放因子文件路径 |
--calculate-kv-scales |
true | 动态计算 KV 缓存缩放因子 |
--max-model-len |
16384 | 模型支持的最大上下文长度 |
--block-size |
16 | 连续 token 块的大小 |
--enable-prefix-caching |
true | 启用前缀缓存 |
--use-v2-block-manager |
true | 使用第二代块管理器 |
--swap-space |
16 | 每个 GPU 的交换空间大小(GB) |
--cpu-offload-gb |
0 | CPU 卸载的内存大小(GB),设置为 0 表示不卸载 |
--gpu-memory-utilization |
0.9 | GPU 内存利用率阈值 |
--max-num-batched-tokens |
4096 | 每次批处理的最大 token 数 |
--max-num-seqs |
20 | 最大并发序列数 |
--enable-chunked-prefill |
true | 启用分块预填充 |
--speculative-model |
ngram | 启用基于 n-gram 的推测解码 |
--num-speculative-tokens |
4 | 每次推测生成的 token 数 |
--speculative-disable-by-batch-size |
10 | 当批处理大小超过 10 时禁用推测解码 |
--scheduling-policy |
priority | 使用优先级调度策略 |
--api-type |
async | 使用异步 API 服务 |
--async-workers |
16 | 异步工作进程数 |
--prometheus-port |
8001 | Prometheus 指标服务器端口 |
--prometheus-block-addr |
0.0.0.0 | Prometheus 指标服务器监听地址 |
--prometheus-block-port |
8002 | Prometheus 块服务器端口 |
10.2 性能监控指标参考表
以下是需要监控的关键性能指标及其理想范围:
指标 | 理想范围 | 说明 |
---|---|---|
vllm_num_requests_running |
≤20 | 当前处理中的请求数,应≤--max-num-seqs |
vllm_gpu_utilization |
80%-95% | GPU 利用率,反映资源使用效率 |
vllm_model_latency_seconds |
≤1 秒(短查询) | 模型推理延迟,反映响应速度 |
vllm_throughput_tokens_per_second |
≥200 tokens / 秒 | 吞吐量,反映处理能力 |
vllm_memory_used_bytes |
≤72GB / 卡 | GPU 内存使用量,应≤--gpu-memory-utilization × 80GB |
vllm_scheduler_queue_length |
≤5 | 调度队列长度,反映系统负载 |
vllm_tokenization_latency_seconds |
≤0.1 秒 | 分词延迟,应尽可能低 |
vllm_detokenization_latency_seconds |
≤0.1 秒 | 反分词延迟,应尽可能低 |
通过正确配置和监控这些指标,您可以确保 GLM4.5v 模型在 8 张 A100 80G 环境下高效、稳定地运行,满足 10 人同时高并发使用的需求,兼顾推理延迟和吞吐量。
最后,需要强调的是,实际部署过程中可能需要根据具体硬件环境、模型版本和业务需求进行适当调整。建议在生产环境部署前进行充分的测试和优化,确保系统性能满足预期目标。
**参考资料 **
[1] Self-deployment guide https://docs.ai21.com/v4.1/docs/self-deployment
[2] Vllm Docker Install Guide https://www.restack.io/p/vllm-answer-docker-install-cat-ai
[3] Deploying AI With VLLM Frameworks https://www.restack.io/p/deploying-ai-with-vllm-frameworks-answer-cat-ai
[4] Vllm Kubernetes Integration Guide https://www.restack.io/p/vllm-answer-kubernetes-integration-cat-ai
[5] vllm部署模型的参数_–cpu-offload-gb-CSDN博客 https://blog.csdn.net/sunyuhua_keyboard/article/details/144150950
[6] vLLM部署Qwen2.5-Omni 提供API的详细步骤_qwen2.5-omni部署方法-CSDN博客 https://blog.csdn.net/AngelCryToo/article/details/147135457
[7] 如何在多卡部署vllm - CSDN文库 https://wenku.csdn.net/answer/3zw40q4uu3
[8] VLLM多卡并行优化策略_vllm tensor-parallel-size-CSDN博客 https://blog.csdn.net/qq_42969135/article/details/145921992
[9] vLLM 部署DeepSeek-R1 - MKY-门可意 - 博客园 https://www.cnblogs.com/menkeyi/p/18707043
[10] vLLM 推理模型API参数及配置详解-CSDN博客 https://blog.csdn.net/adminkeys/article/details/149999608
[11] Deploying Models With VLLM Framework https://www.restack.io/p/model-deployment-answer-vllm-framework-cat-ai
[12] Vllm Llm Documentation https://www.restack.io/p/vllm-answer-llm-documentation-cat-ai
[13] Vllm Docker Local Model Setup https://www.restack.io/p/vllm-answer-docker-local-model-cat-ai
[14] vLLM: Setting Up vLLM Locally and on Google Cloud for CPU https://www.datacamp.com/tutorial/vllm
[15] v LLM serving for text-only and multimodal language models on Cloud GPUs https://cloud.google.com/vertex-ai/generative-ai/docs/open-models/vllm/use-vllm
[16] Self-deployment guide https://docs.ai21.com/v4.2/docs/self-deployment
[17] 【开源新核弹】GLM-4.5V上线:42项基准屠榜,一键切换深度思考_一个程序员的故事 http://m.toutiao.com/group/7537538575220179466/?upstream_biz=doubao
[18] NVIDIA A100 TENSOR CORE GPU在各个(pdf) https://www.nvidia.cn/content/dam/en-zz/zh_cn/Solutions/Data-Center/a100/pdf/a100-80gb-datasheet-update-a4-nvidia-1485612-r13-web_zhCN.pdf
[19] GLM-4项目微调过程中显存不足问题的分析与解决方案 - GitCode博客 https://blog.gitcode.com/665f608e3924acd451f2a3b89bdb985e.html
[20] 大模型部署避坑指南:资源、速度与实战要点解析这篇文章主要教大家怎么计算大模型部署时需要的资源,像要多少显存,以及生成内容 - 掘金 https://juejin.cn/post/7534549098646700067
[23] LLMs之Agent:GLM-4.5的简介、安装和使用方法、案例应用之详细攻略-CSDN博客 https://blog.csdn.net/qq_41185868/article/details/149784201
[24] 麻省理工科技评论-智谱发布开源视觉推理模型GLM-4.5V,刷新41项多模态推理SOTA https://www.mittrchina.com/news/detail/15121
[25] 智谱的阳谋:深度解析GLM-4.5V开源及其对AI Agent王座的争夺 | 人人都是产品经理 https://www.woshipm.com/ai/6254130.html
[28] 智普视觉推理模型GLM-4.5V,41个视觉多模态榜单SOT 智谱新一代视觉推理模型GLM-4.5V,在 41个公开视觉多模态榜单中综合效果达到同级别开源模型 SOTA 性能,能处理图像、视频、复杂文档、GUI等多种图像输入,尤其擅长图像和视频理解推理、GUI Agent任务、复杂文档解析、视觉定位任务。-抖音 https://www.iesdouyin.com/share/video/7537644366660177191/?did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&from_aid=1128&from_ssr=1&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&mid=7537644389755685675®ion=&scene_from=dy_open_search_video&share_sign=h1V2sD9.zP0l6KJksPLEsFvezcZMDIuM0wznwoi.xzY-&share_version=280700&titleType=title&ts=1755231765&u_code=0&video_share_track_ver=&with_sec_did=1
[29] 本地部署GLM-4.5模型_glm4.5部署-CSDN博客 https://blog.csdn.net/ZuanShi1111/article/details/149910536
[30] 智谱发布GLM-4.5V,全球开源多模态推理新标杆,Day0推理微调实战教程到!-阿里云开发者社区 https://developer.aliyun.com/article/1677158
[31] 引擎参数 | vLLM 中文站 https://vllm.hyper.ai/docs/0.8.x/models/engine-arguments/
[32] 引擎参数 | vLLM 中文站 https://vllm.hyper.ai/docs/inference-and-serving/engine_args/
[33] vllm 参数分类 - xiezhengcai - 博客园 https://www.cnblogs.com/xiezhengcai/p/18808293
[34] vLLM参数设置及遇到问题和单模型运行的参数设置_vllm 启动参数-CSDN博客 https://blog.csdn.net/su_xiao_wei/article/details/145929312
(注:文档部分内容可能由 AI 生成)
更多推荐
所有评论(0)