Mxnet使用TensorRTの加速モデル - 公式例Mxnet

公式リンクの例

  TensorRTでディープラーニング計算グラフの最適化
  この文書を、mxnet公式サイトからコード変換は、独自の操作を追加します。NVIDIAのTensorRTは、ネットワーク推論深研究ライブラリを加速するために使用され、今で効率的にライブラリを加速することにより、自社のネットワークを実行することができMxnetユーザーを意味MxnetサポートTensorRT開始パイロットバージョン1.3.0、。

インストールTensorRT

  現在MxnetはTensorRTのサポート環境を統合しました

  • Ubuntu16.04
  • CUDA9.0または9.2
  • Pascalや更新のグラフィックスアーキテクチャ
  • ダウンロードしてインストールTensorRTライブラリー

  ときは、これらの前提条件が満たされているとピップのインストールによってMxnetにコンパイルされたバージョンTensorRTをサポートするように更新を確認してください。インストールコマンド:
  CUDA9.0環境
  pip install mxnet-tensorrt-cu90
  CUDA 9.2環境
  pip install mxnet-tensorrt-cu92
  以外のUbuntu 16.04システムまたは画像のみ]ドッキングウィンドウを使用して
  nvidia-docker run -ti mxnet/tensorrt python

モデルの読み込みと変換

import os
import mxnet as mx
from mxnet.gluon.model_zoo import vision
import time

# 转换模型
batch_shape = (1, 3, 224, 224)
resnet18 = vision.resnet18_v2(pretrained=True)
resnet18.hybridize()
resnet18.forward(mx.nd.zeros(batch_shape))
resnet18.export('resnet18_v2')

#加载新模型
sym, arg_params, aux_params = mx.model.load_checkpoint('resnet18_v2', 0)

# Create sample input
input = mx.nd.zeros(batch_shape)

  TensorRT推論は、比較例TensorRT参照モデルとして公式Resnet18を使用して、唯一のライブラリーのために使用される、Resnet18は、一般に、コンピュータビジョンとタスクデータベース性能ベンチマークを学習の深さで使用されるネットワーク・アーキテクチャの高い計算複雑です。Mxnetモジュールグルーオンからグルーオンのモデル動物園の TensorRTのみシンボリックサポートモデルの現在のバージョンによるダウンロードResnet18モデル、モデルのニーズは、ダウンロードしグルーオンモジュールハイブリダイズ、輸出されるようにして、関係者は、フォローアップは、直接グルーオンモデルを加速するために更新を検討することがあります。

直接、動作パフォーマンスモデル

# Execute with MXNet
os.environ['MXNET_USE_TENSORRT'] = '0'
executor = sym.simple_bind(ctx=mx.gpu(0), data=batch_shape, grad_req='null', force_rebind=True)
executor.copy_params_from(arg_params, aux_params)

# Warmup
print('Warming up MXNet')
for i in range(0, 10):
    y_gen = executor.forward(is_train=False, data=input)
    y_gen[0].wait_to_read()

# Timing
print('Starting MXNet timed run')
start = time.process_time()
for i in range(0, 10000):
    y_gen = executor.forward(is_train=False, data=input)
    y_gen[0].wait_to_read()
end = time.time()
print(time.process_time() - start)

  試験の精度を向上させるために、テストケースは、テストが完了する前に、推論は、実際、TitanVで33.73sのうち最終のRANを使用しなかったことを確実にするためにモデルウォームアップ、怠惰な動作を推論一定回数前に実行されます。

TensorRTモデルが動作してパフォーマンスを加速した後、

# Execute with TensorRT
print('Building TensorRT engine')
os.environ['MXNET_USE_TENSORRT'] = '1'
arg_params.update(aux_params)
all_params = dict([(k, v.as_in_context(mx.gpu(0))) for k, v in arg_params.items()])
executor = mx.contrib.tensorrt.tensorrt_bind(sym, ctx=mx.gpu(0), all_params=all_params,
                                             data=batch_shape, grad_req='null', force_rebind=True)

#Warmup
print('Warming up TensorRT')
for i in range(0, 10):
    y_gen = executor.forward(is_train=False, data=input)
    y_gen[0].wait_to_read()

# Timing
print('Starting TensorRT timed run')
start = time.process_time()
for i in range(0, 10000):
    y_gen = executor.forward(is_train=False, data=input)
    y_gen[0].wait_to_read()
end = time.time()
print(time.process_time() - start)

  したがって、現在まだ実験的な性質でmxnet TensorRT、そして、それが辞書に従ってに充填したのcontrib tensorrt_bindインターフェイスパラメータの初期化時に使用されます。フォローTensorRTは徐々に改善され、tensorrt_bindとキャンセルし得ると同じインターフェースのスタイルをsimple_bindます。
  18.99sの最終的な実行時モデルTensorRT加速後、この例では加速度原理に由来するオペレータフュージョン

演算子と部分グラフの融合

  これらの最適化の出現は、ニューラルネットワークの発生に基づいて積分演算子とサブグラフは、サブカウント計算グラフの束として見ることができるです。オペレータは、様々な計算を実行するが、主に数学的なテンソルまたは線形代数上で実行してもよいです。大きなコアのCUDAに使用一緒にこれらの演算子は、一般に、より効率的です。

今日の深い学習モデルは、数十の実行各GPUカーネルの入力と出力がグローバルメモリに格納する必要があります。GPU上での操作の何千ものが、読んで、グローバルメモリへの書き込みは、内蔵レジスタに比べてはるかに遅いです。場合には、いくつかの特別なシーケンス共有にいくつかのデータ、実行カーネル性能及びメモリ局所性は、オンチップ上で動作する、単一の、より大きなものにこれらのカーネルを融合させることによって改善することができるグローバルメモリの代わりに登録する。

CUDA大きなコアで計算融合サブグラフであってもよいです読み書きがグローバル変数の問題が原因遅すぎるの多くを使用しないでください。

  全体算出マップを走査することが可能mxnet_tensorrt、及びサブピクチャはTensorRTを最適化見つけることができます。部分グラフのサポートTensorRT演算子がある場合、それらを置き換える、見ていきますmxnet計算チャートを構築する際にそのため、実行時にTensorRT部分グラフ独自のライブラリを実行しているこのTensorRTノードを達成するためにTensorRTノードによってサポートすることができ、これらのTensorRTの子図ロットオペレータは、CUDAカーネル計算に融合することができます。
  Mxnet重いTensorRTの一部だけ場合に、期間削除重複重みパラメータの初期化中に出力TensorRT対応するノードにデータを入力し、取得するための責任を負います。
  最適化の前と後の図Resnet TensorRT構造は次のとおりです。

最適化の前に
最適化した後、

その他の問題

  1、例の使用ではなく、実際の時間差は、これが現在原因ではない、フォーラムはまた、それの開発はどのように確認するためにフォローアップを頼まれた
とし、なくては差をtensorrtない

  フォーラムの投稿、2 TensorRTの言及がありますメモリに問題によって占められるが、まだこのポイントに実装されていない、見てみましょうバックが満たさ
定量化、メモリ使用量にINT8偉大なモデルを

  

  

公開された24元の記事 ウォンの賞賛8 ビュー20000 +

おすすめ

転載: blog.csdn.net/yangjf91/article/details/88680480