MkSaaS 本地大模型部署的显存规划

文章导读
在MkSaaS中接入本地大模型,显存规划不需要一开始就猜测显卡容量。先确认推理后端,再根据模型大小和量化方式估算权重占用,接着用配置限制并发与上下文长度,最后用nvidia-smi观测实际占用来修正参数。这个流程可以让你在购买显卡或调整配置前,先有一个可执行的判断边界。
📋 目录
  1. A 先确认 MkSaaS 推理模块使用的后端
  2. B 根据模型参数量与量化精度估算显存
  3. C 在 MkSaaS 配置中限制并发与上下文长度
  4. D 通过 nvidia-smi 对比实际占用与预设值
  5. E 遇到 OOM 时优先调整 batch size 还是切换量化格式
A A

在MkSaaS中接入本地大模型,显存规划不需要一开始就猜测显卡容量。先确认推理后端,再根据模型大小和量化方式估算权重占用,接着用配置限制并发与上下文长度,最后用nvidia-smi观测实际占用来修正参数。这个流程可以让你在购买显卡或调整配置前,先有一个可执行的判断边界。

部署本地大模型前,先用参数量×量化位宽÷8估算权重显存,并额外预留KV Cache与激活内存。MkSaaS中通过限制并发数和序列长度可以降低峰值占用。若发生OOM,调整顺序依次为降低batch size、降低上下文长度、切换量化格式。实际显存以nvidia-smi观测为准,估算值仅作为初始边界。

先确认 MkSaaS 推理模块使用的后端

首先确定MkSaaS的推理请求发送到哪个后端,因为vLLM、TGI、Ollama等对显存的管理方式不同。vLLM使用PagedAttention,显存碎片更少,且支持动态批处理;TGI也做了KV Cache优化;Ollama则可能按需加载或卸载模型。识别方法:查看MkSaaS的启动命令中是否包含'vllm'、'text-generation-inference'或'ollama'这样的进程名或镜像名;也可以查看MkSaaS的配置文件,通常有'inference_backend'或'model_server'这样的键。如果模型服务由外部提供,还可以通过服务地址的端口或返回头判断。

后端类型决定了可调的显存参数。vLLM和TGI通常提供'`--max-num-seqs`'、'`--max-model-len`'这类参数;Ollama则主要通过环境变量'OLLAMA_NUM_GPU'控制。明确后端后,后续估算和调参才有对应目标。

根据模型参数量与量化精度估算显存

显存估算公式:

MkSaaS 本地大模型部署的显存规划
显存需求 ≈ 参数量(个) × 每参数字节数 + KV Cache + 激活内存

每参数字节数由量化精度决定:FP16为2字节,INT8为1字节,INT4约0.5字节。KV Cache与模型层数、注意力头数、序列长度和并发数相关,通常在上下文较长时增长很快。激活内存主要用于前向计算中的中间张量,受batch size影响较大。

例如,一个7B参数模型以FP16加载,权重占约14GB(7×10^9×2字节),还没有算KV Cache。如果上下文长度设为8192、并发4,KV Cache可能需要数GB。因此,估算时除了权重,还要按序列长度和并发量额外预留。

在 MkSaaS 配置中限制并发与上下文长度

MkSaaS通常会透传后端参数,或者在自己的配置文件中定义对应项。以下示例是常见结构,具体键名以后端实际为准:

MkSaaS 本地大模型部署的显存规划
inference:
  backend: vllm
  max_num_seqs: 4          # 最大并发序列数
  max_model_len: 8192      # 最大上下文长度(输入+输出)
  max_tokens: 2048         # 单次生成最大长度

如果找不到对应键名,可以查看MkSaaS的日志中实际传给后端的启动参数。把并发数从默认值降到4~8,把max_model_len限制在8192或4096,是降低显存峰值的有效手段。这些值直接影响KV Cache大小:序列长度和并发每变小一倍,KV Cache占用大约也减少一倍。

通过 nvidia-smi 对比实际占用与预设值

启动模型后,用以下命令实时监控GPU显存:

nvidia-smi `--query-gpu`=memory.used,memory.total `--format`=csv -l 1

同时,在MkSaaS日志中查找当前请求的序列长度,通常每个请求会记录输入token数和输出token数,两者相加就是实际消耗的上下文长度。将nvidia-smi显示的“Memory-Usage”与你在配置中设定的max_model_len和max_num_seqs关联起来。

MkSaaS 本地大模型部署的显存规划

如果显存占用持续接近或达到上限,说明并发或上下文设置过高,优先降低max_num_seqs;如果占用远低于上限,且请求经常排队,可以尝试增加并发。对比时注意区分:nvidia-smi显示的进程占用可能包含CUDA context开销,与理论估算不直接相等,只要峰值不触发OOM,就有调整空间。

遇到 OOM 时优先调整 batch size 还是切换量化格式

当OOM发生时,按这个顺序调整:

  1. 先降低batch size(并发数)。在MkSaaS中通常是max_num_seqs或并发请求限制,把值从当前配置减半。这一步不改精度,也不损失长文本能力,是最快止血方式。
  2. 如果OOM仍在,降低上下文长度。对应配置中的max_model_len或max_tokens。注意这可能会截断过长的输入,需要评估业务场景。
  3. 最后才考虑切换量化格式。把FP16换成INT8或INT4,需要在加载模型时指定量化方式,例如在vLLM启动参数中加`--quantization`,或者替换为量化后的模型文件。这个操作成本高且可能影响精度,所以放到最后。

这样排序的依据是:batch size和上下文长度是运行时可调的,修改后立即生效;切换量化格式需要重新加载模型,且引入精度和兼容性风险。在MkSaaS中,不要直接修改模型文件,优先通过上层配置调整。