【実験】Apache TVM ResNet-18モデルの高速化と性能評価

2023/12/25に公開

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