
🪟 仅限 Windows | Mac/Linux 思路一样但命令不同
Ollama 有个"贴心但手贱"的设计——发现你显卡显存 ≤10GB,就把看图模块锁在 CPU 上。
RTX 4060/5060 这些 8GB 卡明明带得动,但它偏不给用。我们的办法是去官方源码里改一个数字(10GB → 4GB),让 8GB 卡解禁。
改的就是这个:
// llm/llama_server.go 第 605 行
const limitedMMProjOffloadMemory = 10 << 30 // 改前:≤10GB 锁 CPU
const limitedMMProjOffloadMemory = 4 << 30 // 改后:≤4GB 才锁 CPU
然后自己编译出 ollama.exe 替换掉原版,就干了这一件事。
打开 PowerShell(Win 键 → 输入 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 --version
会输出类似 ollama version is 0.30.10。记下这个版本号,后面要用。
⚠️ 如果提示 ollama 不是内部或外部命令,说明 Ollama 没装或者没在 PATH 里。先去 ollama.com 下载安装。
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 行附近:
const limitedMMProjOffloadMemory = 10 << 30
改成:
const limitedMMProjOffloadMemory = 4 << 30
💡 改 4、改 6、还是改 1?
8GB 显卡(RTX 4060/5060)→ 改 4 最合适
12GB 显卡 → 改 6 更保守
想彻底解除限制 → 改 1
推荐 4。
改完保存,关掉记事本。就改这一个数字,别动其他东西。
还是在 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 . 跑完后,没有任何输出,直接回到光标闪烁——这就是成功。然后检查:
dir ollama.exe
能看到文件、大小约 73MB,就是成了。
❌ 如果报错 gcc not found:MinGW-w64 没装好,去补 winget install BrechtSanders.WinLibs.MCF.UCRT 然后重启 PowerShell。
❌ 如果报网络超时:那是 GOPROXY 没设置成功,重新执行 $env:GOPROXY = "https://goproxy.cn,direct"。
# 先找到你的 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 即可。
setx OLLAMA_FLASH_ATTENTION 1
setx OLLAMA_KV_CACHE_TYPE q8_0
执行后显示 成功: 指定的值已保存 就对了。
# 先杀掉正在运行的 Ollama
taskkill /f /im ollama.exe
# 重新启动
ollama serve
能看到 Listening on 127.0.0.1:11434 之类的输出,说明启动成功(保持这个窗口开着)。
另开一个 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 官方已经在加环境变量方案了,等合入后一行命令解决,不用再折腾编译。这方案只是过渡。