vai_q_pytorch QAT の要件 - 3.5 日本語

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 日本語

一般的に、量子化はわずかな精度ロスを引き起こす可能性がありますが、MobileNet などの一部のネットワークでは、この精度ロスが大きくなる可能性があります。そのような場合、まずは高速微調整を試してみることを推奨します。高速微調整の結果が十分でない場合、量子化認識トレーニング (QAT) を使用すると、量子化されたモデルの精度をさらに高めることができます。

ただし、QAT API を使用してモデルをトレーニングするには特定の要件が存在します。量子化されるすべての動作は、torch 関数や Python 演算子ではなく、torch.nn.Module オブジェクトのインスタンスでなければなりません。たとえば、 '+' を使用して 2 つのテンソルを追加することは PyTorch では一般的ですが、QAT ではサポートされていません。代わりに、'+'pytorch_nndct.nn.modules.functional.Add に置き換えます。次の表に、置き換えが必要な動作のリストを示します。

表 1. 動作の置き換えマップ
動作 置換対象
+ pytorch_nndct.nn.modules.functional.Add
- pytorch_nndct.nn.modules.functional.Sub
torch.add pytorch_nndct.nn.modules.functional.Add
torch.sub pytorch_nndct.nn.modules.functional.Sub
重要: 量子化情報の競合により、量子化されるモジュールをフォワード パス内で複数回呼び出すことはできません。
量子化されるネットワークの始めと終わりに、pytorch_nndct.nn.QuantStub および pytorch_nndct.nn.DeQuantStub を使用します。ネットワークは、全体でも部分的なサブネットワークでもかまいません。