ちょっと深層強化学習を勉強しようと思いまして、ついでに(?)
windowsのwsl2に新しいubuntu 22.04を入れようと思い立ちましたのでそのメモと、
tensorflowとpytorchのGPU深層学習環境の整備について書いていこうかと思います。
WSL2の初期設定
Linux環境の各種アップデート
sudo apt update sudo apt upgrade
これでOK。
systemctlの有効化
こちらを参考に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関連の設定を行います。
こちらに従って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します。
これも公式がわかりやすいのでそのコマンドを打つだけです。
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
だいたい、この公式ドキュメントに沿って進めていきますが、
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
続いて、 CUDA
と cuDNN
を公式ドキュメント同様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
がエラーになったのでその対応について記載します。
基本的に以下に記載の内容をそのまま行えばよいです。
まず、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と記載がありました)
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です。