<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AMD on KnightLi的博客</title>
        <link>https://www.knightli.com/tags/amd/</link>
        <description>Recent content in AMD on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 24 Apr 2026 18:30:00 +0800</lastBuildDate><atom:link href="https://www.knightli.com/tags/amd/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>解决 Ollama 使用 CPU 而不使用 GPU 运算的问题</title>
        <link>https://www.knightli.com/2026/04/24/fix-ollama-using-cpu-instead-of-gpu/</link>
        <pubDate>Fri, 24 Apr 2026 18:30:00 +0800</pubDate>
        
        <guid>https://www.knightli.com/2026/04/24/fix-ollama-using-cpu-instead-of-gpu/</guid>
        <description>&lt;p&gt;本地跑大模型时，最让人困惑的一类问题就是：机器明明有显卡，&lt;code&gt;Ollama&lt;/code&gt; 却还是主要吃 &lt;code&gt;CPU&lt;/code&gt;，速度也慢得离谱。&lt;/p&gt;
&lt;p&gt;先说结论，这类问题通常不是单一原因。最常见的几类分别是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ollama&lt;/code&gt; 根本没有识别到可用 GPU&lt;/li&gt;
&lt;li&gt;驱动、&lt;code&gt;ROCm&lt;/code&gt; 或 &lt;code&gt;CUDA&lt;/code&gt; 环境没装对&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ollama&lt;/code&gt; 服务启动时没有继承正确环境变量&lt;/li&gt;
&lt;li&gt;模型太大，实际已经退回到 &lt;code&gt;CPU&lt;/code&gt; 或 &lt;code&gt;CPU/GPU&lt;/code&gt; 混合加载&lt;/li&gt;
&lt;li&gt;AMD 平台存在额外兼容性问题，比如 &lt;code&gt;ROCm&lt;/code&gt; 版本、&lt;code&gt;gfx&lt;/code&gt; 代号或设备可见性设置不对&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面按最省时间的顺序排查。&lt;/p&gt;
&lt;h2 id=&#34;1-先确认是不是真的没用-gpu&#34;&gt;1. 先确认是不是“真的没用 GPU”
&lt;/h2&gt;&lt;p&gt;最直接的方法是看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama ps
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;重点看 &lt;code&gt;PROCESSOR&lt;/code&gt; 一列。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;100% GPU&lt;/code&gt;：说明模型完整跑在显卡上&lt;/li&gt;
&lt;li&gt;&lt;code&gt;100% CPU&lt;/code&gt;：说明完全没用上显卡&lt;/li&gt;
&lt;li&gt;&lt;code&gt;48%/52% CPU/GPU&lt;/code&gt; 这类结果：说明模型部分进显存、部分落到系统内存&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你看到的是 &lt;code&gt;100% CPU&lt;/code&gt;，后面就该重点查环境和服务配置。&lt;br&gt;
如果看到的是混合加载，那不一定是“显卡没生效”，更可能是显存不够。&lt;/p&gt;
&lt;h2 id=&#34;2-先排除最常见的误区模型装不进显存&#34;&gt;2. 先排除最常见的误区：模型装不进显存
&lt;/h2&gt;&lt;p&gt;很多人以为只要装了 GPU，&lt;code&gt;Ollama&lt;/code&gt; 就一定会全显卡推理。实际上不是。&lt;/p&gt;
&lt;p&gt;如果模型太大、上下文太长，或者机器上已经有别的模型占着显存，&lt;code&gt;Ollama&lt;/code&gt; 很可能会退回到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;部分 GPU + 部分 CPU&lt;/li&gt;
&lt;li&gt;直接 &lt;code&gt;100% CPU&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这时候可以先做两个最简单的验证：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;换一个更小的模型测试&lt;br&gt;
比如先用 &lt;code&gt;4B&lt;/code&gt;、&lt;code&gt;7B&lt;/code&gt; 这类小模型，而不是一上来就跑更大的参数量。&lt;/li&gt;
&lt;li&gt;卸载其他已加载模型后再试&lt;br&gt;
先看 &lt;code&gt;ollama ps&lt;/code&gt;，确认没有别的模型占着显存。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果小模型能上 GPU，大模型不行，问题往往就不在驱动，而在显存容量。&lt;/p&gt;
&lt;h2 id=&#34;3-检查显卡驱动和底层环境是不是可用&#34;&gt;3. 检查显卡驱动和底层环境是不是可用
&lt;/h2&gt;&lt;p&gt;如果连小模型都只能跑 &lt;code&gt;CPU&lt;/code&gt;，下一步就该看底层环境。&lt;/p&gt;
&lt;h3 id=&#34;nvidia-方向&#34;&gt;NVIDIA 方向
&lt;/h3&gt;&lt;p&gt;先确认驱动正常，系统能看到显卡。常见检查方式包括：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvidia-smi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果这里都报错，&lt;code&gt;Ollama&lt;/code&gt; 基本不可能正常使用 GPU。&lt;/p&gt;
&lt;h3 id=&#34;amd--rocm-方向&#34;&gt;AMD / ROCm 方向
&lt;/h3&gt;&lt;p&gt;如果你是 &lt;code&gt;AMD GPU&lt;/code&gt;，尤其是 &lt;code&gt;ROCm&lt;/code&gt; 环境，重点先看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rocminfo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rocm-smi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果这些工具都不能正常列出设备，说明问题还在 &lt;code&gt;Ollama&lt;/code&gt; 之前，先不要继续折腾应用层。&lt;/p&gt;
&lt;p&gt;对 AMD 来说，最常见的问题不是“有没有装驱动”，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ROCm&lt;/code&gt; 版本和系统版本不匹配&lt;/li&gt;
&lt;li&gt;当前 GPU 架构支持不完整&lt;/li&gt;
&lt;li&gt;设备虽然存在，但运行环境没有正确暴露给 &lt;code&gt;Ollama&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;4-重启-ollama-服务不要只重开终端&#34;&gt;4. 重启 Ollama 服务，不要只重开终端
&lt;/h2&gt;&lt;p&gt;这是非常高频的坑。&lt;/p&gt;
&lt;p&gt;很多人装完驱动、改完环境变量、补完 &lt;code&gt;ROCm&lt;/code&gt; 之后，只是重新开了一个终端，然后直接继续 &lt;code&gt;ollama run&lt;/code&gt;。但如果 &lt;code&gt;Ollama&lt;/code&gt; 是以后台服务方式运行，它很可能还在用旧环境。&lt;/p&gt;
&lt;p&gt;所以更稳的做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完整重启 &lt;code&gt;Ollama&lt;/code&gt; 服务&lt;/li&gt;
&lt;li&gt;必要时直接重启系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你是在 Linux 上以服务方式运行，通常要确认服务进程已经重新拉起，而不是沿用之前的旧进程。&lt;/p&gt;
&lt;h2 id=&#34;5-检查服务环境变量有没有真正传进去&#34;&gt;5. 检查服务环境变量有没有真正传进去
&lt;/h2&gt;&lt;p&gt;这一步在 &lt;code&gt;AMD ROCm&lt;/code&gt; 环境尤其重要。&lt;/p&gt;
&lt;p&gt;有些机器在终端里手动执行命令没问题，但 &lt;code&gt;Ollama&lt;/code&gt; 服务还是只跑 &lt;code&gt;CPU&lt;/code&gt;，原因是服务进程没有拿到你在 shell 里设置的变量。&lt;/p&gt;
&lt;p&gt;常见需要关注的变量包括：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ROCR_VISIBLE_DEVICES
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HSA_OVERRIDE_GFX_VERSION
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ROCR_VISIBLE_DEVICES&lt;/code&gt; 用来限制或指定 &lt;code&gt;ROCm&lt;/code&gt; 能看到哪些 GPU&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HSA_OVERRIDE_GFX_VERSION&lt;/code&gt; 常见于某些 AMD 平台兼容性处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你只是在当前终端里临时 &lt;code&gt;export&lt;/code&gt; 了变量，但 &lt;code&gt;Ollama&lt;/code&gt; 是 systemd、桌面后台服务或其他守护进程启动的，这些变量未必会生效。&lt;/p&gt;
&lt;p&gt;也就是说，终端里“看起来已经设置好了”，不代表 &lt;code&gt;Ollama&lt;/code&gt; 真的拿到了。&lt;/p&gt;
&lt;h2 id=&#34;6-amd-平台重点看-rocm-兼容性&#34;&gt;6. AMD 平台重点看 ROCm 兼容性
&lt;/h2&gt;&lt;p&gt;从公开页面信息看，这个问题对应的视频主题本身就落在 &lt;code&gt;AMD Max+ 395&lt;/code&gt;、&lt;code&gt;strix halo&lt;/code&gt;、&lt;code&gt;AMD ROCm&lt;/code&gt; 这条线上。&lt;br&gt;
这类环境里，&lt;code&gt;Ollama&lt;/code&gt; 不走 GPU，往往比 NVIDIA 平台更依赖版本匹配。&lt;/p&gt;
&lt;p&gt;可以优先排查下面几项：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ROCm&lt;/code&gt; 版本是否适合当前系统和当前显卡&lt;/li&gt;
&lt;li&gt;当前 GPU 是否属于 &lt;code&gt;ROCm&lt;/code&gt; 支持较好的架构范围&lt;/li&gt;
&lt;li&gt;是否需要补 &lt;code&gt;HSA_OVERRIDE_GFX_VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;是否是旧版 &lt;code&gt;Ollama&lt;/code&gt; 或旧版底层推理库导致兼容问题&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你已经确认 &lt;code&gt;rocminfo&lt;/code&gt; 正常、GPU 也能被系统识别，但 &lt;code&gt;Ollama&lt;/code&gt; 仍然只跑 &lt;code&gt;CPU&lt;/code&gt;，那大概率要回到版本组合上重新检查，而不是继续盲目调模型参数。&lt;/p&gt;
&lt;h2 id=&#34;7-dockerwsl-或远程环境要额外检查设备映射&#34;&gt;7. Docker、WSL 或远程环境要额外检查设备映射
&lt;/h2&gt;&lt;p&gt;如果你不是直接在裸机跑，而是在下面这些环境里运行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;WSL&lt;/li&gt;
&lt;li&gt;远程容器&lt;/li&gt;
&lt;li&gt;虚拟化环境&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那还要多看一层：GPU 设备有没有真正暴露进去。&lt;/p&gt;
&lt;p&gt;典型现象是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;宿主机能看到 GPU&lt;/li&gt;
&lt;li&gt;容器里 &lt;code&gt;Ollama&lt;/code&gt; 却只能跑 &lt;code&gt;CPU&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这时要先确认不是 &lt;code&gt;Ollama&lt;/code&gt; 本身的问题，而是容器或子系统根本没拿到 GPU 访问权限。&lt;/p&gt;
&lt;h2 id=&#34;8-最后再看日志而不是一开始就瞎猜&#34;&gt;8. 最后再看日志，而不是一开始就瞎猜
&lt;/h2&gt;&lt;p&gt;如果前面都查过了，最有效的做法不是继续反复重装，而是直接看 &lt;code&gt;Ollama&lt;/code&gt; 启动日志和运行日志。&lt;/p&gt;
&lt;p&gt;重点看两类信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有没有识别到 GPU&lt;/li&gt;
&lt;li&gt;有没有出现驱动、库加载、设备初始化失败之类的报错&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只要日志里明确出现类似“未找到兼容 GPU”或“初始化 ROCm/CUDA 失败”，排查方向就会立刻清晰很多。&lt;/p&gt;
&lt;h2 id=&#34;排查顺序&#34;&gt;排查顺序
&lt;/h2&gt;&lt;p&gt;如果你只想记最短路径，可以按这个顺序来：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ollama ps&lt;/code&gt; 看现在到底是 &lt;code&gt;GPU&lt;/code&gt;、&lt;code&gt;CPU&lt;/code&gt; 还是混合加载&lt;/li&gt;
&lt;li&gt;换一个更小的模型，排除显存不够&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;nvidia-smi&lt;/code&gt;、&lt;code&gt;rocminfo&lt;/code&gt;、&lt;code&gt;rocm-smi&lt;/code&gt; 先确认底层环境正常&lt;/li&gt;
&lt;li&gt;完整重启 &lt;code&gt;Ollama&lt;/code&gt; 服务&lt;/li&gt;
&lt;li&gt;检查服务环境变量，尤其是 AMD 的 &lt;code&gt;ROCR_VISIBLE_DEVICES&lt;/code&gt;、&lt;code&gt;HSA_OVERRIDE_GFX_VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果是 Docker / WSL，再检查设备映射&lt;/li&gt;
&lt;li&gt;最后看日志定位具体报错&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        
    </channel>
</rss>
