在企业内网物理断网、禁止外网访问的安全管控下,无法在线拉取镜像、模型权重及依赖,常规云端部署方案不适用。
为了满足智能问答、知识库RAG、本地推理等业务对稳定性、低延迟、高并发和数据私密性的要求,本次基于企业GPU服务器集群,采用vLLM推理框架完成多模型统一部署优化,涵盖DeepSeek-V4-Flash、Qwen3-Embedding-8B等,适配不同业务场景。
全程采用Docker容器化离线部署,规避内网依赖缺失与环境兼容问题,并结合FP8 KV缓存、多卡张量并行+专家并行、CUDA Graph编译加速、MTP推测解码等vLLM高阶优化策略,提升GPU利用率与推理吞吐。
部署完成后,通过vLLM官方压测工具进行多并发压力测试,采集TPS、首token延迟、单token生成延迟、QPS、错误率等指标,完成性能校验与参数调优,最终搭建出一套可复用、高稳定、高性能的企业内网离线大模型服务架构。
本文作为个人实战的完整记录,覆盖了从环境准备、容器部署、参数调优到压力测试的全流程实战细节,为同类企业私有化大模型落地提供标准化参考。
离线环境前置准备
离线Docker镜像准备
内网无外网权限,无法在线pull镜像,需提前在外网机器拉取vLLM官方镜像并打包迁移:
-
外网拉取镜像:docker pull vllm/vllm-openai:latest -
镜像打包导出:docker save vllm/vllm-openai:latest -o vllm-openai-latest.tar -
将tar包迁移至内网服务器,执行导入:docker load -i vllm-openai-latest.tar
模型权重与分词器文件准备
提前下载完整模型权重、分词器配置文件,保证文件完整无缺失,统一存放至内网服务器固定目录,挂载至容器使用,全程离线加载:
-
必备模型包:DeepSeek-V4-Flash-0731、Qwen3-Embedding-8B、Qwen3.5-9B -
包含文件:模型权重文件、vocab词典、tokenizer配置、模型配置、推理脚本等全套文件 -
内网存放路径:统一防至/path/xxx目录,保证目录权限可读,后续容器只读挂载
端口与目录规划准备
提前规划端口与存储目录,避免端口冲突、目录权限不足问题:
-
端口规划:8000端口(DeepSeek主模型)、8001端口(向量模型)、8003端口(Qwen3.5-9B模型),提前确认端口未被占用 -
目录规划:提前创建模型挂载目录、压测结果保存目录/path/model,配置读写权限 -
服务配置:服务器开放网卡访问权限,支持内网其他机器调用模型API接口
部署Deepseek-v4-flash
sudo docker rm -f vllm-deepseek 2>/dev/null && sudo docker run -d \--name vllm-deepseek \--gpus '"device=0,1,2,3"' \--ipc=host \-v /path/deepseek-ai/DeepSeek-V4-Flash-0731:/model/DeepSeek-V4-Flash-0731:ro \-e CUDA_VISIBLE_DEVICES=0,1,2,3 \-e TRANSFORMERS_OFFLINE=1 \-p 8000:8000 \vllm/vllm-openai:latest \/model/DeepSeek-V4-Flash-0731 \--served-model-name deepseek-v4-flash \--host 0.0.0.0 \--port 8000 \--kv-cache-dtype fp8 \--tensor-parallel-size 4 \--max-model-len 250000 \--max-num-seqs 50 \--enable-expert-parallel \--gpu-memory-utilization 0.95 \--enable-auto-tool-choice \--tool-call-parser deepseek_v4 \--tokenizer-mode deepseek_v4 \--reasoning-parser deepseek_v4 \--trust-remote-code
自动清理旧容器,在 4 卡 GPU 上用 vLLM 部署 DeepSeek-V4-Flash MoE 大模型,开启 FP8 KV 缓存、张量并行 + 专家并行,支持 25 万长上下文与工具调用,对外暴露 OpenAI 兼容 API 在 8000 端口,离线不联网。
容器管理参数
| 参数 | 作用 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Docker 容器配置参数
| 参数 | 含义 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vLLM 推理参数
| 参数 | 含义 |
|---|---|
/model/DeepSeek-V4-Flash-0731 |
|
--served-model-name deepseek-v4-flash |
|
--host 0.0.0.0 --port 8000 |
|
--kv-cache-dtype fp8 |
|
--tensor-parallel-size 4 |
|
--max-model-len 250000 |
|
--max-num-seqs 50 |
|
--enable-expert-parallel |
|
--gpu-memory-utilization 0.95 |
|
--enable-auto-tool-choice |
|
--tool-call-parser deepseek_v4 |
|
--tokenizer-mode deepseek_v4 |
|
--reasoning-parser deepseek_v4 |
|
--trust-remote-code |
|
参数分类汇总
| 类别 | 涉及参数 | 核心作用 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
效果测试
curl http://1x.x.x.x:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"deepseek-v4-flash", "messages":[{"role":"user", "content": "你好,介绍一下你自己"}]}'
部署Deepseek-v4-flash:性能优化
sudo docker rm -f vllm-deepseek 2>/dev/null && sudo docker run -d \--name vllm-deepseek \--gpus '"device=0,1,2,3"' \--ipc=host \-v /path/DeepSeek-V4-Flash:/model/DeepSeek-V4-Flash:ro \-e CUDA_VISIBLE_DEVICES=0,1,2,3 \-e TRANSFORMERS_OFFLINE=1 \-p 8000:8000 \vllm/vllm-openai:latest \/model/DeepSeek-V4-Flash \--served-model-name deepseek-v4-flash \--host 0.0.0.0 \--port 8000 \--kv-cache-dtype fp8 \--tensor-parallel-size 4 \--max-model-len 250000 \--max-num-seqs 50 \--enable-expert-parallel \--gpu-memory-utilization 0.95 \--compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}' \--enable-auto-tool-choice \--tool-call-parser deepseek_v4 \--tokenizer-mode deepseek_v4 \--reasoning-parser deepseek_v4 \--trust-remote-code \--speculative_config '{"method":"mtp","num_speculative_tokens":1}'
参数解释
| 参数分类 | 参数 | 说明 |
|---|---|---|
| 前置清理 |
|
|
| Docker 容器基础 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| vLLM 模型基础 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 显存 & 并行策略 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 性能加速(新增) |
|
|
|
|
|
|
| 工具调用 & 安全 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
压力测试
docker exec -it vllm-deepseek vllm bench serve \--backend openai \--base-url http://1x.x.x.x:8000 \--model /model/Deepseek-V4-Flash-0731 \--tokenizer /model/Deepseek-V4-Flash-0731 \--endpoint /v1/chat/completions \--dataset-name random \--random-input-len 1024 \--random-output-len 512 \--num-prompts 40 \--max-concurrency 8 \--request-rate inf \--save-result \--result-dir /path/AI**
在 vLLM 的容器里,对在线 Deepseek-V4-Flash 模型服务做并发压测。构造 40 条请求,每条输入 1024 token、输出 512 token,最大并发 8,尽可能持续发请求,最后把吞吐、延迟等性能指标保存到磁盘。
vllm bench serve 是 vLLM 自带的服务压测工具,用来对一个已经启动好的 OpenAI 兼容接口做并发性能测试,统计:
-
TPS(每秒 token 吞吐) -
首 token 延迟、后续 token 延迟 -
并发下的 QPS、错误率等指标
参数解释
| 参数 | 含义 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
示例控制台打印样例
-------------- Serving Benchmark Result --------------Successful requests: 40Failed requests: 0Request throughput (req/s): 2.1Output token throughput (tok/s): 1080Total token throughput (tok/s): 3250------------ Time To First Token ------------Mean TTFT (ms): 142Median TTFT (ms): 136P99 TTFT (ms): 215------------ Time Per Output Token -----------Mean TPOT (ms): 0.89Median TPOT (ms): 0.87P99 TPOT (ms): 1.12
向量化模型部署
Qwen3-Embedding-8B 部署
sudo docker rm -f vllm-qwenembedding 2>/dev/null && sudo docker run -d \--name vllm-qwenembedding \--gpus '"device=5"' \--ipc=host \-v /path/Qwen3-Embedding-8B:/model/Qwen3-Embedding-8B:ro \-e VLLM_ENABLE_CUDA_COMPATIBILITY=1 \-p 8001:8000 \--restart unless-stopped \vllm/vllm-openai:latest \/model/Qwen3-Embedding-8B \--served-model-name qwen3-embedding-8B \--host 0.0.0.0 \--port 8000 \--runner pooling \--trust-remote-code \--max-model-len 8192 \--max-num-seqs 100 \--gpu-memory-utilization 0.5 \--tensor-parallel-size 1 \--enforce-eager
在 5 号单张 GPU 上,用 vLLM 部署通义千问 Qwen3-Embedding-8B 向量嵌入模型,对外提供 OpenAI 兼容的 Embedding 向量接口,端口宿主机 8001,用于 RAG 知识库的文本向量化。
| 参数 | 参数值 | 作用说明 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
核心参数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Qwen3.5-9B 部署
sudo docker rm -f vllm-qwen3_5 2>/dev/null && sudo docker run -d \--name vllm-qwen3_5 \--gpus '"device=6"' \--ipc=host \-v /path/Qwen3.5-9B:/model/Qwen3.5-9B:ro \-e VLLM_ENABLE_CUDA_COMPATIBILITY=1 \-p 8003:8000 \--restart unless-stopped \vllm/vllm-openai:latest \/model/Qwen3.5-9B \--served-model-name qwen3.5-9B \--host 0.0.0.0 \--port 8000 \--tensor-parallel-size 1 \--data-parallel-size 1 \--max-model-len 200000 \--max-num-seqs 50 \--gpu-memory-utilization 0.6 \--enable-prefix-caching \--trust-remote-code
在 6 号单卡 GPU 上,使用 vLLM 部署 Qwen3.5-9B 大语言模型,对外提供 OpenAI 兼容对话 API,宿主机访问端口 8003,开启前缀缓存加速长上下文场景,作为独立对话模型服务。
| 参数分类 | 参数 | 说明 |
|---|---|---|
| Docker 容器基础 |
|
|
|
|
|
|
|
|
|
|
|
|
|
ro只读,保护模型文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| vLLM 模型与 API |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 并行策略 |
|
|
|
|
|
|
| 上下文 & 并发 |
|
|
|
|
|
|
| 显存 & 加速 |
|
|
|
|
|
|
| 安全选项 |
|
|

