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を編集します。
|
1 |
sudo nano /boot/firmware/config.txt |
最後尾の[all]に以下を追加
usb_max_current_enable=1
dtparam=pciex1_gen=3
EEPROMの設定を書き換えます。
|
1 |
sudo rpi-eeprom-config --edit |
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=1
WAKE_ON_GPIO=1
BOOT_ORDER=0xf14
PCIE_PROBE=1
エディタを閉じる(Ctrl + x )と書き換えが実行されます。
Raspberry Pi OSの設定
|
1 |
sudo raspi-config |
[6 Advanced Options]>[A7 Wayland]>[W1 X11]
ただし今回の環境では、X11を使った場合、「動作が重い」、「VNCで接続するとグレイ表示になる」といった症状が出ました。
Wayland は以下のように設定して回避しました。
必要なパッケージ類のインストール
|
1 2 3 4 5 6 7 |
sudo apt-get update sudo apt-get install -y ca-certificates build-essential ccache cmake wget git curl rsync xz-utils libcap-dev bc bison flex libssl-dev make libncurses5-dev sudo apt-get install -y libvulkan1 mesa-vulkan-drivers vulkan-tools libvulkan-dev glslc sudo apt-get install -y firmware-amd-graphics |
リポジトリの準備
|
1 |
git clone --depth=1 --branch rpi-6.6.y-gpu https://github.com/Coreforge/linux.git |
設定の構成
|
1 2 3 4 5 6 7 |
cd linux/ KERNEL=kernel_2712 make bcm2712_defconfig make menuconfig |
メニュー内で以下の項目を設定、 マークはスペースキーで行います。
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でコンパイルし、インストール。
|
1 2 3 4 5 |
wget https://gist.githubusercontent.com/Coreforge/91da3d410ec7eb0ef5bc8dee24b91359/raw/b4848d1da9fff0cfcf7b601713efac1909e408e8/memcpy_unaligned.c gcc -shared -fPIC -o memcpy.so memcpy_unaligned.c sudo mv memcpy.so /usr/local/lib/memcpy.so |
ld.so.preloadを編集
|
1 |
sudo nano /etc/ld.so.preload |
以下を記述して閉じます。
/usr/local/lib/memcpy.so
カーネルのコンパイルとインストール
nprocで、利用可能なプロセス数を取得してコンパイル
|
1 |
make -j$(nproc) Image.gz modules dtbs |
インストール
|
1 |
sudo make modules_install |
コンパイルが完了したら、必要なファイルをブート領域へコピー
念のため
KERNEL=kernel_2712
|
1 2 3 4 5 6 7 |
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware/ sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/ sudo cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/ sudo cp arch/arm64/boot/Image.gz /boot/firmware/$KERNEL.img |
完了したら、一旦電源を落とします。
|
1 |
sudo poweroff |
GPUの準備
Raspberry Pi 5のNVMeアダプタにOCuLinkアダプタを取り付け、PCIeライザーと接続し、GPUを取り付けます。
要するに上記の図のように接続
念のためRaspberry Pi 5本体のMicro HDMIコネクタにモニタを接続しておきます。
ATX電源とRaspberry Pi 5本体に通電します。
カーネルのコンパイルとインストールがうまくいっていれば、正常に起動するはずです。このときのデスクトップは内蔵GPUによって描画されています。
ここで正常に起動しない場合はカーネルのコンパイルとインストールに失敗している可能性があります。
カーネルのモジュールが正常にロードされているか確認
外部端末からSSHで接続して以下のようなコマンドを実行してみます。
エラーらしきものがなければOKです。
|
1 |
lsmod | grep amdgpu |
|
1 |
dmesg | grep amdgpu |
GPUの状態をモニターするnvtopをインストールしておきます。
|
1 |
sudo apt install nvtop |
実行は以下のコマンドを発行するだけ。
nvtop
ウィンドウマネージャが使うGPUを設定
内蔵GPU用のファイル(99-v3d.conf)とバッティングしない番号の外付けGPU用のファイル(20-amdgpu.conf)を作ります。
|
1 |
sudo nano /etc/X11/xorg.conf.d/20-amdgpu.conf |
以下を書き込みます。
|
1 2 3 4 |
Section "Device" Identifier "AMD GPU" Driver "amdgpu" EndSection |
映像出力をGPU側に差し替えて、Raspberry Pi 5をハードリブートします。
まず、ラズパイの電源を落としておきます。
ラズパイのHDMIケーブルを抜いて、
NVMe-OCuLinkアダプタと、NVMeボードに取付けた垂直コネクタOculink SFF-8612を接続。
GPUのHDMIポートでモニタと接続。
ATX電源のスイッチをon
CX750のスィッチ(I)を押下。
ラズパイの電源を入れて起動。
しばらく(10秒くらい)して
GPUのファンが動いたらGPU経由でモニタにOS画面が表示されます。
GPUベンチマーク用のglmark2をインストールして描画テストをします。
|
1 |
sudo apt install -y glmark2 |
以下を実行して描画テストをやってみます。
描画用のcanvasが必要なのでSSHのターミナルでは実行できません。
|
1 |
glmark2 |
描画が妙に重かったり、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円






Leave a Reply