いまからはじめる組み込みGPU実装

Similar documents
ディープラーニングの組み込み機器実装ソリューション ~GPC/CPU編~

医用画像を題材とした3次元画像解析とディープラーニング

MATLAB ではじめる画像処理とロボットビジョン ~ 機械学習による物体認識と SLAM~ MathWorks Japan アプリケーションエンジニアリング部信号処理 通信 木川田亘 2015 The MathWorks, 1Inc.

b4-deeplearning-embedded-c-mw

Presentation Title

MATLAB®製品紹介セミナー

1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境 Lin

MATLAB EXPO 2019 Japan プレゼン資料の検討

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

SimulinkによるReal-Time Test環境の構築

Slide 1

07-二村幸孝・出口大輔.indd

CUDA を用いた画像処理 画像処理を CUDA で並列化 基本的な並列化の考え方 目標 : 妥当な Naïve コードが書ける 最適化の初歩がわかる ブロックサイズ メモリアクセスパターン

いまからはじめる、MATLABによる 画像処理・コンピュータビジョン

Presentation Title

MATLAB® における並列・分散コンピューティング ~ Parallel Computing Toolbox™ & MATLAB Distributed Computing Server™ ~

NUMAの構成

Presentation Title

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

PowerPoint Presentation

Slide 1

AI技術の紹介とセンサーデータ解析への応用

f2-system-requirement-system-composer-mw

Presentation Title

TSUBAME2.0におけるGPUの 活用方法

熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date Type URL Presentation

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

GPU のアーキテクチャとプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓

PowerPoint Presentation

SimscapeプラントモデルのFPGAアクセラレーション

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

タイトル

GPGPU

3次多項式パラメタ推定計算の CUDAを用いた実装 (CUDAプログラミングの練習として) Implementation of the Estimation of the parameters of 3rd-order-Polynomial with CUDA

Presentation Title

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ

Images per Second Images per Second VOLTA: ディープラーニングにおける大きな飛躍 ResNet-50 トレーニング 2.4x faster ResNet-50 推論 TensorRT - 7ms レイテンシ 3.7x faster P100 V100 P10

Microsoft PowerPoint - GPU_computing_2013_01.pptx

CUDA 連携とライブラリの活用 2

SUALAB INTRODUCTION SUALAB Solution SUALAB は 人工知能 ( ディープラーニング ) による画像解析技術を通して 迅速 正確 そして使いやすいマシンビジョン用のディープラーニングソフトウェアライブラリーである SuaKIT を提供します これは 従来のマシン

Presentation Title

Presentation Title

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

Presentation Title

Presentation Title

Presentation Title

Presentation Title

GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト

TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日

Slide 1

d4-automated-driving-mw

いまからはじめる、MATLABによる 画像処理・コンピュータビジョン

GPU GPU CPU CPU CPU GPU GPU N N CPU ( ) 1 GPU CPU GPU 2D 3D CPU GPU GPU GPGPU GPGPU 2 nvidia GPU CUDA 3 GPU 3.1 GPU Core 1

Presentation Title

PowerPoint Presentation

Microsoft PowerPoint - GPUシンポジウム _d公開版.ppt [互換モード]

GPU CUDA CUDA 2010/06/28 1

slide5.pptx

23 Fig. 2: hwmodulev2 3. Reconfigurable HPC 3.1 hw/sw hw/sw hw/sw FPGA PC FPGA PC FPGA HPC FPGA FPGA hw/sw hw/sw hw- Module FPGA hwmodule hw/sw FPGA h

スライド 1

ディープラーニングによって加速する AI 競争 100% 90% 80% 従来 CV 手法 IMAGENET 正答率 ディープラーニング 70% 60% IBM Watson が自然言語処理のブレークスルーを実現 Facebook が Big Sur を発表 Baidu の Deep Speech

01-introduction.ppt

概要 目的 CUDA Fortran の利用に関する基本的なノウハウを提供する 本チュートリアル受講後は Web 上で公開されている資料等を参照しながら独力で CUDA Fortran が利用できることが目標 対象 CUDA Fortran の利用に興味を抱いている方 前提とする知識 Fortran

Microsoft PowerPoint - suda.pptx

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

本文ALL.indd

1. マシンビジョンにおける GPU の活用

Expo 2014

JACi400のご紹介~RPGとHTMLで簡単Web化~

b2-reinforcement-learning-mw

センサーデータアナリティクスの開発から運用まで

Presentation Title

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

田向研究室PPTテンプレート

Presentation Title

PowerPoint Presentation

第5回お試しアカウント付き並列プログラミング講習会

Microsoft Word - JP-AppLabs-MySQL_Update.doc

untitled

de:code 2019 CM04 Azure Kinect DK 徹底解説 ~ 進化したテクノロジーとその実装 ~ 技術統括室 千葉慎二 Ph.D.

Microsoft Word - openmp-txt.doc

研究報告用MS-Wordテンプレートファイル

N08

並列・高速化を実現するための 高速化サービスの概要と事例紹介

NUMAの構成

スライド 1

GPU.....

Managing and Sharing MATLAB Code

Microsoft Word - HowToSetupVault_mod.doc

untitled

Microsoft PowerPoint - 【最終提出版】 MATLAB_EXPO2014講演資料_ルネサス菅原.pptx

Insert your Title here

Microsoft PowerPoint - pr_12_template-bs.pptx

main.dvi

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

自己紹介 湯浅陽一 1999 年より Linux kernel 開発に参加 MIPS アーキテクチャのいくつかの CPU へ Linux kernel を移植

<4D F736F F F696E74202D2091E63489F15F436F6D C982E682E992B48D8291AC92B489B F090CD2888F38DFC E B8CDD8

Transcription:

いまからはじめる組み込み GPU 実装 ~ コンピュータービジョン ディープラーニング編 ~ MathWorks Japan アプリケーションエンジニアリング部シニアアプリケーションエンジニア大塚慶太郎 2017 The MathWorks, Inc. 1

コンピュータービジョン ディープラーニングによる 様々な可能性 自動運転 ロボティクス 予知保全 ( 製造設備 ) セキュリティ 2

転移学習を使った画像分類 Deep Learning for Image Classification Demo : 血液検査画像の分類 3 つの寄生感染症を分類 バベシア マラリア原虫 トリパノソーマ 従来手法 ( 局所特徴 +SVM) では ~70% 程度の分類精度 3

MATLAB から組み込み GPU への実装 : 血液検査画像の分類 4

ディープラーニング実装ソリューション 組み込み GPU への実装 デスクトップアプリケーション GPU Coder GPU Web/ エンタープライズアプリケーション 実装 / 配布 学習済みモデルのシェア 機器 デバイスへの実装 GPU への実装 5

コンピュータービジョン向けディープラーニングワークフロー 膨大なデータの取り扱い 学習済みネットワークの取り込み マルチ GPU クラスタ環境を使った効率的な学習 組み込み GPU への実装 Dog Cat Bird GPU データアクセス モデル 学習 実装 / 配布 6

Agenda Introduction GPU CUDA Cについて GPU Coder による効率的なGPU 実装 まとめ 7

GPU コンピューティングについて CPU GPU アクセラレータ 周波数 : ~4GHz コア数 : ~24 シーケンシャルな処理が得意 周波数 : ~1.5GHz コア数 : ~6000 並列処理が得意 8

GPU を動かす為には 非常に優れたデバイスですが ハードルも 例 : ベクタ信号の総和計算 MATLAB function s = vecsum(v) s = 0; for i = 1:length(v) s = s + v(i); end end MATLAB CUDA C static global launch_bounds (512, 1) void kernel1(const real_t *v, real_t*s) { uint32_t idx; real_t tmpred; int32_t threadidx; threadidx = (int32_t)(blockdim.x * blockidx.x + threadidx.x); if (!(threadidx >= 512)) { tmpred = 0.0; for (idx = blockidx.x * blockdim.x + threadidx.x; blockdim.x * griddim.x < 0U? idx >= 511U : idx <= 511U; idx += blockdim.x * griddim.x) { tmpred += v[threadidx]; } tmpred = workgroupreduction1(tmpred, 0.0); if (threadidx.x == 0U) { atomicop1(s, tmpred); } } } CUDA Cプログラミングスキル static inline device real_t atomicop1(real_t *address, real_t value) { unsigned long long int *address_as_up; unsigned long CUDA ハードウェアを意識した効率の追求が必要 基のアルゴリズムとの等価性をいかに確保するか 9

GPU で Hello World 実行 CPU GPU global void hellofromgpu() { printf("hello World from GPU! n"); } データの転送 カーネル実行 データの転送 GPU 上で処理 int main(int argc, char **argv) { printf("hello World from CPU! n"); } hellofromgpu<<<1, 10>>>(); CHECK(cudaDeviceReset()); return 0; カーネルの呼び出し ( 特殊な構文 ) kernelfunc<<<grid_dim, Block_dim>>>(a, b, c); 10

カーネル実行の階層について Grid : ブロックをまとめたものホスト側からの呼び出し単位 Block : スレッドをまとめたもの 1 つのブロックに格納できるスレッド数には上限がある Thread : カーネルを動作させた時の多数のプログラムの最小単位 Grid Block Block Thread Thread Thread Thread Device Streaming Multiprocessor Core 11

カーネルを実装する : 配列 A, 配列 B の和を求めるプログラム ホスト上で実行 void sumarraysonhost(float *A, float *B, float *C, const int N) { for (int idx = 0; idx < N; idx++) C[idx] = A[idx] + B[idx]; } デバイス上で実行 global void sumarraysongpu(float *A, float *B, float *C, const int N) { int i = blockdim.x* blockidx.x+ threadidx.x; C[i] = A[i] + B[i]; } 12

メモリの特徴を踏まえたプログラミングの重要性 Grid Block(0,0) Shared Memory Registers Registers device グローバルメモリ領域を確保 ホスト側から読み書き可能 constant コンスタントメモリ領域を確保 shared シェアードメモリ領域を確保 Thread(0,0) Thread(1,0) Local Memory Local Memory constant int Coef = 3; Global Memory Constant Memory Texture Memory cudamemcpytosymbol(coef, &host_coef, sizeof(int)); 13

Agenda Introduction GPU CUDA Cについて GPU Coder による効率的なGPU 実装 まとめ 14

GPU Coder New in!! プラグマによる関数解析とカーネル生成 CUDA の文法を知らなくても利用できる 専用デザインパタンの利用も可能 より確実かつ効率の良いカーネル生成 GPU Coder 専用 GUI を使ったコード生成 初めてでも使いやすい GUI Simulink への統合 生成した DLL を呼び出す API を作成可能 並列化 (GPU ターゲット ) カーネル生成 MATLAB 効率の良いメモリ配置 データ転送の最小化 NVIDIA GPU MATLAB コードから CUDA C を生成します 15

コンピュータービジョン ディープラーニングの組み込み実装が可能に! 前処理 ( コントラスト調整等 ) 学習済みネットワーク 後処理 (ROI 抽出等 ) 画像前処理 後処理 + ディープラーニングでコード生成可能! MATLAB 16

前処理が必要になるケース 入力画像 前処理後 細かいテクスチャの除去 輪郭強調 コントラスト調整 霧除去 17

ホスト カーネル両方のプログラムを生成可能 MATLAB Coder のコード生成機能を利用 CUDA コード生成機能 GPU Coder C/C ++ コード生成機能 MATLAB Coder Parallel Computing Toolbox GPU Coder に必須 MATLAB MATLAB GPU Coder C/C++ CUDA Kernel C/C++ CUDA Kernel GPU CUDA Cores GPU ARM Cortex 18

GPU Coder 使用例 以下の関数でもカーネル生成が行われます function s = vecsum(v) coder.gpu.kernelfun(); s = sum(v); end function s = vecsum(v) s = 0; coder.gpu.kernelfun(); for i = 1:length(v) s = s + v(i); end end GPU Coder がコードを解析し 並列化できる部分を特定 19

GPU Coder で指定できるコード生成オプション (1/2) スタック領域 > ヒープ領域割り当ての閾値 カーネル関数の名前に付与する接頭辞 メモリ割り当てモードの指定 Discrete : cudamalloc Unified : cudamallocmanaged 利用可能なスタックの上限 / スレッド CPU/GPU 双方から単一のメモリ空間として見える managed メモリ空間の利用 cudaeventapi を利用したパフォーマンス測定 CUDA API やカーネル呼び出し時のエラーチェック 20

GPU Coder で指定できるコード生成オプション (2/2) コンパイルされるアーキテクチャを定義例 : -arch=sm_50 Compute Capability の指定 (GPU によって利用できる機能 命令が異なるため ) コンパイルオプションの指定例 : --fmad=false 21

GPU Coder で利用できるプラグマ (1/2) coder.gpu.kernelfun 最も利用頻度が高いプラグマ 関数を解析しカーネル生成 coder.gpu.kernel 指定した For ループに対してカーネル生成 coder.gpu.constantmemory 指定した変数に対して コンスタントメモリ領域を確保 22

GPU Coder で利用できるプラグマ (2/2) gpucoder.stencilkernel ステンシル計算専用プラグマ gpucoder.matrixmatrixkernel 行列 - 行列計算専用プラグマ function B = meanimgfilt(a) %#codegen B = gpucoder.stencilkernel(@my_mean,a,[3 3],'same ); function out = my_mean(a) out = cast(mean(a(:)), class(a)); end end function scores = matmul_nn(f1, f2) scores = gpucoder.matrixmatrixkernel(@times, f1, f2, 'nn'); end 23

既存の CUDA 資産の統合 foo.m coder.ceval() coder.ceval で外部関数を宣言できます 2 つのワークフロー : コード生成 : 既存の CUDA コードを GPU Coder を使って生成されるコードに含めることができます MATLAB 上でのシミュレーション : 既存 CUDA コードを予め MEX 化し MATLAB 上で利用できます foo.cu diff = mycuda ( ); 生成されたコード coder.ceval() GPU Coder GPU Coder mycuda.h device unsigned int mycuda ( ) { } 既存のコード foo.mex foo.m diff = mycuda ( ); 生成されたコード 24

GPU Coder 使用例 : ディープラーニング ディープラーニング ( 推論部分 ) function out = alexnet_predict(in) persistent mynet; if isempty(mynet) 専用プラグマ mynet = coder.loaddeeplearningnetwork('alexnet.mat','alexnet'); end out = mynet.predict(in); 25

Frames per second パフォーマンス ( 実行速度 ) 比較 : Alexnet( 推論部分 ) GPU Coder (R2017b) mxnet (0.10) MATLAB (R2017b) Caffe2 (0.8.1) TensorFlow (1.2.0) Batch Size Testing platform CPU GPU Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz Pascal Titan Xp 26

C++-Caffe Memory usage (GB) GPU Coder Py-Caffe TensorFlow MATLAB パフォーマンス ( メモリ使用率 ) 比較 : Alexnet( 推論部分 ) 9 CPU resident memory 8 7 GPU peak memory (nvidia-smi) 6 5 4 3 2 1 0 1 16 Batch Size 32 64 Testing platform CPU GPU Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz Tesla K40c 27

GPU Coder ですぐに試せるコンピュータービジョン系サンプル 霧 ( ノイズ ) 除去 5x speedup 線強調フィルタ 3x speedup 距離変換 8x speedup ディスパリティ算出 50x speedup レイトレーシング 18x speedup 特徴点抽出 700x speedup 28

GPU Coder ですぐに試せるディープラーニングサンプル ~20 Fps (K40c) 一般物体認識 (Alexnet) ~30 Fps (Tegra X1) 自動車検出 ~66 Fps (Tegra X1) ~130 Fps (K40c) 人物検出 白線検出 29

画像処理以外でも利用可能 多くの MATLAB 関数をサポート 377 個の組み込み関数に対応! 30

Agenda Introduction GPU CUDA Cについて GPU Coder による効率的なGPU 実装 まとめ 31

まとめ : いまからはじめる組み込み GPU 実装コンピュータービジョン ディープラーニングの GPU 実装 1 統合開発環 MATLAB コンピュータービジョン ディープラーニングのアルゴリズム開発環境として強力な MATLAB アルゴリズム開発から GPU まで 同一環境上で実現可能 2 新製品 : GPU Coder CUDAの文法を知らなくても自動コード生成でGPUを利用可能エンジニアのスキルに依存しない 再現性の高いコード生成パフォーマンスの高いコード : 処理速度 メモリ使用量すぐに始められるサンプル集 MATLAB を使って, コンピュータービジョン ディープラーニングのアルゴリズムの開発から実装までを効率的に実現! 32

Next Steps : 展示ブースへ是非お越し下さい 物体検出 (YOLO ネットワーク ) 実装ソリューション (FPGA/ASIC/GPU 実装 ) 血液検査画像分類 33

Next Steps : 関連セッションのご案内 ディープラーニングによる画像認識の基礎と実践ワークフロー B3, 15:10 ~ 15:50 MATLAB コードからの組み込み用 C コード生成のワークフローと最適化のコツ F5, 17:10 ~ 17:50 34

Next Steps : 画像処理 コンピュータービジョン 機械学習無料セミナー 申し込みは弊社ウェブサイトより https://jp.mathworks.com/company/events/seminars/ipcv-tokyo-2258970.html 日時 :2017 年 11 月 21 日 13:30-17:00 場所 : 品川シーズンテラスカンファレンス (JR 品川駅より徒歩 6 分 ) ( アクセス :http://www.sst-c.com/access/index.html) 画像処理 コンピュータービジョン 機械学習の機能をご紹介! MATLABではじめる画像処理ワークフロー 例題で実感するMATLABの画像処理機能 MATLABで試す! 機械学習の応用例 35

2017 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. 36

Mean Squared Error (mse) GPU Coder 関連製品 GPU Coder に必須となります MATLAB Coder MATLABプログラムからC/C++ コードを生成 MATLAB 上で アルゴリズム開発から実装までフローを統合 iterate verify / accelerate Neural Network Toolbox ニューラルネットワークの構築 学習 データフィッティング クラスタリング パターン認識 深層学習 GPUによる計算の高速化 Best Validation Performance is 0.01227 at epoch 26 10 0 Train Validation Test Best 10-1 10-2 10-3 0 5 10 15 20 25 30 32 Epochs Parallel Computing Toolbox MATLAB & Simulink と連携した並列処理 対話的な並列計算実行 GPGPU による高速演算 ジョブおよびタスクの制御 コンピュータ ローカル MATLAB デスクトップ Embedded Coder MATLAB プログラム /Simulink モデルから組込み用 C/C++ コードを自動生成 37

GPU Coder 関連製品 : 画像処理 コンピュータービジョン Image Processing Toolbox コーナー 円検出 幾何学的変換 各種画像フィルタ処理 レジストレーション ( 位置合せ ) セグメンテーション ( 領域分割 ) 画像の領域の定量評価 Computer Vision System Toolbox カメラキャリブレーション 特徴点 特徴量抽出 機械学習による物体認識 動画ストリーミング処理 トラッキング ステレオビジョン 3D 表示 Image Acquisition Toolbox デバイスから画像 動画直接取り込み フレームグラバボード DCAM, Camera Link GigE Vision, Webカメラ Microsoft Kinect for Windows Statistics and Machine Learning Toolbox 機械学習 多変量統計 確率分布 回帰と分散分析 実験計画 統計的工程管理 38