次の表に、vai_q_tensorflow
でサポートされるオプションを示します。
名称 | タイプ | 説明 |
---|---|---|
共通コンフィギュレーション | ||
--input_frozen_graph | 文字列 | 浮動小数点モデル用の TensorFlow の凍結された推論 GraphDef ファイル。量子化キャリブレーションに使用します。 |
--input_nodes | 文字列 | 量子化グラフの入力ノードの名前リストをカンマ区切りで指定します。–output_nodes と組み合わせて使用します。入力ノードと出力ノードは、量子化の始点と終了点です。それらの間のサブグラフは、量子化可能であれば量子化されます。推奨:
–input_nodes を前処理の最後のノードに設定し、–output_nodes を後処理の最後のノードに設定します。これは、前処理と後処理に必要な一部の動作は量子化できないため、量子化モデルを DPU で運用する必要がある場合に Vitis AI コンパイラでコンパイルするとエラーが発生する可能性があるためです。入力ノードは、グラフのプレースホルダー ノードとは異なる場合があります。 |
--output_nodes | 文字列 | 量子化グラフの出力ノードの名前リストをカンマ区切りで指定します。–input_nodes と組み合わせて使用します。入力ノードと出力ノードは、量子化の始点と終了点です。それらの間のサブグラフは、量子化可能であれば量子化されます。 推奨:
–input_nodes を前処理の最後のノードに設定し、–output_nodes を後処理の最後のノードに設定します。これは、前処理と後処理に必要な一部の動作は量子化できないため、量子化モデルを DPU で運用する必要がある場合に Vitis AI コンパイラでコンパイルするとエラーが発生する可能性があるためです。 |
--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_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 | 量子化の方法を指定します。
デフォルト値: 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 |
--simulate_dpu | Int32 | 1 に設定されている場合、DPU のシミュレーションが有効になります。一部の演算に対する DPU の動作は、TensorFlow とは異なります。たとえば、LeakyRelu および AvgPooling の除算はビットシフトで置き換えられているため、DPU 出力と CPU/GPU 出力にはわずかな違いが生じる可能性があります。このフラグが 1 に設定されている場合、vai_q_tensorflow クオンタイザーはこれらの動作をシミュレーションします。 範囲: [0, 1] デフォルト値: 1 |
--adjust_shift_bias | Int32 | DPU コンパイラのシフト バイアスのチェックと調整のストラテジを指定します。
デフォルト値: 1 |
--adjust_shift_cut | Int32 | DPU コンパイラのシフト カットのチェックと調整のストラテジを指定します。
デフォルト値: 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 |
デフォルト値: 0 |
--replace_relu6 | Int32 | do_cle=1 の場合のみ有効です。
デフォルト値: 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 を参照してください。