<?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/zh-tw/tags/amd/</link>
        <description>Recent content in AMD on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 24 Apr 2026 18:30:00 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/amd/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>解決 Ollama 使用 CPU 而不使用 GPU 運算的問題</title>
        <link>https://www.knightli.com/zh-tw/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/zh-tw/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;
&lt;h2 id=&#34;結語&#34;&gt;結語
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Ollama&lt;/code&gt; 使用 &lt;code&gt;CPU&lt;/code&gt; 而不使用 &lt;code&gt;GPU&lt;/code&gt;，本質上通常是三類問題之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU 根本沒有被識別&lt;/li&gt;
&lt;li&gt;GPU 能被識別，但執行環境沒有傳到 &lt;code&gt;Ollama&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GPU 在工作，但模型太大，最後還是回落到 &lt;code&gt;CPU&lt;/code&gt; 或混合記憶體&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先把這三類分開，排查就會快很多。&lt;br&gt;
如果你是 AMD 平台，尤其要把注意力放在 &lt;code&gt;ROCm&lt;/code&gt; 版本、裝置可見性和相容性變數上，而不是只看 &lt;code&gt;Ollama&lt;/code&gt; 命令本身。&lt;/p&gt;
&lt;p&gt;原影片：&lt;a class=&#34;link&#34; href=&#34;https://www.bilibili.com/video/BV1cHoYBqE8k/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.bilibili.com/video/BV1cHoYBqE8k/&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
