vai_q_tensorflow の使用法 - 2.5 日本語

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

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語

次の表に、vai_q_tensorflow でサポートされるオプションを示します。

表 1. vai_q_tensorflow のオプション
名称 タイプ 説明
共通コンフィギュレーション
--input_frozen_graph 文字列 浮動小数点モデル用の TensorFlow の凍結された推論 GraphDef ファイル。量子化キャリブレーションに使用します。
--input_nodes 文字列 量子化グラフの入力ノードの名前リストをカンマ区切りで指定します。–output_nodes と組み合わせて使用します。入力ノードと出力ノードは、量子化の始点と終了点です。それらの間のサブグラフは、量子化可能であれば量子化されます。
--output_nodes 文字列 量子化グラフの出力ノードの名前リストをカンマ区切りで指定します。–input_nodes と組み合わせて使用します。入力ノードと出力ノードは、量子化の始点と終了点です。それらの間のサブグラフは、量子化可能であれば量子化されます。
--input_shapes 文字列 入力ノードの形状リストを指定します。各ノードは 4 次元形状で、カンマで区切られている必要があります (例: 1,224,224,3)。batch_size の不明なサイズをサポートします (例: ?,224,224,3)。複数の入力ノードの場合、各ノードの形状リストを「:」で区切って割り当てます (例: ?,224,224,3:?,300,300,1)。
--input_fn 文字列 グラフの入力データを提供し、キャリブレーション データセットで使用されます。関数の形式は module_name.input_fn_name です (例: my_input_fn.input_fn)。-input_fn は、キャリブレーション ステップを示す入力として int オブジェクトを受け取り、呼び出しごとに dict`(placeholder_node_name, numpy.Array)` オブジェクトを返す必要があります。その後、モデルのプレースホルダー動作に渡されます。

たとえば、–input_fnmy_input_fn.calib_input に割り当て、my_input_fn.pycalib_input 関数を次のように記述します。

def calib_input_fn:
# read image and do some preprocessing
    return {“placeholder_1”: input_1_nparray, “placeholder_2”: input_2_nparray}
注記: 量子化中 –input_nodes の前のサブグラフが維持されているため、input_fn で再びグラフ用の前処理を実行する必要はありません。あらかじめ定義された入力関数 (デフォルトおよびランダムを含む) は、一般的には使用されないため削除してください。グラフ ファイルにない前処理部分は、input_fn で処理される必要があります。
量子化の設定
--weight_bit Int32 量子化後の重みおよびバイアスのビット幅を指定します。

デフォルト: 8

--activation_bit Int32 量子化後のアクティベーションのビット幅を指定します。

デフォルト: 8

--nodes_bit 文字列 ノードのビット幅を指定します。ノード名とビット幅はコロンで結合される 1 対のパラメーターを形成し、各パラメーターはカンマで区切られます。conv op 名を指定すると、vai_q_tensorflow は指定したビット幅を使用して conv op の重みのみを量子化します。たとえば、「conv1/Relu:16,conv1/weights:8,conv1:16」などです。
--method Int32 量子化の方法を指定します。
  • 0: non-overflow 法。値が飽和しないように量子化を実行。外れ値の影響を大きく受ける。
  • 1: min-diffs 法。量子化プロセスでオーバーフローを許可し、量子化誤差を極力抑える。外れ値に対する耐性がある。通常 non-overflow よりも範囲が狭くなる。
  • 2: min-diffs 法 (Depthwise ストラテジ)。量子化中に大きな値の飽和を認めることにより、量子化誤差を抑えます。Depthwise 重みに対して特殊なストラテジを適用します。0 を指定した場合よりも低速ですが、外れ値の影響は受けにくくなります。

デフォルト値: 1

--nodes_method 文字列 ノードの手法を指定します。ノード名と手法はコロンで結合される 1 対のパラメーターを形成し、各パラメーターはカンマで区切られます。conv op 名を指定すると、vai_q_tensorflow は指定した手法を使用して conv op の重みのみを量子化します (例: 「conv1/Relu:1,depthwise_conv1/weights:2,conv1:1」)。
calib_iter Int32 キャリブレーションの反復回数を指定します。キャリブレーション用イメージの総数 = calib_iter * batch_size

デフォルト値: 100

--ignore_nodes 文字列 量子化の実行中に無視されるノードの名前リストを指定します。無視されたノードは、量子化中に量子化されません。
--skip_check Int32 1 に設定されている場合、浮動小数点モデルのチェックはスキップされます。これは入力モデルの一部のみが量子化される場合に有効です。

範囲: [0, 1]

デフォルト値: 0

--align_concat Int32 連結ノードの入力の量子化位置を調整するためのストラテジを指定します。
  • 0: すべての連結ノードの位置を調整する
  • 1: 出力連結ノードの位置を調整する
  • 2: 位置調整を無効にする

デフォルト値: 0

--simulate_dpu Int32 1 に設定されている場合、DPU のシミュレーションが有効になります。一部の演算に対する DPU の動作は、TensorFlow とは異なります。たとえば、LeakyRelu および AvgPooling の除算はビットシフトで置き換えられているため、DPU 出力と CPU/GPU 出力にはわずかな違いが生じる可能性があります。このフラグが 1 に設定されている場合、vai_q_tensorflow クオンタイザーはこれらの動作をシミュレーションします。

範囲: [0, 1]

デフォルト値: 1

--adjust_shift_bias Int32 DPU コンパイラのシフト バイアスのチェックと調整のストラテジを指定します。
  • 0: シフト バイアスのチェックと調整を無効にする
  • 1: 静的制約を使用して実行する
  • 2: 動的制約を使用して実行する

デフォルト値: 1

--adjust_shift_cut Int32 DPU コンパイラのシフト カットのチェックと調整のストラテジを指定します。
  • 0: シフト カットのチェックと調整を無効にする
  • 1: 静的制約を使用して実行する

デフォルト値: 1

--arch_type 文字列 固定ニューロンのアーキテクチャのタイプを指定します。「DEFAULT」では、重みとアクティベーションの両方の量子化範囲が [-128, 127] です。「DPUCADF8H」では、重みの量子化範囲が [-128, 127] で、アクティベーションの量子化範囲が [-127, 127] です。
--output_dir 文字列 量子化結果を保存するディレクトリを指定します。

デフォルト値: ./quantize_results

--max_dump_batches Int32 ダンプ用の最大バッチ数を指定します。

デフォルト値: 1

--dump_float Int32 1 に設定されている場合、浮動小数点の重みとアクティベーションがダンプされます。

範囲: [0, 1]

デフォルト値: 0

--dump_input_tensors 文字列 グラフの入口がプレースホルダーではない場合、グラフの入力テンソル名を指定します。input_fn がデータを供給できるように、dump_input_tensor にプレースホルダーを追加します。
--scale_all_avgpool Int32 1 に設定されている場合、AvgPooling の出力をスケーリングして DPU をシミュレーションします。kernel_size <= 64 の場合のみスケーリングされます。この処理は、kernel_size=3、5、6、7、14 などの特殊な場合には影響しません。

デフォルト値: 1

--do_cle Int32
  • 1: 重み分布の調整のためのクロス レイヤー イコライゼーションを実装する。
  • 0: クロス レイヤー イコライゼーションをスキップする。

デフォルト値: 0

--replace_relu6 Int32 do_cle=1 の場合のみ有効です。
  • 1: ReLU6 を ReLU で置き換える。
  • 0: 置き換えをスキップする。

デフォルト値: 1

セッションの設定
--gpu 文字列 量子化に使用する GPU デバイスの ID をカンマ区切りで指定します。
--gpu_memory_fraction Float 量子化に使用する GPU メモリの小数部を 0 ~ 1 の間で指定します。

デフォルト値: 0.5

その他
--help   vai_q_tensorflow の有効なオプションをすべて表示します。
--version   vai_q_tensorflow のバージョン情報を表示します。

show help: vai_q_tensorflow --help
quantize: 
vai_q_tensorflow quantize --input_frozen_graph frozen_graph.pb \
                          --input_nodes inputs \
                          --output_nodes predictions \
                          --input_shapes ?,224,224,3 \
                          --input_fn my_input_fn.calib_input
dump quantized model: 
vai_q_tensorflow dump --input_frozen_graph quantize_results/quantize_eval_model.pb \
                      --input_fn my_input_fn.dump_input

TensorFlow モデルのその他の量子化サンプルについては、Xilinx Model Zoo を参照してください。