NVIDIA RTX3600 (12GB)  GPUを利用する WSL2 Ubuntu20.04 上に AI 開発環境を準備

*内容が古くなったので改訂しました。(2023/11/13 更新)

AI 関連の学習を始めると、少し規模が大きいとCPUだけだと非常に時間がかかります。そこで使えるのが GPU です。現在 普通のユーザーが利用できる AI で使われている PyTorch と TensorFlow の２大 Python ライブラリは NVIDIA の GPU しかサポートされていません、

なるべく安価な GPU として NVIDIA RTX3600 (12GB) が一番コストパフォーマンスが高いと聞いたので、購入しました。価格は 2023年11月で４万円前後です。GPU としては比較的低価格ですがメモリが 12GB がポイントです。

環境として

OS : Windows11 バージョン；22H2
WSL バージョン: 2.0.8.0
カーネル バージョン: 5.15.133.1-1
Linux OS : Ubuntu 20.04 LTS

##### 1. まずは Ubuntu OS 上に Python の仮想環境の pyenv をインストールします
AI 環境は依存するライブラリーのバージョンが非常に重要で少しでも違うと動かなくなります。このため環境を作ったり・壊したりする事が多いのでこの様な仮想環境は非常に便利です。
* 現在 python で仮想環境は Python3 付属の venv を使うことが推奨されているようですが、著者の慣れで pyenv を利用します

1.1 最初に、pyenvの依存パッケージをインストールします。ターミナルを開いて以下のコマンドを実行してください：
```
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
```

1.2 次にpyenvをGitHubからクローンします：
```
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
```

1.3 pyenvを使うためには、環境変数PYENV_ROOTを設定し、そのパスをPATHに追加する必要があります。この設定は.bashrcか.zshrc（もしくはあなたが使用しているシェルの設定ファイル）に追加します：
```
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
```

1.4 また、pyenv initを使って、pyenvを使いやすくするための設定を追加します：
```
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc
```


1.5 最後に、変更した設定を反映させます：

```
source ~/.bashrc
```


1.6 Python 3.10.12 をインストール。こちらのバージョンは目的によって変えて下さい。

```
pyenv install 3.10.12
pyenv local 3.10.12
```

##### ２. NVIDIA CUDA 12.1 のインストール

2. 1  CUDA Toolkit 12.1 のインストール：
```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/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
```

2.2 環境変数の設定
次に、.bashrc ファイルを編集して CUDA Toolkit がインストールされているディレクトリへのパスを追加します：
```
echo 'export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
```

2.3 CUDAバージョンの確認：
```
nvcc --version
```
出力例 12.3 がインストールされている事を確認して下さい。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Sep__8_19:17:24_PDT_2023
Cuda compilation tools, release 12.3, V12.3.52
Build cuda_12.3.r12.3/compiler.33281558_0


##### ３. PyTorch 機械学習ライブラリ Stable (2.1.0) のインストール

PyTorch　は Facebook(メタ社) の開発サポートしている機械学習ライブラリ。Google の TensorFlow と並ぶAIライブラリです。

3.1 インストールコマンド
```
pip3 install torch torchvision torchaudio
```

3.2 PyTorch での GPU 利用の確認

以下は python プログラムなので、python を起動してから入力して下さい。
```
import torch
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)
```
cuda:0
と出れば成功です。

##### 4. Jupyter Notebook のインストール
Python の学習に標準の対話型ツールの Jupyter Notebook をインストールします。
ほとんどの AI に関する教科書はサンプルプログラムを Jupyter Notebook の文書形式で GitHub で提供される事が多いです。

4.1 Jupyter Notebook のインストール
```
pip3 install jupyter 
```

以上で設定完了です。

ChatGPT plus に助けてもらいながらまとめました。

##### 5. 大規模言語モデル用ライブラリ Hugging Face社 Transformaers

自分の目的がオライリー・ジャパンの **「機械学習エンジニアのためのTransformers ―最先端の自然言語処理ライブラリによるモデル開発」** の例題を学習するのが目的でした。

この本は今流行りの OpenAI ChatGPT などが使っている大規模言語モデル(LLM) を操作出来る Hugging Face社 の Transformers ライブラリに関して書かれていて、Hugging Face社でこのライブラリを開発して居る人が著者に入ってます、本家本元の本です。

各章では LLMでの非常に興味深い応用がTransformers ライブラリを利用して書かれています。

Google Colab とか使うように奨励されてたりするのですが、無償版だとメモリ不足になりそこで学習が頓挫してしまったので、グラフィックボードをメモリ容量重視で導入しました。

以上の設定を完了後、自分のローカル PC でこの教科書の第１章「入門Transformers」第２章「テキスト分類」の例題を完結させられました。おもちゃのトランスフォーマーにちなんだ、通販のクレームの分類や大規模言語モデルをゼロから構築するなど興味深い話題が満載です。

ここに書かれた情報は全てネットにアップされてますが、まとまった情報が無かったので、自分の健忘録の意味でもこちらにアップしました。