GPUを使ったローカルLLMの省エネ手法〜節電率の実測
仮想通貨のマイニング(採掘)では、グラフィックボードの電力をあえて絞って、電力あたりの効率を上げるのが定番の節約術でした。使える電力の上限を下げる(パワーリミット。消費電力の上限をワット数で制限すること)だけで、発熱も電気代も抑えられます。同じことが、自分のパソコンで動かすAIの文章モデル(ローカルLLM。手元で動く対話AIのこと)でも効くのか。気になって、手元のグラフィックボードで実際に試してみました。
結論から書きます。電力の上限を絞っても、生成の速さはほとんど落ちませんでした。むしろ発熱と消費電力が下がり、電気あたりの効率は上がります。ただし絞りすぎると急に遅くなるので、下げる程度には「おいしい範囲」があります。本記事では、電力を段階的に絞りながら測った速度と消費電力の実測値を紹介します。
試したこと
グラフィックボードは RTX 3090(電力の上限は初期設定で370ワット)。AIモデルは、毎回すべての部品を読み出すタイプ(dense)の中くらいのモデルを使いました。電力の上限を 370 → 300 → 250 → 200 → 150ワット と段階的に下げ、それぞれで生成の速さ(1秒あたりに作れる文字のかたまり=トークンの数)と、そのときの実際の消費電力を測っています。電力の上限を変える操作は、Linux では次のコマンド1行でできます(NVIDIA製グラフィックボードに付属する設定コマンド nvidia-smi を使います。管理者権限が必要です)。
実測の結果
| 電力の上限 | 速さ | 実際の消費電力 | 節電率 | 速さの変化 |
|---|---|---|---|---|
| 370W(初期) | 25.0 | 244W | — | — |
| 250W | 24.5 | 222W | 約9%減 | わずか2%減 |
| 200W | 21.1 | 186W | 約24%減 | 16%減 |
| 150W | 9.5 | 154W | 約37%減 | 62%減(遅すぎ) |
読み解き
いちばん伝えたいのは、電力の上限を250ワットまで下げても、速さはほとんど変わらなかった点です。速さは25.0から24.5へ、たった2%の低下。それでいて消費電力は約9%減りました。発熱もファンの音も抑えられます。これは「ほぼ無料の省エネ」と言っていい範囲です。
さらに200ワットまで絞ると、電気あたりの効率(同じ電力でどれだけ生成できるか)は今回の最良になりました。速さは16%落ちますが、消費電力は約24%も減ります。急ぎでない作業や、長時間の連続処理では、この設定が電気代にいちばん優しい選択でした。
いっぽう150ワットまで下げると、速さが9.5へと一気に崩れ、効率もかえって悪くなりました。ここまで絞ると、グラフィックボードが必要な力を出せず、遅さのわりに電気を食う「下げすぎ」の状態です。やみくもに絞ればいい、というわけではありません。
なぜ電力を絞っても速さが落ちにくいのか
理由は、AIの文章生成が「計算の速さ」よりも「メモリの読み書きの速さ(メモリ帯域)」で頭打ちになるからです。実際、電力の上限が370ワットのときでも、測定中の実際のピークは304ワットどまりで、上限に届いていませんでした。つまりグラフィックボードは、もともと電力を使い切っていないのです。使っていない余力を削っても速さに響かない。だから電力を絞っても平気だった、というわけです。
おすすめの設定
数値はあくまで RTX 3090 とこのモデルでの例です。おいしい範囲はグラフィックボードやモデルによって変わるので、自分の環境でも上限を少しずつ下げながら、速さが崩れ始める手前を探すのがおすすめです。AMDのグラフィックボードでも、似た省電力の設定(rocm-smi というツール)が用意されています。
使うモデルによっても消費電力は変わる
電力の上限だけでなく、動かすAIモデルそのものでも消費電力は大きく変わります。同じグラフィックボードで何本かを測ってみました(電力の上限は初期の370ワットのまま)。
| モデルの型 | 速さ | 消費電力 | 電気あたりの効率 |
|---|---|---|---|
| 毎回ぜんぶ動く型(dense・大) | 24.9 | 248W | 低い |
| 毎回ぜんぶ動く型(dense・中) | 77 | 260W | 中 |
| 必要な担当だけ動く型(MoE・大) | 96 | 162W | 高い |
| 必要な担当だけ動く型(MoE・中) | 160 | 189W | とても高い |
はっきり差が出ました。毎回すべての部品を読み出す型(dense)は消費電力が高く、電気あたりの効率は低い。いっぽう必要な担当だけが動く型(MoE/混合エキスパート)は、消費電力が低く効率も高い。理由は、denseが毎回すべての重み(モデルの中身のデータ)をメモリから読むのに対し、MoEは使う分だけしか読まないからです。つまり電力を主に食っているのは「メモリからの読み出し」だと分かります。省エネを重視するなら、モデル選びの段階でMoE型を選ぶのも有効です。
電力の中身は「メモリ」か「GPUチップ」か
ここからは一歩ふみ込みます。消費電力が主にメモリ由来なら、GPUの計算部分(チップの演算コア)は電力をムダづかいしているだけかもしれません。そこで、メモリの動く速さ(メモリのクロック=動作周波数)はそのままに、計算コアの動作周波数だけを段階的に下げて測ってみました。
| 計算コアの上限 | メモリ | 速さ | 消費電力 |
|---|---|---|---|
| 1875MHz(初期) | フル | 25.0 | 247W |
| 1500MHz | フル | 24.5 | 206W |
| 1200MHz | フル | 23.8 | 193W |
| 400MHz(下げすぎ) | フル | 13.5 | 166W |
結果はおどろきでした。計算コアの上限を1875から1200へ下げても、速さは5%しか落ちないのに、消費電力は22%も減りました(247→193ワット)。このとき減った約54ワットこそ、「メモリ待ちのあいだ、計算コアが意味なく回っていたぶんの電力」です。さらにコアを最低まで落としても消費電力は166ワットで下げ止まりました。この166ワットが「文章生成に本当に必要なメモリ側の電力」の目安です。ざっくり言えば、247ワットの内訳はメモリと土台で約166ワット+計算コアで約80ワット(その大半がムダ)だった、と読めます。
おもしろいのは、この「計算コアだけを絞る」やり方(Linuxでは sudo nvidia-smi -i 1 -lgc 210,1500、解除は -rgc)が、前半の「電力全体を絞る」やり方よりも省エネだった点です。同じ速さ(24.5)で比べると、電力全体を絞ると221ワット、計算コアだけを絞ると206ワット。ムダなところ(計算コア)をねらって削るほうが、全体を一律に絞るより効率が良いという結果でした。
別のグラフィックボード(RTX 3060)でも試した
同じことを、もう一枚の少し小さいグラフィックボード(RTX 3060。作業スペースは12GB)でも測ってみました。こちらは軽いモデルを動かしています。結果、電力の上限を下げるほど効率(電気あたりの生成量)は上がり、いちばん絞った状態(100ワット)で最良になりました。この点は3090と同じ傾向です。
ただし、絞ったときの速度の落ち方には違いがありました。3090で大きめのモデルを動かしたときは、計算コアを絞ってもほとんど速度が落ちませんでした(メモリ待ちでコアが余っていたため)。いっぽう3060で軽いモデルを動かすと、絞ったぶんだけ速度も素直に落ちました。軽いモデルは計算とメモリのバランスが取れていて、余っているコアが少ないからだと考えられます。「速度をほぼ保ったまま大きく省エネできる」おいしさは、大きなカードで大きめのモデルを動かすとき(メモリ待ちが強いとき)ほど大きくなる、と言えそうです。
どちらのグラフィックボードでも、電力を絞れば効率そのものは良くなります。自分の機材とよく使うモデルで、少しずつ絞りながら速度の落ち具合を見て、ちょうどいい点を探すのがおすすめです。
まとめ
マイニングで定番だった「電力を絞って効率を上げる」節約術は、ローカルLLMでもしっかり効きました。電力の上限を250ワットまで下げても速さはほぼそのままで、消費電力は約9%減。200ワットなら約24%節電できます。さらに一歩進めると、消費電力の主役はメモリの読み出しで、計算コアはかなり余っていました。だからコアの動作周波数だけをねらって下げると、電力全体を一律に絞るより省エネにできました。モデル選びの段階で「必要な担当だけ動く型(MoE)」を選ぶのも効きます。まとめると、AIの文章生成はもともと電力を使い切っていないので、そのムダをねらって削るのがコツです。ただし下げすぎは逆効果なので、速さが崩れる手前を探してください。次回は、電力以外の設定でローカルLLMを速く・軽くする小技を、実際の数字とあわせて紹介する予定です。
測定条件: RTX 3090/dense型の中規模モデル/生成256トークン×3回の中央値(中央値は、複数回の測定値を大きさ順に並べたときの真ん中の値)。消費電力は生成中の実測平均。数値はグラフィックボードやモデル、環境で変わります。専門用語はかっこ内に併記しました。





ディスカッション
コメント一覧
まだ、コメントがありません