CUDA11.2Update2 on Windows10(メモリリークとCUDAの作業メモ)

先日(2021年3月17日付け)のドライバアップデートから一部のマシンでメモリリーク祭がはじまった。

基本的にGPUの類は最新ドライバを使うのが最もパフォーマンスが出るとして推奨される。

実際他のハードウェアに比べアップデート頻度が高い。

 

様々なバージョンチェックの結果CUDAもアップデートしてやるとメモリリークが止まるらしいことを確認した。詳細な前後のバージョンやハードウェアの世代依存に関する詳細までは未確認である。

実際のリーク量は微量で一日中機械学習をするような真似をしない限り表にでないと思う。ただ,私には致命的だっただけだ。

 

 

で,CUDA11.2Update2という最新のものを入れてみたのだが一部動かないものがあった。

対応のTensorRTが7.2.3.4ということで同時に入れておいたのだが,この中のnvinfer.dllがCUDA11.1に入っているnvrtc64_111_0.dllに依存しているらしい。

これだけのために複数バージョンのCUDAを入れる気にもならないので,CUDA11.2に入っているnvrtc64_112_0.dllをコピーしてリネームしてやったら動いている。真似してはいけない。(バイナリエディタでバージョン弄るのとかもダメだ)

 

確認に使ったツールは以下。

GitHub - lucasg/Dependencies: A rewrite of the old legacy software "depends.exe" in C# for Windows devs to troubleshoot dll load dependencies issues.

 

まぁ,MSあるあるなんだがバージョン依存のライブラリとそうでないものがあると見せかけてnvinfer.dllなんてバージョン依存が無さそうに見えるものが依存してるというトラップである。(本件はNVIDIAだが)

ということで酷い対応だが公式バイナリも相当酷いことを確認して,しばらくこのまま様子見する。

 

年に一度あるかないかくらいだが酷い不具合に遭遇する。

今年は年始にWindowsのバッチファイルにおいてREM文(コメント文)が8192文字を超えると勝手に次の行になって解釈される不具合を発見した。一応報告しておいたが修正されるのだろうか。

そもそもREM文が無ければ一行8192文字を超えるバッチファイルが動いているのが結構感動ものであった。コマンドラインで引数400個くらい付けた気がする。

---

追記:

バッチファイルの一行上限が8192byteであるのは仕様らしい。