Anacondaを使用したLinuxでのGPU環境構築

## 機械学習実行時のGPU環境構築について
様々なオープンソースのモデルが出てきている中で、ちょっと試してみたいと思ってgitからクローンしてきても色々バージョンが合わずに環境構築に手間取ってしまい、結局環境構築だけで1日潰れてしまった、、みたいなことが多々あり、その度に調べてというのを繰り返していたので、一度まとめようと思います。

今回はローカルのcudaを変更するのではなく全てanaconda上で設定する方法を記録します。

### 目次
[1. Nvidia-driverのバージョン確認](#1-nvidia-driverのバージョン確認)
[2. conda環境の作成](#2-conda環境の作成)
[3. CUDAのインストール](#3-cudaのインストール)
[4. Pytorchのインストール](#4-pytorchのインストール)
[5. 遭遇したエラー集](#5-遭遇したエラー集)
[6.おわりに](#6-おわりに)

# 1. Nvidia-driverのバージョン確認
nvidia-driverはローカルのマシン内に入っていないといけないので、無い場合はインストールしてください。
```nvidia-smi``` を実行してGPUの詳細が表示されればインストールできています。


# 2. conda環境の作成
condaで環境を構築します。(anacondaはすでにインストール済みという前提で進めます。)
```
$ conda create -n 環境名
```
pythonのバージョンを指定したい場合は
```
$ conda create -n 環境名 python==x.x.x
```
のように指定して環境を作成します。

環境作成後は
```
$ conda activate 環境名
```
で作成した環境に入っておいてください。


# 3. CUDAのインストール
```
$ nvidia-smi
``` 
を実行しドライバの詳細を表示します。
この時に、```Driver Version: ****   ```という部分に対応しているCUDAをインストールします。

例えばCUDA12.6のリリースノートに書いてある以下の表を見ると、driverバージョンが525.60.13以上ならばCUDA12.x以上のものを使わないといけない、となっています。
ここのバージョンを合わせないと後々エラーになってしまいます。

![スクリーンショット 2024-11-24 12.30.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640345/5a56cfb3-eda5-9f3e-17da-7f03bce392d6.png)

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id4

インストールしたいCUDAのバージョンが確認できたので、condaを使ってインストールします。

https://anaconda.org/nvidia/cuda-toolkit

ここからインストールしたいバージョンのコマンドを探します。
例えば12.1をインストールしたい場合、以下を実行します。

```
$ conda install nvidia/label/cuda-12.1.0::cuda-toolkit
``` 

インストール後、
```
$ conda list cuda
```
を実行して cuda-toolkitが含まれていればOKです。

また 
```
$ nvcc -V
```

を実行し、cudaのバージョンが表示されるかどうかも確認します。
以下は例です。
```
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Feb__7_19:32:13_PST_2023
Cuda compilation tools, release 12.1, V12.1.66
Build cuda_12.1.r12.1/compiler.32415258_0
```

これが表示されない、もしくはインストールしたものとは別のバージョン（ローカルのバージョンなど）が表示される場合は、conda環境にnvccがインストールされていない可能性があるので、インストールします。
先ほどインストールしたcudaと同じバージョンをインストールします。

```
$ conda install nvidia/label/cuda-12.1.0::cuda-nvcc
```



# 4. Pytorchのインストール
pytorchの公式サイトからcudaのバージョンを確認し、あったものをインストールします。

https://pytorch.org/get-started/previous-versions/

自分の環境（linux, windowsなど）に合わせたコマンドをコピペして実行してください。
例えば、pytorch 2.5.0をインストールしたい場合は以下のコマンドを実行します。
```
$ conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 pytorch-cuda=12.1 -c pytorch -c nvidia
```

確認のためターミナルでpython環境に入り、
```
$ import torch
$ torch.cuda.is_available()
```

を実行し
```
$ True
```
が返ってくることを確認します。
ここまで確認できれば、cuda, pytorchの環境が作成できているはずです。

# 5. 遭遇したエラー集
上で作成した環境に、gitからクローンしてきたものライブラリをインストールしようとしていた時に発生したエラーです。
wheelをビルドしている時に以下のようなエラーが発生しうまく実行できませんでした。

```
/home/user_name/miniconda3/envs/env_name/compiler_compat/ld: cannot find -lcudart: No such file or directory
collect2: error: ld returned 1 exit status
error: command '/home/user_name/miniconda3/envs/anv_name/bin/x86_64-conda-linux-gnu-c++' failed with exit code 1
[end of output]
```

これはlcudartが存在しない、もしくはシンボリックリンクが壊れていることが原因で起こるエラーだと思います。
私の場合はシンボリックリンクが壊れていてうまくいきませんでした。

まず
```
$ ls -l /home/user_name/miniconda3/envs/env_name/lib/libcudart.so.*
```
でlibcudart.so.*が存在するかを確認します。
無い場合はcondaでインストールします。
存在するがエラーが発生している場合は
```
$ file /home/user_name/miniconda3/envs/env_name/lib/libcudart.so
```
とし
```
/home/user_name/miniconda3/envs/env_name/lib/libcudart.so: broken symbolic link to libcudart.so.12.1.55
```
のように表示された場合、シンボリックリンクが壊れているので作成しなおします。

```
$ rm /home/user_name//miniconda3/envs/env_name/lib/libcudart.so
$ ln -s /home/user_name//miniconda3/envs/env_name/lib/libcudart.so.12.1.105 /home/user_name//miniconda3/envs/env_name/lib/libcudart.so
```

その後以下のコマンドでシンボリックリンクがうまく作成できているか確認します。
```
$ ldd /home/rin/miniconda3/envs/sam2/lib/libcudart.so
```

# 6. おわりに
linuxにおけるcondaでのGPU環境の構築方法について説明しました。
今後様々なエラーが発生した場合に追記していこうと思います。