ラズパイ5にGPUを外付けしてローカルでLLMを動かしてみる(GPU編)


Raspberry Pi 5はRaspberry Piシリーズとして初めてPCIe接続に対応しており、ここを経由してGPUボードを外付けさせることが可能です。

ここではICHIKENさんのブログを参考にさせていただきます。
Raspberry Pi 5にGPUを外付けしてAIを動かす! part1/2 環境構築編

ただこのブログは1年ほど前のもので、その間にいくつかアップデートされているものもあり、そのままではビルドに失敗することがあります。

現時点のこの構成ならこうなる….という程度でお考え下さい。

上記ブログでは16GB版のラズパイ5を使用していますが、ブログの記述にあるように、8GB版でも実行できます。

SSDも高騰している折、128GB版を使います。

構成はAppemdixに書いておきます。総額は74185円也です。

全体のハード構成はこんな感じ。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ラズパイ5のPCIeポートに接続したボードのスロットは1つしかないのでSSDはUSBからブートすることになります。

 


SSDをUSBブート

普通にUSBケースにSSDを入れて、Raspberry Pi Imager でOSをインストールしてUSBポートにつなげば、そこから起動するはずですが、起動時にSDカードを探したまま起動しない場合もあります。

そういう時はMicroSDカードにOSをインストールしてSDカードから起動してターミナルから以下を実行します。

sudo raspi-config

6.Advanced Options  ー> A5 Bootloader Version  ー> E1 Latest

6.Advanced Options  ー>A4 Boot Order   ー>B2 NVMe/USB Boot

 

これでROMが書き換えられて次回からUSBブートできます。

今回使用したOSは1つ前のBookworm 64-bit Desktop です。

最新のTrixieの場合、カーネルのコンパイルで途中エラーになりました。
GCCのバージョンで互換性がない可能性があります。
TrixieのGCCは14系ですが、Bookwormは12です。12.2.0にダウングレードすればいいかもしれません。


環境設定

/boot/firmware/config.txtを編集します。

最後尾の[all]に以下を追加

usb_max_current_enable=1
dtparam=pciex1_gen=3

 

EEPROMの設定を書き換えます。

[all]
BOOT_UART=1
POWER_OFF_ON_HALT=1
WAKE_ON_GPIO=1
BOOT_ORDER=0xf14
PCIE_PROBE=1

 

エディタを閉じる(Ctrl + x )と書き換えが実行されます。

Raspberry Pi OSの設定

[6 Advanced Options]>[A7 Wayland]>[W1 X11]

ただし今回の環境では、X11を使った場合、「動作が重い」、「VNCで接続するとグレイ表示になる」といった症状が出ました。

Wayland は以下のように設定して回避しました。

 

 

 

 

 

 

必要なパッケージ類のインストール

 


リポジトリの準備

設定の構成

メニュー内で以下の項目を設定、 マークはスペースキーで行います。

Kernel Features

[*] Fix up misaligned loads and stores from userspace for 64bit code

矢印キー(->)でSave .configに保存します。

矢印キー(->)でExit

Device Drivers

Graphics support

[M] AMD GPU
[*] Enable amdgpu support for SI parts(任意)
[*] Enable amdgpu support for CIK parts(任意)

矢印キー(->)でSave .configに保存します。

矢印キー(->)でExit(3回)


memcopy

Cのmemcpyを独自に実装したライブラリをgccでコンパイルし、インストール。

ld.so.preloadを編集

以下を記述して閉じます。

/usr/local/lib/memcpy.so

 


カーネルのコンパイルとインストール

nprocで、利用可能なプロセス数を取得してコンパイル

インストール

 

コンパイルが完了したら、必要なファイルをブート領域へコピー

念のため

KERNEL=kernel_2712

 

完了したら、一旦電源を落とします。

 


GPUの準備

Raspberry Pi 5のNVMeアダプタにOCuLinkアダプタを取り付け、PCIeライザーと接続し、GPUを取り付けます。

要するに上記の図のように接続

念のためRaspberry Pi 5本体のMicro HDMIコネクタにモニタを接続しておきます。
ATX電源とRaspberry Pi 5本体に通電します。
カーネルのコンパイルとインストールがうまくいっていれば、正常に起動するはずです。このときのデスクトップは内蔵GPUによって描画されています。
ここで正常に起動しない場合はカーネルのコンパイルとインストールに失敗している可能性があります。

 

カーネルのモジュールが正常にロードされているか確認

外部端末からSSHで接続して以下のようなコマンドを実行してみます。

エラーらしきものがなければOKです。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GPUの状態をモニターするnvtopをインストールしておきます。

実行は以下のコマンドを発行するだけ。

nvtop

 

 

 

 

 

 

 

 

 

 

 


ウィンドウマネージャが使うGPUを設定

内蔵GPU用のファイル(99-v3d.conf)とバッティングしない番号の外付けGPU用のファイル(20-amdgpu.conf)を作ります。

以下を書き込みます。

映像出力をGPU側に差し替えて、Raspberry Pi 5をハードリブートします。

まず、ラズパイの電源を落としておきます。

ラズパイのHDMIケーブルを抜いて、
NVMe-OCuLinkアダプタと、NVMeボードに取付けた垂直コネクタOculink SFF-8612を接続。
GPUのHDMIポートでモニタと接続。

ATX電源のスイッチをon
CX750のスィッチ(I)を押下。
ラズパイの電源を入れて起動。
しばらく(10秒くらい)して
GPUのファンが動いたらGPU経由でモニタにOS画面が表示されます。

 

GPUベンチマーク用のglmark2をインストールして描画テストをします。

以下を実行して描画テストをやってみます。

描画用のcanvasが必要なのでSSHのターミナルでは実行できません。

 

 

 

 

 

 

 

 

 

 

描画が妙に重かったり、VNCの表示がうまくできなかったりした場合は
sudo raspi-config

[6 Advanced Options]>[A7 Wayland]

既存の設定以外を選んでみてください。経験的にこの部分は非常に不安定です。これが正解というものはないようです。

同じセットを使っても都度変化します、原因は分かりません。

 

 


Appendix

以下、税込み価格

ラズパイ5 8GB(MAUSER)—- 22,000円

PD 27W USB Type C 5.1 V 5 A ラズベリーパイ5 電源 — 1,679円

Mini HDMI ケーブル — 879円

SSD格納用USBケース — 2069円

NVMe SSD (128GB) — 2925円

ATX電源(650W)— 6974円

PCIe NVMe M.2 SSD 2280拡張ボード — 1280円

NVMe-OCuLinkアダプタ — 8399円

グラフィックボード Radeon RX6600XT (VRAM 8GB) — 中古じゃんぱら 27980円


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*