Ollama GPU 调度与资源管理:显存优化、多 GPU 负载均衡
你是不是遇到过这种情况:8GB 显存的显卡,好不容易把 13B 模型加载成功,跑了几个推理就突然崩了——屏幕上跳出 “CUDA out of memory” 的报错,心里那个郁闷啊。
或者你花钱配了两张 GPU,满怀期待地想着总算能跑大模型了,结果打开 nvidia-smi 一看,只有一张显卡在干活,另一张在那儿闲着吃瓜。
说实话,我刚开始用 Ollama 的时候也踩过这些坑。显存不够、多 GPU 用不上、推理速度忽快忽慢——这些问题折腾了我好几个晚上。后来慢慢摸索,才搞明白 Ollama 背后的 GPU 调度逻辑,原来很多东西不是”配好了就能用”,还得理解参数背后的原理。
这篇文章,我想把这些经验整理出来,帮你解决几个实际问题:
- 怎么让 8GB 显存稳定跑 13B 模型(不会一言不合就 OOM)
- 多 GPU 怎么配置才能真正用起来(负载均衡完整方案)
- 显存不够时该调哪些参数(优先级排序)
- GPU offloading 到底是什么东西(llama.cpp 底层机制)
先说个前提:这篇文章有点硬核,需要你对 GPU、CUDA、Ollama 基础操作有一定了解。如果你刚接触 Ollama,可以先看看系列的前几篇(特别是第六篇性能优化基础),有了背景知识再来看这篇会顺畅很多。
1. GPU 内存管理机制:参数配置全解析
Ollama 的 GPU 调度,核心是通过几个参数控制模型层在 GPU 和 CPU 之间的分配。搞清楚这些参数,你才能知道为什么有时候显存明明够用却还是报错,或者为什么推理速度莫名其妙变慢。
1.1 核心参数详解
先说最重要的几个参数,我把它们整理成一张表,方便你对照:
| 参数 | 作用 | 默认值 | 什么时候要调整 |
|---|---|---|---|
num_gpu | 模型有多少层放到 GPU 上跑 | 自动检测 | 显存不够时减少这个值 |
main_gpu | 主 GPU 的编号 | 0 | 多 GPU 时指定用哪张卡 |
low_vram | 低显存模式开关 | false | 8GB 以下显存建议打开 |
num_batch | 批处理大小 | 512 | 显存吃紧时降到 256 |
num_ctx | 上下文长度 | 4096 | 短对话用 2048 能省不少显存 |
这几个参数里,num_gpu 最容易让人迷糊。它不是指你有几张 GPU,而是指模型的层数有多少要放到 GPU 上计算。
举个例子:Llama 2 7B 模型有 32 层,如果你设置 num_gpu: 32,那全部 32 层都在 GPU 上跑。要是显存不够,改成 num_gpu: 20,那 20 层在 GPU,剩下的 12 层就得靠 CPU 算了——速度自然就慢下来了。
low_vram 这个参数挺有意思。打开之后,Ollama 会用一些技巧来省显存,比如把 KV cache 放到 CPU 内存里,而不是 GPU 显存里。代价是推理速度会掉一些,但至少不会崩。
1.2 显存分配流程
Ollama 加载模型时,显存分配是这样的流程:
- 检测显存:先看看 GPU 有多少空闲显存
- 计算层数:根据模型大小和显存情况,算出能放多少层到 GPU
- 分配 KV cache:给推理缓存预留空间(这个也占显存)
- 开始推理:动态显存占用,有波动
关键点在第二步——Ollama 会自动算出最佳层数分配。但有时候这个自动计算不够准确,特别是显存刚好够用又不够用的时候(比如 8GB 显存跑 13B 模型),这时候就得手动指定 num_gpu 了。
想知道当前模型用了多少层 GPU offloading?用这个命令:
ollama run llama3 --verbose
输出里会有一行类似 llama_model_load: model loaded - layers: 40/40 on GPU,这就是告诉你 40 层全部在 GPU 上。
1.3 llama.cpp 后端机制
Ollama 底层用的是 llama.cpp 这个推理引擎。理解 llama.cpp 的 GPU offloading 逻辑,你就能明白为什么有时候调整参数效果不明显。
GPU Offloading 决策
llama.cpp 会这么算:
可用显存 = GPU总显存 - 系统预留(大概几百MB)
每层大小 = 模型参数 / 层数
能放的层数 = min(总层数, 可用显存 / 每层大小)
这个计算有个坑:它只考虑模型本身占用的显存,没把 KV cache 算进去。KV cache 是推理时用到的缓存,会随着对话长度增加而变大。所以有时候模型加载成功了,推理几次后 KV cache 撑爆显存,就崩了。
混合计算架构
GPU 和 CPU 不是完全分工的。大致是这样:
- GPU 负责:矩阵计算、attention 操作(这些计算量大)
- CPU 负责:embedding、normalization 操作(计算量小)
- 数据传输:GPU 和 CPU 之间要来回传数据,有开销
如果你只把部分层放到 GPU,那数据传输开销就大了——每一层算完,下一层在另一个设备上,得先把结果传过去。这就是为什么部分 GPU offloading 的推理速度会明显变慢。
mmap 内存映射
llama.cpp 默认用 mmap 加载模型文件。好处是:
- 不用把整个模型读进内存,操作系统会按需加载
- 多个进程可以共享同一份内存
- 内存占用更少
如果你想禁用 mmap(某些情况下会有问题),可以在 Modelfile 里设置:
PARAMETER use_mmap false
2. 多 GPU 配置方案:负载均衡完整架构
有两张甚至更多 GPU 的人,最头疼的问题就是:Ollama 怎么才能把它们都用上?
先说个让人失望的事实:Ollama 不支持模型并行。什么意思呢?就是你不能把一个模型拆成两半,一半在 GPU 0 上算,另一半在 GPU 1 上算。每个模型只能绑到一张 GPU 上。
那多 GPU 还有啥用?用处有两个:
- 跑不同的模型实例:GPU 0 跑 llama3,GPU 1 跑 mistral
- 跑同一个模型的多个实例:用于负载均衡,提升吞吐量
2.1 单实例多 GPU(局限性与配置)
如果你只是想让 Ollama 能识别多张 GPU,最简单的方式是用 CUDA_VISIBLE_DEVICES 环境变量:
# 只让 Ollama 用 GPU 0 和 GPU 1
CUDA_VISIBLE_DEVICES=0,1 ollama serve
但这样配置有个问题:Ollama 默认只会把模型放到 GPU 0 上,GPU 1 还是闲着。你可以用 main_gpu 参数指定主 GPU:
# Modelfile
FROM llama3
PARAMETER main_gpu 1 # 主 GPU 设成 GPU 1
不过说实话,这种方式用处有限——你只是换了一张卡来跑模型,并没有真正利用两张卡的能力。
2.2 多实例负载均衡(推荐方案)
真正能发挥多 GPU 能力的方式,是跑多个 Ollama 实例,每张卡绑一个实例,然后用负载均衡器分发请求。
架构是这样的:
┌─────────┐
│ Client │ 发送推理请求
└────┬────┘
│
┌────▼────────────────────┐
│ Nginx (负载均衡器) │ least_conn 策略
│ Port: 8080 │
└────┬─────────┬──────────┘
│ │
┌────▼───┐ ┌──▼────┐
│Ollama 1│ │Ollama 2│
│GPU 0 │ │GPU 1 │ 每个实例独占一张 GPU
│Port │ │Port │
│11434 │ │11435 │
└────────┘ └────────┘
步骤一:启动多个 Ollama 实例
# 实例 1 - 绑定 GPU 0,端口 11434
CUDA_VISIBLE_DEVICES=0 OLLAMA_HOST=127.0.0.1:11434 ollama serve &
# 实例 2 - 绑定 GPU 1,端口 11435
CUDA_VISIBLE_DEVICES=1 OLLAMA_HOST=127.0.0.1:11435 ollama serve &
注意:默认 Ollama 数据目录是 ~/.ollama,两个实例会共用同一个模型存储。这没问题,因为 mmap 内存映射允许多进程共享同一份模型文件。
步骤二:配置 Nginx 负载均衡
# /etc/nginx/conf.d/ollama.conf
upstream ollama_cluster {
least_conn; # 最少连接优先策略
server 127.0.0.1:11434;
server 127.0.0.1:11435;
}
server {
listen 8080;
location / {
proxy_pass http://ollama_cluster;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 流式响应支持
proxy_buffering off;
proxy_cache off;
}
}
least_conn 策略的意思是:每次新请求发到当前连接数最少的实例。这样两张 GPU 的负载会更均匀。
步骤三:客户端调用
客户端只需要连到 Nginx 的端口:
# 通过 Nginx 调用(会自动分发到某个实例)
curl http://localhost:8080/api/generate -d '{
"model": "llama3",
"prompt": "你好"
}'
或者改一下 Ollama 客户端的默认地址:
export OLLAMA_HOST=http://localhost:8080
ollama run llama3
2.3 负载均衡策略对比
Nginx 支持几种不同的负载均衡策略,各有适用场景:
| 策略 | 原理 | 适用场景 |
|---|---|---|
| 轮询(默认) | 挨个发给各实例 | 简单场景,模型大小一致 |
| 最少连接(least_conn) | 发给当前最空闲的实例 | 推荐用于推理服务 |
| IP Hash | 同一 IP 总是发给同一实例 | 需要会话保持的场景 |
推理服务的特点是请求时间不确定——有的几秒就返回,有的要跑好几分钟。用轮询的话,可能出现一个实例忙得要死,另一个闲着的情况。least_conn 就能避免这个问题。
如果你想让请求尽量均匀,但偶尔某个实例崩溃了能自动切换,可以加上健康检查:
upstream ollama_cluster {
least_conn;
server 127.0.0.1:11434 max_fails=3 fail_timeout=30s;
server 127.0.0.1:11435 max_fails=3 fail_timeout=30s;
}
这样某个实例连续失败 3 次后,Nginx 会暂时把它踢出集群,30 秒后再尝试。
3. 显存优化策略:量化、上下文、批处理组合实战
显存不够的时候,调整参数的优先级是这样的:量化 > 上下文长度 > 批处理大小 > GPU 层数。
为什么是这个顺序?因为量化的影响最大,同样一个模型,Q4 量化能比 FP16 省 75% 的显存。而调整 GPU 层数只是把计算从 GPU 挪到 CPU,显存省了但速度掉了。
3.1 量化级别选择
量化就是用更少的位数存储模型参数。FP16 每个参数用 16 位,Q4 只用 4 位。位数少了,精度自然会有损失,但实际测试下来,Q4 量化的效果损失大概 2-3%,大多数场景完全能接受。
量化级别对比:
| 量化 | 显存占用(相对 FP16) | 精度损失 | 适用场景 |
|---|---|---|---|
| Q4_K_M | 约 25% | 2-3% | 推荐:平衡性能和质量 |
| Q5_K_M | 约 33% | 1-2% | 精度要求稍高的场景 |
| Q8_0 | 约 50% | 0.5% | 接近原始精度 |
| FP16 | 100% | 无 | 科研、基准测试 |
实际数据参考:Llama 2 13B 模型
- FP16:约 26GB 显存
- Q4_K_M:约 8GB 显存
- Q8_0:约 13GB 显存
所以 8GB 显存跑 13B Q4 模型,刚好能塞进去。但问题是 KV cache 还要占空间,推理时容易撑爆。
选择量化级别时有个小建议:如果你只是日常使用,Q4_K_M 就够了。如果做翻译、代码生成这种对精度要求高的任务,可以考虑 Q5_K_M 或 Q8_0。
Ollama 默认会下载 Q4 量化版本。想用其他量化版本,在模型名后面加后缀:
# Q4 量化(默认)
ollama pull llama3
# Q8 量化
ollama pull llama3:8b-q8_0
3.2 上下文长度优化
KV cache 是推理过程中的缓存,用来存储之前的对话历史。它的显存占用跟上下文长度直接相关。
估算公式(简化版):
KV Cache 显存 ≈ num_ctx × num_layers × hidden_dim × 2 bytes
拿 Llama 2 7B 举个例子:
- num_layers = 32
- hidden_dim = 4096
- num_ctx = 4096
算下来 KV cache 大概 2GB。如果把 ctx 扩到 8192,KV cache 就变成 4GB。上下文翻倍,KV cache 显存也翻倍。
优化策略:
-
短对话场景:用
num_ctx: 2048- 能省一半的 KV cache 显存
- 对于日常问答、简单任务足够了
-
长文档处理:别直接把 ctx 设成 16000 或更大,用 chunking 策略
- 把文档切成小块,逐块处理
- 比一次塞进去更稳定,也更可控
Modelfile 里设置上下文长度:
FROM llama3
PARAMETER num_ctx 2048 # 减少上下文长度
有个误区要提醒:很多人以为把 ctx 设小了会影响输出质量。其实不是这样——ctx 只是影响模型能”记住”多少之前的对话。如果你的对话本来就只有几轮,ctx 设 2048 和设 4096 效果一样。
3.3 批处理与并发优化
num_batch 这个参数控制的是一次处理多少 token。默认值 512,意味着 Ollama 会一次处理 512 个 token 的推理。
批处理大有什么好处?并行计算效率高。代价是峰值显存会更高。
显存吃紧的时候,把 batch 降下来能缓解峰值压力:
FROM llama3
PARAMETER num_batch 256 # 从 512 降到 256
实测下来,batch 从 512 降到 256,峰值显存能降大概 20%。推理速度会掉一些,但不会像减少 GPU 层数那样掉得那么狠。
并发请求的问题
Ollama 默认是串行处理请求的——一个请求处理完再处理下一个。如果你同时发多个请求,它们会排队等待。
想提升并发能力,两个方案:
- 多实例部署:前面说的多 GPU 负载均衡方案,每个实例能独立处理请求
- 队列系统:在应用层加个队列(比如 Redis Queue),自己管理请求分发
第二个方案更适合没有多 GPU 的场景。你可以在应用代码里这样处理:
import redis
from queue import Queue
# 用 Redis 做队列
r = redis.Redis()
r.lpush('ollama_queue', request_data)
# 后台 worker 从队列取请求处理
request = r.rpop('ollama_queue')
ollama.generate(request)
4. 实战场景案例:3 个真实案例
理论讲了不少,来看几个实际遇到的问题和解决方案。
4.1 场景 1:8GB 显存稳定运行 13B 模型
问题
用户的显卡是 RTX 3060(8GB 显存),想跑 Llama 2 13B Q4 模型。模型本身需要约 8GB,刚好塞进去。但问题是推理几次后就开始 OOM 报错——KV cache 把显存撑爆了。
解决方案
核心思路:减少 KV cache 占用 + 降低峰值显存。
FROM llama2:13b-q4
PARAMETER num_gpu 30 # 13B 模型共 40 层,只放 30 层到 GPU
PARAMETER low_vram true # 启用低显存模式,KV cache 放 CPU 内存
PARAMETER num_ctx 2048 # 上下文长度减半,KV cache 也减半
PARAMETER num_batch 256 # 批处理减小,降低峰值
这几个参数组合起来,显存占用稳定在 6GB 左右,留了 2GB 的余量给波动。
效果
- 显存占用:从约 8GB 降到约 6GB(稳定运行)
- 推理速度:约 8 tokens/s(比全 GPU 慢,但比 CPU 快很多)
- 稳定性:不再出现 OOM 崩溃
代价是推理速度慢了一些。因为 10 层要靠 CPU 算,每次跨 GPU-CPU 都有数据传输开销。但至少能用起来了,不会一言不合就崩溃。
4.2 场景 2:双 GPU 负载均衡提升吞吐量
问题
用户有两张 RTX 3090(各 24GB 显存),部署了一个对外提供 API 服务的 Ollama。问题是单实例只能串行处理请求,并发能力差,高峰期请求排队严重。
用 nvidia-smi 看,两张卡利用率差异很大——一张常年 70%+,另一张只有 20% 左右。
解决方案
多实例 + Nginx 负载均衡,前面第二章详细讲过。这里给出完整的启动脚本:
#!/bin/bash
# start_ollama_cluster.sh
# 实例 1 - GPU 0
CUDA_VISIBLE_DEVICES=0 \
OLLAMA_HOST=127.0.0.1:11434 \
OLLAMA_MODELS=/home/user/.ollama \
nohup ollama serve > ollama1.log 2>&1 &
# 实例 2 - GPU 1
CUDA_VISIBLE_DEVICES=1 \
OLLAMA_HOST=127.0.0.1:11435 \
OLLAMA_MODELS=/home/user/.ollama \
nohup ollama serve > ollama2.log 2>&1 &
# 预加载模型到两个实例
sleep 5
curl http://127.0.0.1:11434/api/pull -d '{"name": "llama3"}'
curl http://127.0.0.1:11435/api/pull -d '{"name": "llama3"}'
echo "Ollama cluster started on ports 11434 and 11435"
Nginx 配置用 least_conn 策略,确保请求分发均匀。
效果
- 整体吞吐量:提升约 80%(从单实例串行变成双实例并行)
- 单 GPU 利用率:从 40% 平均 → 80% 平均(两张卡都在干活)
- 响应延迟:高峰期减少约 50%(不用排队了)
实测数据:单实例处理 100 个请求大概要 10 分钟,双实例负载均衡只要 5 分钟多一点。
4.3 场景 3:显存动态分配自动化
问题
用户有多个不同大小的模型,切换的时候每次都要手动调整 GPU 层数配置。有时候忘了改,就崩了。能不能自动化?
解决方案
写个脚本,根据当前显存情况自动选择合适的 Modelfile 配置。
#!/bin/bash
# auto_offload.sh - 自动 GPU offloading 配置
# 获取当前 GPU 空闲显存(单位 MB)
GPU_MEM_FREE=$(nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits | head -1)
# 模型大小参考(MB)
declare -A MODEL_SIZES
MODEL_SIZES["llama3:8b-q4"]=5000
MODEL_SIZES["llama3:70b-q4"]=40000
MODEL_SIZES["mistral:7b-q4"]=4500
MODEL_NAME=$1
if [ -z "$MODEL_NAME" ]; then
echo "Usage: $0 <model_name>"
exit 1
fi
MODEL_SIZE=${MODEL_SIZES[$MODEL_NAME]}
if [ -z "$MODEL_SIZE" ]; then
echo "Unknown model size for $MODEL_NAME"
exit 1
fi
# 判断显存是否足够全 GPU
if [ $GPU_MEM_FREE -gt $MODEL_SIZE ]; then
# 全 GPU offloading
echo "Using full GPU offloading (enough memory)"
cat > /tmp/modelfile_temp <<EOF
FROM $MODEL_NAME
PARAMETER num_gpu -1 # -1 表示全 GPU
PARAMETER low_vram false
EOF
else
# 部分 GPU,算出合适的层数比例
OFFLOAD_RATIO=$((GPU_MEM_FREE * 100 / MODEL_SIZE))
echo "Using partial GPU offloading ($OFFLOAD_RATIO%)"
cat > /tmp/modelfile_temp <<EOF
FROM $MODEL_NAME
PARAMETER num_gpu $OFFLOAD_RATIO
PARAMETER low_vram true
PARAMETER num_ctx 2048
EOF
fi
# 创建模型
ollama create "${MODEL_NAME}-auto" -f /tmp/modelfile_temp
echo "Created ${MODEL_NAME}-auto with auto config"
使用方式:
# 运行脚本,自动创建合适配置的模型
./auto_offload.sh llama3:70b-q4
效果
- 自动适配显存变化
- 减少手动配置出错
- 切换模型时不用每次改参数
这个脚本还能扩展:比如加上监控,显存不够了自动切换到低显存模式;或者结合定时任务,半夜没人用的时候预加载模型。
5. 最佳实践与监控:配置推荐、监控工具、常见问题
5.1 不同显存大小的推荐配置
一张速查表,帮你快速找到适合自己硬件的配置:
| 显存大小 | 推荐模型 | 量化 | GPU 层数 | 其他参数 |
|---|---|---|---|---|
| 6GB | 7B 模型 | Q4 | 部分(约 50%) | low_vram=true, ctx=2048 |
| 8GB | 7B 模型 | Q4 | 全 GPU | ctx=2048(保险) |
| 8GB | 13B 模型 | Q4 | 部分(约 75%) | low_vram=true, ctx=2048, batch=256 |
| 12GB | 13B 模型 | Q4 | 全 GPU | ctx=4096 可以用 |
| 16GB | 13B 模型 | Q8 或 Q5 | 全 GPU | ctx=4096 |
| 16GB | 70B 模型 | Q4 | 部分(约 50%) | low_vram=true |
| 24GB | 70B 模型 | Q4 | 全 GPU | ctx=4096 可以用 |
| 48GB(双卡) | 70B 模型 | Q4 | 全 GPU | 多实例负载均衡 |
注意:这些是保守估计。实际还要考虑 KV cache 和系统预留空间。如果你的场景是长对话(上下文大),保守点更稳。
5.2 显存监控工具
nvidia-smi 实时监控
最简单的方式:
# 每秒刷新一次
nvidia-smi -l 1
# 只看显存占用
nvidia-smi --query-gpu=memory.used,memory.free --format=csv -l 1
输出会显示每张卡的显存使用情况。推理过程中盯着看,能发现显存是怎么涨上去的。
Ollama verbose 日志
ollama run llama3 --verbose
输出里会显示模型加载时的详细信息,包括:
- GPU offloading 层数
- 模型内存占用
- mmap 是否启用
- KV cache 分配
看到 GPU offloading: 40/40 layers 这样的信息,就知道模型全部在 GPU 上。
监控脚本示例
如果你要长期监控显存使用情况,可以写个脚本记录日志:
#!/bin/bash
# monitor_gpu.sh
LOG_FILE="gpu_memory.log"
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
GPU_MEM=$(nvidia-smi --query-gpu=memory.used,memory.free --format=csv,noheader)
echo "$TIMESTAMP $GPU_MEM" >> $LOG_FILE
sleep 5
done
后台跑着,随时能查历史数据。
5.3 常见问题排查
问题 1:推理时报 OOM
排查步骤:
- 先看
nvidia-smi,确认显存确实不够 - 检查当前配置:
- 量化是不是 Q4(不是的话改成 Q4)
- 上下文长度是不是太大(改成 2048)
- 批处理是不是太大(改成 256)
- GPU 层数是不是全 GPU(减少几层)
- 如果以上都调了还不行,启用
low_vram=true
调整优先级:量化 > ctx > batch > GPU 层数 > low_vram
问题 2:推理速度慢
先确认是不是 GPU offloading 层数不够:
ollama run your_model --verbose | grep "GPU offloading"
如果看到 GPU offloading: 20/40 layers,那说明一半的层在 CPU 上算,速度慢是正常的。
解决:减少量化级别(Q4 → Q8)或者换更大显存的显卡。没办法的话只能接受这个速度。
问题 3:显存波动大,不稳定
显存波动主要来自 KV cache。对话越长,KV cache 越大。
解决:限制上下文长度,或者在应用层控制对话历史长度(比如只保留最近 10 轮对话)。
问题 4:多 GPU 配置后还是只用一张卡
检查 Nginx 配置是不是生效了:
curl http://localhost:8080/api/tags
如果只看到一个模型的响应,说明请求确实在分发。
如果两张卡利用率差异大,可能是:
least_conn策略没配置- 某个实例出问题了(检查日志)
- 模型只在其中一个实例加载了
总结
说了这么多,核心就几个点:
- 显存不够时,优先调量化:Q4 比 FP16 省 75% 显存,效果损失不大
- KV cache 占用要看:上下文长度直接影响 KV cache,长对话显存压力更大
- 多 GPU 要用负载均衡:单实例多 GPU 模式用处有限,多实例 + Nginx 才是正解
- llama.cpp 底层要理解:GPU offloading 不是魔法,是分层计算,有数据传输开销
给你几个可以直接用的配置:
8GB 显存稳定配置:
PARAMETER num_gpu 30
PARAMETER low_vram true
PARAMETER num_ctx 2048
PARAMETER num_batch 256
双 GPU 负载均衡启动:
CUDA_VISIBLE_DEVICES=0 OLLAMA_HOST=127.0.0.1:11434 ollama serve &
CUDA_VISIBLE_DEVICES=1 OLLAMA_HOST=127.0.0.1:11435 ollama serve &
最后,如果这篇对你有帮助,可以看看系列的其他文章。第六篇讲的是量化、批处理的基础知识,这篇算是 GPU 方向的深入展开。第八篇会讲多模型并行部署,把多 GPU 配置用到更复杂的场景里。
有问题的话,去 Ollama GitHub Discussions 找找,很多实际问题社区都有讨论。或者直接在评论区留言,我看到了会回复。
常见问题
Ollama 能把一个模型拆分到多张 GPU 上并行计算吗?
为什么模型加载成功后,推理几次就 OOM 了?
• 减少上下文长度(num_ctx)
• 启用 low_vram 模式
• 缩短对话历史
显存不够时应该先调哪个参数?
num_gpu 参数是指我有几张 GPU 吗?
多 GPU 负载均衡应该用什么策略?
8GB 显存能跑多大的模型?
• 7B Q4:全 GPU,ctx=2048
• 13B Q4:部分 GPU(约 75%),需要 low_vram + ctx=2048 + batch=256
• 更大的模型需要更大显存或 CPU offloading
17 分钟阅读 · 发布于: 2026年4月11日 · 修改于: 2026年4月11日
相关文章
Ollama 性能优化实战:量化、批处理与内存调优完全指南
Ollama 性能优化实战:量化、批处理与内存调优完全指南
Ollama Embedding 实战:本地向量检索与 RAG 搭建
Ollama Embedding 实战:本地向量检索与 RAG 搭建
LangChain + Ollama 集成实战:本地 LLM 应用开发完全指南

评论
使用 GitHub 账号登录后即可评论