← All posts English version →

最貴的不是你問問題那幾秒,是它乾等的 23 小時:本地 AI 的電費真相

你在自己的聊天模型裡打了個問題,按下 enter,幾秒後答案就出來了。私密、免費,沒有按 token(文字用量)計費的表在跳。你可能會想:以前是租 AI,現在這台是你自己的了。

然後電費單來了,漲幅遠超過「一天就那幾秒鐘」能解釋的程度。你那幾下打字花不了什麼電費。真正花錢的,是你完全沒碰鍵盤的那些時段。

要省下這些電,要看三件事:「保溫待命、以防萬一」的閒置時數;一個能砍掉功耗、又不拖慢你拿到答案的顯示卡(GPU)技巧;還有怎麼不再於「讓電腦睡」和「眼睜睜看著整晚的任務中斷」之間二選一。

電到底耗在哪

一台本地 AI 機有下面三種狀態。最花錢的是「模型載著、GPU 閒置」和「24 小時待命」,不是推理中:

  • 推理中。高階卡在原廠設定下生成時,功耗可達 300–450 瓦。數字很高,但每個請求只執行幾秒鐘。
  • 模型載著、GPU 閒置。請求之間,模型可能留在 VRAM(顯示卡記憶體)裡,時間從幾分鐘到永久,看你的 keep-alive 設定(模型要在記憶體裡保留多久)。這時 GPU 的待機功耗,比空桌面時明顯更高。如果你用多螢幕加高更新率,待機功耗還會再增加。
  • 24 小時待命。如果這台機器在為你的手機、編輯器外掛或 Home Assistant 提供 API(讓其他程式連進來使用模型的介面),它就不能睡,整台機器(CPU、風扇、主機板、硬碟)整天運轉,卻沒在做事。

除非你整天都讓它不停地生成內容,否則你的「AI 伺服器」大部分時間都是「模型載著、GPU 閒置」或「24 小時待命」,一直用電,卻沒有在做事。真正在推理的時間,跟這些閒置的時數比起來非常短。

最花錢的不是你問問題的那幾秒,而是它「乾等你問」的那 23 小時。就像家裡的熱水器:你以為電費都花在洗澡那十分鐘,其實大半是它整天反覆把整桶水保溫在燙的狀態,只為了你哪天突然想用。本地 AI 也一樣:真正被你用到的推理只是零頭,帳單主要來自那一整天的「保溫待命」。

功耗上限技巧(速度降得不多)

r/LocalLLaMA(Reddit 上討論本地模型的社群)常討論這招:LLM 推理主要受記憶體頻寬限制,不是運算力。把 GPU 功耗上限壓低,時脈(GPU 的運作速度)會降,但生成速度(tokens/sec,每秒生成的文字量)幾乎不變。社群在 3090、4090 這類卡上的實測,結論相近:功耗上限砍 25–35%,推理速度只降個位數百分比,同時熱量和風扇噪音也跟著瓦數降低。

LLM 推理像在排隊取餐:瓶頸是出餐口(記憶體頻寬)有多快,不是廚房後面站了幾個廚師(運算力)。所以你把廚師人手砍掉三分之一(功耗砍 25–35%),出餐速度幾乎沒變,因為原本限制速度的不是廚師。你省下的是那一大票閒著的廚師的工錢(電費)和他們散的熱,菜上得差不多一樣快。

手動版作法(系統管理員視窗):

  • nvidia-smi -pl 300:把顯示卡限制在 300 瓦(你的卡可設定的範圍,用 nvidia-smi -q -d POWER 查)。
  • 自己測一次前後差異:用你常用的模型測五分鐘,就知道速度實際降了多少。生成圖片比 LLM 更依賴運算力,速度降得會比較明顯,上限設保守一點。
  • 注意:這個限制重開機就重置,要靠開機任務在每次開機後重新套用。

睡眠兩難(問題的另一半)

功耗上限能控制瓦數,但睡眠是另一個問題:

  • 長任務會中斷。微調模型(finetune)、大批次生成、執行整晚的 embedding(把文字轉成向量)都是長任務。Windows 的睡眠計時器看的是鍵盤和滑鼠有沒有動作,不看 GPU 有沒有在運算。例如 30 分鐘沒有輸入,Windows 就判定「閒置」,讓電腦進入睡眠,幾小時的 GPU 工作也跟著中斷。
  • 服務也會中斷。電腦一進入睡眠,你的 Ollama endpoint(讓其他程式連進來的網址)就斷線,所有連著它的程式(client)都連不上。
Windows 判斷你「在不在用電腦」,主要看一件事:有沒有人在動鍵盤滑鼠。問題是你的 GPU 正在整晚訓練模型,卻不算「有人在用」。就像保全只看門口有沒有人走動,沒注意到後院工廠燈火通明、還在趕工,時間一到就把總電源關掉,半夜的成果就中斷了。

常見的解法是把睡眠整個關掉。可是這樣一來,你原本為了隱私選擇在本機執行 AI,最後得到的卻是一台整天開著、一直在用電的機器。任務不會中斷了,但閒置的夜晚也一直在用電。

手動設定的限制

這些你都可以手動設定:用開機任務執行 nvidia-smi、關掉睡眠,也許再加一個排程腳本,晚上壓低功耗、白天放寬。這樣可以運作,跟 homelab 那篇的 DIY 做法一樣。但你可能會遇到這些情況:某天晚上 8 點你想打遊戲,GPU 的上限卻還停在為深夜服務設的值;或是電源計畫被別的程式換掉了,排程腳本沒有發現,你只能從之後的電費帳單上面看出來。

把它自動化

這正是 PowerDoze 要解決的問題。對應到本地 AI,它有三個功能:

  • 保持清醒白名單:名單上的程式在執行,電腦就不會睡。所以要加的是真正在跑長任務的程式,例如執行訓練或批次生成腳本的程式;用 Python 寫的腳本,程式名稱通常是 python(如果你平常還有別的 Python 程式一直開著,電腦也會跟著不睡)。不要加 ollama:Windows 版 Ollama 預設在你登入 Windows 時自動啟動,之後一直在背景執行,加進去電腦就等於一直不睡。加的方法:在 PowerDoze 左側選單點「白名單管理」,按「新增應用程式」。程式正在執行的話,在「執行中」分頁點它一下;沒在執行,就切到「手動輸入」分頁,輸入程式名稱(不用加 .exe)後按「新增」。選好之後按「新增所選」。任務跑完、程式結束後,電腦就照原本的設定睡眠。長任務不會中斷,閒置的夜晚也不再空耗電。
  • 內建 NVIDIA 功耗上限的電源模式:把 GPU 瓦數、CPU 上限、散熱策略存成一個模式,再設一條排程規則來切換:白天用全速,深夜切到「服務模式」,限制速度待命。GPU 上限每次重開機自動重新套用。
  • 分析儀表板(Pro 功能):長期追蹤估算瓦數、度數、電費,「限制 GPU 功耗到底有沒有差」從感覺變成數字。

PowerDoze 的限制:它不會幫你排程 AI 工作、不碰 VRAM 和模型載入、也不會讓推理變快。它管的是 AI 周邊的電源設定:睡眠、功耗上限、排程和量測。「模型載著、GPU 閒置」和「24 小時待命」的浪費,主要就出在這些地方。

排程、電源模式、白名單、監控都有免費版,不用註冊帳號。免費版的排程最多 3 條、電源模式最多 2 個。這篇的用法是白天一個模式、深夜一個模式,2 個模式就夠了。一切都在本機執行。如果你用本地 AI 是為了隱私,這一點可能對你很重要。

常見問題

Ollama 的模型會在顯示卡記憶體裡留多久?

Ollama 官方文件寫的預設是 5 分鐘:超過 5 分鐘沒有新的請求,模型就會被卸載,「模型載著、GPU 閒置」狀態也跟著結束。要改的話,先在工作列結束 Ollama,在 Windows 搜尋「環境變數」,選「編輯您的帳戶的環境變數」,新增 OLLAMA_KEEP_ALIVE(例如 1m 是 1 分鐘、0 是回答完立刻卸載、-1 是一直留著),再從開始功能表重新開啟 Ollama。

怎麼看顯示卡現在用了幾瓦?

在命令提示字元執行 nvidia-smi --query-gpu=power.draw --format=csv -l 1,它會每秒列出一次顯示卡目前的功耗,你可以一邊跑模型一邊看。看完按 Ctrl+C 停止。

用 AMD 或 Intel 顯示卡,也能照這篇做嗎?

一部分可以。nvidia-smi 只支援 NVIDIA 顯示卡,PowerDoze 的電源模式也要在有 NVIDIA 顯示卡的電腦上,才會出現「GPU 功耗限制」這一項;CPU 上限、散熱策略和排程照常能用,顯示卡的功耗要改用顯示卡廠商自己的軟體調整,這部分我們沒有測試過。

誰不需要這篇

模型跑在雲端的人,電費是別人的問題。在筆電上推理的人,筆電用電池時本來就會自動省電。如果你的 AI 機是一台專用的無頭(沒有螢幕和桌面)Linux 伺服器,PowerDoze 幫不上忙,它只支援 Windows。你可以改用 nvidia-smi 加 systemd timer(Linux 的排程功能)。這篇寫給常見的這種使用方式:同一台 Windows 桌機,既是你的日常主力機,也是你的 AI 機。下午 2 點需要全速,凌晨 2 點幾乎什麼都不用,但現在它兩個時間都設定在全速。

不想自己寫開機任務和排程腳本?PowerDoze 的電源模式和排程規則免費就能用:白天全速、深夜限速,設定一次就會每天自動切換。

從 Microsoft Store 取得 PowerDoze從 Microsoft Store 取得 PowerDoze

Nisonxi

我是 Nisonxi,PowerDoze 的開發者。當初純粹因為我自己受夠了 Windows 桌機整天全速發呆吃電、卻找不到一個能「看懂情況、自動切換」的工具,乾脆自己做。這個部落格就是我一路上的筆記。

關於作者與 PowerDoze →