ゆるふわクオンツの日常

WSL2上のUbuntu22.04でGPU版 tensorflow / pytorch 環境設定をトトノエル

ちょっと深層強化学習を勉強しようと思いまして、ついでに(?)

windowsのwsl2に新しいubuntu 22.04を入れようと思い立ちましたのでそのメモと、

tensorflowとpytorchのGPU深層学習環境の整備について書いていこうかと思います。

WSL2の初期設定

Linux環境の各種アップデート

sudo apt update
sudo apt upgrade

これでOK。

systemctlの有効化

devblogs.microsoft.com

こちらを参考にsystemctlを使えるようにします。

まず、/etc下にwsl.confを作ります。

sudo touch wsl.conf

wsl.confの中には以下の通り記載します。

[boot]
systemd=true

その後、Ubuntuから一旦抜けて、WSLディストリビューションの再起動を行います。

C:\>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
C:\>wsl -t Ubuntu
この操作を正しく終了しました。
C:\>wsl -d Ubuntu

これでsystemctlが使えるようになっているはずです。

gitの設定

続いて、git関連の設定を行います。

qiita.com

こちらに従ってsshの設定をします。

自分のgithubアカウントにssh接続できるように以下で公開鍵と秘密鍵を作ります。

cd  ~/.ssh
ssh-keygen -t rsa

あとはこの公開鍵部分をgithubに手動で登録すればOKです。

動作確認は

ssh -T git@github.com

続いてconfig設定。

gitのユーザーネームとメールアドレスを設定します。

git config --global user.name "hoge"
git config --global user.email hoge@hoge.com

pyenv & python & poetryについて

各分析プロジェクトは、python本体をpyenvで、

pythonに付随するライブラリをpoetryでコントロールする環境を構築したいので以下を設定します。

poetry

まず、pythonライブラリのバージョン管理用にpoetryを使うのでinstallします。

これも公式がわかりやすいのでそのコマンドを打つだけです。

python-poetry.org

curl -sSL https://install.python-poetry.org | python3 -

パスを通せ、と言われたら従ってください。

あと、仮想環境は各プロジェクトフォルダに作りたいので以下のブログのように設定をします。

https://maasaablog.com/development/backend/python/5161/#toc2maasaablog.com

poetry config virtualenvs.in-project true
poetry config virtualenvs.prefer-active-python true

pyenv

次にpyenvを入れていきます。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

あとは~/.bashrcに以下を書き込みます。

# pyenv
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

上記の .bashrc を読み込むためにターミナルを再起動することで

pyenvコマンドが使えるようになっていると思います。

ちなみに

https://github.com/pyenv/pyenv#getting-pyenv

によると、以下のコマンドを実行することでpyenvの挙動が早くなるみたいです。

なお、build-essentialがないとgccがなくてコマンドに失敗するので合わせて入れておきます。

sudo apt install build-essential
cd ~/.pyenv && src/configure && make -C src

python

そんでもって miniforge の(この記事執筆時点で)一番新しいpythonを入れたいと思います。

pyenv install miniforge3-22.9.0-3
pyenv global miniforge3-22.9.0-3

GPU版 tensorflow

www.tensorflow.org

だいたい、この公式ドキュメントに沿って進めていきますが、

condaでの環境切り分けではなくpyenvで環境を切り分けます。

まず、この記事執筆時点では上記の公式ドキュメントでは3.9系のpythonが使用されているため、

python3.9系のminiforgeを探します(→ miniforge3-4.13.0-1)。

pyenv install miniforge3-4.13.0-1
pyenv global miniforge3-4.13.0-1
conda update conda

続いて、 CUDAcuDNN を公式ドキュメント同様condaで入れます。

conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0

そのあとは環境変数の設定部分ですが、とりあえず以下を打ち込みます。

export LD_LIBRARY_PATH=":/home/ユーザーネーム/.pyenv/versions/miniforge3-4.13.0-1/lib/"

(これでとりあえずは問題なく動くのですが、上記の環境変数の設定だと何かの拍子に消えてたりするので、

ここは公式サイトのように環境切り替え時に自動で環境変数を設定したほうがよさそうです。

が、やり方わからないので一旦放置します。)

そしてtensorflowを入れていきます

pip install --upgrade pip
pip install tensorflow

注意すべきは、TensorFlow を conda でインストールしてはダメということです。

TensorFlow は PyPI にのみ公式にリリースされているため、pip が推奨されるそうです。

このへん含めて、環境は切り分けておいた方が無難ですね。

完了すれば、動作確認です。

python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

これでGPUらしきものが返ってくればOKです。

なお、warningやinfoが山盛りで見ずらい場合は、

WとIのログを非表示にするオプションも検討してみるといいかもしれません。

TF_CPP_MIN_LOG_LEVEL=2 python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

GPU版 pytorch

tensorflowと同じような感じで進めていきます。

python3.10系のminiforgeを探します(miniforge3-4.14.0-2あたり)。

pyenv install miniforge3-4.14.0-2
pyenv global miniforge3-4.14.0-2
conda update conda
conda install python=3.10 # 初期バージョンがシステムと同じだったので少しバージョンを上げましたが特にしなくても問題ないです。

ちなみにpythonのバージョンに強いこだわりはないです。

次にpytorchのサイトで、どんなふうにインストールするかを決めていきます。

どうやらこの記事執筆時点ではcuda 11.7 が最新のようですので、

それでインストールしていこうかとおもいます。

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

動作確認は

import torch
torch.cuda.is_available()

でTrueと返ってくればOKです

Poetryでpytorch環境を作るには(deprecated)

上記の conda install の代わりにpoetryでも簡単に設定でき(pytorchのサイトでpipを使ったインストールコマンドを参考に)

poetry add torch torchvision torchaudio

でも環境設定できます。

もちろん torch.cuda.is_available() もTrueになるのでご安心。

Poetryでpytorch環境を作るには(追記2023/10/08)

久しぶりに環境を作ったら poetry add torch torchvision torchaudio がエラーになったのでその対応について記載します。

基本的に以下に記載の内容をそのまま行えばよいです。

zenn.dev

まず、Pytorch公式サイトから、cudaのurlを取得します。

上記のurlを参考に、poetryにcudaのリンクを追加を行います。

poetry source add torch_cu118 --priority=explicit https://download.pytorch.org/whl/cu118

上記のソース追加が終われば、Pytorch公式サイトのコマンドを実行して完了です。

poetry add torch torchvision torchaudio --source torch_cu118

おまけ(GPU版 jax & flax)

このtorch環境のcudaとcudnnはGPU版のjax(とそのラッパー的なflax)にも対応できるのでついでに入れてみました。

(conda listすると、cuda11.7_cudnn8.5.0_0と記載がありました)

github.com

github.com

pip install "jax[cuda11_cudnn82]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
pip install flax

動作確認は

import jax
jax.default_backend()

GPUが返ってくればOKです。