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