【実験】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