Razer Blade15にUbuntuをホストインストールする
最近Razer Blade15(2019)を手に入れてUbuntuをホストOSとしてインストールしたので、そのときのメモを残しておきます。
スペック | Razer Blade 15 2019 (RZ09-03006J92-R3J1) |
---|---|
CPU | Intel Core i7-9750H (第9世代) |
メモリ | 32GB |
ストレージ | 512GB SSD + 2.5インチHDD2TB |
チップセット | Mobile Intel HM370 Chipset |
GPU | NVIDIA GeForce RTX 2060 + Intel UHD Graphics 630 |
ネットワーク | Intel Wireless-AC 9560 |
モニタ | 15.6インチ TFT FHD 144Hz, 1920x1080 |
重量 | 2.10 kg |
OS | Windows 10 Home (64-bit) |
Ubuntuのホストインストールについて
NvidiaのRTX2060を搭載したGPUノートで、今後はROS2とかディープラーニングとかの開発に追加う予定。もちろんWSL2とかサーバーのワークステーションでやれることはそっちでやればいいですが、ROS2やりだしてそこについては仮想環境では限界感じてます。一番致命的なのは、USB接続してカメラ使うときにカーネルのビルドが必要だったり、GUI使うときですかね。Win11+WSL2でも最近は使えますが、いろいろ躓くので、いっそのことホストでUbuntu使いたくなりました。
Linuxの唯一?の惜しいポイントは、Microsoft Officeがインストールできないことだと思ってます。最近はブラウザでも使えますが、どうしても機能足りなくてオンラインだけで完了できない。
なので、ゲストでWindows使うわけです。(それくらいしかない)
今回のポイントとしては、
- ファームウェアのアップデート
- ホストOSはUbuntu20.04にする
- ゲストでWin10を使う(プリインストールしていたWindowsをゲストに移行)
- Docker上でGPU使えるようにする
Razer Bladeのサポートサイト
FAQとかドライバ、ファームウェアの場所
ユーザガイド
Razer Blade 15 Base Model 2018 How to install SSD or Hard Drive replacement
BIOS アップデート (Windows上)
UbuntuインストールしたときにTouchPadが動作しない報告が2018版にはあったようだが、2019版は不明。とはいえ、入れ替え前にWindows上からファームウェアをアップデートしておく。
Razer Blade Intel Firmware Updater: INTEL-SA-00459
Razer Blade 15" Base (2019) - BIOS Updater Guide
ホストのWindowsをゲストに引っ越しする準備
以下のサイトだと、「使わなくなったWindows10搭載のノートPCから自作で組んだデスクトップPCへOSを移植」できるとあるのでやってみる。
【OS移植】一生Windowsのライセンスを買わなくて済むライセンス認証の方法
- 移植元のPCのWindowsライセンスがオンライン認証する(自分アカウントにログインしておく)
Bladeで自分のMicrosoftアカウントにサインインするだけ。ログインしたときにマシン情報が履歴として残る。
「Windowsは、Microsoftアカウントにリンクしたデジタルライセンスによってライセンス認証されています」と表示していればOK
- Win10インストールイメージは公式サイトからDLしておく
ちなみにISOをUSBに焼くときは、Rufusを使う。普段はEtcher使っているが、WinのISO選択すると「WinのISOは特殊だからRufus使え」とご丁寧に言われる。
Razer BladeにUbuntuをインストールする
細かい設定は後回しにして、大きな作業だけ先にやっておく
- USB(SDCard)からUbuntu20.04をインストールする
- VMWare+Win10をインストールする
- ゲストのWin10でMicrosoftアカウントにログイン
- ゲストのWin10のライセンス認証で、Razerのホスト情報を選択して紐づけ
Ubuntuのセットアップ
NVIDIAのダウンロードサイトを見るとLinux版だと525.85.05が最新(2023/2/1現在)
> sudo add-apt-repository ppa:graphics-drivers/ppa
> sudo apt update
> sudo apt search nvidia-driver-
:
nvidia-driver-525/focal-updates,focal-security,focal 525.78.01-0ubuntu0.20.04.1 amd64
NVIDIA driver metapackage
ただし、CUDAバージョンとの互換性も考えると、最新ではなく古いバージョンをあえてインストールする必要がありそう。
RTX2080はTuring7.5でドライババージョンは418.40.04以上だが、CUDAバージョンを考えると、450番台が妥当(470番台はサポートしてない)
以下のサイトだと460番を入れている
Ubuntu20.04+CUDA11.2+PyTorch1.8.1+cu111がRTX3090のGPUで動作した !
Pytorch – GPU と対応するドライバ、CUDA、CuDNN のバージョン
ということで、nvidia-driver-460
をインストールする。
> sudo apt search nvidia-driver-45
nvidia-driver-450/focal-updates,focal-security 460.91.03-0ubuntu0.20.04.1 amd64
Transitional package for nvidia-driver-460
> sudo apt install nvidia-driver-450
> sudo reboot
CUDAバージョンとインストール
一番メンドクサイPytorchだとCUDA11.6っぽいので、これを基準にしてもいいかもしれない。がTensorflowだとCUDA11.2が今のところ上限なので、とりあえず11.2にしておく。
後述するDockerコンテナで作業するのであれば、NVIDIAドライバだけインストールすれば良くて、わざわざ直接のインストールしたり、バージョン合わせたりはナンセンスかもしれないけど一応。。
CUDA11.2のインストール
> wget https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.run
> sudo sh cuda_11.2.2_460.32.03_linux.run
以下を.bashrc
に追加
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64
cudaの確認
> source ~/.bashrc
> nvcc -V
cuDNNのインストール
CUDA11.2の場合は、cuDNN8.1
が互換性がある。インストールしたCUDAのバージョンとちゃんと合わせないとダメ。
> tar xzvf cudnn-11.2-linux-x64-v8.1.1.33.tgz
> sudo cp cuda/include/cudnn.h /usr/local/cuda/include
> sudo cp -P cuda/lib64/libcudnn /usr/local/cuda/lib64
> sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn
省電力
電源管理のアプリを入れると省電力でバッテリ持ちが格段によくなるらしい。おまじない?としていれておく。
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt -y install tlp tlp-rdw powertop
sudo tlp start
sudo systemctl start tlp
sudo systemctl enable tlp
GPUの切り替え設定方法(Intel <=> NVIDIA)
バッテリー主体で使うときにGPUパワーを必要としない場合などはCPU内蔵GPU(Intel)に切り替えられる。今のところ必要性感じてないが、念のためメモを残しておく。
使用しているGPUを調べるコマンド
prime-select query
Intelに変更するコマンド
sudo prime-select intel
sudo reboot
Nvidiaに変更するコマンド
sudo prime-select nvidia
sudo reboot
サスペンドループ問題
RazerBladeの蓋を閉じると、ほかのノートPC同様に内部のスイッチでサスペンドするようになっている。ところが、蓋を開けて復帰させると、復帰したあとしばらくするとエラーが発生して?サスペンドしてしまう。また復帰させると。。。とループする現象が発生する。
仕方ないので、
- 閉じてもサスペンドしないようにする
- 電源ボタン押したらサスペンド(長押しすると電源OFF)
というようにしている。結果的に長時間計算させるときなど閉じてもスリープさせないほうが都合がいいので、特に不満を感じてない。
【Ubuntu】蓋を閉じてもノートPCをスリープにしない方法
> sudo vi /etc/systemd/logind.conf
HandleLidSwitch=ignore
> sudo reboot
参考)サスペンドループ対応(2019年版では解消しませんでした)
> sudo vi /etc/default/grub
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash button.lid_init_state=open"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_OS_PROBER=true
> sudo update-grub
画面共有
vinoを使う。CPU消費率は低いほうだと思っている。ノートPC側でログインしてないと動作しないので、完全サーバー化したいなら、TigerVNCとか使ったほうが良いかもしれない。
> sudo apt install vino
設定アプリから共有タブを選択すると、画面共有
が出てくる。
クライアントから接続しようとするとセキュリティ云々でエラーになるので、以下を実行しておく。
> gsettings set org.gnome.Vino require-encryption false
リモート側からはVNC Viewerなどで接続できる。
Docker インストール
> sudo apt update && sudo apt install ca-certificates curl gnupg lsb-release
> sudo mkdir -m 0755 -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
> echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
> sudo apt update && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
最近はdocker-composeではなく、正式にサブコマンド化されたdocker compose
を使うらしい。知らなかった。。
> docker -v
Docker version 23.0.1, build a5ee5b1
> docker compose version
Docker Compose version v2.16.0
> sudo gpasswd -a $USER docker
> sudo systemctl restart docker
Nvidia-Dockerのインストール
Dockerだけでは、コンテナ内でGPUを使うことができない。(はず)
Dockerインストール後に以下を追加インストールする。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
とくにnvidia-ctk
のコマンドをやらないと、docker composeでruntime: nvidia
を指定すると「そんなサービス知らない」と言われた記憶がある。
> sudo apt update && sudo apt install -y nvidia-container-toolkit
> sudo nvidia-ctk runtime configure --runtime=docker
INFO[0000] Loading docker config from /etc/docker/daemon.json
INFO[0000] Config file does not exist, creating new one
INFO[0000] Flushing docker config to /etc/docker/daemon.json
INFO[0000] Successfully flushed config
INFO[0000] Wrote updated config to /etc/docker/daemon.json
INFO[0000] It is recommended that the docker daemon be restarted.
> cat /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
> sudo systemctl restart docker
Dockerコンテナ内でGPUが使えるかテストする。cudaのコンテナをDLしてそのコンテナ内でGPUを確認する。
# docker-compose-cuda.yml
version: "2.3"
services:
test:
image: nvidia/cuda:11.4.1-runtime-ubuntu20.04
container_name: gpu-test
tty: true
privileged: true
network_mode: host
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
- DISPLAY=${DISPLAY}
command: bash
composeで起動したコンテナに入ってGPUを確認する。これができれば多分OK。
> docker compose -f docker-compose-cuda.yml up -d
> docker exec -it gpu-test bash
$ nvidia-smi -L
GPU 0: NVIDIA GeForce RTX 2060...
> docker compose down
> docker rmi nvidia/cuda:11.4.1-runtime-ubuntu20.04
その他) ビルドしたアプリをお気に入りに追加する方法
いつもやり方を忘れるので、メモっておく。
Fix "Add to Favorites" for custom apps in Ubuntu
> sudo vi /usr/share/applications/xxxxx.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/path/to/yourapp
Name=YourApp
Comment=Description of YourApp
Icon=/path/to/yourapp.png
> sudo chmod +x sudo chmod +x /usr/share/applications/xxxxx.desktop
再ログインするとアプリケーション一覧に表示されるので、他と同じように追加できるようになる。
Discussion