RTX3080で機械学習ベンチマーク(をしようとした)


NEW! (2020/12/19)

まえがき

  • 筆者は、2020/09/17に秋葉原で行われた「RTX3080深夜販売」に参加した。幸運なことに、そのうちの1本を入手することができたので、機械学習ベンチマークを取ろうと考えた。
  • (前日までに、各種Webメディアにおいてゲームでのベンチマークは公開されていた。しかし、機械学習のベンチマーク結果は一向に出てこなかったのも背景としてある。)

検証環境

  • 筆者の過去の投稿を見てもらえばわかるが、筆者が所有する環境は、それほど一般的ではない。よって、多くの人の参考になるものではないことを最初に断っておく。
  • マシンスペック
    • MacBook Pro(2018)
      • OS:Windows 10 Pro Insider Preview(Bootcamp)
      • Windows OS ビルド:20215.1000
      • macOS:Catalina 10.15.5
    • CPU:Intel Core i7-8559U
    • GPU:NVIDIA GeForce RTX 3080
      • GPUエンクロージャ:Razer Core X Chroma
    • Memory:16GB
    • Storage:NVMe SSD 200GB

検証タスク

発生した問題

  • NVIDIA グラフィックスドライバーのバージョンに関して
    • 筆者の過去の投稿を見返してもらうとわかるが、MacBookProでのBootcamp̟と外付けGPU環境で、CUDA on WSLを実現するために、グラフィックスドライバーはバージョン「460.15」のものを用いていた。
    • この時点で公開されていた、RTX3080とRTX2080Ti向けのグラフィックスドライバーの最新バージョンは「456.38」であったが、より新しいものであると思われたので、そのまま使えるかに思えた。しかし、そのままでは使えず、「456.38」を入れ直すと認識させることができた。
    • このことから、RTX3080を用いたCUDA on WSLは、2020/09/17時点では無理だったのではないかと思われる。
  • CUDA 10.2がなぜか動かない問題
    • 2020/09/19現在、ここで詰まっている。
    • 追記あり

状況

  • NNablaでは、最初の初期化で処理がハングしてしまう。
2020-09-19 18:06:19,034 [nnabla][INFO]: Initializing CPU extension...
2020-09-19 18:06:20,871 [nnabla][INFO]: Initializing CUDA extension...
2020-09-19 18:06:20,891 [nnabla][INFO]: Initializing cuDNN extension...
  • ちなみにGPUを認識できないときは次のようなエラーメッセージが返ってくる。(外付けGPUをつないだ環境では、このようなエラーメッセージはまったく返ってこなかった。)
Traceback (most recent call last):
  File "classification.py", line 158, in <module>
    train()
  File "classification.py", line 75, in train
    pred_train = prediction(image_train, test)
  File "C:\XXX\Workspace\nnabla-examples\cifar10-100-collection\models.py", line 80, in resnet23_prediction
    pad=(1, 1), with_bias=False)
  File "<string>", line 5, in convolution
  File "C:\XXX\anaconda3\envs\python37\lib\site-packages\nnabla\parametric_functions.py", line 639, in convolution
    return F.convolution(inp, w, b, base_axis, pad, stride, dilation, group, channel_last)
  File "<convolution>", line 3, in convolution
  File "C:\XXX\anaconda3\envs\python37\lib\site-packages\nnabla\function_bases.py", line 352, in convolution
    return F.Convolution(ctx, base_axis, pad, stride, dilation, group, channel_last)(*inputs, n_outputs=n_outputs, auto_forward=get_auto_forward(), outputs=outputs)
  File "function.pyx", line 308, in nnabla.function.Function.__call__
  File "function.pyx", line 286, in nnabla.function.Function._cg_call
RuntimeError: target_specific error in nbla::cuda_get_device
C:\ci\yYFZ-Jhm\0\nnabla\builders\all\nnabla-ext-cuda\src\nbla\cuda\common.cpp:29
(cudaGetDevice(&current_device)) failed with "unknown error" (cudaErrorUnknown).
  • 上記現象は、NNabla固有の現象である可能性もあるため、Tensorflow(=2.2.0)でも下記コマンドを試したが、こちらでもCUDAライブラリを読み込むことはできているようだが、途中でハングしてしまう。
python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

解決したら更新します

  • 何かわかる方いましたら教えてください! 人

追記

  • どうやら、同じようにGPGPU用途でフリーズなどの症状に陥っているとの情報アリ。しばらく待つしかないのかもしれない。

追記2

  • コメントにて、RTX30系ではCUDA11しか(まだ?)対応していない可能性を指摘していただきました。(ありがとうございます。)
  • しかし、NNablaもTensorflowもCUDA10までしか対応していないみたいなので、NNablaならCUDA11対応を待つか、Tensorflowならプレビュー版を試すかになりそうです。
  • (それより、早くRTX30系でもCUDA10が使えるようになる可能性もある…?)

追記3

  • コメントにて、AmpereアーキテクチャはcuDNN=8.xしか対応していないことを教えていただきました。(ありがとうございます。)
  • NNabla=1.10.0は、cuDNN=8.xでは動かなかったように記憶しているのですが、もう一度確認したいですね。
    • 最近1.11.0が出たようなので、それでも検証してみたいです。
    • →やはり、NNabla<=1.11.0でcuDNN=8.xは動きませんでした。
  • Tensorflowも2.3.0の段階では、cuDNN=8.xに対応していないようなので、試すならやはりnightlyになるでしょうか。