一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加して20日目です。クリックしてイベントの詳細をご覧ください。
欢迎关注我的公众号 [极智视界],获取我的更多笔记分享
みなさん、こんにちは。私はJizhi Visionです。この記事では、深層学習モデルデバッガポリグラフの使用方法について説明します。
ディープラーニングモデルのデプロイでは、多くの場合、複数のフレームワーク、通常はトレーニングフレームワーク(PyTorch、TensorFlow ...)=>推論フレームワーク(TensorRT、OnnxRuntime ...)間の変換が含まれ、各フレームワークには異なるモデルがあります。このプロセスで重要なのは、変換後に精度を失わないことです。しかし、理想は非常に満たされていることが多く、現実は完全ではありません。精度が失われた場合、問題がどこにあるかを特定するのに役立つ便利なツールが常に必要です。この時点で、ポリグラフを作成する準備ができています。
1ポリグラフ入門
ポリグラフは、 PythonAPIやコマンドラインツール を含むディープラーニングモデルのデバッグツールです。ポリグラフに関連する紹介は比較的少ないです。その機能の一部は次のとおりです。
- TensorRT、onnxruntime、TensorFlowなどの複数のバックエンドを使用して推論計算を実行します。
- さまざまなバックエンドのレイヤーごとの計算結果を比較します。
- TensorRTエンジンは、モデルEnjianによって生成され、.planにシリアル化されます。
- モデルネットワークのレイヤーごとの情報を表示します。
- サブグラフの抽出や計算グラフの簡略化など、Onnxモデルを変更します。
- OnnxがTensorRTに失敗した理由を分析し、TensorRTに転送できる/できないサブグラフを元の計算グラフに保存します。
- TensorRT端末エラー戦術を分離します。
ポリグラフのインストール方法は比較的簡単で、pipを使用して直接インストールできます。
pip install -i https://pypi.douban.com/simple nvidia-pyindex
pip install -i https://pypi.douban.com/simple polygraphy
2ポリグラフの使用例
onnxruntimeとTensorRTの精度を比較するために使用されるポリグラフの例を次に示します。プロセスはほぼ次のようになります。
- 最初に.onnxファイルを生成します。
- 次に、ポリグラフを使用してFP16 TRTエンジンを生成し、onnxruntimeとTensorRTを使用して計算結果を比較します。
- 次に、ポリグラフを使用してFP32 TRTエンジンを生成し、ネットワーク内のすべてのレイヤーを出力としてマークし、onnxruntimeとTensorRTを使用して計算結果を比較します(レイヤーごとの結果の比較)。
関連するコードは次のとおりです。
# 生成一个 .onnx 模型作为 polygraphy 的输入
# export model.onnx from pytorch
# or
# export model.onnx from tensorflow
# 使用上面生成的 model.onnx 构建 TensorRT 引擎,使用 FP16 精度同时在 TensorRT 和 onnxruntime 中运行
polygraphy run model.onnx \
--onnxrt --trt \
--workspace 100000000 \
--save-engine=model_FP16.plan \
--atol 1e-3 --rtol 1e-3 \
--fp16 \
--verbose \
--trt-min-shapes 'x:0:[1,1,28,28]' \
--trt-opt-shapes 'x:0:[4,1,28,28]' \
--trt-max-shapes 'x:0:[16,1,28,28]' \
--input-shapes 'x:0:[4,1,28,28]' \
> result-run-FP16.txt
# 使用上面生成的 model.onnx 构建 TensorRT 引擎,使用 FP32 精度同时在 TensorRT 和 onnxruntime 中运行
# 输出所有层的计算结果作对比
polygraphy run model.onnx \
--onnxrt --trt \
--workspace 100000000 \
--save-engine=model_FP32_MarkAll.plan \
--atol 1e-3 --rtol 1e-3 \
--verbose \
--onnx-outputs mark all \
--trt-outputs mark all \
--trt-min-shapes 'x:0:[1,1,28,28]' \
--trt-opt-shapes 'x:0:[4,1,28,28]' \
--trt-max-shapes 'x:0:[16,1,28,28]' \
--input-shapes 'x:0:[4,1,28,28]' \
> result-run-FP32-MarkAll.txt
次のように、表示するFP16推論比較結果を選択します。
さて、上記の共有は、深層学習モデルデバッガポリグラフを使用することを教えています。私の共有があなたの研究に少し役立つことを願っています。
【公開番号送信】