NumPy/PyTorch
ディープラーニングモデルの安全な並列推論とパフォーマンス最適化
こんにちは! 今日は、よく聞かれる質問の1つである「単一のモデルインスタンスで安全に並列推論を行えるか?」に関する内容です! evalモードでの並列推論の安全性 PyTorchモデルがmodel.eval()を使用してevalモードに設定されている場合、一般的に並列推論に対して安全になります。 (ここでいう「並列」はマルチスレッドによる処理ととらえてください。バッチ推論については後述します。) その理由は、 1. パラメータの不変性 evalモードでは、順伝播(forward pass)中にモデルのパラメータが更新されません。 2. 学習特有レイヤーの非活性化 BatchNormなどのレイヤーは、バッチ統計の計算ではなく、実行時統計(running statistics)を使用するモードに切り替わります。 3. 入力データの独立性 各スレッドやプロセスは独自の入力データで動作し、それぞれ別のメモリ領域に存在します。 以下は、evalモードでの安全な並列推論の基本的な例です: import torch import th