0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxmox上のUbuntu 24.04でGoogle Coral TPU (M.2) を認識させるまでの記録

0
Posted at

目的

蜜蜂の様子をカメラで撮影し将来的にはYoutubeでライブ配信したい。また、畑に来るイノシシやカモシカの様子を見たい。
そのためにNVRが欲しい。動体分析機能も欲しい。お金はない。FrigateというNVRを使ってみよう。

機材

富士通 Primergy RX2540 M4
ヤフオクで落とした。メモリそこそこでCPUも2個載っていて安かったのですよ。何よりエラーなしで動いています。
GPU NVIDIA T400
これもヤフオクでゲット。
Google Coral TPU M.2 B+M MODULE
MOUSERで購入。一番安くて送料も無料だった。

導入

OSは何にしようかと悩んでいた時、Proxmoxを知りました。
何かあってもすぐにロールバックできるとか同じマシンに複数の仮想マシンが入れられるとかこんな便利なことはないです。
某Youtuberもやっていたし・・・
ここにVM Ubuntu24.04を構築。NVIDIA T400パススルー。ちゃんと動きました。
その後TPUが届いたのでM.2スロットに挿入。GUI上でPCI追加し認識はできたものの・・・

  1. 最初の設定と「絶望の失敗」

当初、最新の Ubuntu 24.04 (Kernel 6.8) で標準的なインストールを試みました。
試したこと

# Google公式リポジトリからインストール
sudo apt install gasket-dkms libedgetpu1-std

発生したエラー

ビルドログ(/var/lib/dkms/gasket/1.0/build/make.log)を確認したところ、以下のエラーが発生。

make.log
ERROR: modpost: module gasket uses symbol dma_buf_attach from namespace DMA_BUF, but does not import it.
make[2]: *** [scripts/Makefile.modpost:145: .../Module.symvers] Error 1

原因: Kernel 6.8 では、DMA_BUF などのシンボル名前空間(Namespace)の扱いが厳格化されました。Google が提供している Gasket ドライバのソースコードが古い仕様のままであるため、ビルドに失敗します。AIに聞いたところパッチを当てる手法あるようでしたので試しましたが、依存関係が深く非常に困難でした。

2. 解決策:戦略的ダウングレード

「OSは最新 (24.04) を維持しつつ、カーネルだけを安定版 (5.15) に落とす」という中間案を採用しました。
GPUのパススルーで苦労したためVMの作り直しはちょっと嫌だったのもあり。

① 5.15カーネルの召喚

Ubuntu 24.04のリポジトリには5.15がないため、22.04のリポジトリを一時利用します。


echo "deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/jammy.list
sudo apt update
sudo apt install -y linux-image-5.15.0-25-generic linux-headers-5.15.0-25-generic linux-modules-extra-5.15.0-25-generic
sudo rm /etc/apt/sources.list.d/jammy.list
sudo apt update

② ドライバの再ビルド

5.15カーネルが入った状態でドライバを再インストールすると、今度は成功します。


sudo apt install --reinstall gasket-dkms

3. GRUBによる「5.15自動起動」の固定

サーバー運用では再起動後の自動復旧が必須なため、5.15がデフォルトで選ばれるようにします。


# メニュー名の確認
sudo grep -E "submenu|menuentry" /boot/grub/grub.cfg | cut -d "'" -f2

# 設定変更
sudo nano /etc/default/grub
# 例:GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-25-generic"

sudo update-grub
sudo reboot

4. 仕上げ:自動ロードと更新禁止 (Hold)

再起動後、ドライバを自動で読み込み、かつ勝手なアップデートを禁止します。


# 自動ロード設定
echo -e "gasket\napex" | sudo tee /etc/modules-load.d/coral.conf

# カーネルのバージョン固定
sudo apt-mark hold linux-image-5.15.0-25-generic linux-headers-5.15.0-25-generic linux-modules-extra-5.15.0-25-generic

5. 最終確認


ls -l /dev/apex_0

/dev/apex_0 が表示されれば完了!

おわりに

一筋縄ではいかなかったです。
Ubuntuのバージョンでこうも違うのかと驚きました。
新しければ良いわけではない、という教訓を得ました。
まずはここまで来ました。次は実際の場所にマシンを設置せねば!
物理工事ですね。光ファイバーも敷きますよ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?