✨
【実験】Apache TVM ResNet-18モデルの高速化と性能評価
Apache TVMを活用したResNet-18の性能向上に関する実験
概要
深層学習の進展に伴い、様々なハードウェア環境での高効率なモデル実行が求められています。Apache TVMはこのニーズに応える深層学習コンパイラであり、特にAutoTVMはモデルのチューニングにおいて優れた性能を発揮します。
手法
まず、XGBtunerを活用してAutoTVMチューニングを行い、ResNet-18モデルの高速化を目指しました。チューニングではnn.conv2d(2次元畳み込み)演算に特に焦点を当て、cuda環境下で各タスクに対して各100回のチューニングを実行しました。その後、module.benchmark関数を使用して、600回の推論実行を行いその実行速度を評価しました。
実験結果
以下は、チューニング前後のResNet-18に関する実行時間です。
パラメータ | チューニング前 | チューニング後 |
---|---|---|
平均実行時間 (ms) | 1.8192 | 1.6372 |
中央値 (ms) | 1.3823 | 1.4807 |
最大実行時間 (ms) | 41.5579 | 3.2256 |
最小実行時間 (ms) | 1.2310 | 1.3681 |
標準偏差 (ms) | 2.9838 | 0.2991 |
また、Relayモジュールの分析を通じて nn.dense
(全結合層)演算も含まれていることが確認されました。この nn.dense
演算子に関連するタスクをチューニングすることで若干のパフォーマンス向上の可能性があります。
コード
# IRModule 内でオペレータ名が出現する頻度
op_freqs = relay.analysis.list_op_freqs(mod)
print(op_freqs)
{"nn.bias_add": 1, "add": 8, "nn.relu": 18, "nn.dense": 1, "nn.batch_norm": 19, "nn.batch_flatten": 1, "nn.global_avg_pool2d": 1, "nn.conv2d": 21, "nn.max_pool2d": 1, "nn.softmax": 1}
まとめ
Apache TVMとAutoTVMを用いたチューニングにより、ResNet-18の性能を向上させることが確認されました。特に、実行時間の最大値と標準偏差が減少し、より一貫性のある実行性能が得られたことは、モデルの安定性に寄与する意味で興味深い結果と言えます。なお、当初は各タスクに対して2000回のチューニングを計画していましたが、時間的制約のために100回に減らしました。更に多くの時間をかけてチューニングを行えば、モデルの実行速度が向上する可能性があると考えられます。
Discussion