Geforce 3060 を eGPU 化して elementary os 7 で使う備忘録

Environment
Photo by hyt.

Geforce 3060 を eGPU 化して elementary os 7 で使う備忘録です.

いつもの通り結論から書くと,

elementary os 7 は Ubuntu 22.04 ベースなので,基本的には Ubuntu 22.04 と同じようにすれば動くのですが,注意点がいくつかあり!

です.かなりハマってまる1日以上無駄な時間を使ってしまいました.なお,Windows 11 で動かす注意点については,前回記事

Geforce 3060 を eGPU 化して Windows 11 で使う備忘録
Geforce 3060 を eGPU 化して Windows 11 で使う備忘録です. いつもの通り結論から書くと, Windows 11 の「電源オプション」から「 PCI Express」 「リンク状態の電源管理」を「オフ」に設定する...

をご覧ください.

使用環境

使用機器は以下の通りです.

  • 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 リンクは以下の通りです.

Bitly
Bitly

作業前の注意

まず注意しなければならないことは,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

GitHub - hertg/egpu-switcher: 🖥🐧 Setup script for eGPUs in Linux (X.Org)
🖥🐧 Setup script for eGPUs in Linux (X.Org). Contribute to hertg/egpu-switcher development by creating an account on GitH...

を使うことができます.

この 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 の手順です.現在の最新版の情報は,

Release 0.19.0 · hertg/egpu-switcher
✨ Features Option to disable modesetting via --nomodesetting flag or egpu.nomodesetting configuration (#95) 🐞 Fixes Don'...

を見てください.

$ 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なので,この辺りの相性問題があるのは仕方がないのかも知れないなと思っています.

以上!

EnvironmentGadget
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました