#概要
DeepLearning学習用環境構築のため、Ubuntu+Docker+GPU導入時のメモ。
デュアルブートではなく、一台のSSDあるいはHDDを搭載したPCにUbuntuを導入する手順について記録しておく。
1. Ubuntu導入
###LiveUSBの作成と起動
Ubuntuをダウンロードして、FAT32フォーマットしたUSBメモリーにisoを書き込む(MacならbalenaEtcherを使うと楽)。Ubuntuをインストールしたいマシンに、作成したLiveUSBメモリを接続してBIOSのBootMenuからUEFIモードで起動する。このとき、BIOSのセキュアブートは無効化しておくこと。
###インストール
Install Ubuntuを選択する。言語を日本語にすると、CUI操作時にフォルダ名が日本語だったりして個人的に気持ち悪いので言語はEnglishにする。
【ポイント】 インターネットに接続しておいて「Ubuntuのインストール中にアップデートをダウンロードする」は必ずチェックする。2021/08時点最新版なら自動的にnvidia driver 470が導入されて、面倒なdriver選定の工程を減らせる。手動のドライバインストールだといろいろと問題が発生して再インストールするはめになったが、結局この方法で導入成功した。
####ネット接続について
私の環境では有線LANが使えないため、USBテザリングでデスクトップをインターネット接続して作業を実施した。TP LinkなどWifi受信用のデバイスドライバは後で設定したほうがいい。最初にWIFI端末の設定をするとGPUドライバをインストールしたときに、なぜかTP Linkとかbluetoothレシーバーが認識されなくなって積んだ経験がある。2回もUbuntuをクリーンインストールするはめになった。
###GPU認識の確認
インストールがうまく行くと、いきなりコマンドラインで「nvidia-smi」でGPUを認識していることが確認できる。今まではここにたどり着くまで苦労したが、非常に楽になった。私のマシンには2枚のGPU(Geforce GTX1080)が刺さっている。
$ nvidia-smi
Wed Aug 4 09:13:26 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02 Driver Version: 470.57.02 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| 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 ... Off | 00000000:01:00.0 On | N/A |
| 60% 75C P2 192W / 198W | 5028MiB / 8111MiB | 33% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |
| 0% 43C P8 6W / 198W | 11MiB / 8119MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 973 G /usr/lib/xorg/Xorg 35MiB |
| 0 N/A N/A 1654 G /usr/lib/xorg/Xorg 140MiB |
| 0 N/A N/A 1800 G /usr/bin/gnome-shell 31MiB |
| 0 N/A N/A 2104 G ...bexec/gnome-initial-setup 1MiB |
| 0 N/A N/A 2694 G /usr/lib/firefox/firefox 1MiB
|
| 0 N/A N/A 178239 C /opt/conda/bin/python 4707MiB |
| 1 N/A N/A 973 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 1654 G /usr/lib/xorg/Xorg 4MiB |
+-----------------------------------------------------------------------------+
2. Dockerインストール
以前はnvidia-dockerコマンドが存在したが、最新の環境ではnvidia-container-toolkitをインストールすれば通常のdockerコマンドでGPU認識させることができる。
#Docker
sudo apt-get update
sudo apt-get remove docker docker-engine docker.io
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
docker --version
# Put the user in the docker group
sudo usermod -a -G docker $USER
newgrp docker
# Nvidia Docker
sudo apt install curl
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
# Check Docker image
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
3.Dockerイメージの取得
tensorflow1.15とpytorchを試しに取得してみた。
$sudo docker pull nvcr.io/nvidia/tensorflow:20.11-tf1-py3
$sudo docker pull nvcr.io/nvidia/pytorch:21.05-py3
確認してみると適切にインストールされている
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvcr.io/nvidia/pytorch 21.05-py3 32386e6204f5 3 months ago 14.5GB
nvcr.io/nvidia/tensorflow 20.11-tf1-py3 3f91f9db07d4 9 months ago 14.4GB
[TensorFlow Release 21.03]
(https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/rel_21-03.html#rel_21-03)
[Running Pytorch]
(https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/running.html#running)
Dockerコンテナの生成
docker run -it --gpus all --name tfvm -v /home/user/develop:/home/develop nvcr.io/nvidia/tensorflow:20.11-tf1-py3
4.その他環境整備
キーボードの設定
USキーボードで日本語入力するときは、Japanese(Mozc)だけをinput modeに設定しておいてCtrl+Spaceで直接入力とかな入力を切り替えるようにすると楽。
$ sudo apt install ibus-mozc
$ ibus restart
$ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'jp'), ('ibus', 'mozc-jp')]"
# 設定が表示されないとき
$ sudo apt install mozc-utils-gui
$ ibus restart
ドライブの割当
WindowsのようにDドライブを設定したいとき。
パーティションテーブルを確認して、好きなディレクトリにマウントする。
ディスクの使用率はbaobabで見ることができる。
fdisk -l
(Dドライブに相当するディレクトリを確認する。この例では/dev/hda2が該当する。)
mkdir /mnt/d
mount /dev/hda2 /mnt/d
WIFIレシーバドライバのインストール
gitからコードを拾ってきてビルドする。
$ sudo apt install usbutils
$ lsusb
# check device name and install drivers
# 2357:0101: v1
# 2357:010d: v2
# 2357:0115: v3
$ sudo apt-get install build-essential dkms git
$ git clone https://github.com/cilynx/rtl88x2bu.git
$ cd rtl88x2bu
$ VER=$(sed -n 's/\PACKAGE_VERSION="\(.*\)"/\1/p' dkms.conf)
$ sudo rsync -rvhP ./ /usr/src/rtl88x2bu-${VER}
$ sudo dkms add -m rtl88x2bu -v ${VER}
$ sudo dkms build -m rtl88x2bu -v ${VER}
$ sudo dkms install -m rtl88x2bu -v ${VER}
$ sudo modprobe 88x2bu
###権限の制御
面倒くさいので新規作成されるファイルやディレクトリに全パーミッションを付与する。
$ umask 0000
How to install TP-LINK Archer T4U driver?
5. 参考
DockerでのディープラーニングGPU学習環境構築方法
Docker and Nvidia Docker installation in Ubuntu 20.04 LTS
Ubuntu20.04で日本語入力(Mozc)を可能にする方法
Linuxでのマウントに必要なコマンド