为什么你的 Ollama 在 Windows 上“装傻”?

最近入手了搭载 AMD Strix Halo 架构的新本,Radeon GPU 的算力确实让人眼馋。统一内存架构让本地跑大模型不再是奢望,32GB 甚至 64GB 的内存池足以让 7B 到 32B 的模型流畅运行。但在实际部署 Ollama 时,不少朋友遇到了一个尴尬的局面:明明硬件强悍,Ollama 却像是在“摸鱼”,全程只用 CPU 跑,生成速度慢如 PPT,完全没发挥出 Radeon 显卡的实力。

这在 Linux 环境下几乎不是问题,ROCm 的支持相对成熟,Ollama 能自动识别并调用 GPU。但在 Windows 生态里,情况就复杂得多。尤其是对于 Strix Halo 这种较新的架构,Ollama 默认的自动检测机制偶尔会“失灵”,无法正确匹配到底层的图形接口,导致 GPU 加速失效。如果你正对着命令行里缓慢跳动的 Token 发愁,别急着换硬件,大概率是环境变量没配好。今天就来聊聊如何手动“唤醒”沉睡的 GPU,让 Ollama 在 Windows 上也能满血运行。

诊断:是 CPU 在负重前行

在动手修复之前,先得确认问题所在。很多时候,我们以为 GPU 在工作,其实它一直在旁观。最直观的判断方法是观察生成速度。如果你在运行 ollama run llama3 或类似命令时,发现首字延迟(Time to First Token)超过 1.5 秒,且生成速度稳定在 10 tokens/s 以下(对于 7B 模型而言),那基本可以判定模型正跑在 CPU 上。

更严谨的方式是查看系统资源管理器。打开任务管理器,切换到“性能”标签页,找到 GPU 选项卡。在运行 Ollama 生成任务时,如果"3D"或"Compute"引擎的利用率几乎为 0%,而 CPU 占用率却飙升,那就是典型的 GPU 未接管计算。此外,Ollama 的服务日志也是重要线索。在 PowerShell 中输入以下命令查看实时日志:

Get-Content $env:LOCALAPPDATA\Programs\Ollama\ollama.log -Wait

如果在日志中看到类似 offloading 0 layers to GPU 或者完全没有提及 VulkanROCm 相关的初始化信息,反而充满了 CPU inference 的字样,那就实锤了:Ollama 没能识别到你的 Radeon 显卡,正在用 CPU 硬扛所有计算负载。

核心解法:强制指定 GFX 版本

问题的根源通常在于 Ollama 无法自动获取 Strix Halo 架构对应的正确 GFX 版本标识。AMD 的 GPU 驱动在不同架构下有特定的代号,新出的 Strix Halo 属于 RDNA 3.5 架构,其 GFX 版本通常为 11.0.3 或更高,但旧版软件或默认配置可能无法正确读取这一信息。

解决思路很简单:通过设置环境变量 HSA_OVERRIDE_GFX_VERSION,手动告诉 Ollama 底层硬件的真实身份。这相当于给软件一张“通行证”,让它绕过自动检测的坑,直接调用正确的指令集。

临时测试方案

在永久修改之前,建议先在当前终端会话中进行测试,确保参数有效。以 PowerShell 为例,执行以下命令:

$env:HSA_OVERRIDE_GFX_VERSION = "11.0.3"
ollama serve

保持这个窗口不动,新开一个终端窗口运行模型测试:

ollama run qwen2.5:7b

此时再观察生成速度和任务管理器。如果 GPU 利用率瞬间拉高,生成速度提升至 40-50 tokens/s(7B 模型),说明该版本号匹配成功。如果依然无效,可以尝试微调版本号,例如 11.0.012.0.0,但针对 Strix Halo,11.0.3 通常是最佳选择。

永久生效配置

测试成功后,我们需要将这个设置写入系统环境,避免每次开机都要手动输入。Windows 下有两种常用方法,推荐第一种,更稳妥且不易出错。

方法一:通过系统界面设置

  1. Win + S 搜索“编辑系统环境变量”,点击打开。
  2. 在弹出的窗口右下角点击“环境变量”。
  3. 在下方的“系统变量”区域(注意不是上方的用户变量,以确保 Ollama 服务能读取到),点击“新建”。
  4. 变量名填写:HSA_OVERRIDE_GFX_VERSION
  5. 变量值填写:11.0.3
  6. 连续点击“确定”保存所有窗口。
  7. 关键一步:重启 Ollama 服务。可以在任务管理器中结束 ollama.exe 进程,或者直接在管理员权限的 PowerShell 中运行 Restart-Service ollama(如果已安装为服务)。如果是后台托盘运行,右键退出后重新启动。

方法二:PowerShell 一键脚本

如果你喜欢命令行操作,可以直接运行以下脚本完成配置。请注意,这需要管理员权限。

# 以管理员身份运行此脚本
$varName = "HSA_OVERRIDE_GFX_VERSION"
$varValue = "11.0.3"

# 检查是否已存在,存在则更新,不存在则新建
if ([System.Environment]::GetEnvironmentVariable($varName, "Machine")) {
    [System.Environment]::SetEnvironmentVariable($varName, $varValue, "Machine")
    Write-Host "已更新系统环境变量:$varName"
} else {
    [System.Environment]::SetEnvironmentVariable($varName, $varValue, "Machine")
    Write-Host "已新建系统环境变量:$varName"
}

# 提示重启服务
Write-Host "配置完成!请重启 Ollama 服务或重启计算机以生效。"
Write-Host "提示:可在任务管理器中结束 ollama.exe 进程后重新运行 'ollama serve'"

运行完毕后,记得重启终端或电脑,让环境变量全局生效。

验证与后续优化

配置完成后,再次运行模型进行验证。这次应该能明显感觉到“推背感”。对于 7B 模型,首字延迟应降至 0.3 秒以内,生成速度稳定在 45 tokens/s 以上;即便是 14B 模型,也能保持在 25-30 tokens/s 的流畅水平。你可以再次查看任务管理器的 GPU 面板,确认 Compute 引擎是否处于高负载状态。

除了 GFX 版本,还有几个细节能进一步提升体验。首先是驱动更新,务必前往 AMD 官网下载最新的 Adrenalin 驱动程序,新版驱动对 Strix Halo 的 Vulkan 和计算库支持更为完善。其次是模型选择,鉴于统一内存架构的优势,不必过分纠结于极端的量化版本,Q4_K_M 或 Q5_K_M 通常能在精度和速度间取得最佳平衡,且能充分利用大内存带宽。

最后,虽然我们通过环境变量解决了 Windows 下的识别问题,但也要承认,目前 Windows 生态在 AMD GPU 计算上的配置复杂度确实高于 Linux。Linux 下往往开箱即用,而 Windows 用户则需要多这一步“手动挡”的操作。不过,一旦配置成功,Ollama 在 Windows 上的稳定性其实相当不错,足以胜任日常代码辅助、文档总结等生产力任务。

折腾完这些,你会发现本地 AI 的乐趣不仅仅在于模型本身,更在于掌控硬件的成就感。当看着 Token 飞速跳动,数据完全在本地闭环,没有云端延迟也没有隐私顾虑,这才是端侧 AI 该有的样子。现在,你的 Radeon 显卡已经准备就绪,去试试那些之前跑不动的大模型吧。

200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper

在这里插入图片描述

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐