Summary
ColaboratoryのGPU環境を使っている際に、pytorch(pytorch lightning)でpytorch_lightning.Trainer(.. , deterministic=True, ..)
を実行したところ、次のようなRuntimeErrorが発生した。
RuntimeError: Deterministic behavior was enabled with either
`torch.use_deterministic_algorithms(True)` or `at::Context::setDeterministicAlgorithms(true)`,
but this operation is not deterministic
because it uses CuBLAS and you have CUDA >= 10.2.
To enable deterministic behavior in this case,
you must set an environment variable before running your PyTorch application:
CUBLAS_WORKSPACE_CONFIG=:4096:8 or CUBLAS_WORKSPACE_CONFIG=:16:8.
For more information, go to https://docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility
これに対処する。
ちなみに、ColaboratroyのGPU環境というのは、この設定をすることで使えるよ。
Resolution
0. エラーメッセージを読む
To enable deterministic behavior in this case,
you must set an environment variable before running your PyTorch application:
CUBLAS_WORKSPACE_CONFIG=:4096:8 or CUBLAS_WORKSPACE_CONFIG=:16:8.
「この場合に deterministic behavior
を有効化するためには、PyTorchを実行する前に環境変数:CUBLAS_WORKSPACE_CONFIG=:4096:8
又は CUBLAS_WORKSPACE_CONFIG=:16:8
を設定する必要があるよ。」
1. 環境変数の設定
というわけで、環境変数を設定してみよう。
この記事の通りにやってみる。
環境変数のパラメータ追加
%env PATH=xxxxx:yyyy:zzzz
この %env
というのを使えば設定できる模様なので、実行してみる。
%env CUBLAS_WORKSPACE_CONFIG=:4096:8
# セルの下に以下のような結果が表示される
env: CUBLAS_WORKSPACE_CONFIG=:4096:8
# 本当に設定できたか確認しよう
%env
{'CLICOLOR': '1',
'CLOUDSDK_CONFIG': '/content/.config',
'CLOUDSDK_PYTHON': 'python3',
'COLAB_GPU': '1',
'CUBLAS_WORKSPACE_CONFIG': ':4096:8', # 出来てた!(((o(*゚▽゚*)o)))
'CUDA_DEVICE_ORDER': 'PCI_BUS_ID',
'CUDA_VERSION': '11.1.1',
'CUDNN_VERSION': '8.0.5.39',
ただ、このままもう一度pytorch_lightning.Trainer(.. , deterministic=True, ..)
を実行してもエラーが発生してしまった。
なぜかはわからない。
ただの勘だけど、多分、色々読み込んだ後に環境変数を設定しても遅いんじゃないかな( ˘·ω·˘ ).。oஇ
2. Colaboratoryランタイム初期化
というわけで、最初からやり直してみよう。
Colaboratoryメニューの、「ランタイム」「ランタイムを再起動」をクリック。
すると、この部分に「再起動中」と表示される。
次のように、緑色のチェックマークが出るまで待とう。
この後、先に環境変数を設定してからpythonパッケージのインポートやソースコードを実行したところ、無事エラーを回避できた( *˙︶˙*)وグッ!
関連記事
あんまり関係ないけど、deterministic
に関してはこの記事が詳しそう。
ちゃんと理解したくなったら読んでみようと思う。