🦙 Ollama 看图全靠 CPU?改一行源码,抢回你的显卡
无限教煮
2026年06月21日 15:41

🪟 仅限 Windows | Mac/Linux 思路一样但命令不同


先说人话

Ollama 有个"贴心但手贱"的设计——发现你显卡显存 ≤10GB,就把看图模块锁在 CPU 上。

RTX 4060/5060 这些 8GB 卡明明带得动,但它偏不给用。我们的办法是去官方源码里改一个数字(10GB → 4GB),让 8GB 卡解禁。

改的就是这个:

代码块
Go
自动换行
复制代码
// llm/llama_server.go 第 605 行
const limitedMMProjOffloadMemory = 10 << 30  // 改前:≤10GB 锁 CPU
const limitedMMProjOffloadMemory = 4 << 30   // 改后:≤4GB 才锁 CPU
复制成功

然后自己编译出 ollama.exe 替换掉原版,就干了这一件事。


准备工作(装工具)

打开 PowerShell(Win 键 → 输入 powershell → 回车),逐条执行:

代码块
powershell
自动换行
复制代码
# 如果没装 Git
winget install Git.Git

# 如果没装 Go
winget install GoLang.Go

# 不管装没装,跑这三条(装过的自动跳过)
winget install Kitware.CMake
winget install Ninja-build.Ninja
winget install BrechtSanders.WinLibs.MCF.UCRT
复制成功

每条命令执行后,看到绿色 "已成功安装""已安装" 就算过。如果有红色报错,截图发评论区问。

总共大概下载 300MB,装完硬盘多占 500MB。这些工具平时不启动、不占内存,只有编译那几分钟跑一下。


第一步:看你 Ollama 是什么版本

代码块
powershell
自动换行
复制代码
ollama --version
复制成功

会输出类似 ollama version is 0.30.10。记下这个版本号,后面要用。

⚠️ 如果提示 ollama 不是内部或外部命令,说明 Ollama 没装或者没在 PATH 里。先去 ollama.com 下载安装。


第二步:下载 Ollama 源码

代码块
powershell
自动换行
复制代码
git clone --branch v0.xx.xx https://github.com/ollama/ollama.git D:\ollama-source
复制成功

把 v0.xx.xx 换成你刚才记下的版本号,比如 v0.30.10。

可能会等 12 分钟,出现 Receiving objects: 100% 就下好了。如果报网络错误,检查一下能不能打开 github.com​,或者换个网络。


第三步:改那一行代码

找到 D:\ollama-source\llm\llama_server.go 这个文件,用记事本打开。

如果文件太多找不到 llm 文件夹,直接在 D:\ollama-source 右上角搜索框搜 llama_server.go。

找到第 605 行附近:

代码块
Go
自动换行
复制代码
const limitedMMProjOffloadMemory = 10 << 30
复制成功

改成:

代码块
Go
自动换行
复制代码
const limitedMMProjOffloadMemory = 4 << 30
复制成功

💡 改 4、改 6、还是改 1?

  • 8GB 显卡(RTX 4060/5060)→ 改 4 最合适

  • 12GB 显卡 → 改 6 更保守

  • 想彻底解除限制 → 改 1

推荐 4。

改完保存,关掉记事本。就改这一个数字,别动其他东西。


第四步:编译

还是在 PowerShell 里,依次执行:

代码块
powershell
自动换行
复制代码
# 进入源码目录
cd D:\ollama-source

# 开启 C/C++ 编译支持
$env:CGO_ENABLED = "1"

# 用国内镜像加速下载(网络好的可以跳过)
$env:GOPROXY = "https://goproxy.cn,direct"

# 先编译 C++ 部分(最慢的一步,5~8 分钟)
go generate ./...

# 再编译 Go 部分(1~2 分钟)
go build .
复制成功

怎么判断成功?

go generate ./... 跑完后,终端最后几行没有红色报错,显示 Generated mlx.h and mlx.c successfully 之类的。

go build . 跑完后,没有任何输出,直接回到光标闪烁——这就是成功。然后检查:

代码块
powershell
自动换行
复制代码
dir ollama.exe
复制成功

能看到文件、大小约 73MB,就是成了。

❌ 如果报错 gcc not found:MinGW-w64 没装好,去补 winget install BrechtSanders.WinLibs.MCF.UCRT 然后重启 PowerShell。

❌ 如果报网络超时:那是 GOPROXY 没设置成功,重新执行 $env:GOPROXY = "https://goproxy.cn,direct"。


第五步:备份并替换

代码块
powershell
自动换行
复制代码
# 先找到你的 Ollama 装在哪
where ollama

# 一般显示 I:\Ollama\ollama.exe 或 C:\Program Files\Ollama\ollama.exe
# 记住这个路径,下面用

# 备份原版(把路径换成你的)
copy "I:\Ollama\ollama.exe" "I:\Ollama\ollama.exe.bak"

# 替换成编译好的(前半段你的路径,后半段固定)
copy "D:\ollama-source\ollama.exe" "I:\Ollama\ollama.exe"
复制成功

怎么恢复? 把 ollama.exe.bak 复制回去改名为 ollama.exe 即可。


第六步:设置环境变量(推荐,省显存)

代码块
powershell
自动换行
复制代码
setx OLLAMA_FLASH_ATTENTION 1
setx OLLAMA_KV_CACHE_TYPE q8_0
复制成功

执行后显示 成功: 指定的值已保存 就对了。


第七步:重启 Ollama,测试

代码块
powershell
自动换行
复制代码
# 先杀掉正在运行的 Ollama
taskkill /f /im ollama.exe

# 重新启动
ollama serve
复制成功

能看到 Listening on 127.0.0.1:11434 之类的输出,说明启动成功(保持这个窗口开着)。

另开一个 PowerShell 窗口,跑看图模型:

代码块
powershell
自动换行
复制代码
ollama run qwen3-vl
复制成功

随便给张图让它描述。如果看图从以前好几秒变成瞬间出结果,恭喜你,成了。

如果报错、崩了、或者没效果?把备份的 .bak 覆盖回来恢复原样,2 秒的事,不会搞坏电脑。


哪些显卡有效?

显存在 4GB 10GB 之间的显卡能从 CPU 变成 GPU:

  • RTX 4060 / 5060(8GB)← 你的情况

  • RTX 3060(12GB)

  • RTX 4050(6GB)

  • GTX 1660 Super(6GB)

  • RX 6600(8GB)

≤4GB 的卡(GTX 1050 Ti、GTX 960 等)还有保护机制,不受影响。

纯文本聊天不会变快——这个改动只管看图,文本本来就是 GPU 在跑。


以后升级了怎么办?

Ollama 出了新版本 → 重复第 15 步,15 分钟搞定。版本不匹配不能混用。

不提供 exe 下载——每个人 Ollama 版本不同,网上下载的 exe 也不知道有没有夹带私货,自己编译最安全。


冷静说一句: Ollama 官方已经在加环境变量方案了,等合入后一行命令解决,不用再折腾编译。这方案只是过渡。