ローカル LLM と VRAM メモリ速度

パラメータ数とメモリ帯域

LLM はパラメータ数が多い方が性能が高いですがその分多くの RAM を必要とします。例えばパラメータ数が 32b の LLM モデルの場合、単純に考えるとパラメータだけでも fp32 で 128GB、fp16 でも 64GB の規模感です。4bit に量子化できたと仮定しても最低 16GB 以上、実際には 18GB 程度のメモリが必要です。

これらのパラメータは演算を行うたびに毎回メモリから読み込まれます。そのため LLM の推論にはパラメータを格納するメモリ容量に応じたメモリの転送速度 (メモリ帯域) が必要になることがわかります。

例えば PC 用メモリの DDR4-3200 2ch (128bit) の転送レートはピークで 51.2GB/s です。この場合 4bit 量子化した 18GB のパラメータを最大レートで読み込めたとしても秒間 2.8回しか読み込むことができません。1 Token 生成するたびに全パラメータが 1回だけロードされると仮定しても、最大で 2.8 token/s の速度しか期待できないことになります。実際に DDR4-3200 を搭載した CPU Ryzen 9 3950X での 32b モデルの推論結果は 2.16 token/s で、この数値を下回っていました。

もちろん実際にはもっと多くの帯域が必要になるかもしれませんし、逆に MoE のようにモデル構造によっては推論に必要なメモリが少なく済む可能性があります。

GPU と VRAM 速度

GPU は並列演算に特化しており、同時に大量のデータを扱うことができます。そのため高性能な GPU には、性能に見合うだけのより高速な専用メモリが VRAM として搭載されています。

一般的に CPU よりも GPU の方が演算能力が高く VRAM 速度も速いので、パラメータをできるだけ VRAM に載せ、GPU 上で動作させることが高速化に繋がります。

例えば GeForce RTX 2080Ti はメモリ帯域は 616 GB/s と高速です。CPU (DDR4-3200) と比べると 12倍も速く、仮に 18GB のモデルがすべて VRAM に収まったと仮定すると 1秒に 34回読み出せる計算になります。ただし実際は VRAM 容量が 11GB と少ないため残念ながら 18GB のパラメータは VRAM から溢れます。PC 向けのビデオカードでは VRAM 容量が小さいことが多く、大きな制限となっています。

ollama のマルチ GPU 推論と VRAM

ollama では複数のビデオカードを併用することで、大きなモデルも分割して VRAM に載せることができるようになります。1台では入り切らない大きなモデルも複数台集めれば高速な VRAM 上で走らせられるようになるわけです。ですが残念ながらすべての GPU が同時に動いているわけではありません。パラメータはレイヤー毎に分割されるので、前段レイヤーの出力を受け取ってから次のレイヤーの演算が走ります。GPU も前の GPU の結果が出るまで待つことになります。

よって現時点では、ビデオカードを複数台接続しても時間あたりの演算能力が増えるわけでは無いようです。将来的には別の方法が登場するかもしれませんが、今のところビデオカード複数台使う目的は GPU の並列化や演算能力の増強ではなく、あくまでトータルの VRAM 容量を増やすことにあります。

  • 1台分の VRAM に収まる小さいモデルはビデオカードを増やしても速度が変わらない
  • 直列動作なので異なる性能のビデオカードでも組み合わせられる
  • 台数が増えればそれだけ GPU が休んでいる時間が増え稼働率は下がる

そのため家に眠っていた旧世代のビデオカードを再利用することができますし、ビデオカードを 5台つないだからといって必ずしも消費電力が 5倍になるわけではありません。

メモリ速度からの推論速度の上限を大雑把に計算してみる

少々乱暴ですが、GPU のメモリ速度とメモリ使用量から推論の限界速度がどれくらいなのか割り出してみました。あくまでメモリ速度への依存度が高いことが前提となっています。

先程も例に上げた GeForce RTX 2080Ti の場合 616 GB/s で、かつ 14b (phi4:14b) 実行時の使用メモリ容量は 10GB となっています。よって 1秒間に 61.6 回読み込める計算なので、メモリ速度から見た推論速度の予測上限値は 61.6 になります。実際の推論速度は 51.33 tps でした。

GPUメモリ速度メモリ使用量token/s予測上限値
RTX 2080Ti616 GB/s10GB51.33 tps61.60

複数台の GPU に分散される場合は、それぞれの GPU に割り当てられるメモリ容量から個別に求めて加算します。

予測上限値 = ( 1 / ∑ (GPU毎の使用メモリサイズ / GPU のメモリ速度) )

VRAM に乗らず GPU にも分散される場合は、CPU の割合からメモリ使用量を求めてから同じように加算しています。

予測上限値 = (1/( (CPUの使用メモリサイズ / CPU メモリ速度) + ∑ (GPU毎の使用メモリサイズ / GPU のメモリ速度)))

今まで集めたケースそれぞれで予測値を計算して、まとめページの表に追加してみました。こちらのページで右端にある「mpr」がメモリ速度から求めた予測上限値となります。

以下の表は上のページからの抜粋です。複数 GPU のケースがわかりやすいように 70b (llama3.3:70b) のデータを選びました。

GPUVRAM合計メモリ使用量GPU割合token/s予測上限値
RTX4060Ti16GB46GB35%1.65 tps2.57
RTX4060Ti
RTX2080Ti
27GB48GB57%2.22 tps3.28
RTX4060Ti x2
RTX2070S
40GB49GB83%3.08 tps3.40
RTX4060Ti x2
RTX2070S
GTX1080
48GB51GB94%4.25 tps4.68
RTX4060Ti x2
RTX2070S
GTX1080
GTX1070
56GB55GB100%5.10 tps5.50

GPU が複数台接続されている場合は、それぞれの VRAM 容量に応じて均等にメモリが割り当てられているものとみなしています。実際の VRAM 割り当てを見ているわけではないのでモデルサイズが小さい場合は誤差が生じます。例えば小さいモデルが速い GPU の VRAM にすべて収まるような場合でも、遅い VRAM の GPU と平均化されてしまうため予測値が実測値よりも低くなることがあります。

以下の表はシングル GPU (+CPU) のケースで 14b (phi4:14b) の結果です。

GPUVRAM合計メモリ使用量GPU割合token/s予測上限値
RX76008GB10GB80%11.43 tps15.72
RTX2070S8GB10GB76%14.67 tps22.86
RTX4060Ti16GB12GB100%27.92 tps24.00
RTX2080Ti11GB10GB100%51.33 tps61.60

大半は token/s として予測未満の値が出ているように見えますが、GeForce RTX 4060 Ti では予測した上限値よりも高いスコアが出ています。RTX 3000 のデータがないのでわかりませんが、RTX 4000/5000 などの新しい世代では必ずしも計算が合わないかもしれません。おそらく使用メモリには必ずしも毎回ロードされないパラメータ領域があるか、またはキャッシュが効きやすい短時間に何度も参照される領域も含まれているのだと考えられます。

まとめなど

ビデオカードを追加する場合にどの程度の速度向上が見込めるかをある程度予想できるので、無駄な投資をしなくて済むのではないかと思って計算してみました。ただし新しい世代の GPU では予想よりも速くなる可能性があるため、必ずしもこの通りの結果にはならないようです。 RTX の 4000 世代ではキャッシュメモリが増加しているので、もっとモデルの構造やアルゴリズムも考慮しないといけなかったのかもしれません。

関連ページ

ビデオカード RADEON を複数台使ってローカル LLM を動かす

GeForce だけでなく RADEON でもビデオカードを複数台使ってローカル LLM を走らせてみました。自分だけの Chat AI として使えますし、もちろんパラメータ数が同じなら蒸留版 DeepSeek R1 も動きます。

インストール手順

RADEON Vega 64/56 は VM への GPU パススルーができないこともあり、PC には Linux を直接インストールしています。

  1. RADEON を複数枚差した PC に Ubuntu 24.04 をネイティブインストール
    • 通常の Desktop 版を最小インストール
  2. ログインして OS の更新
    • sudo apt update; sudo apt upgrade -y
  3. ollama Linux 版インストーラーを公式の手順に従い実行
    • curl -fsSL https://ollama.com/install.sh | sh
  4. テストするためののモデルのダウンロード
    • ollama pull llama3.3:70b
    • ollama pull qwen2.5:32b
    • ollama pull gemma2:27b
    • ollama pull phi4:14b
    • ollama pull gemma2:9b
    • ollama pull gemma2:2b
  5. 実行
    • 例: ollama run gemma2:27b

特にドライバなどのインストールは不要で、ollama のインストールだけで GPU が認識されます。ただし使用可能な GPU は GCN の場合 Vega 56/64 以降、RDNA2 の場合は RX6800 以上、RDNA3 は RX7600 以上となります。APU は含まれません。

RADEON の推論速度の比較 (27b)

以下は gemma2 27b の結果です。token/s の数値が大きいほど高速に出力できることを意味しています。VRAM 8GB でもビデオカード 3枚使うことで GPU が 100%、14.55 token/s と CPU の 5.7倍の速度で実行できるようになりました。

VRAM合計GPU / CPU必要RAMGPUの割合token/s
なしRyzen 9 3950X18GB0%2.54
8GBRyzen 9 3950X
RX 7600
18GB45%3.52
8GBRyzen 7 9700XX
RX Vega 64
18GB45%4.36
16GB (2台)Ryzen 9 3950X
RX 7600
RX Vega 64
21GB78%6.00
16GB (2台)Ryzen 7 9700X
RX Vega 64
RX Vega 56
21GB79%7.45
24GB (3台)Ryzen 9 3950X
RX 7600
RX Vega 64
RX Vega 56
23GB100%14.55
gemma2 27b の推論速度

RADEON RX7600 (RDNA3) と Vega 64/56 (GCN5) の組み合わせでもきちんと動作しています。GeForce と同じように、異なる世代の混在でも複数の GPU を認識し、マルチ GPU のローカル LLM 推論に使えることがわかりました。

マザーボード上には PCIe x16 スロットが 2つしか無いので、ビデオカードの 3枚目は外部接続です。SSD 用の M.2 スロットに OCulink 変換カードを差し込み、OCulink ケーブル経由で MINISFORUM の DEG1 に接続しています。

RADEON の推論速度の比較 (14b)

14b の結果です。こちらは 8GB のビデオカード 2枚で VRAM に載っています。

VRAM合計GPU / CPU必要RAMGPUの割合token/s
なしRyzen 9 3950X18GB0%4.63
8GBRyzen 9 3950X
RX 7600
10GB82%11.43
8GBRyzen 7 9700XX
RX Vega 64
18GB82%13.97
16GB (2台)Ryzen 9 3950X
RX 7600
RX Vega 64
14GB100%18.00
16GB (2台)Ryzen 7 9700X
RX Vega 64
RX Vega 56
14GB100%22.71
phi4 14b の推論速度

テスト時の PC が異なるので公平な比較とは言えませんが、Vega 64/56 は古い GPU ながらメモリが高速なので RX7600 よりも LLM の推論速度が速いようです。以下は今回使用した GPU のスペックです。

GPUArchspfp32 GflopsVRAMmem b/w
RX 7600RDNA32048 sp217508GB288 GB/s
RX 6400RDNA2768 sp35654GB128 GB/s
RX Vega 64GCN54096 sp126658GB484 GB/s
RX Vega 56GCN53584 sp105448GB410 GB/s

より多くのモデルの結果及び GeForce 含めた結果は以下のページにまとめています。

RADEON RX 6400 (6500XT) でも LLM を使えるようにする

RADEON RX 6400 は RDNA2 世代の下位グレードの GPU です。VRAM 4GB に 12CU 768sp と性能もかなり控えめで、APU 内蔵の GPU に近いスペックです。そのかわり補助電源不要で Low Profile PCI 版のビデオカードも存在します。

公式でも ROCm には非対応ですが、ollama のドキュメントには対応方法が書いてあるので試してみました。なおドキュメント(以下のリンク)には 2025/02/15 現在 RX 5400 と書かれていますが、gfx1034 のことを差しているので RX 6400 (または 6500XT) の間違いだと思われます。

方法: ollama の環境変数 HSA_OVERRIDE_GFX_VERSION に “10.3.0” を設定します。

  1. sudo systemctl edit ollama.service
    • 使用するエディタを指定したい場合は以下のようにする
    • sudo EDITOR=vi systemctl edit ollama.service
  2. エディタが起動したら 3行目からの空行に以下の 2行を挿入する
    • [Service]
    • Environment=”HSA_OVERRIDE_GFX_VERSION=10.3.0″
  3. 保存して終了したら以下のコマンドを実行する
    • sudo systemctl daemon-reload
    • sudo systemctl restart ollama

この設定で RX 6400 でも GPU を使って走らせることができるようになりました。VRAM が 4GB しかないので限界はありますが、小さいモデル限定なら CPU よりは速度が出ています。ただし VRAM 容量や速度を考えると使用できるのは 7b くらいまでになるかと思います。

また同じ世代の GPU 同士に限りますが RX 6400 を複数台使用した場合でもきちんと動作しました。ドキュメントには “HSA_OVERRIDE_GFX_VERSION_番号=10.3.0” のように、環境変数名にデバイス番号を指定することで異なる世代の RADEON を組み合わせられるように記載されていますが、残念ながらうまく動きませんでした。

RX 6400 による推論時間は以下のとおりです。2枚使用した場合と CPU のみの結果も載せています。

model RX6400 x2 (合計 8GB)
token/s
RX6400 (4GB)
Token/s
CPUのみ
Token/s
llama3.3:70b1.05 (16%)1.03 (8%)1.01
qwen2.5:32b2.42 (34%)2.29 (17%)2.16
gemma2:27b2.87 (38%)2.70 (21%)2.54
phi4:14b6.94 (72%)5.60 (39%)4.63
gemma2:9b11.70 (85%)8.52 (51%)6.94
qwen2.5:7b18.52 (100%)13.05 (69%)9.27
gemma2:2b40.60 (100%)46.33 (100%)19.73
RADEON RX 6400 を使った各種モデルの推論時間の比較

関連ページ

普通の PC に GPU 5枚繋いで Llama 70b を動かしてみる

最近は一般の PC でも LLM (Large Language Model) を走らせることができるようになっています。いわゆる ChatGPU のローカル版で、自分の PC 上で動くため API 利用料金などを気にせずに使うことが可能です。ただし動作可能な LLM の規模はビデオカードの VRAM 容量に依存します。

Ollama は複数の GPU に対応しており、前回 VRAM 8GB の GeForce GTX でも十分戦力になることがわかったので更にいろいろと台数をやしてみました。

結果、llama 70b のモデルを GPU 上で走らせるために必要だったビデオカードは 5台で合計 VRAM は 56GB、最終的な速度は 4 tps。CPU よりは数倍速いですが、少々実用には厳しいようです。

使用したビデオカードは以下の通りです。

70b の生成速度のまとめ

ビデオカードの種類や枚数毎の llama 70b の生成速度の違いを表にまとめました。下に行くほどビデオカードの台数が増えています。

VRAM合計GPU / CPU必要RAMCPUの割合GPUの割合token/s
なしRyzen 7 9700X46GB100%1.02
8GBRyzen 7 9700X
GTX 1080
47GB83%17%1.32
8GBRyzen 7 9700X
RX Vega 64
47GB83%17%1.34
16GB (2台)Ryzen 7 9700X
GTX 1080
GTX 1070
48GB67%33%1.45
16GB (2台)Ryzen 7 9700X
RX Vega 64
RX Vega 56
48GB65%35%1.55
32GB (2台)Ryzen 9 3950X
RTX 4060Ti
RTX 4060Ti
47GB32%68%2.22
40GB (3台)Ryzen 9 3950X
RTX 4060Ti
RTX 4060Ti
RTX 2070S
49GB17%83%3.08
48GB (4台)Ryzen 9 3950X
RTX 4060Ti
RTX 4060Ti
RTX 2070S
GTX 1080
51GB5%95%3.94
56GB (5台)RTX 4060Ti
RTX 4060Ti
RTX 2070S
GTX 1080
GTX 1070
55GB100%4.09
llama 70b の推論速度

表にある必要 RAM 及び CPU/GPU の割合はそれぞれ実行時に ollama ps コマンドで表示される数値です。複数のビデオカードに分割できるとはいえ、台数が増えれば増えるほど必要 RAM が増えており、メモリ効率も悪くなっていることがわかります。

枚数を増やすほど消費メモリが増え、ますますビデオカードを増やす必要が生じてしまいます。5台使用時の必要メモリは CPU 単体のみの場合と比べて 10GB ほど増えおりあまり効率はよくありません。やはり VRAM は多ければ多い方が良いです。

動作環境など

マザー上には PCIe x16 スロットが 2つしか無いのでそれ以外の GPU は外付けです。SSD 用の M.2 (PCIe x4) とマザーボード上の PCIe x1 スロットを利用して外部に 3台のビデオカードを繋いでいます。

↓動作時の様子。一番上が MINISFORUM DEG1 (OCulink 接続) に載った GeForce RTX 2070 Super、床に立ててあるのが PCIe x1 接続の GeForce GTX 1080 と GTX 1070。

前回Proxmox 上の VM にパススルーしていましたが、少しでも性能を上げるために今回は SSD に直接 Ubuntu をインストールしています。M.2 スロットはすべて GPU の接続に使用したため SATA SSD を使用しています。

前回は VM だったので RADEON RX Vega 64/56 をパススルーできなかったのですが、OS を直接インストールしたことで Vega でも動くようになりました。Ollama が対応しているのは Vega 56/64 以降なので残念ながら RADEON RX 480 (Polalis) は使用できませんでした。とりあえず手持ちの RADEON でも複数台使用した動作を確認することができました。

GPU 台数とモデルサイズの関係

複数台 GPU を使用した場合に VRAM に 100% 載るモデルサイズの目安は以下のとおりです。

VRAM の組み合わせ合計 VRAM 容量モデルサイズ(Q4)モデルの例
8GB + 8GB16GB14bphi4:14b など
8GB + 8GB + 8GB24GB27bgemma2:27b など
16GB + 8GB24GB32bqwen2.5:32b など

組み合わせの例。

VRAM の組み合わせ合計 VRAM 容量モデルtoken/s
GeForce GTX 1080
GeForce GTX 1070
16GBphi4:14b16.19
RADEON RX Vega 64
RADEON RX Vega 56
16GBphi4:14b22.71
GeForce RTX 2070 Super
GeForce GTX 1080
GeForce GTX 1070
24GBgemma2:27b12.89
GeForce RTX 2070 Super
GeForce RTX 4060Ti
24GBqwen2.5:32b13.56

より詳しい数値は以下のページにまとめています。

関連ページ

Ryzen Zen5 一般向け CPU で過去最高の浮動小数点能力

AMD Ryzen Zen5 世代の Desktop CPU で vfpbench を走らせてみました。使用したのは Ryzen 7 9700X で TDP はデフォルト (65W) 設定です。

Zen5 は AVX512 の 512bit FMA 積和命令を同時に 2命令実行可能で、この場合 32bit の浮動小数点演算をサイクルあたり 64 回。これまでの CPU の倍の演算能力になります。

以下は 9700X のシングルスレッド単精度からの抜粋です。512bit の AVX512 命令がスカラーや 128bit など他の命令と同じ IPC になっていることがわかります。512bit の FMA (vfmaddps) も同じ IPC で 2命令走っています。

 9700X Zen5                      TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddss (32bit x1) n12       0.450    22301.1    11150.5  (  2.0 2.0)   スカラー fma
FMA vfmaddps (32bit x4) n12       0.451    89189.2    11148.6  (  8.0 2.0)   128bit fma
FMA vfmaddps (32bit x8) n12       0.450   178399.7    11150.0  ( 16.0 2.0)   256bit fma
AVX512 vmulps (32bit x16) n12     0.450   178398.1    11149.9  ( 16.0 2.0)   512bit mul
AVX512 vaddps (32bit x16) n12     0.451   178338.0    11146.1  ( 16.0 2.0)   512bit add
AVX512 vfmaddps (32bit x16) n12   0.451   356760.6    11148.8  ( 32.0 2.0)   512bit fma

さらに FMA ではなく乗算命令+加算命令の場合は以下のようになります。

 9700X Zen5                      TIME(s)   MFLOPS      MOPS     FOP   IPC
AVX512 vml+adps (32bit x16) n12   0.225   356510.6    22281.9  ( 16.0 4.0)   512bit mul + add

512bit 加算 x2 と 512bit 乗算 x2 が同時に走っており IPC は 4。ピーク FLOPS 値は FMA x2 と同等で、加算+乗算命令の組み合わせの場合は AVX512 512bit 命令を同時に 4命令実行できることになります。

Zen4 では 512bit AVX512 命令はクロックあたり 1命令相当だったので、Zen5 の浮動小数点演算能力は Zen4 比で 2倍です。以下は Ryzen 7 7840HS (Zen4) の結果からの抜粋です。こちらは Zen5 の結果とは違い、256bit 命令に対して 512bit 命令の IPC が半減していることがわかります。

 7840HS Zen4                     TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddps (32bit x8) n12       0.337   162355.4    10147.2  ( 16.0 2.7)   FMA3   256bit fma
AVX512 vfmaddps (32bit x8) n12    0.342   160130.1    10008.1  ( 16.0 2.6)   AVX512 256bit fma
AVX512 vfmaddps (32bit x16) n12   0.680   160984.2     5030.8  ( 32.0 1.3)   AVX512 512bit fma

↑ 7840HS の IPC が割り切れない値 (1.3 や 2.6) になっているのは、数値がベースクロックの 3.8GHz 換算になっているためです。実測時は Boost 5.1GHz で動作していたため 5.1/3.8 = およそ 1.3 となります。

また現在の一般向け Intel CPU は AVX512 に対応しておらず、AVX2 (256bit) までとなります。少々世代が古いですが以下は RaptorLake Core i7-13700 の結果で、P-Core で 256bit fma が 2、E-Core で 1 命令です。

 i7-13700 RaptorLake P-Core      TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddps (32bit x8) n12       0.442   165987.5    10374.2  ( 16.0 2.0)   P-Core 256bit fma
FMA vfmaddps (32bit x8) n12       0.902    65432.2     4089.5  ( 16.0 1.0)   E-Core 256bit fma

よって、Zen5 は 一般向けとしてはこれまでで最も浮動小数点演算能力が高い CPU と言えるのではないでしょうか。

256 add256 mul256 fma256 ml+ad512 add512 mul512 fma512 ML+AD
Zen522242224
Zen422241112
RaptorLake P-Core2223
RaptorLake E-Core1111

なお Zen4 (Ryzen 7 7840HS) の結果もこちらに追加しました。

関連エントリ

VRAM 8GB の GPU 3枚で 30B 前後の LLM を動かす。Ollama でマルチ GPU 速度の比較

PC 上でローカル LLM を実行する場合、VRAM 容量が足りなくてもビデオカードを複数枚集めれば GPU 上で動作することがわかったので、色々組み合わせて速度を比較してみました。

家に眠っていた古いビデオカードを集めて 30B 前後のモデルが動いています。流石にパフォーマンスでは GeForce RTX 4090 等の上位モデルに敵わないと思いますが、13 tps ほど出ていますので動かすだけなら十分かと思います。

以下その結果です。速度は変動があるので数値はあくまで参考程度にお願いします。

27B gemma2:27b

VRAM 8GB のビデオカード 3枚で動作させることができました。使用したのは GeForce RTX 2070 Super (8GB)、GeForce GTX 1080 (8GB)、GeForce GTX 1070 (8GB) といった組み合わせです。GTX 1000 世代は TensorCore がありませんが、それでも CPU よりずっと高速です。

種類GPU合計VRAMメモリ使用量容量の割合速度
CPU のみRyzen 7 9700X19GB100% CPU1.97 tps
3 GPU2070S + 1080 + 10708+8+8=24GB23GB100% GPU12.89 tps
2 GPU4060Ti + 2070S16+8=24GB23GB100% GPU15.94 tps

うまく動いたので、あとから他の PC で使っていた RTX 4060ti (16GB) も持ってきました。「メモリ容量」と「容量の割合」は「ollama ps」コマンドで表示される値です。

32B qwen2.5:32b

32B はギリギリ入りませんでした。同じ 24GB でも GeForce RTX 4060 Ti (16GB) + GeForce RTX 2070 Super (8GB) の場合はメモリに載ります。やはり分割は少ない方がメモリの利用効率が上がるようです。

種類GPU合計VRAMメモリ使用量容量の割合速度
CPU のみRyzen 7 9700X22GB100% CPU1.77 tps
3 GPU2070S + 1080 + 10708+8+8=24GB25GB3% CPU + 97% GPU7.69 tps
2 GPU4060Ti + 2070S16+8=24GB23GB100% GPU13.56 tps

14B phi4:14b

14B はもちろん動きます。4060Ti (16GB) の場合は一枚に収まりました。8GB 2枚でも動くかもしれませんが残念ながら未確認です。余裕があれば後ほど試したいと思っています。

種類GPU合計VRAMメモリ使用量容量の割合速度
CPU のみRyzen 7 9700X11GB100% CPU3.06 tps
3 GPU2070S + 1080 + 10708+8+8=24GB16GB100% GPU17.38 tps
1 GPU4060Ti16GB14GB100% GPU37.38 tps

70B llama3.3:70b

70B はさすがに大きく、手持ちのビデオカード 4枚全部繋いでもメモリに入りませんでした。

種類GPU合計VRAMメモリ使用量容量の割合速度
CPU のみRyzen 7 9700X46GB100% CPU0.88 tps
3 GPU2070S + 1080 + 10708+8+8=24GB50GB52% CPU + 48% GPU1.09 tps
2 GPU4060Ti + 2070S16+8=24GB48GB49% CPU + 51% GPU1.46 tps
3 GPU4060Ti + 2070S + 108016+8+8=32GB49GB35% CPU + 65% GPU1.69 tps
4 GPU4060Ti + 2070S + 1080 + 107016+8+8+8=40GB51GB21% CPU + 79% GPU2.22 tps

データ

より詳しい結果を以下のページにまとめました。

使用した環境など

Proxmox VE 上の VM に Ubuntu 22.04 をインストールし、その上で ollama を走らせています。GPU は最大 4枚を VM にパススルーしています。ビデオカードはそれぞれ以下の方法で接続しています。

  • マザーボード上の PCIe x16 スロット 1 (PCIe 3.0 x16 で RTX 2070Super)
  • マザーボード上の PCIe x16 スロット 2 (PCIe 4.0 x4 で RTX 4060Ti)
  • M.2 スロット + Oculink 経由で外部の DEG1 に接続 (PCIe 3.0 x4 で GTX1080)
  • マザーボード上の PCIe x1 スロットからライザーケーブル (PCIe 3.0 x1 で GTX1070)

GPU を接続した PC は Ryzen 9 3950X + X570 です。CPU のみの結果は別の PC (Ryzen 7 9700X) によるものです。

VM へのパススルーではなく Linux を直接インストールした場合ではもう少しパフォーマンスが上がるかもしれません。

GeForce RTX 4090 や RTX 3090 といった上位 GPU がなくても、家にあった古いビデオカードを利用して組み合わせるだけで 30B 前後のモデルが使えるようになりました。その分パフォーマンスは限られていますが、13 tps あればそれなりに使えると思いますので、アプリケーションから呼び出すテストに使ったりと色々活用できそうです。

関連エントリ