機械学習実装の環境構築ガイド！CUDAとPyTorchのバージョンが合わないエラーからの脱出

GitHubに公開されているような最新の機械学習モデルを試そうとしたとき、環境構築に苦労して断念した経験がある方に向けた記事となっております。

今回の記事では、機械学習モデルを実装したい方向けに、環境構築をスムーズに行うため手順を簡潔にまとめました。ぜひ参考にしてみてください！


要約：
- 自分が入れるべきCUDAとPytorchのバージョンを特定しよう！
- 実際の環境構築ではDockerを使用しよう！

読んでほしい人：
- Github上に回したい機械学習モデルがあるけど環境構築ができない
- 検証したい機械学習モデルがあるけど環境構築がよく分からない方
- 既存モデルの再現実装をしたい方

執筆者の実行環境：
- OS: Linux
- フレームワーク：Pytorch
- GPU: NVIDIA製

注意点：
執筆者も勉強中なので誤りが含まれている可能性があります

# 機械学習の環境構築をする時にチェックすべき所とゴール
結論として、チェックしなければいけないことは主に２つです。

1. 検証したい機械学習モデルが対応しているPytorchのバージョン確認
2. GPU、CUDA、Pytorchの互換性の確認

これらを確認した後に適切なCUDAとPytorchのバージョンを入れることで環境構築を行うことができます！

# １. 検証したい機械学習モデルが対応しているPytorchのバージョンの確認
まず使いたい機械学習モデルが対応しているPytorchのバージョンの確認方法です。

例えば次の機械学習モデル(https://github.com/kakaobrain/hotr )を回したい時、「1. Environmental Setup」の所に```# PyTorch 1.7.1, torchvision 0.8.2, CUDA=11.0```と書いてあると思います。

基本的には同じバージョンのPytorchをインストールすることで問題なくこの機械学習モデルを動かすことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564290/043a8b8d-20d1-5daf-e1dd-f8ac821c956d.png)

# ２. GPU、CUDA、Pytorchの互換性の確認
次にするべきことはGPUとCUDAとPytorchのバージョンの互換性の確認です。

これらの互換性がないものを入れてしまうと機械学習モデルは上手く動きませんし、逆にここさえクリアしていれば仮に上手く動いてなくても修正は少ないはずです。

互換性の確認についてですが、「GPUとCUDAの互換性」と「CUDAとPytorchの互換性」の２つがクリアしていればOKです。それぞれについて話していきます

## GPUとCUDAの互換性の確認方法
自分が使用しているPCのGPUに対して互換性のあるCUDAのバージョンの確認方法は以下の2ステップで確認できます。

### ステップ１：対応している最も低いバージョンの確認
以下の方のサイトを参考にすれば確認できます。

https://qiita.com/k_ikasumipowder/items/1142dadba01b42ac6012

例えばNVIDIA A100のGPUを使っている場合、CUDAバージョンは11.1以上をダウンロードすればOKです。

### ステップ２：対応している最も高いバージョンの確認
shellにて```nvidia-smi```コマンドを実行すると以下のような表示がされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564290/4cdf7ffe-5960-9fc2-0ad0-56320354a48c.png)
右上のCUDA Versionが対応している最も高いCUDAのバージョンであり、今回の場合では11.7になります

以上からA100のGPUを使用している場合はCUDAのバージョンが11.1以上11.7以下であれば良いことがわかりました。

## CUDAとPytorchの互換性の確認方法
次の公式サイトを参考にすればokです。

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

例えばCUDA11.1に対応するpytorchのバージョンが知りたければ、ページ内検索で```CUDA 11.1```と打ち込みtorch=?.?.?を参考にすれば入れられるバージョンがわかります。


# 実例を通しての解説！
それでは、実例を通して適切なCUDAとPytorchのバージョンを見つけたいと思います。ここで見つけた適切なバージョンのCUDAとPytorchをインストールするだけで環境構築はできます。

今回は先ほどの機械学習モデル(https://github.com/kakaobrain/hotr )を使いたい時について考えてみます。

まず、このモデルが使いたいPytorchのバージョンが1.7.1であることはページの中から分かりました。

次に自分が所有しているGPUが対応しているCUDAのバージョンを確認します。
私の場合はNVIDIA A100を利用しているので先ほどの「GPUとCUDAの互換性の確認方法」からCUDAのバージョンが11.1以上11.7以下であれば良いことがわかりました。

以上の情報を一度纏めると、
- 入れたいPytorchのバージョン：1.7.1
- 入れたいCUDAのバージョン：11.1<=CUDA<=11.7


これらの情報をもとに「CUDAとPytorchの互換性の確認方法」から最良なCUDAのバージョンを特定します。

公式ページ(https://pytorch.org/get-started/previous-versions/ )にてページ内検索```torch==1.7.1```をしてみた所、対応しているCUDAのバージョンは一番高くても11.0であることがわかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564290/9bc01ba5-85ae-af7d-f1c0-a011807f129f.png)

一見、対応しているCUDAのバージョンがなくて詰んでしまっていますが、このような時は入れるpytorchのバージョンを少し上げれば大丈夫です。

詳しい話は省きますが、入れたいPytorchのバージョンよりも多少アップデートされていても大丈夫なことがほとんどです（Pyorch==1.7.1を入れたい場合ならば1.10くらいまでは問題ない可能性が高い）。<font color="Red">一方でCUDAのバージョンは必ず守るようにしてください。</font>

もう一度先ほどの公式ページでページ内検索「CUDA 11.1」をしてみた所、pytorh==1.8.0が最も低いバージョンでした。よって今回はこれを採用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564290/22e6bd30-7ced-d68f-4316-c99abb5051bc.png)

以上から自分が入れるべきCUDAとpytorchのバージョンがわかりました！
今回の例では
- CUDA：11.1
- Pytorch：1.8.0
具体的なインストール方法については、shellにて```conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge```を実行してあげればインストール完了です。

このようにして自分が使いたい機械学習モデルに対してバージョンの互換性を確認していくことで上手く動かすことができるようになります！

# まとめ
大事なことは「GPU, CUDA, Pytorch」の互換性を理解し、最適なCUDAとPytorchのバージョンを入れることです。
ここさえ理解していれば環境構築を正しく行うことができます。

<font color="Red">
しかしながら、複数の機械学習モデルを1つのPC上で実行したい時などに、毎回CUDAとPytorchをインストールし直すのは非常に面倒です。
</font>

そのため実際の環境構築ではDockerを使用することをお勧めします！詳しくは以下の記事で解説しています。

[LinuxでDockerを使いこなす：機械学習の環境構築マニュアル](https://qiita.com/gureibu0326/items/30fa256b482473c5fa18)