达拉斯 8×4090 跑多模型推理:一卡一实例还是张量并行,生产怎么隔离
达拉斯 8×RTX 4090 机器到手,第一反应不是“把 8 张卡绑一起跑最大模型”,而是先想清楚:这些卡是要当“算力池”还是“隔离单元”。两种思路落地方式完全不一样。
思路 A:一卡一实例(故障域最小)
卡 0 跑 Qwen-7B 对话,卡 1 跑 Embedding,卡 2 跑 SDXL 出图,卡 3-4 跑 32B 量化推理…… 每个 vLLM 进程只认一张卡:
# 卡0:7B 对话
CUDA_VISIBLE_DEVICES=0 vllm serve Qwen2.5-7B-Instruct \
--port 8000 --gpu-memory-utilization 0.90 \
--max-model-len 32768 --max-num-seqs 128
# 卡1:向量服务(显存别给太高)
CUDA_VISIBLE_DEVICES=1 vllm serve bge-m3 \
--port 8001 --gpu-memory-utilization 0.40 \
--max-num-seqs 64
好处:模型 A 崩了不影响模型 B;显存池不打架;扩缩容直接加减进程。生产环境最稳的是这种。
思路 B:张量并行(跑单大模型)
要跑 27B/70B 量化模型、还要长上下文,单卡 24G 放不下,就 2 卡或 8 卡 TP:
# 2 卡跑 27B Q4,上下文拉长
CUDA_VISIBLE_DEVICES=0,1 vllm serve Qwen3-27B-Q4 \
--tensor-parallel-size 2 \
--max-model-len 131072 \
--gpu-memory-utilization 0.90 --port 8000
# 8 卡跑 27B/70B 长上下文
vllm serve Qwen3-27B-Q4 \
--tensor-parallel-size 8 \
--max-model-len 262144 \
--gpu-memory-utilization 0.90
4090 走 PCIe4.0 没有 NVLink,TP=2 通信开销 5-10%,TP=8 长上下文能跑通但单请求 prefill 会被通信拖慢。别盲目上 8 卡 TP,小模型用多实例更划算。
思路 C:单卡多 LoRA(SaaS 多租户)
同底座模型 + 多客户微调,别起 N 个进程,用 Multi-LoRA:
vllm serve Meta-Llama-3.1-8B-Instruct-AWQ \
--enable-lora --max-loras 30 --max-lora-rank 64 \
--max-cpu-loras 32 --gpu-memory-utilization 0.92
请求里带 model="customer-42" 就行,单卡 24G 能挂几十个租户适配器,每个适配器显存占用约 50-200MB。网关层做租户鉴权,别让客户端直连随便指 adapter 名。
网关怎么分流量
- 按模型名路由:7B 去 8000,embedding 去 8001,27B 去 8002
- 按上下文长度路由:>32k 的请求只扔给 TP 实例,避免短上下文卡等长 prefill
- 按负载摘流:实例 5xx 率超 15% 或心跳丢 3 次,网关摘掉,恢复后再探活
显存账本(8×4090 实战参考)
- 7B INT4:权重 4G + KV 20G(长上下文)≈ 单卡 0.9 利用率稳
- 27B Q4 TP=2:每卡约 14G 权重 + KV,131k 上下文能跑
- Embedding 0.6B:gpu-mem 0.4 足够,别给高
- 同卡混跑对话+向量:不推荐,OOM 会一起死
IO 与端口
8 卡物理机走 10G 口,模型加载、Checkpoint 落盘才不卡;vGPU 100M 口只适合单图推理和调试,别拿去跑批量 prefill。达拉斯节点 8×4090 物理机配 NVMe 全闪,长上下文 KV 频繁换页时盘 IO 不能成瓶颈。
推理并发起来后,先按“一卡一实例”铺开,显存不够再上 TP,多租户再切 LoRA——比一上来把 8 卡绑死更灵活,也更好排障。
达拉斯 8×4090 物理机与显卡云:云数方舟美国 GPU 独立服务器