Geforce 3060 を eGPU 化して elementary os 7 で使う備忘録です.
いつもの通り結論から書くと,
elementary os 7 は Ubuntu 22.04 ベースなので,基本的には Ubuntu 22.04 と同じようにすれば動くのですが,注意点がいくつかあり!
です.かなりハマってまる1日以上無駄な時間を使ってしまいました.なお,Windows 11 で動かす注意点については,前回記事
をご覧ください.
使用環境
使用機器は以下の通りです.
- Lenovo Thinkpad X1 Carbon gen.6
- OS: elementary os 7
- eGPU BOX: Razer Core X Chroma
- GPU: 玄人志向 GeForce RTX 3060 GDDR6 12GB
なお,GPU のドライバはフリーのものではなく NVIDIA が提供するプロプライエタリのものを使います.GPU と eGPU BOX の Amazon リンクは以下の通りです.
作業前の注意
まず注意しなければならないことは,NVIDIA が提供するドライバーを使うには,専用のカーネルモジュールを組み込む必要があることです.このために以下の手順では,モジュールのビルドとインストールを自動化する DKMS が使われます.
本来ならこのために必要となってくるいろいろなパッケージは自動的にインストールされて然るべきなのですが,少なくとも私の環境だとこれがうまくいっていませんでした.これが私独自の問題なのかどうかは分かりませんが,念のため,この辺りのパッケージのインストール有無について事前にチェックしておくと良いと思います.
私の場合は,以下のように3つのパッケージを導入しました.
$ sudo apt install lsb-core $ sudo apt install linux-headers-$(uname -r) $ sudo apt install dkms
この他にも人によっては,
$ sudo apt install build-essential $ sudo apt install boltctl
のようにして基本的な開発環境やThunderbolt関係パッケージを導入しなければならないかもしれません.
2つめの注意として,/usr/lib/dkms/common.postinst の内容を以下のように書き換える必要があるかもしれません.
diff -p /usr/lib/dkms/common.postinst.orig /usr/lib/dkms/common.postinst *** /usr/lib/dkms/common.postinst.orig 2023-09-02 12:59:38.822698711 +0900 --- /usr/lib/dkms/common.postinst 2023-08-31 12:03:57.920123652 +0900 *************** echo "Building for $KERNELS" | tr '\n' ' *** 201,207 **** | sed -e 's/,/, /g; s/, $/\n/; s/, \([^,]\+\)$/ and \1/' if [ -n "$ARCH" ]; then ! if which lsb_release >/dev/null && [ $(lsb_release -s -i -u) = "ubuntu" ]; then case $ARCH in amd64) ARCH="x86_64" --- 201,207 ---- | sed -e 's/,/, /g; s/, $/\n/; s/, \([^,]\+\)$/ and \1/' if [ -n "$ARCH" ]; then ! if which lsb_release >/dev/null && [ $(lsb_release -s -i) = "Elementary" ]; then case $ARCH in amd64) ARCH="x86_64"
これは恐らく dksm-2.8.7-2+elementary3~ubuntu22.04.1 パッケージのバグで,dkms パッケージが今後更新されることでこの作業は必要がなくなるのではないかと思います.
注)lsb_release コマンドには -u オプションは存在しませんし,lsb_release -s -i で帰ってくる値のは ubuntu ではなく Elementary です.
3つ目の注意ですが,Linux で eGPU を使う場合,X Windows システムの設定を適当に書き換えてやらなかればならないのですが,これを手軽に行える CUI ツールとして,egpu-switcher
を使うことができます.
この egpu-switcher ですが,他の方の記事をみると egpu-switcher の PPA を利用するよう案内されていることが多いです.しかし,元サイトによると,
The PPA is no longer maintained for now
となっています.したがって,導入は元サイトで Manual して案内されている方法で行った方が無難だと思います.また,egpu-switcher ではホットプラグは考慮されていないようです.したがって,eGPU の取り外しは再起動を伴うことにご注意ください.
最後に,他の方の記事では,オープンソースなドライバーである nouveau のカーネルモジュールを読み込まないようにするための手順が示されていることが多いですが,少なくとも今はこの手順は必要はないようです.なお,無効化しても問題はありませんので,この部分については好みでやる/やらないを選択していただければ良いのではないかと思います.以下に示す手順ではこの部分は省略します.
導入手順
不足パッケージとPPAの導入
まず,前節の最初の注意にしたがって不足している可能性のあるパッケージを導入することと,Ubuntu の Proprietary GPU Drivers PPA を導入です.
$ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt update
また,必要な場合は,前節の2番目の注意にしたがって,/usr/lib/dksm/common.postinst を書き換えます.
eGPU の有効化
次に eGPU BOX を Thunderbolt3 で PC本体に接続し,きちんと認識されているか否かを boltctl コマンドを用いて確認します.
$ boltctl ... ● Razer Core X Chroma ├─ type: peripheral ├─ name: Core X Chroma ├─ vendor: Razer ├─ uuid: 00000000-0000-0000-ffff-ffffffffffff ├─ generation: Thunderbolt 3 ├─ status: authorized │ ├─ domain: d6010000-0070-6718-a38d-5a1824235222 │ ├─ rx speed: 20 Gb/s = 1 lanes * 20 Gb/s │ ├─ tx speed: 20 Gb/s = 1 lanes * 20 Gb/s │ └─ authflags: none ├─ authorized: 2023年09月02日 04時39分16秒 ├─ connected: 2023年09月02日 04時39分05秒 └─ stored: 2023年08月29日 23時02分17秒 ├─ policy: auto └─ key: no ● Razer Core X Chroma #2 ├─ type: peripheral ├─ name: Core X Chroma ├─ vendor: Razer ├─ uuid: 00000000-0000-0000-ffff-ffffffffffff ├─ generation: Thunderbolt 3 ├─ status: authorized │ ├─ domain: d6010000-0070-6718-a38d-5a1824235222 │ ├─ rx speed: 40 Gb/s = 2 lanes * 20 Gb/s │ ├─ tx speed: 40 Gb/s = 2 lanes * 20 Gb/s │ └─ authflags: none ├─ connected: 2023年09月02日 04時39分05秒 └─ stored: 2023年08月29日 23時16分40秒 ├─ policy: auto └─ key: no ...
status が authorized になっていない場合は,
$ sudo boltctl enroll 00000000-0000-0000-ffff-ffffffffffff
として有効化してください.00000000-0000-0000-ffff-ffffffffffff はThunderbolt機器の uuid です.
GPU ドライバーの導入
有効化されていることが確認できたら,以下の手順で GPU のドライバーを導入します.
$ ubuntu-drivers devices == /sys/devices/pci0000:00/0000:00:1d.0/0000:05:00.0/0000:06:01.0/0000:08:00.0/0000:09:01.0/0000:0a:00.0 == modalias : pci:v000010DEd00002487sv000010DEsd00001530bc03sc00i00 vendor : NVIDIA Corporation driver : nvidia-driver-535 - third-party non-free recommended driver : nvidia-driver-525-server - distro non-free driver : nvidia-driver-470-server - distro non-free driver : nvidia-driver-535-server-open - distro non-free driver : nvidia-driver-535-server - distro non-free driver : nvidia-driver-525-open - distro non-free driver : nvidia-driver-535-open - third-party non-free driver : nvidia-driver-525 - distro non-free driver : nvidia-driver-470 - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin $ sudo ubuntu-drivers autoinstall
最初の ubuntu-drivers devices で利用できるドライバー一覧を表示しています.また,2番目の ubuntu-drivers devices で推奨ドライバーの導入が行われます.今回は nvidia-driver-535 が推奨なので,このドライバーが導入されることになります.なお,推奨以外を導入する場合は,
$ sudo ubuntu-drivers install nvidia-driver-525
のようにするだけです.
egpu-switcher の導入と設定
egpu-switcher の導入を以下の手順で行います.なお,以下は記事執筆時点の最新版 0.19.0 の手順です.現在の最新版の情報は,
を見てください.
$ wget https://github.com/hertg/egpu-switcher/releases/download/0.19.0/egpu-switcher-amd64 $ sudo cp egpu-switcher-amd64 /opt/egpu-switcher $ sudo chmod 755 /opt/egpu-switcher $ sudo egpu-switcher enable
また,egpu-switcher の設定を以下の手順で行ってください.
$ sudo egpu-switcher config ✘ 130 Found 2 possible GPU(s)... 1: Vendor 8086 Device 5917 (i915) 2: Vendor 10de Device 2487 (nvidia) Which one is your external GPU? [1-2]: 2 [ok] Your selection was saved to the config file $ sudo egpu-switcher setup [info] created egpu bootup service to autorun 'egpu-switcher switch' [ok] setup successful $ sudo egpu-switcher switch [info] looking for eGPU... [info] the egpu is connected [info] egpu has been added to X.Org config [ok] switch completed
あとは再起動すれば eGPU が有効化されるはずです.また,再起動後の GPU の様子は,
$ nvidia-smi Sat Sep 2 14:09:33 2023 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA GeForce RTX 3060 Off | 00000000:0A:00.0 Off | N/A | | 0% 33C P8 6W / 170W | 7MiB / 12288MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+
のようにすることで分かります.なお,GPU の使用率等を監視する nvtop も入れておくと便利だと思います.入れ方は,
$ sudo apt install nvtop
とするだけです.
eGPU の取り外し
eGPU を取り外す正しい手順はよく分かりませんが,とりあえず
$ sudo egpu-switcher disable
として PC の電源を切り,eGPU を外すことで問題なく使えています.逆に eGPU を有効化したい場合は,
$ sudo egpu-switcher enable
として PC の電源を切り eGPU を接続します.
なお,本来は単に電源を切り eGPU を取り外せば良いだけなのではないかと思いますし,それでうまく行くこともありますが,少なくとも私の環境だと確実にはいきませんでした.
また,これもなぜだか分かりませんが,eGPU 経由でのPCへの電源供給もうまくいきません.ただし電源の供給は eGPU 経由以外の例えば Anker PowerExpand 7-in-1 Thunderbolt 3 Mini Dock なんかでもうまくいったりいかなかったりします.Thinkpad X1 Carbon gen6 は Thunderbolt3 出始めの頃のPCなので,この辺りの相性問題があるのは仕方がないのかも知れないなと思っています.
以上!