04 场景演算S0 production plan
04 · M3 机器 · 小型模型舰队
04 · M3 机器 · 小型模型舰队
定位
多副本单卡跑 8 个小模型,覆盖 embedding、代码、视觉、快速对话。同时兼任 NFS 模型仓库主机。
- 单机 8×5090,每卡跑一个模型
- 类型多样,服务不同客户需求
- 定价:¥0.5-2/M(低价挡)
部署清单(每卡一个)
| GPU | 模型 | 用途 | 端口 |
|---|---|---|---|
| 0 | BGE-M3 | 多语言嵌入 | 8010 |
| 1 | Qwen3-Embedding-4B | 大嵌入(可选) | 8011 |
| 2 | BGE-reranker-v2-m3 | 精排 | 8012 |
| 3 | Qwen2.5-7B-Instruct-AWQ | 快速对话 | 8013 |
| 4 | Qwen2.5-Coder-7B-Instruct | 代码 | 8014 |
| 5 | DeepSeek-Coder-V2-Lite-Instruct | 代码 MoE | 8015 |
| 6 | Qwen2-VL-7B-Instruct | 视觉对话 | 8016 |
| 7 | GLM-4-9B-Chat | GLM 备选 | 8017 |
启动配置
GPU 0 · BGE-M3 嵌入
用 vLLM 的 embedding 端点:
CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server \
--model /models/bge-m3 \
--served-model-name bge-m3 \
--task embed \
--max-model-len 8192 \
--gpu-memory-utilization 0.80 \
--port 8010或用 TEI(Hugging Face Text Embeddings Inference,更轻):
docker run --gpus '"device=0"' -p 8010:80 \
-v /models/bge-m3:/data \
ghcr.io/huggingface/text-embeddings-inference:latest \
--model-id /data \
--dtype float16 \
--max-batch-tokens 65536GPU 3 · Qwen2.5-7B AWQ
CUDA_VISIBLE_DEVICES=3 python -m vllm.entrypoints.openai.api_server \
--model /models/Qwen2.5-7B-Instruct-AWQ \
--served-model-name qwen2.5-7b \
--tensor-parallel-size 1 \
--quantization awq \
--max-model-len 8192 \
--gpu-memory-utilization 0.85 \
--enable-prefix-caching \
--max-num-seqs 256 \
--port 8013GPU 4 · Qwen2.5-Coder-7B
CUDA_VISIBLE_DEVICES=4 python -m vllm.entrypoints.openai.api_server \
--model /models/Qwen2.5-Coder-7B-Instruct \
--served-model-name qwen-coder-7b \
--tensor-parallel-size 1 \
--dtype float16 \
--max-model-len 16384 \
--gpu-memory-utilization 0.88 \
--enable-prefix-caching \
--port 8014GPU 5 · DeepSeek-Coder-V2-Lite
CUDA_VISIBLE_DEVICES=5 python -m vllm.entrypoints.openai.api_server \
--model /models/DeepSeek-Coder-V2-Lite-Instruct \
--served-model-name deepseek-coder-lite \
--tensor-parallel-size 1 \
--dtype float16 \
--max-model-len 32768 \
--gpu-memory-utilization 0.88 \
--enable-prefix-caching \
--trust-remote-code \
--port 8015GPU 6 · Qwen2-VL-7B(视觉)
CUDA_VISIBLE_DEVICES=6 python -m vllm.entrypoints.openai.api_server \
--model /models/Qwen2-VL-7B-Instruct \
--served-model-name qwen2-vl-7b \
--tensor-parallel-size 1 \
--dtype float16 \
--max-model-len 16384 \
--gpu-memory-utilization 0.85 \
--enable-prefix-caching \
--port 8016单卡模型的性能预估
| 模型 | 单卡 TPS | 月吞吐 output | 月营收(估) |
|---|---|---|---|
| BGE-M3 | 40K req/s(超高) | 无 output token | ¥0.5/M × 巨量,实际难估 |
| Qwen2.5-7B AWQ | 350 tok/s | 9 亿 | 0.3 万 |
| Coder-7B | 300 tok/s | 7.8 亿 | 0.4 万(代码高价) |
| DeepSeek-Coder-Lite | 400 tok/s(MoE) | 10 亿 | 0.5 万 |
| Qwen2-VL-7B | 200 tok/s | 5 亿 | 0.5 万(视觉高价) |
| GLM-4-9B | 250 tok/s | 6.5 亿 | 0.2 万 |
M3 整机月理论满载:约 2-2.5 万
systemd 服务化
每个模型一个 service:/etc/systemd/system/vllm-m3-<name>.service
统一模板 /etc/systemd/system/vllm-m3@.service:
[Unit]
Description=vLLM M3 Service %i
After=network.target
[Service]
Type=simple
User=ubuntu
ExecStart=/opt/vllm-m3-launch.sh %i
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target启动脚本包含 model_name → GPU / port / 模型路径 映射。
启动全部:
systemctl enable vllm-m3@bge-m3 vllm-m3@qwen7b vllm-m3@coder7b ...systemctl start ...
NFS 模型仓库(M3 兼职)
M3 作为 NFS 主机(因为 M3 是"最热闹的机器",模型仓库放它上省事):
apt install nfs-kernel-server
# 编辑 /etc/exports
/data/models 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
exportfs -a
systemctl restart nfs-kernel-server其他机器 mount:
apt install nfs-common
mkdir /models
mount M3-IP:/data/models /models优先级排布
M3 上并行 8 个进程,如果显存偶发不足:
- Embedding(0/1/2):不吃显存,永不抢占
- 快速对话(3):稳定跑
- Coder(4/5):如果 5 挤 4 显存,减低 gpu-memory-utilization
- Visual(6):视觉模型 attention 显存需求大,独立
- GLM(7):备用,客户少时可临时关掉给其他模型让位
Nginx 汇总路由
/etc/nginx/conf.d/m3-models.conf:
map $arg_model $backend_port {
default 8013; # 默认 qwen7b
"bge-m3" 8010;
"qwen3-embed" 8011;
"bge-rerank" 8012;
"qwen2.5-7b" 8013;
"qwen-coder-7b" 8014;
"deepseek-coder" 8015;
"qwen2-vl-7b" 8016;
"glm-4-9b" 8017;
}
server {
listen 8020;
location /v1/ {
proxy_pass http://M3-IP:$backend_port;
proxy_read_timeout 300s;
proxy_buffering off;
}
}注:更规范做法是网关层根据请求 body 里的 "model" 字段路由,见 07-tech-stack.md。
监控与告警
- 8 个进程各自
/metrics(vLLM 内置) - Prometheus 采集全部
- 告警:
- 单进程 crash 自动重启 + 告警
- 单卡温度 > 87°C 告警
- 显存溢出(OOM)立即告警
推荐
8 周 MVP:先起 4 个模型(bge-m3 + qwen7b + coder7b + qwen2-vl),验证客户是否用得到
验证客户后:
- 哪个模型 QPS 高 → 挪出 1 卡 → 增加副本
- 哪个模型 QPS 低 → 关掉,换新模型试
- 每月 review 一次,动态调整
M3 是"客户实验田":40 卡里最灵活的一台,快速试新模型。