ディープラーニングアプリケーション の組み込み GPU/CPU 実装 アプリケーションエンジニアリング部町田和也 2015 The MathWorks, Inc. 1
アジェンダ MATLAB Coder/GPU Coder の概要 ディープニューラルネットワークの組み込み実装ワークフロー パフォーマンスに関して まとめ 2
ディープラーニングワークフローのおさらい Application logic Trained DNN ネットワークの構築と学習 アプリケーション化 組み込み GPU/CPU 実装 3
ディープラーニングワークフローのおさらいネットワークの構築と学習 Keras ONNX Caffe モデルインポート MATLAB による構築 多量のデータの取り扱い ラベリングの自動化 様々なモデルへのアクセス 事前学習済みモデル MATLAB で学習 転移学習 学習済みモデル MATLAB による学習 GPU による学習の高速化 クラスターによる分散処理 4
ディープラーニングワークフローのおさらいアプリケーション化 画像のリサイズ 切り取り グレースケール化モデル インポート 分類結果 検出結果の可視化注釈の追加 前処理 後処理 Reference model MATLAB で学習 転移学習 学習済みモデル複数ネットワークの組み合わせ 5
ディープラーニングワークフローのおさらいマルチプラットフォーム環境への実装 Application logic C コード化 NVIDIA C++/CUDA + TensorRT NVIDIA C++/CUDA + cudnn Intel MKL-DNN ARM ARM- Compute 6
C コード化のハードル Vectorized MATLAB C コード化 CUDA C コード 手書きによるバグ混入等価性の維持が困難 GPU は非常に強力なハードウェアですが プログラミングは専門の知識が必要となります 7
C コード化のハードル 推論以外の処理もコード化する必要があります Pre-processing Classification Post-processing セグメンテーション 切り取りリサイズ Class Activation Map で可視化 8
組み込み実装の課題 Desktop GPU Desktop GPU Embedded GPU C++ C++ 1 機能確認 2 単体検証 3 統合検証 4 リアルタイム検証 高級言語深層学習フレームワーク大規模で複雑なソフトウェアスタック C/C++ 低水準 API 特定用途のライブラリ C/C++ ターゲットの最適化ライブラリメモリと処理速度の最適化 課題 複数のライブラリとパッケージの統合 複数の実装の検証と維持 アルゴリズムとベンダーロックインの検討 9
MATLAB Coder & GPU Coder による実装ソリューション 前処理 後処理を含めたコードの自動生成 生成されるコードの最適化 複数のターゲットへの実装 Application logic GPU Coder MATLAB Coder NVIDIA Intel ARM NVIDIA TensorRT & cudnn Libraries Intel MKL-DNN Library ARM Compute Library 10
MATLAB Coder & GPU Coder による実装ソリューションマルチプラットフォーム環境への実装 Desktop GPU Application logic GPU Coder Desktop Data Center MATLAB Coder NVIDIA Jetson Raspberry pi Mobile Beaglebone Embedded 11
MATLAB Coder & GPU Coder による組み込み実装 複数の実装形式に対応 MATLAB アルゴリズム (functional reference) Build type Desktop GPU Desktop GPU 手書きした main 関数 (CC++) から生成した CUDA コードを Call MATLAB 上で 手書きしたmain 関数 生成したCUDA (CC++) から生成した コードを直接 Call CUDAコードをCall.mex.lib Cross-compiled.lib Embedded GPU C++ C++ 1 機能確認 2 単体検証 3 統合検証 4 リアルタイム検証 12
アジェンダ MATLAB Coder/GPU Coder の概要 ディープニューラルネットワークの組み込み実装ワークフロー パフォーマンスに関して まとめ 13
Demo 顔検出と表情分類アプリケーションの Jetson 実装 MATLAB Happy 前処理 顔の検出 中間処理 表情の分類 後処理 実装ワークフロー 1MATLAB で検証 2 コード生成 ホスト環境での検証 3 コード生成 組み込み環境での検証 14
1MATLAB で検証 MATLAB 前処理 顔の検出 中間処理 表情の分類 後処理 機能検証 アルゴリズムの動作検証 カスタム YOLO v2 MATLAB で学習させた YOLOv2 モデル 他フレームワークからのモデルのインポート 15
1MATLAB で検証 顔の検出 表情の分類 YOLO v2 による物体検出 YOLO(You Only Look Once) とは? リアルタイム向けの物体検出モデル (Faster R-CNN の 100 倍程度高速 ) 学習から CUDA コード生成まで対応 自身のデータセットに合わせたカスタム YOLOv2 モデルの学習から実装までサポート 他フレームワークとの連携 Keras, Caffe モデルの取り込み ONNX フォーマットを介したモデルのやり取り Keras Caffe detector = trainyolov2objectdetector(trainingdata,lgraph,options) net = importkerasnetwork(modelfile) net = importcaffenetwork(protofile,datafile) net = importonnxnetwork(modelfile, 'OutputLayerType',outputtype) 16
2 コード生成 ホスト環境での検証 MATLAB CUDA に最適されたコード 前処理 顔の検出 中間処理 表情の分類 後処理 単体検証 コード生成可能か確認 生成不可の場合は生成可能な形に修正 cudnn/tensorrt に最適化されたコード 17
2 コード生成 ホスト環境での検証コード修正が必要な例 グループ化畳み込み層を通常の畳み込み層に変換 groupedconvolution2dlayer convolution2dlayer コード生成対応 R2019a ではコード生成未対応 Weight size 3x3x1x1x4 3x3x4 3x3x4 3x3x4 3x3x4 Weight size 3x3x4x4 各々 0 埋めして拡張 例 : 4 チャネルの入力を 1 チャネル毎にグループ化した場合 4 計算結果が等価になるように通常の畳み込み層に重みとバイアスを移植 18
3 コード生成 組み込み環境での検証 MATLAB CUDA に最適されたコード Happy 前処理 顔の検出 中間処理 表情の分類 後処理 cudnn/tensorrt に最適化されたコード リアルタイム検証 ターゲット環境でパフォーマンス確認 19
NVIDIA GPU での実装例 Target Libraries Application logic GPU Coder NVIDIA NVIDIA TensorRT & cudnn Libraries Semantic Segmentation MATLAB Coder Intel Intel MKL-DNN Library ARM ARM Compute Library 20
Intel CPU での実装例 Application logic Blood Smear Segmentation GPU Coder NVIDIA Target Libraries NVIDIA TensorRT & cudnn Libraries MATLAB Coder Intel ARM Intel MKL-DNN Library ARM Compute Library 21
ARM プロセッサでの実装例 Application logic Pedestrian Detection GPU Coder NVIDIA Target Libraries NVIDIA TensorRT & cudnn Libraries MATLAB Coder Intel ARM Intel MKL-DNN Library ARM Compute Library 22
ハードウェアへのアクセス MATLAB から 周辺機器にアクセス スタンドアローンアプリケーションとして実装 Processor-in-Loop 検証 23
ターゲットへの実装方法専用アプリによるコード生成と実装 コマンドによるコード生成と実装 24
アジェンダ MATLAB Coder/GPU Coder の概要 ディープニューラルネットワークの組み込み実装ワークフロー パフォーマンスに関して まとめ 25
画像一枚に対する推論速度の比較 TensorFlow (1.13.0) MXNet (1.4.0) GPU Coder (R2019a) PyTorch (1.0.0) Intel Xeon CPU 3.6 GHz - NVIDIA libraries: CUDA10 - cudnn 7 - Frameworks: TensorFlow 1.13.0, MXNet 1.4.0 PyTorch 1.0.0 26
TensorRT による高速化 Single Image Inference with ResNet-50(Titan V) TensorFlow (1.13.0) GPU Coder (R2019a) Intel Xeon CPU 3.6 GHz - NVIDIA libraries: CUDA10 - cudnn 7 Tensor RT 5.0.2.6. Frameworks: TensorFlow 1.13.0 27
CPU での推論速度の比較 CPU, Single Image Inference (Linux) MATLAB TensorFlow MXNet MATLAB Coder PyTorch Intel Xeon CPU 3.6 GHz - Frameworks: TensorFlow 1.6.0, MXNet 1.2.1, PyTorch 0.3.1 28
GPU Coder による様々な最適化 MATLAB Library function mapping Scalarization.. Traditional compiler optimizations Loop perfectization Loop interchange Loop fusion Scalar replacement Loop optimizations Parallel loop creation CUDA kernel creation cudamemcpy minimization CUDA kernel lowering Shared memory mapping CUDA code emission NVIDIA CUDA C/C++ 29
GPU Coder による様々な最適化 MATLAB.. Traditional compiler optimizations ネットワークの最適化 最適化ライブラリの使用 Library function mapping Scalarization Loop perfectization Loop interchange Loop fusion Scalar replacement Parallel loop creation CUDA kernel creation cudamemcpy minimization Loop optimizations コーディングパターン CUDA kernel lowering Shared memory mapping CUDA code emission 30
最適化ライブラリを用いたコード生成 cufft, cublas, cusolver, Thrust Libraries Performance 1. 最適化ライブラリの使用 2. ネットワークの最適化 3. コーディングパターン Preprocessing Postprocessing Intel NVIDIA ARM Intel MKL-DNN Library NVIDIA TensorRT & cudnn Libraries ARM Compute Library 31
ディープニューラルネットワークの最適化 Performance 1. 最適化ライブラリの使用 2. ネットワークの最適化 3. コーディングパターン Max Pool Max Pool Max Pool buffer a buffer b conv conv Batch Norm ReLu ReLu FusedConv FusedConv BatchNormAdd FusedConv FusedConv BatchNormAdd X buffer c Reuse buffer a Add buffer d Max Pool Max Pool Max Pool X buffer e Reuse buffer b Network レイヤーフュージョン バッファの最小化 32
cols kh コーディングパターン : ステンシルカーネル Performance 1. 最適化ライブラリの使用 2. ネットワークの最適化 3. コーディングパターン 画像処理系関数には GPU によるステンシル演算が自動適用 関数例 : imfilter, imerode, imdilate, conv2, マニュアルでの指定には gpucoder.stencilkernel() Input image Conv. kernel Output image kw rows Dotprod 33
コード生成でサポートされるレイヤはリリースごとに増加中 GPU Coder MATLAB Coder Layer Name cudnn TensorRT Intel MKL-DNN ARM Compute AdditionLayer AveragePooling2DLayer BatchNormalizationLayer ClassificationOutputLayer ClippedReLULayer (R2019a) Convolution2DLayer Crop2DLayer (R2019a) (R2019a) (R2019a) CrossChannelNormalizationLayer DepthConcatenationLayer (R2019a) DropoutLayer FullyConnectedLayer ImageInputLayer LeakyReLULayer (R2019a) MaxPooling2DLayer MaxUnpooling2DLayer (R2019a) PixelClassificationLayer ReLULayer RegressionOutputLayer SoftmaxLayer TransposedConvolution2DLayer YOLOv2OutputLayer (R2019a) (R2019a) (R2019a) (R2019a) YOLOv2ReorgLayer (R2019a) (R2019a) YOLOv2TransformLayer (R2019a) (R2019a) (Keras Layer)FlattenCStyleLayer (Keras Layer)GlobalAveragePooling2dLayer (Keras Layer)SigmoidLayer (Keras Layer)TanhLayer (Keras Layer)ZeroPadding2dLayer : R2019a からコード生成可能なレイヤー 34
サポートされるネットワーク (GPU 編 ) CuDNN TensorRT Image Classification VGG, ResNet, SqueezeNet, GoogLeNet VGG, ResNet SqueezeNet, GoogLeNet (R2019a) Encoder/Decoder Semantic Segmentation DenoiseNet, SegNet DenoiseNet, SegNet FCN (R2019a) FCN (R2019a) Object detection ONNX/Keras imported networks YOLOv2 (R2019a) Keras (R2019a) YOLOv2 (R2019a) Keras (R2019a) 35
サポートされるネットワーク (CPU 編 ) Image Classification Intel MKLDNN VGG, ResNet, SqueezeNet, GoogLeNet ARM CPUs VGG, ResNet SqueezeNet, GoogLeNet Encoder/Decoder Semantic Segmentation DenoiseNet Unet, SegNet (R2019a) DenoiseNet 36
アジェンダ MATLAB Coder/GPU Coder の概要 ディープニューラルネットワークの組み込み実装ワークフロー パフォーマンスに関して まとめ 37
まとめ Keras ONNX Caffe ネットワークの構築と学習 Trained DNN モデルインポート MATLAB で学習 Deep Neural Network 事前学習済みモデル Design + Training 転移学習 Application logic Application logic 学習済みモデル Application Design アプリケーション化 組み込み GPU/CPU 実装 Coders NVIDIA TensorRT and cudnn Libraries Intel MKL-DNN Library Standalone Deployment ARM ARM Compute Library 38
2019 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders. 39