ドキュメント は次のように述べています。
モデルによっては、確定的モードはパフォーマンスに影響を与える可能性があります。
私の質問は、ここでパフォーマンスが意味するものです。処理速度またはモデルの品質(つまり、最小限の損失)?つまり、手動シードを設定してモデルを確定的な方法で実行させると、最小限の損失が見つかるまでトレーニング時間が長くなりますか、それともモデルが非確定的である場合よりも最小限の損失が悪化しますか?
完全を期すために、これらのプロパティをすべて設定して、モデルを手動で確定的にします。
def set_seed(seed):
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(seed)
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
パフォーマンスとはランタイムを指します。 CuDNNにはいくつかの実装方法があり、cudnn.deterministic
がtrueに設定されている場合は、確定的な実装(または私たちが信じている実装)のみが必要であることをCuDNNに伝えています。簡単に言えば、これを実行しているときは、CPUでと同じ結果またはと同じシステムでGPUを期待する必要があります同じ入力を供給するとき。なぜパフォーマンスに影響するのですか? CuDNNは実装の選択にヒューリスティックを使用します。したがって、実際にはCuDNNがどのように動作するかはモデルによって異なります。決定論的に選択すると、ランタイムに影響を与える可能性があります。たとえば、同じ実行ポイントでそれらを選択するより高速な方法であったためです。
あなたのスニペットに関して、私は正確なシードを行います、それは100+ DL実験のために(再現性の点で)良好に機能しています。
このコンテキストでの「パフォーマンス」とは、ランタイムを指します