MSI GC66 Stealth(Ubuntu18.04)
Simple Wiki Based Contents Management System
Memo >> Ubuntu on MSI GS66 Stealth >> MSI GC66 Stealth(Ubuntu18.04)

MSI GC66 StealthにUbuntu18.04をインストール

MSI GC66は、比較的新しいパソコンなので、Ubuntuをインストールする場合には、20.04LTSを入れた方がいいのですが、開発案件によっては、まだUbuntu18.04+ROS melodicを使わなければいけない場合があります。
そこで、以前インストールしたUbuntu20.04のパーティションを縮小して、空き領域にUbuntu18.04をインストールしてみました。Ubuntu18.04は、デフォルトではRTX3070の利用が難しいのですが、何とか動作するようになったので、備忘録代わりに、書いていきます。
色々試してわかったのですが、私が所有しているNodePCの内臓RTX 3070は、CUDA10には対応していなかったようです。そのため、Tensorflow v1.Xの利用はCPUのみしか対応していませんでした。

パーティションの縮小

最近のLinuxでは、gpartedというツールを使うと比較的簡単にパーティションの操作ができます。Ubuntu20.04の環境にログインして、gpartedをインストールして起動します。
$ sudo apt install gparted
$ sudo gparted
gpartedの使い方については、オフィシャルサイトでも解説されていますので、詳細は割愛しますが、簡単に言うと下記のとおりです。
  • Ubuntu20.04のパーティション(私の場合は、/dev/nvme1n1p2でした)を選択
  • 「Resize/Mode」ボタンを押下して操作ダイアログを表示
  • GUI操作で縮小の操作
  • 「Apply」ボタンを押下し実行
パーティションの縮小がエラーなく終了すれば、再起動してもとのUbuntuが起動できることを確認しましょう。

Ubuntu18.04のインストール

内臓SSDに空き領域ができましたので、Ubuntu18.04を通常通りインストールしていきます。Ubuntuのインストールは、USBメモリを使った方が起動が速いのであらかじめインストール用のUSBメモリを作成しておくことをお勧めします。インストール用USBメモリの作成方法はこちらを参照して下さい。
Ubuntu18.04をデフォルトインストールを行った場合、ネットワークデバイス(有線と無線)が動作しません。MSI GS66 では、Killer E3100/AX1675x のチップが使われており、カーネル 5.11.xで有線LAN、カーネル 5.13.xで無線LANがサポートされるようになっています。
そのためUbuntu18.04でネットワークに接続する場合には、USBの有線LANアダプタまたは無線LANアダプタを使ってください。

カーネルの更新

Ubuntu18.04をインストールして、各種パッケージをアップデートすると、カーネルは 5.4.Xになっていました。このカーネルでは、RTX3070をサポートしていないようなので、https://kernel.ubuntu.com/~kernel-ppa/mainline/から v5.11.5のカーネルをダウンロードして、インストールしていきます。
現在のカーネルのバージョンは、v5.17.1なのですが、これはUbuntu21.10以降でないとライブラリのバージョンが合わないので、うまくドライバが動作しないようです。(Ubuntu20.04でもダメでした)
また、v5.11.x系統のカーネルの最新版は、v5.11.22なのですが、こちらも試した結果動作しないようなので、v5.11.16にしておきます。このサイトにアクセスし、以下の4つのdebパッケージをダウンロードします。
  • linux-headers-5.11.16-051116-generic_5.11.16-051116.202104211235_amd64.deb [2.3M]
  • linux-headers-5.11.16-051116_5.11.16-051116.202104211235_all.deb [11M]
  • linux-image-unsigned-5.11.16-051116-generic_5.11.16-051116.202104211235_amd64.deb [11M]
  • linux-modules-5.11.16-051116-generic_5.11.16-051116.202104211235_amd64.deb [54M]
すべてのパッケージをダウンロードできたら、dpkgコマンドでインストールします。
sudo dpkg --install linux-*.deb
すべてのパッケージがインストールできたら、動作確認のため再起動します。
v5.11系のカーネルでは、どういうわけかタッチパッドが動作しませんでした。色々試したところv5.8.18であれば、タッチパッドもRTX3070が動作することがわかりましたので、現在は、v5.8.18で運用しています。ただし、このカーネルにも有線イーサネットが動かないという不具合がありますが、無線LANは動作するので良しとしています。

無線LANのドライバのインストール

インストールしたカーネル v5.11.16では、MSI GS66の内臓無線LANが動作しません。そのため、Ubuntu20.04で行ったようにファームウェアのインストールとバックポートドライバのインストールが必要です。
Step 1
最初に、ソースコードの取得とビルドのためのソフトウェアをaptでインストールします
$ sudo apt update
$ sudo apt-get install -y git
$ sudo apt-get install -y build-essential
Step 2
次に、Iwlwifi-Firmware.gitのリポジトリからファームウェアをダインロードしてインストールします
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
$ cd linux-firmware
$ sudo cp iwlwifi-* /lib/firmware/
$ cd ..
Step 3
最後に、Iwlwifi Driver のバックポートをソースコードからインストールします
$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git
$ cd backport-iwlwifi
$ sudo make defconfig-iwlwifi-public
$ sudo make -j4
$ sudo make install
ここまでインストールすれば、ほぼ完了なのですが、起動時にドライバを追加するには、下のコマンドを実行します。
$ sudo update-initramfs -u
また、無線LANのデバイスは、SecureBootが有効になっている状態では動作しないようですので、あらかじめBIOSでSecureBootを無効にしておいてください。
無線LANのドライバのインストールが終われば、再起動します。

Nvidiaのドライバのインストール

Ubutnu18.04+kernelv5.11.16で何とか動作するようになったら、内臓GPU(RTX3070)のドライバのインストールを行っていきます。

nvidiaドライバのバージョンをチェック

対応するnvidiaドライバのチェックを行います。対応するNvidiaのドライバの確認は、ubuntu-driversコマンドで確認することができます。
$ ubuntu-drivers devices
WARNING:root:_pkg_get_support nvidia-driver-510-server: package has invalid Support PBheader, cannot determine support level
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd0000249Dsv00001462sd000012F5bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-495 - third-party non-free
driver   : nvidia-driver-460 - third-party non-free
driver   : nvidia-driver-465 - third-party non-free
driver   : nvidia-driver-510 - third-party non-free recommended
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-510-server - distro non-free
driver   : nvidia-driver-470 - third-party non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
通常は、recommended がついているものをインストールしますが、GS66 の場合には最新版は510でしたので、nvidia-driver-510をインストールします。

nvidiaドライバのインストール

Nvidiaのドライバは、PPAに正式版が置かれていますので、リポジトリの追加とドライバのインストールを行います。
$ sudo add-apt-repository ppa:graphics-drivers
$ sudo update
$ sudo apt install nvidia-driver-510
これでnvidiaのドライバがインストールされたと思いますので、再起動して動作確認を行ってください。動作確認は、nvidia-smiコマンドを実行し、ドライバの情報が表示されればインストールは完了です。
$ nvidia-smi 
Sat Apr  2 16:51:27 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| 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 ...  On   | 00000000:01:00.0  On |                  N/A |
| N/A   48C    P8    14W /  N/A |    163MiB /  8192MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1118      G   /usr/lib/xorg/Xorg                 87MiB |
|    0   N/A  N/A      1233      G   /usr/bin/gnome-shell               73MiB |
+-----------------------------------------------------------------------------+

CUDAライブラリのインストール

次にCUDAライブラリをインストールしていきます。Ubuntu18.04では、まだ、Python2.7がデフォルトで使用されており、Tensorflowも1.4.0のようです。Tensorflow-1.4.0では、CUDAライブラリとして。version 10.0が必要でしたので、それをインストールしていきます。
$ wget "https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda-repo-ubuntu1804-10-0-local- 
$ 10.0.130-410.48_1.0-1_amd64"
$ mv cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64 cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
$ sudo apt update
$ sudo apt install cuda-10-0

cuDNNライブラリのインストール

Ubuntu18.04のTensorflowでは、cuDNNライブラリとして version.7 になっていました。下のリンクの "Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0"からruntimeまたはdevelop libraryをダウンロードします。ダウンロードには、ユーザ登録とログインが必要になりますので、事前にユーザ登録をしておきます。
私の場合は、runtime libraryを選択しました。
  • libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb
ダウンロードが終了したら、dpkgコマンドでインストールします。
$ sudo dpkg --install libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb
以上でCUDA関連のライブラリがインストールできましたので、念のため再起動して動作を確認します。

Tensorflowのインストール

CUDAライブラリのインストールが終われば、Tensorflowをインストールしていきます。Tensorflowは、pipコマンドでインストールできますので、最初にpipをインストールします。
$ sudo apt install python-pip
次に、pipでtensorflow-gpuをインストールします。
$ pip install tensorflow-gpu
一応、これでTensorflowのインストールができましたが、実行するとエラーがでます。これは、protobufのバージョンが新しすぎるからのようです。正常に実行するには、version 3.17.3が必要のようですので、pipコマンドでインストールします。
$ pip install protobuf==3.17.3
これでインストールは終了ですが、念のため動作確認を行います。
$ python
Python 2.7.17 (default, Mar 18 2022, 13:21:42) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()
これでダイナミックライブラリがロードできていれば、正常に動作していると思います。
最後に、深層学習の経過のグラフ表示が必要な場合には、matplotlibをインストールしておく方が良いと思います。matplotlibもpipコマンドでインストールすることができます。
$ pip install matplotlib
以上でUbuntu18.04で運用できるようになります。

資料