💻

Razer Blade15にUbuntuをホストインストールする

2023/02/14に公開

最近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とかドライバ、ファームウェアの場所
https://mysupport.razer.com/app/answers/detail/a_id/4613

ユーザガイド
https://dl.razerzone.com/master-guides/RazerSynapse3/Blade-00000582-ja.pdf?_ga=2.183910575.802899569.1675384283-947425839.1675384283

Razer Blade 15 Base Model 2018 How to install SSD or Hard Drive replacement
https://www.youtube.com/watch?v=nnF-AEsCUeY

BIOS アップデート (Windows上)


UbuntuインストールしたときにTouchPadが動作しない報告が2018版にはあったようだが、2019版は不明。とはいえ、入れ替え前にWindows上からファームウェアをアップデートしておく。

https://wiki.archlinux.org/title/Razer_Blade

Razer Blade Intel Firmware Updater: INTEL-SA-00459
https://rzr.to/Qv8VhJ

Razer Blade 15" Base (2019) - BIOS Updater Guide
https://rzr.to/CaOyK

ホストのWindowsをゲストに引っ越しする準備


以下のサイトだと、「使わなくなったWindows10搭載のノートPCから自作で組んだデスクトップPCへOSを移植」できるとあるのでやってみる。

【OS移植】一生Windowsのライセンスを買わなくて済むライセンス認証の方法
https://bacchigames.club/gadjet/transplantwindows.html

  1. 移植元のPCのWindowsライセンスがオンライン認証する(自分アカウントにログインしておく)

Bladeで自分のMicrosoftアカウントにサインインするだけ。ログインしたときにマシン情報が履歴として残る。

Windowsは、Microsoftアカウントにリンクしたデジタルライセンスによってライセンス認証されています」と表示していればOK

  1. Win10インストールイメージは公式サイトからDLしておく

https://www.microsoft.com/ja-jp/software-download/windows10

ちなみにISOをUSBに焼くときは、Rufusを使う。普段はEtcher使っているが、WinのISO選択すると「WinのISOは特殊だからRufus使え」とご丁寧に言われる。

Razer BladeにUbuntuをインストールする


細かい設定は後回しにして、大きな作業だけ先にやっておく

  1. USB(SDCard)からUbuntu20.04をインストールする
  2. VMWare+Win10をインストールする
  3. ゲストのWin10でMicrosoftアカウントにログイン
  4. ゲストの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バージョンとの互換性も考えると、最新ではなく古いバージョンをあえてインストールする必要がありそう。

https://docs.nvidia.com/deploy/cuda-compatibility/index.html#use-the-right-compat-package

RTX2080はTuring7.5でドライババージョンは418.40.04以上だが、CUDAバージョンを考えると、450番台が妥当(470番台はサポートしてない)

以下のサイトだと460番を入れている

Ubuntu20.04+CUDA11.2+PyTorch1.8.1+cu111がRTX3090のGPUで動作した !
https://goody-jp.com/ubuntu20-04cuda11-2pytorch1-8-1cu111がrtx3090のgpuで動作した/

Pytorch – GPU と対応するドライバ、CUDA、CuDNN のバージョン
https://pystyle.info/pytorch-relationship-between-gpu-and-driver-cuda-and-cudnn-versions/

ということで、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バージョンとインストール


https://pytorch.org/get-started/locally/

一番メンドクサイPytorchだとCUDA11.6っぽいので、これを基準にしてもいいかもしれない。がTensorflowだとCUDA11.2が今のところ上限なので、とりあえず11.2にしておく。

後述するDockerコンテナで作業するのであれば、NVIDIAドライバだけインストールすれば良くて、わざわざ直接のインストールしたり、バージョン合わせたりはナンセンスかもしれないけど一応。。

CUDA11.2のインストール


https://developer.nvidia.com/cuda-11.2.2-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=2004&target_type=runfilelocal

> 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のインストール


https://qiita.com/konzo_/items/a6f2e8818e5e8fcdb896

https://www.tensorflow.org/install/source?hl=ja#gpu

CUDA11.2の場合は、cuDNN8.1が互換性がある。インストールしたCUDAのバージョンとちゃんと合わせないとダメ。

https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.1.1.33/11.2_20210301/cudnn-11.2-linux-x64-v8.1.1.33.tgz

> 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

省電力


電源管理のアプリを入れると省電力でバッテリ持ちが格段によくなるらしい。おまじない?としていれておく。
https://ameblo.jp/gokurakuhaze/entry-12301425743.html

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同様に内部のスイッチでサスペンドするようになっている。ところが、蓋を開けて復帰させると、復帰したあとしばらくするとエラーが発生して?サスペンドしてしまう。また復帰させると。。。とループする現象が発生する。

仕方ないので、

  1. 閉じてもサスペンドしないようにする
  2. 電源ボタン押したらサスペンド(長押しすると電源OFF)

というようにしている。結果的に長時間計算させるときなど閉じてもスリープさせないほうが都合がいいので、特に不満を感じてない。

【Ubuntu】蓋を閉じてもノートPCをスリープにしない方法
https://nisshingeppo.com/ai/ubuntu-nonsleep/

> sudo vi /etc/systemd/logind.conf

HandleLidSwitch=ignore

> sudo reboot

参考)サスペンドループ対応(2019年版では解消しませんでした)

http://dan.bodar.com/2020/01/01/suspend-loop-fix-for-razor-stealth-late-2019-with-ubuntu-19-10/

> 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 インストール


https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository

> 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インストール後に以下を追加インストールする。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

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
https://averagelinuxuser.com/ubuntu_custom_launcher_dock/

> 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