Ubuntu 18.04 の Docker on GPU 環境をアップグレードする
以前、Ubuntu 18.04 に Docker on GPU 環境をインストールした記事を書きました。
あれからだいぶ時がたち、最新の PyTorch on Docker などを動かすためには、NVIDIA Driver をアップグレードしないとダメになってきました。
そこで久々にアップグレードしようとしたのですが、いろいろはまったのでメモ的に残しておきます。
現在のドライバーのアンインストール
まず今のドライバーをアンインストールしないといけないんですね。
不要という記事も見かけるのですが、自分の環境では必要でした。
$ sudo apt remove --purge '^nvidia-.*' $ sudo reboot
新しい NVIDIA Driver のインストール
これには 2 つ方法があるようです。
1. 公式サイトから run ファイルをダウンロードして sudo sh **.run とする
2. パッケージマネージャーからインストールする
1 をやろうとしたのですが、インストール中に「2 のほうがシステムと親和性があるかもよ」的なエラーメッセージが出たので、あらためて 2 でやることにしました。
以下の公式サイトの手順 (Ubuntu) に従いました。
$ sudo apt-get install linux-headers-$(uname -r) $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g') $ wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.0-1_all.deb $ sudo dpkg -i cuda-keyring_1.0-1_all.deb $ sudo apt-get update $ sudo apt-get -y install cuda-drivers
インストール中に、リブートして結果を確かめろよという文字が出たので、最後にリブート。
$ sudo reboot
リブート後に nvidia-smi でドライバーのバージョンを確認しました。
$ nvidia-smi Wed Jun 8 13:59:03 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.48.07 Driver Version: 515.48.07 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | 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 Off | N/A | | 17% 35C P8 1W / 250W | 143MiB / 11264MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 1180 G /usr/lib/xorg/Xorg 57MiB | | 0 N/A N/A 1284 G /usr/bin/gnome-shell 83MiB | +-----------------------------------------------------------------------------+
NVIDIA Container Toolkit のインストール
最初に NVIDIA 関連のドライバーを全部消しているので、こちらも改めてインストールします。
やることは公式サイトの手順に従うだけです。
$ 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 $ sudo apt-get update $ sudo apt-get install -y nvidia-docker2
動作確認
最後に Docker をリスタートして、PyTorch の新しめのタグを起動してみました。
$ sudo systemctl restart docker $ docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:21.10-py3
無事に起動したので、PyTorch から GPU が見えているかを確かめました。
# python3 Python 3.8.12 | packaged by conda-forge | (default, Sep 29 2021, 19:52:28) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> print(torch.cuda.is_available()) True
無事、アップグレードできました。
WSL2 の Python スクリプトを Windows 側の VSCode で開発する
まえがき
前回の記事で、Windows 10 Home に WSL2 + Ubuntu 20.04 の環境を構築しました。
もともとやりたかったのは、ここで Web サーバの開発をすることです。
サーバは Pipenv を使って Python で開発しています。
今回はそれを Windows 側の VSCode で開発する環境を整えてみます。
WSL2 Ubuntu 20.04 に Pyenv + Pipenv 環境を整える
Pyenv のインストール
WSL2 の Shell で以下を順番に入力します。
$ sudo apt install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc $ exec "$SHELL"
インストールができていることを確認するために、以下のコマンドを入れます。
バージョンが帰ってくれば OK です。
$ pyenv --version
Pipenv のインストール
まず最初に pip をインストールします。
sudo apt install python3-pip
次に pipenv をインストールします。
$ pip3 install --user pipenv $ echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc $ exec "$SHELL"
インストールができていることを確認するために、以下のコマンドを入れます。
バージョンが帰ってくれば OK です。
$ pipenv --version
Pipenv で新しいプロジェクトを作成する
開発を行うディレクトリに移動したら、使いたい Python のバージョンを決めて、
以下のようにプロジェクトを作成します。
$ pipenv --python 3.7.11
このバージョンが Ubuntu 内になければ、Pyenv を使用してインストールするかと聞かれるので
y にすれば勝手にインストールしてくれます。
VSCode でリモート開発のセットアップ
基本的にはここの手順に従います。
Remote Development Extension のインストール
VSCode の拡張パックで Remote Development をインストールします。
WSL2 のパッケージインストール
自分の環境では不要でしたが、参照サイトでは以下のコマンドを入れよと書いてありました。
$ sudo apt update $ sudo apt install wget ca-certificates
開発するディレクトリを VSCode で開く
WSL 側のシェルで以下のコマンドを叩くと、最初に VSCode Server が自動的にインストールされます。
その後、このディレクトリを VSCode で開いてくれます。
$ code .
Python Extension を WSL 側にインストールする
Windows 側にはすでに Python Extension がインストールされています。
しかし WSL 側にもインストールする必要があります。
そのため Python Extension を探します。
Install in WSL をクリックしてインストールします。
Python Interpreter を選択する
Python Interpreter として、さきほど Pipenv でインストールした Python を選択します。
VSCode の左下をクリックするとリストが出てくるので、それらしきものを選択します。
Windows 10 Home に WSL2 を入れる
まえがき
今開発しているのは Ubuntu をローカル Web サーバにした機械学習系のプロダクト。
クラウド Web サーバであれば AWS などを使うのでしょうが、ローカルネットワーク内でのみ使用する Web サーバなので、
サーバもローカルで外のネットワークに出ません。
つまりリモートアクセスができないのです。
昨今の流行りに乗って、週に何日かリモートワークをしていますが、開発サーバに外からアクセスできません。
またリモート時に持って帰るわけにもいきません。
仕方ないのでリモート用の Windows 10 Home に WSL2 を入れることにしました。
WSL2 のインストール
手順はこちらに書いてあるとおりです。
Windows のバージョンを確認する
Windows のバージョンが 2004 以上 (Build 19041 以上) であることを確認します。
Windows の設定 -> システム -> 詳細情報から確認できます。
管理者で PowerShell を起動する
Windows キー + X を押した後 A キーをタイプすれば OK。
所望のバージョンをインストールする
今回は Ubuntu 20.04 をインストールしたいので、PowerShell で以下のコマンドを入力します。
wsl --install -d Ubuntu-20.04
このあと再起動を求められることもあります。
その後ユーザ ID とパスワードを決めて、インストール完了です。
すごく簡単。
初期設定
初期設定の Best Practices は以下を見よとのことです。
とりあえずはパッケージのアップグレードだけしておきました。
$ sudo apt update && sudo apt upgrade
あと、WSL2 のファイルを Explorer で操作できるのは便利。
$ explorer.exe .