vLLM 是当前最流行的大模型推理加速框架之一,通过 PagedAttention、连续批处理等技术显著提升推理吞吐量。但默认启动参数并不适配所有业务场景,盲目使用可能导致 GPU 显存浪费、队列积压、OOM 崩溃或性能不达预期。
运维人员在部署 vLLM 时经常遇到这些问题:启动后显存占用过高导致无法部署多个服务、并发处理能力不符合预期、队列堆积严重、某些请求被拒绝、GPU 利用率低但吞吐量仍不足。这些问题往往源于启动参数配置不当。
本文面向已部署或即将部署 vLLM 推理服务的运维工程师和 SRE,梳理 vLLM 常用启动参数的含义、默认值、适用场景、调整依据和风险点,帮助根据实际业务特点调优配置。
明确业务特点:
了解硬件环境:
确定性能目标:
bash
python -m vllm.entrypoints.openai.api_server --help 预期输出(部分):
usage: api_server.py [-h] --model MODEL [--tokenizer TOKENIZER] [--revision REVISION] [--tokenizer-revision TOKENIZER_REVISION] [--tokenizer-mode {auto,slow}] [--trust-remote-code] [--download-dir DOWNLOAD_DIR] [--load-format {auto,pt,safetensors,npcache,dummy}] [--dtype {auto,half,float16,bfloat16,float,float32}] [--kv-cache-dtype {auto,fp8}] [--max-model-len MAX_MODEL_LEN] [--guided-decoding-backend {outlines,lm-format-enforcer}] [--worker-use-ray] [--pipeline-parallel-size PIPELINE_PARALLEL_SIZE] [--tensor-parallel-size TENSOR_PARALLEL_SIZE] [--max-parallel-loading-workers MAX_PARALLEL_LOADING_WORKERS] [--block-size BLOCK_SIZE] [--seed SEED] [--swap-space SWAP_SPACE] [--gpu-memory-utilization GPU_MEMORY_UTILIZATION] [--max-num-batched-tokens MAX_NUM_BATCHED_TOKENS] [--max-num-seqs MAX_NUM_SEQS] ... 含义:模型路径或 HuggingFace 模型标识。
默认值:无,必填参数。
示例:
bash
--model /models/llama-2-7b-chat --model meta-llama/Llama-2-7b-chat-hf 调整建议:
含义:模型推理时使用的数据类型。
默认值:auto(自动检测模型配置中的 dtype)。
可选值:auto、half、float16、bfloat16、float、float32。
示例:
bash
--dtype bfloat16 --dtype float16 调整建议:
float16:适合大多数 GPU,显存占用是 float32 的一半bfloat16:适合 A100、H100 等支持 BF16 的 GPU,数值稳定性优于 float16float32:精度最高但显存占用大,一般不推荐auto:让 vLLM 根据模型配置自动选择,通常是合理的默认值判断逻辑:
bfloat16float16含义:张量并行度,将模型参数分布到多个 GPU 上。
默认值:1(不使用张量并行)。
示例:
bash
--tensor-parallel-size 2 --tensor-parallel-size 4 调整建议:
判断逻辑:
--tensor-parallel-size 2 或更多验证方式:
bash
python -m vllm.entrypoints.openai.api_server --model /models/llama-2-70b --tensor-parallel-size 2 nvidia-smi 检查每张 GPU 显存占用是否均衡。
含义:vLLM 可以使用的 GPU 显存比例。
默认值:0.9(90%)。
取值范围:0.0 - 1.0。
示例:
bash
--gpu-memory-utilization 0.85 --gpu-memory-utilization 0.95 调整建议:
判断逻辑:
gpu-memory-utilization风险提醒:
验证方式:
bash
nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits curl -s http://localhost:8000/metrics | grep gpu_cache_usage_perc 含义:最大并发序列数,即同时处理的请求数上限。
默认值:256。
示例:
bash
--max-num-seqs 128 --max-num-seqs 512 调整建议:
判断逻辑:
gpu-memory-utilization 和输入输出长度相关,需要综合考虑典型场景:
| 场景 | 推荐值 | 原因 |
|---|---|---|
| 实时对话(短输入输出) | 256 - 512 | 单个请求显存占用小,可以高并发 |
| 长文本生成(长输出) | 64 - 128 | 单个请求显存占用大,降低并发避免 OOM |
| 批量离线处理 | 128 - 256 | 平衡吞吐量和资源占用 |
验证方式:
bash
curl -s http://localhost:8000/metrics | grep num_requests_running curl -s http://localhost:8000/metrics | grep num_requests_waiting
如果 num_requests_running 长期等于 max-num-seqs 且 num_requests_waiting > 0,说明并发能力不足。
含义:模型支持的最大上下文长度(输入 + 输出 tokens 总和)。
默认值:模型配置中的 max_position_embeddings 或 max_sequence_length。
示例:
bash
--max-model-len 4096 --max-model-len 8192 调整建议:
判断逻辑:
--max-model-len 2048 节省显存风险提醒:
验证方式:
检查业务日志中是否有请求因长度超限被拒绝:
bash
docker logs vllm-container 2>&1 | grep -i "exceed|too long|length" 含义:KV Cache 的块大小,单位是 token 数。
默认值:16。
可选值:8、16、32。
示例:
bash
--block-size 16 --block-size 32 调整建议:
判断逻辑:
16 即可风险提醒:
含义:CPU 内存用于 KV Cache 换出的空间大小,单位 GB。
默认值:4(4GB)。
示例:
bash
--swap-space 8 --swap-space 0 调整建议:
判断逻辑:
swap-space 或调低 max-num-seqs风险提醒:
含义:单个批次中最大 token 数量(包括所有请求的输入和已生成的输出)。
默认值:根据 max-model-len 自动计算。
示例:
bash
--max-num-batched-tokens 8192 --max-num-batched-tokens 16384 调整建议:
判断逻辑:
风险提醒:
含义:禁用详细的请求日志。
默认值:不禁用(会记录每个请求的详细信息)。
示例:
bash
--disable-log-requests 调整建议:
判断逻辑:
含义:是否信任并执行模型仓库中的自定义代码。
默认值:不信任(不执行自定义代码)。
示例:
bash
--trust-remote-code 调整建议:
判断逻辑:
ValueError: The model ... requires custom code,需要启用该选项风险提醒:
含义:API 服务监听的地址和端口。
默认值:--host 0.0.0.0 --port 8000。
示例:
bash
--host 127.0.0.1 --port 8001 --host 0.0.0.0 --port 8000 调整建议:
判断逻辑:
0.0.0.0含义:指定 tokenizer 路径,可以与模型路径不同。
默认值:使用与 --model 相同的路径。
示例:
bash
--tokenizer /tokenizers/custom-tokenizer 调整建议:
含义:量化方法。
默认值:None(不使用量化)。
可选值:awq、gptq、squeezellm、fp8。
示例:
bash
--quantization awq --quantization fp8 调整建议:
判断逻辑:
风险提醒:
业务特点:
推荐参数:
bash
python -m vllm.entrypoints.openai.api_server --model /models/llama-2-7b-chat --dtype bfloat16 --gpu-memory-utilization 0.90 --max-model-len 2048 --max-num-seqs 256 --max-num-batched-tokens 8192 --host 0.0.0.0 --port 8000 --disable-log-requests --trust-remote-code 参数说明:
max-model-len 2048:输入输出总和通常 < 500,2048 足够,节省显存max-num-seqs 256:允许高并发,降低排队时间max-num-batched-tokens 8192:适中的批处理大小,平衡延迟和吞吐业务特点:
推荐参数:
bash
python -m vllm.entrypoints.openai.api_server --model /models/llama-2-13b --dtype bfloat16 --gpu-memory-utilization 0.92 --max-model-len 8192 --max-num-seqs 64 --max-num-batched-tokens 16384 --host 0.0.0.0 --port 8000 --disable-log-requests 参数说明:
max-model-len 8192:支持长文本输入输出max-num-seqs 64:单个请求显存占用大,降低并发数避免 OOMmax-num-batched-tokens 16384:更大的批处理提升吞吐量业务特点:
推荐参数:
模型 1:
bash
python -m vllm.entrypoints.openai.api_server --model /models/llama-2-7b --gpu-memory-utilization 0.45 --port 8000 --disable-log-requests 模型 2:
bash
python -m vllm.entrypoints.openai.api_server --model /models/codellama-7b --gpu-memory-utilization 0.45 --port 8001 --disable-log-requests 参数说明:
业务特点:
推荐参数:
bash
python -m vllm.entrypoints.openai.api_server --model /models/llama-2-70b --tensor-parallel-size 4 --dtype bfloat16 --gpu-memory-utilization 0.90 --max-num-seqs 128 --host 0.0.0.0 --port 8000 --disable-log-requests 参数说明:
tensor-parallel-size 4:将模型分布到 4 张 GPU验证方式:
bash
nvidia-smi 检查 4 张 GPU 显存占用是否均衡,利用率是否接近。
bash
python -m vllm.entrypoints.openai.api_server --model /models/llama-2-7b-chat --dtype bfloat16 --gpu-memory-utilization 0.90 --max-num-seqs 256 --host 0.0.0.0 --port 8000 --disable-log-requests 等待模型加载完成,观察以下信息:
INFO: Model loaded. INFO: GPU memory utilization: 0.90 INFO: Max num seqs: 256 INFO: Max model len: 4096 INFO: KV cache blocks: 12345 关键信息:
KV cache blocks:可用的 KV Cache 块数,反映并发能力bash
nvidia-smi 预期输出:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.125.06 Driver Version: 525.125.06 CUDA Version: 12.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA A100-SXM... On | 0000000004.0 Off | 0 | | N/A 32C P0 58W / 400W | 36000MiB / 81920MiB | 0% Default | | | | Disabled | +-------------------------------+----------------------+----------------------+ 判断逻辑:
gpu-memory-utilization 过高或模型过大bash
curl -s http://localhost:8000/metrics | grep -E "gpu_cache|num_requests" 预期输出:
vllm:gpu_cache_usage_perc{model_name="llama-2-7b-chat"} 0.0 vllm:num_requests_running{model_name="llama-2-7b-chat"} 0 vllm:num_requests_waiting{model_name="llama-2-7b-chat"} 0 初始状态 KV Cache 使用率为 0,没有正在运行或等待的请求,符合预期。
使用压测工具模拟业务负载,观察性能指标。
bash
cat > /tmp/load_test.py << 'EOF' import asyncio import aiohttp import time import statistics async def send_request(session, url, prompt, max_tokens): start = time.time() payload = { "model": "llama-2-7b-chat", "prompt": prompt, "max_tokens": max_tokens, "temperature": 0.7 } async with session.post(url, json=payload) as resp: result = await resp.json() duration = time.time() - start return duration async def main(): url = "http://localhost:8000/v1/completions" prompt = "Hello, how are you?" * 10 max_tokens = 100 concurrency = 50 total_requests = 200 async with aiohttp.ClientSession() as session: tasks = [] for i in range(total_requests): task = send_request(session, url, prompt, max_tokens) tasks.append(task) if len(tasks) >= concurrency: await asyncio.sleep(0.1) latencies = await asyncio.gather(*tasks) print(f"Total requests: {len(latencies)}") print(f"Mean latency: {statistics.mean(latencies):.2f}s") print(f"P50 latency: {statistics.median(latencies):.2f}s") print(f"P90 latency: {statistics.quantiles(latencies, n=10)[8]:.2f}s") print(f"P99 latency: {statistics.quantiles(latencies, n=100)[98]:.2f}s") if __name__ == "__main__": asyncio.run(main()) EOF python /tmp/load_test.py 在压测过程中,实时观察:
bash
watch -n 1 "curl -s http://localhost:8000/metrics | grep -E 'num_requests_running|num_requests_waiting|gpu_cache_usage_perc' | grep -v '#'" 预期输出:
vllm:num_requests_running{model_name="llama-2-7b-chat"} 48 vllm:num_requests_waiting{model_name="llama-2-7b-chat"} 12 vllm:gpu_cache_usage_perc{model_name="llama-2-7b-chat"} 0.65 判断逻辑:
| 指标表现 | 结论 | 调整方向 |
|---|---|---|
num_requests_running 接近 max-num-seqs |
并发已满 |
如果队列长,考虑调高 max-num-seqs |
num_requests_running 远低于 max-num-seqs |
并发未满 | 请求到达率低或被其他瓶颈限制 |
num_requests_waiting 持续 > 50 |
排队严重 |
调高 max-num-seqs 或增加副本 |
gpu_cache_usage_perc > 0.9 |
KV Cache 接近满载 |
降低 max-num-seqs 或调高 gpu-memory-utilization |
gpu_cache_usage_perc < 0.3 |
KV Cache 利用率低 | 可能请求到达率低或输入输出较短 |
bash
watch -n 1 nvidia-smi 判断逻辑:
现象:
vllm 256 vllm 120 vllm 0.68 分析:并发数已达上限,但 KV Cache 还有空间,可以提升并发。
调整方案:
bash
--max-num-seqs 384 重启服务,重新压测验证。
现象:
vllm 256 vllm 0.97 日志中出现:
WARNING: Request rejected: insufficient KV cache space 分析:显存分配给 KV Cache 的空间不足。
调整方案:
方案一:降低并发数
bash
--max-num-seqs 192 方案二:提高显存使用比例(如果 GPU 上只有这一个服务)
bash
--gpu-memory-utilization 0.95 方案三:降低最大上下文长度(如果业务允许)
bash
--max-model-len 2048 现象:
histogram_quantile(0.99, vllm:time_to_first_token_seconds_bucket) = 2.5s 分析:首字延迟高,可能是批处理过大或排队严重。
调整方案:
方案一:降低批处理 token 数
bash
--max-num-batched-tokens 4096 方案二:降低并发数,减少排队
bash
--max-num-seqs 128 现象:
GPU 利用率: 45% TPS: 30 tokens/s 队列长度: 80 分析:GPU 算力没有充分利用,可能批处理不够大或存在其他瓶颈。
调整方案:
方案一:提高批处理 token 数
bash
--max-num-batched-tokens 16384 方案二:检查 CPU 瓶颈
bash
top -b -n 1 | grep python 如果 CPU 使用率 > 90%,可能是 tokenization 或预处理成为瓶颈,考虑优化或增加 CPU 核心数。
方案三:检查 I/O 瓶颈
bash
iostat -x 1 5
如果 %util > 80%,可能是日志写入或模型加载成为瓶颈。
bash
python -c "import vllm; print(vllm.__version__)" bash
ls -lh /models/llama-2-7b-chat du -sh /models/llama-2-7b-chat bash
ps aux | grep vllm pstree -p $(pgrep -f vllm) bash
ps aux | grep vllm | grep -oP -- '--[a-z-]+ [^ ]+' | head -20 bash
curl http://localhost:8000/v1/models curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{ "model": "llama-2-7b-chat", "prompt": "Hello", "max_tokens": 50 }' | jq bash
watch -n 1 "curl -s http://localhost:8000/metrics | grep -E 'num_requests_running|num_requests_waiting|gpu_cache_usage_perc|time_to_first_token' | grep -v '#'"
创建 /etc/systemd/system/vllm.service:
ini
[Unit] Description=vLLM Inference Server After=network.target [Service] Type=simple User=vllm Group=vllm WorkingDirectory=/opt/vllm Environment="CUDA_VISIBLE_DEVICES=0" ExecStart=/opt/vllm/venv/bin/python -m vllm.entrypoints.openai.api_server --model /models/llama-2-7b-chat --dtype bfloat16 --gpu-memory-utilization 0.90 --max-num-seqs 256 --max-model-len 4096 --host 0.0.0.0 --port 8000 --disable-log-requests Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target 启动服务:
bash
systemctl daemon-reload systemctl start vllm systemctl enable vllm systemctl status vllm yaml
version: '3.8' services: vllm: image: vllm/vllm-openai:latest container_name: vllm-server runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=0 volumes: - /data/models:/models:ro ports: - "8000:8000" command: - --model - /models/llama-2-7b-chat - --dtype - bfloat16 - --gpu-memory-utilization - "0.90" - --max-num-seqs - "256" - --max-model-len - "4096" - --host - "0.0.0.0" - --port - "8000" - --disable-log-requests restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] 启动:
bash
docker-compose up -d docker-compose logs -f vllm yaml
apiVersion: apps/v1 kind: Deployment metadata: name: vllm-deployment namespace: inference spec: replicas: 2 selector: matchLabels: app: vllm template: metadata: labels: app: vllm spec: containers: - name: vllm image: vllm/vllm-openai:latest args: - --model - /models/llama-2-7b-chat - --dtype - bfloat16 - --gpu-memory-utilization - "0.90" - --max-num-seqs - "256" - --max-model-len - "4096" - --host - "0.0.0.0" - --port - "8000" - --disable-log-requests ports: - containerPort: 8000 name: http resources: limits: nvidia.com/gpu: 1 memory: 64Gi requests: nvidia.com/gpu: 1 memory: 32Gi volumeMounts: - name: model-storage mountPath: /models readOnly: true livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 300 periodSeconds: 30 readinessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 60 periodSeconds: 10 volumes: - name: model-storage persistentVolumeClaim: claimName: model-pvc --- apiVersion: v1 kind: Service metadata: name: vllm-service namespace: inference spec: selector: app: vllm ports: - protocol: TCP port: 8000 targetPort: 8000 type: ClusterIP bash
journalctl -u vllm.service -f docker logs -f vllm-container kubectl logs -f deployment/vllm -n inference 关键日志行:
INFO: Model loaded. INFO: GPU memory utilization: 0.90 INFO: Max num seqs: 256 INFO: Max model len: 4096 INFO: KV cache blocks: 12345 INFO: Server started at http://0.0.0.0:8000
如果未启用 --disable-log-requests,每个请求会产生日志:
INFO: Request ID: abc123, prompt_tokens: 45, completion_tokens: 120, ttft: 0.234s, total_latency: 2.456s 统计延迟分布:
bash
grep "ttft:" /var/log/vllm.log | awk '{print $NF}' | sed 's/s$//' | sort -n | awk ' { sum += $1; count++; arr[count] = $1 } END { print "Count:", count print "Mean:", sum/count print "P50:", arr[int(count*0.5)] print "P90:", arr[int(count*0.9)] print "P99:", arr[int(count*0.99)] } ' bash
grep -i "error|warning|failed|reject" /var/log/vllm.log docker logs vllm-container 2>&1 | grep -i "error|oom|cuda" 常见错误:
CUDA out of memory:显存不足,降低 gpu-memory-utilization 或 max-num-seqsRequest rejected: insufficient KV cache space:KV Cache 不足,调整相关参数Model loading failed:模型文件损坏或路径错误现象:
RuntimeError: CUDA out of memory. Tried to allocate X GB (GPU 0; Y GB total capacity) 排查步骤:
bash
nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 模型参数量 * dtype字节数 * 1.2(额外开销) 例如 Llama-2-7B + bfloat16:
7B * 2 bytes * 1.2 = 16.8 GB 方案一:降低显存使用比例
bash
--gpu-memory-utilization 0.80 方案二:使用量化模型
bash
--quantization awq 方案三:使用张量并行
bash
--tensor-parallel-size 2 现象:
vllm 150 vllm 256 排查步骤:
bash
curl -s http://localhost:8000/metrics | grep gpu_cache_usage_perc max-num-seqs:bash
--max-num-seqs 384 如果 KV Cache > 95%,说明显存已满,需要扩容或降低并发
检查 GPU 利用率:
bash
nvidia-smi 现象:
histogram_quantile(0.99, vllm:time_to_first_token_seconds_bucket) > 2s 排查步骤:
bash
curl -s http://localhost:8000/metrics | grep num_requests_waiting 如果队列长,说明排队时间长,需要提升并发能力或增加副本。
bash
ps aux | grep vllm | grep max-num-batched-tokens 如果过大,考虑降低:
bash
--max-num-batched-tokens 4096 bash
grep "prompt_tokens" /var/log/vllm.log | awk '{print $4}' | sort -n | uniq -c 如果输入普遍很长,TTFT 高是正常现象。
现象:
sum(rate(vllm:generation_tokens_total[5m])) < 50 排查步骤:
bash
nvidia-smi bash
--max-num-batched-tokens 16384 bash
nvidia-smi --query-gpu=clocks.current.graphics,clocks.max.graphics --format=csv bash
ps aux | grep vllm | grep dtype 如果使用 float32,改为 bfloat16 或 float16。
高风险操作:
max-num-seqs、gpu-memory-utilization 后重启服务tensor-parallel-size 后无法启动操作前检查:
风险场景:
gpu-memory-utilization 设置过高(> 0.98)max-num-seqs 设置过高max-model-len 设置过高预防措施:
风险场景:
max-num-seqs 调整过高,KV Cache 不足,请求被拒绝max-num-batched-tokens 调整过低,GPU 利用率下降预防措施:
风险场景:
预防措施:
启动后检查日志:
bash
journalctl -u vllm.service | grep "Max num seqs|GPU memory utilization|Max model len" 预期输出:
INFO: Max num seqs: 256 INFO: GPU memory utilization: 0.90 INFO: Max model len: 4096 发送并发请求,观察有多少请求同时运行:
bash
for i in {1..300}; do curl -s http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"model":"llama-2-7b","prompt":"Test","max_tokens":50}' & done sleep 2 curl -s http://localhost:8000/metrics | grep num_requests_running 预期输出:
vllm:num_requests_running{model_name="llama-2-7b"} 256
如果等于或接近 max-num-seqs,说明参数生效。
bash
nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits curl -s http://localhost:8000/metrics | grep gpu_cache_usage_perc 计算显存使用率:
显存使用率 = memory.used / memory.total
应接近 gpu-memory-utilization 设置值。
bash
cp /etc/systemd/system/vllm.service /etc/systemd/system/vllm.service.backup vi /etc/systemd/system/vllm.service systemctl daemon-reload systemctl restart vllm systemctl status vllm bash
cp docker-compose.yml docker-compose.yml.backup vi docker-compose.yml docker-compose down docker-compose up -d docker-compose logs -f vllm bash
kubectl rollout undo deployment/vllm-deployment -n inference kubectl rollout status deployment/vllm-deployment -n inference 生产环境参数变更应遵循以下流程:
示例配置文件 /etc/vllm/config.json:
json
{ "model": "/models/llama-2-7b-chat", "dtype": "bfloat16", "gpu_memory_utilization": 0.90, "max_num_seqs": 256, "max_model_len": 4096, "host": "0.0.0.0", "port": 8000, "disable_log_requests": true } 启动时加载:
bash
python -m vllm.entrypoints.openai.api_server --config /etc/vllm/config.json (注意:vLLM 可能不支持 JSON 配置文件,需要将配置转换为命令行参数)
生产环境建议部署多个副本,提升可用性和吞吐量。
负载均衡配置(Nginx):
nginx
upstream vllm_backend { least_conn; server 192.168.1.101:8000 max_fails=3 fail_timeout=30s; server 192.168.1.102:8000 max_fails=3 fail_timeout=30s; server 192.168.1.103:8000 max_fails=3 fail_timeout=30s; } server { listen 80; server_name vllm.example.com; location / { proxy_pass http://vllm_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 300s; } } 参数变更时,先在部分副本上变更,观察效果后再全量发布。
bash
kubectl set image deployment/vllm-deployment vllm=vllm/vllm-openai:new-config -n inference kubectl rollout pause deployment/vllm-deployment -n inference # 观察 10 分钟 kubectl rollout resume deployment/vllm-deployment -n inference 参数调优是一个持续迭代的过程:
max-num-seqs、max-model-lengpu-memory-utilization、max-num-batched-tokens为关键参数配置告警:
在满足性能要求的前提下,优化资源使用:
max-model-len 节省显存--trust-remote-code 的使用,仅在必要时启用vLLM 启动参数的调整是一个基于业务特点和硬件环境的定制化过程。核心要点包括:
理解参数含义:每个参数都对应推理流程中的某个环节,理解其作用才能合理调整
明确业务特点:输入输出长度、并发模式、延迟要求决定了参数配置方向
从默认值开始:默认参数适合大多数场景,先观察瓶颈再调整
逐个调整验证:每次只调整一个参数,避免多参数叠加难以定位问题
关键参数:gpu-memory-utilization、max-num-seqs、max-model-len 是最核心的调优参数
权衡取舍:显存、延迟、吞吐量之间需要权衡,没有完美的配置
持续优化:随着业务发展和数据积累,参数配置需要持续调整
风险管控:参数变更可能导致服务不可用,需要测试、备份、灰度发布
在实际操作中,参数调优不是一劳永逸的,需要结合监控数据和业务反馈持续迭代。同时,参数配置应该文档化、版本化,避免人为失误和知识流失。
最后,参数调优的目标是在满足业务需求的前提下,最大化资源利用效率。不要盲目追求极致性能,而忽略了稳定性和可维护性。一个稳定、可预测、易于调试的系统,比一个性能极致但脆弱的系统更有价值。
全部0条评论
快来发表一下你的评论吧 !