implementation.バックグラウンド近年、深層学習ベースの機械学習(ML)モデルと人工知能(AI)モデルは、図1に示すように、帯域幅や遅延などのさまざまな要因でクラウドからエッジデバイスに移行しています。edge消費電力、遅延、ハードウェアサイズは、エッジでの推論にとって重要な側面です。GPUを使用してクラウドで開発されるモデルは浮動小数点モデルです。重要なことは、ニューラルネットワークを実行するエッジ推論ハードウェアが、より低い電力とコストの予算に合わせて高価な浮動小数点ユニットをサポートする必要がないことが強く望まれていることです。浮動小数点の対応するものと比較して、固定小数点の数学エンジンは非常に面積と電力効率が高いです。クラウドで開発されたモデルは、精度を大幅に損なうことなく量子化する必要があります。効率的な量子化メカニズムにより、32ビット浮動小数点(FP)モデルを8ビットINT演算に量子化できますが、ほとんどのモデルで精度が0.5%未満低下します。このプロセスにより、メモリフットプリント、計算要件が削減され、モデルの推論を実行するために必要なレイテンシーと電力が削減されます。GPU(FP演算を備えている)を含むほとんどのエッジデバイスは、現在、低精度で量子化された演算を利用しています。量子化はエッジ推論の事実上のステップです。このブログでは、量子化を行うための一般的な方法、課題、およびそれらを克服する方法について説明しています。量子化の種類ニューラルネットワークには、複雑さと精度の高い順に、主に以下の3種類の量子化手法に分類があります。非対称Power-2Power-2量子化は、データの左右のシフトのみを使用して量子化を実行します。バレルシフタはほとんどのハードウェアアーキテクチャの一部であるため、シフトの実装コストは非常に低くなります。絶対最大値に基づいて最上位7ビット(INT8の場合)を維持するために、重みとバイアスは左または右にシフトすることによって量子化されます。これらのビットは追跡され、操作の前後に必要に応じて再調整されます。複雑さの次のレベルは、線形量子化とも呼ばれる対称量子化です。これは、テンソルの最大値を取得し、最大値を使用して範囲を均等に分割します。ここで、アクティベーションは、入力および出力のスケーリング係数に基づいて再調整されます。Xz)、ここでXfはXの浮動小数点値、Xqは量子化された値、Xzはゼロオフセットです。ゼロオフセットは、ゼロ値が非小数値で表されるように調整されるため、ゼロパディングによってバイアス(Conv)が発生することはありません。Sub操作があり、多くのハードウェアアーキテクチャにはあまり役立ちません。SUM((Xq-Xz)*(Wq-Wz))、ここでWは重み、Xは入力です。ほとんどのレイヤーに存在するRELUなどの操作は負の値をノックオフするため、整数表現(INT8)は、UINT8表現と比較して、この表現では事実上少し失われます。積和関数の後、再量子化ステップでは、スカラー乗数とシフトを使用して、除算関数のサポートを回避します。各チャネルの重みのダイナミックレンジがまったく異なる場合、量子化はテンソルごと(レイヤーごと)または出力チャネルごと(変換の場合)に実装できます。量子化の方法とりわけ、精度の高い順に、4つの量子化方法があります。ベクトルなしこのトレーニング後の量子化フローは、ベクトルなしでアクティベーションの範囲を決定しますINT8の場合、倍率はスケール/シフト値を使用して決定されます。ベクトルを使用して範囲を確立するベクトルは、活性化の範囲を知るために使用されます。アクティベーションは、ベクトルを実行し、各テンソルの範囲を登録することによって決定された範囲に基づいて量子化されます。2番目のパスの量子化トレーニングモデルが完全にトレーニングされた後、量子化ノードを挿入してモデルを再トレーニングし、エラーなどを段階的に再トレーニングします。この場合、順方向パスは量子化された演算を使用し、逆方向伝搬は浮動小数点演算を使用します。Keras量子化)量子化対応トレーニングを実行する開発中の新しいフレームワークがあります。(最初からトレーニング中に量子化されたオペランドを使用します)トレーニングを行う方法の場合、顧客がデータセットと損失/精度関数の定義を提供する必要があります。どちらもお客様の専有情報であり、容易に共有できない可能性があり(一般的なシナリオ)、したがって、上記の最初の2つの方法が必要です。サンプル結果サンプルネットワークの量子化の結果を次の表に示します。非対称UINT8量子化、チャネルごとのINT8、およびUINT8再トレーニング量子化が、FP精度と比較されています。methods上記の結果から、一部のネットワークは標準の量子化では性能が非常に低く、チャネルごとの量子化が必要になる場合があり、一部のネットワークでは再トレーニングまたはその他の方法が必要になります。量子化された重みを使用した再トレーニングまたはトレーニングは最良の結果をもたらしますが、データセット、モデルパラメータ、損失および精度関数などを提供する顧客が必要になります。これはすべてのケースで当てはまります。一部の顧客モデルは(一定の)ウェイトを凍結しており、リリース直後に再トレーニングできません。下図から、精度が低下する主な理由の1つは、さまざまなチャネルにわたる重みのダイナミックレンジに起因することがわかります。Nagel再トレーニングせずに精度の低下に対処する方法は次のとおりです。チャネルごとまず、上図から、畳み込みニューラルネットワーク(CNN)の出力チャネルごとに異なるスケールを確立すると、結果によって裏付けられる精度が維持されます。次に、これにより、各チャネルのスケーリングを追跡し、出力アクティベーションでのスケーリング値を再調整して、次のレイヤーで使用するのと同じレベルにするための複雑さが増します。ハードウェアはチャネルごとのスケーリング値を追跡し、それらを各レイヤーの出力に適用する必要があります。重みの範囲の分布を分析し、異常でカウントが小さく、極端な重みを2標準偏差または3標準偏差に固定することができます。通常、このステップでは、設計で極端な重量が必要になる場合があるため、精度の検証が必要です。イコライゼーション各出力レイヤーの重みは、次のレイヤーの入力重みと組み合わせて均等化され、範囲が正規化されます。バイアス補正バイアス値を調整して、量子化によって導入されたバイアスエラーを補正します。フレーム/秒に対する量子化の影響8ビット量子化は、メモリサイズを削減し、8ビット整数計算を実行することにより、モデルの性能を大幅に向上させます。レイヤーごとの幅の動的ビットを採用することにより、量子化はさらに多くの性能上の利点をもたらします。一部のレイヤーでは、精度を大幅に損なうことなく、4ビット、2ビット、および1ビットの量子化(3値および2値ニューラルネットワーク)を使用できます。これらはレイヤーに依存し、通常、最終レイヤーはより低い量子化粒度でうまく機能する傾向があります。バイナリーとターナリ―演算は、8ビットの積和演算よりも計算量が少なく、電力がはるかに低くなります。ハードウェアが、4ビットまたは2ビット操作をサポートしていない場合でも、より少ないビット数で重みを格納するだけでモデルの圧縮が実現されるため、ストレージとバスの帯域幅の要件が軽減されます。Pytorchなど)とシリコンベンダーのハードウェアの間のギャップを埋める複数のモジュールを開発しました。AIライブラリモジュールを実行します。AIフレームワークモジュールをご覧ください。具体的には、量子化では、フローは上記の3種類の量子化(Power-2、対称、非対称)のいずれかを実行し、上記のさまざまな量子化方法(ベクトルなし、範囲のベクトル、再トレーニングのベクトル)で実行します。フローはまた、チャネルごとの量子化、ダイナミックレンジ調整、およびバイアス補正を行うことにより、量子化損失を改善するための高度な方法を採用しています。これらのフローは、定型モデルまたは、新しいモデルおよび、Gyrus量子化モジュールによって提示される結果に適用できます。量子化フローは、圧縮とプルーニングと連携して機能し、使用される量子化方法はハードウェアで採用されている圧縮スキームに影響を与えます。量子化された固定小数点演算は、エッジコンピューティングの標準です。すべてのシリコンベンダーは、ネットワーク/モデルに応じてそれぞれに利点があるため、さまざまな量子化スキームのすべてまたはサブセットをサポートする必要があります。FPに近い精度を実現するには、単純な変換以外の手法を採用する必要があります。特定のレイヤーの小さなビット幅を表すと、パワーとサイズがさらに向上します。量子化の種類ニューラルネットワークには、R5その複雑さと精度により、昇順でリストされているPower-2、対称および非対称の3種類の量子化手法があります。対称量子化とは対称量子化は、線形量子化とも呼ばれます。これは、テンソルの最大値を取得し、最大値を使用して範囲を均等に分割します。ここで、アクティベーションは、入力および出力の倍率に基づいて再調整されます。非対称量子化とは非対称量子化は、与えられたビットをすべて利用しますが、実装は非常に複雑です。marketing.。