NVIDIA RTX A4000 (sm_86)上でPytorchを使う

はじめに

先日、ジーデップ・アドバンス(以下、GDEP)より、NVIDIA RTX A4000を購入した。GDEPは法人メインの取引だと思ってたので、個人購入可能かを質問し、可能と分かったので、何回かやり取り(見積り、入金)の後、先日入手した。

早速A4000を使って、このDCGANを試した。自分の環境で、A4000上でPytorchを使ったら、少しハマった。状況、原因、対応などについて、ここにまとめる。タイトルにある「sm_86」は今回のキーワード!

起動まで

GDEPのホームページの「お問い合わせ」から、個人で購入可能かと問い合わせたところ、可能とのことだった。購入への最終判断の後、送付された「注文確認書」に必要事項を記入・送付(メール)した。いわゆる発注した。その後請求書が届いた(メール)ので、振込先に見積り金額を振り込んだ。 翌ビジネス日には送付され、翌々ビジネス日には手元に届いた。タイミングが良かったのか、非常に短い手番で入手できた。

packaging輸送用の箱から取り出した状態、コンシューマ(ゲーマー)向けのGeforceの箱と比べるとシンプル。

inside_Z820 Z820のPCIスロット7に装着した状態(一番下で、背が金色に輝いているボード)。気が焦っていたためか、6ピン補助電源の接続を忘れてた。サーバ起動してもGPUが認識されずに焦った。その後補助電源を(写真の右側に挿してあるケーブルを)接続した。

jupyterlabでエラー

ワークステーションの電源を入れ、「NVIDIA X Server Setting」を起動すると、「NVIDIA RTX A4000」と表示された。きちんと認識されているようなので、早速この記事の内容を実行。

そうすると、イメージからdatasetを作り、dataloaderを作り、device(この場合A4000)に転送する部分(imshowのためtransposeする箇所)でエラーが発生。

ここで、この記事に書いた通り、自分の環境では、jupyterlabのsingularityコンテナを起動して、jupyterlabを使っている。その環境で、先のページのDCGANのnotebookを実行した。

実際(DCGAN)のコードでなく、次のような単純なコードでもエラーが発生する。

import torch

print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.current_device())
print(torch.cuda.get_device_name())
print(torch.cuda.get_device_name(torch.device('cuda:0')))
print(torch.cuda.get_device_name('cuda:0'))

実行結果は、次のとおり。

1.11.0+cu102
True
1
0
NVIDIA RTX A4000
NVIDIA RTX A4000
NVIDIA RTX A4000
/usr/local/lib/python3.8/dist-packages/torch/cuda/__init__.py:145: UserWarning: 
NVIDIA RTX A4000 with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.
If you want to use the NVIDIA RTX A4000 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/

  warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))

参考までに、次のコードも実行してみる。

import torch
print(torch.cuda.get_arch_list())

その結果は、次のとおり。

['sm_37', 'sm_50', 'sm_60', 'sm_70']

総合すると、A4000(コンピュート・ケイパビリティ:sm_86)は、このPyTorchではサポートしていない!

対応(その1、解決できず)

先ずは、何かが古くて、最新のコンピュート・ケイパビリティ(sm_86)をサポートしていなと考えた。そこで、(この記事のものと同じdefファイルで)再度singularityコンテナを作成した。

そのコンテナを実行しても同様の結果。

対応(その2、解決!)

もう一度、サンプルコードの実行時のメッセージをよく見る。

If you want to use the NVIDIA RTX A4000 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/

チェックしろ!と言われたページは、次のとおり。(自分の環境用に選択している)

get-started_locally

アッそうか! Run this Command欄でのインストールコマンドの通りにインストール必要がある!!

defファイルを次のように変更した。

今回の一番のポイントは、「pip3 install torch torchvision torchaudio –extra-index-url https://download.pytorch.org/whl/cu113」とインストールする版を指定している部分。

更に、これまでjupyterlabを使っていて必要となったパッケージを追加し、全体を整理した。

# pytorchベースのjupyterlabが動く、singularityコンテナを作成する。

Bootstrap:	docker
FRom:	nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04

%post
	apt update -y && apt -y install python3 python3-pip ¥
		curl git tree unzip vim wget
	pip3 install --upgrade pip setuptools
	pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
	pip3 install jupyterlab matplotlib pandas scikit-learn seaborn ¥
		sympy pydotplus ipywidgets widgetsnbextension ¥
		janome torchtext tweepy gensim folium pytorch-transformers ¥
		transformers spacy torchdata fugashi ipadic

%runscript
	jupyter-lab --ip=0.0.0.0 --port=8888 --no-browser --NotebookApp.token='' --notebook-dir=/workdir

まとめ、今後について

今回のことで痛感したことは、「ちゃんとメッセージは読まなくっちゃ!」ということ。

実行してみて、体感的に(GTX 1080と比べて)速くなったように感じたので、今後計測する。

GPU  A4000  Pytorch 

も参照してください