dnndk ユーザー ガイド (ug1327)...第1 章: クイック スタート © copyright 2019 xilinx...

127
© Copyright 2019 Xilinx DNNDK ユーザー ガイド UG1327 (v1.2) 2019 2 19 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料に よっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきま しては、必ず最新英語版をご参照ください。

Upload: others

Post on 22-Jan-2020

10 views

Category:

Documents


1 download

TRANSCRIPT

© Copyright 2019 Xilinx

DNNDK ユーザー ガイド

UG1327 (v1.2) 2019 年 2 月 19 日

この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 2

UG1327 (v1.2) 2019 年 2 月 19 日

改訂履歴

次の表に、この文書の改訂履歴を示します。

セクション 内容

2019 年 2 月 19 日、バージョン 1.2

DNNDK のダウンロード

DNNDK でサポートされる評価ボードに関する情報を掲載した

ザイリンクス製品ページへのリンクを更新。

評価ボードのセットアップ

DP-8020 評価ボードのセットアップ

DP-N1 ボードのセットアップ

2019 年 2 月 7 日、バージョン 1.1

ホストのセットアップ 情報を更新。

法的責任に関する通知を追加。

2019 年 1 月 22 日、バージョン 1.0

一般的なアップデート 初版

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 3

UG1327 (v1.2) 2019 年 2 月 19 日

目次

改訂履歴 ..................................................................................................................................................................................................... 2

目次 .................................................................................................................................................................................................................. 3

第 1 章: クイック スタート .................................................................................................................................................................................. 5

DNNDK のダウンロード .............................................................................................................................................................................. 5

ホストのセットアップ ..................................................................................................................................................................................... 7

評価ボードのセットアップ ............................................................................................................................................................................ 8

DNNDK のサンプルの実行 ...................................................................................................................................................................... 25

サポート ..................................................................................................................................................................................................... 31

第 2 章: 著作権とバージョン .......................................................................................................................................................................... 32

著作権 ....................................................................................................................................................................................................... 32

バージョン .................................................................................................................................................................................................. 32

第 3 章: アップグレードおよび移行 ................................................................................................................................................................ 35

v2.08 の変更点.......................................................................................................................................................................................... 35

v2.07 の変更点.......................................................................................................................................................................................... 36

v2.06 の変更点.......................................................................................................................................................................................... 37

v1.10 の変更点.......................................................................................................................................................................................... 38

旧バージョンからのアップグレード ............................................................................................................................................................ 40

第 4 章: DNNDK .............................................................................................................................................................................................. 41

概要 ........................................................................................................................................................................................................... 41

ディープ ラーニング プロセッサ ユニット (DPU) ....................................................................................................................................... 42

DNNDK フレームワーク ............................................................................................................................................................................ 43

第 5 章: ネットワーク運用の概要 .................................................................................................................................................................. 45

概要 ........................................................................................................................................................................................................... 45

ネットワークの圧縮 .................................................................................................................................................................................... 46

ネットワークのコンパイル ........................................................................................................................................................................... 47

DNNDK を使用したプログラミング ........................................................................................................................................................... 48

ハイブリッド実行ファイルのコンパイル ...................................................................................................................................................... 50

アプリケーションの実行 ............................................................................................................................................................................. 50

第 6 章: ネットワークの圧縮 .......................................................................................................................................................................... 51

DECENT の概要 ....................................................................................................................................................................................... 51

DECENT の使用方法 ............................................................................................................................................................................... 52

作業フロー ................................................................................................................................................................................................. 52

目次

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 4

UG1327 (v1.2) 2019 年 2 月 19 日

第 7 章: ネットワークのコンパイル................................................................................................................................................................. 54

DNNC の概要 ........................................................................................................................................................................................... 54

DNNC の使用方法 ................................................................................................................................................................................... 54

ResNet50 のコンパイル ............................................................................................................................................................................. 56

第 8 章: DNNDK を使用したプログラミング .................................................................................................................................................... 59

プログラミング モデル ................................................................................................................................................................................ 59

プログラミング インターフェイス ................................................................................................................................................................. 61

第 9 章: ハイブリッド コンパイル .................................................................................................................................................................... 62

第 10 章: 実行 ................................................................................................................................................................................................ 63

第 11 章: ユーティリティ ................................................................................................................................................................................. 64

DExplorer .................................................................................................................................................................................................. 64

DSight ........................................................................................................................................................................................................ 67

第 12 章: プログラミング API .......................................................................................................................................................................... 69

ライブラリ libn2cube ................................................................................................................................................................................... 69

ライブラリ libdputils .................................................................................................................................................................................. 123

法的通知 ...................................................................................................................................................................................................... 127

お読みください: 重要な法的通知 ........................................................................................................................................................... 127

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 5

UG1327 (v1.2) 2019 年 2 月 19 日

第 1 章: クイック スタート

DNNDK のダウンロード

DNNDK (Deep Neural Network Development Kit) は、ユーザー登録後、次のザイリンクス ウェブサイトから無償でダウンロードできます。https://japan.xilinx.com/products/design-tools/ai-inference/edge-ai-platform.html

DNNDK ツールチェーンを初めて使用する場合は、DNNDK でサポートされる評価ボードの使用を推奨します。DNNDK でサポートされ

る評価ボードの詳細は、https://japan.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge を参照してください。

DNNDK v2.08 リリースのパッケージ名は、xilinx_dnndk_v2.08.tar.gz です。DNNDK リリース パッケージのディレクトリ構造

は、この後に示します。ここからは、ディレクトリ名の xilinx_dnndk_v2.08 を $dnndk_pkg と表記します。

このリリースでサポートされる評価ボードは、次のとおりです。

• DeePhi DP-8020

• DeePhi DP-N1 AI Box

• ザイリンクス ZCU102

• ザイリンクス ZCU104

• Avnet Ultra96

common フォルダーには、DNNDK の各種サンプル アプリケーションで使用する画像ファイルが格納されています。

host_x86 フォルダーに格納されているファイルは、64 ビット バージョンの Ubuntu 14.04 LTS または Ubuntu 16.04 LTS が動作するホ

スト コンピューターにコピーする必要があります。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 6

UG1327 (v1.2) 2019 年 2 月 19 日

<board_name> フォルダーには、評価ボードで使用するファイルが格納されています。このフォルダーの名前は、実際には DNNDK

でサポートされる評価ボードの名前となります。すなわち、DP-8020、DP-N1、Ultra96、ZCU102、または ZCU104 のいずれかです。

ユーティリティ ツール、ディープ ラーニング プロセッサ ユニット (DPU) ドライバー、DPU ランタイムおよび開発ライブラリはデバイスごとに

異なるため、各ボードに適したものが用意されています。

$dnndk_pkg

| -- common

| -- COPYRIGHT

| -- host_x86 | | -- install.sh

| | -- models

| | -- pkgs

| |-- ubuntu14.04

| |-- ubuntu16.04

| -- board_name | -- install.sh

| -- pkgs

| -- | -- bin

| -- | -- driver

| -- | -- include

| -- | -- lib

| -- samples

| -- common

| -- inception_v1

| -- inception_v1_mt

| -- resnet50

| -- resnet50_mt

| -- mobilenet

| -- mobilenet_mt

| -- face_detection

| -- pose_detection

| -- video_analysis

| -- adas_detection

| -- segmentation

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 7

UG1327 (v1.2) 2019 年 2 月 19 日

ホストのセットアップ

host_x86 フォルダーには、ホスト ツールの DECENT (Deep Compression Tool) と DNNC (Deep Neural Network Compiler) が格納されて

います。これらのツールを使用すると、ニューラル ネットワークを最適化して DPU 推論エンジンで高速に実行できるようになります。

重要: 次の注意書きをよくお読みください。

通知: 次に示すコマンドを実行すると、オープン ソース ライセンスによって独占的に管理されるサードパーティ オープン ソース ソ

フトウェアをダウンロードし、マシンにインストールすることになります。次に示すコマンドを実行し、サードパーティ提供のオープン

ソース ソフトウェアをダウンロードおよび使用することによって、貴殿およびその従業員は、この情報およびマシンにインストールし

たサードパーティ ソフトウェアに適用されるオープン ソース使用許諾契約に従うことに同意したものと見なされます。貴殿または

その従業員が、この情報および該当するオープン ソース使用許諾契約に同意しない場合は、このコマンドを実行しないでくださ

い。

サードパーティ オープン ソース ソフトウェアのリスト、およびコマンドは「現状有姿」で提供され、ザイリンクスは明示、黙示、法定

を問わず (商品性、非侵害、特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない

(否認する) ものとします。

ザイリンクスは、このサードパーティ オープン ソース ソフトウェアの使用 (コマンドの使用を含む) に関係し、起因し、関連する、い

かなる種類・性質の損失または損害についても、責任を負わない (契約上、不法行為上 (過失の場合を含む)、その他のいかなる

責任の法理によるかを問わない) ものとし、当該損失または損害には、直接、間接、特別、付随的、結果的な損失または損害 (第

三者が起こした行為の結果被った、データ、利益、業務上の信用の損失、その他あらゆる種類の損失や損害を含みます) が含ま

れるものとし、それは、たとえ当該損害や損失が合理的に予見可能であったり、ザイリンクスがそれらの可能性について助言を受

けていた場合であったとしても同様です。

GPU プラットフォーム ソフトウェアのインストール

GPU の製品資料に従い、必要な GPU プラットフォーム ソフトウェアをインストールします。すべてのバージョンが DNNDK のバージョン

と互換性があることを確認してください。不明な点がある場合は、代理店の担当者にお問い合わせいただくか、https://japan.xilinx.com

でサービス リクエストを開いてください。

依存関係のあるライブラリのインストール

次のコマンドを実行して、Caffe v1.0 で必要な、依存関係のあるライブラリをインストールします。

$ apt-get install -y --force-yes build-essential autoconf libtool libopenblas-dev

libgflags-dev libgoogle-glog-dev libopencv-dev libprotobuf-dev protobuf-compiler

libleveldb-dev liblmdb-dev libhdf5-dev libsnappy-dev libboost-all-dev libyaml-cpp-dev

libssl-dev

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 8

UG1327 (v1.2) 2019 年 2 月 19 日

DNNDK ホスト ツールのインストール

DNNDK パッケージをダウンロードして解凍したら、host_x86 フォルダーの ./install.sh <board_name> コマンドを実行し、ホ

スト ツールの DECENT と DNNC をインストールします。<board_name> は、使用する評価ボードに応じて DP-8020、DP-N1、

Ultra96、ZCU104、または ZCU102 に置き換える必要があります。board_name を指定すると、その評価ボードに応じた適切なバー

ジョンの DNNC コンパイラが自動的にインストールされます。

評価ボードのセットアップ

サポートされる評価ボード

ここでは、DNNDK でサポートされる各評価ボードについて説明します。DeePhi DP-8020、DP-N1、および Ultra96 は、低消費電力、低

スループットのディープ ラーニング アプリケーションを評価する用途に適しています。一方、ザイリンクス ZCU102 および ZCU104 は、低

レイテンシが要求される高スループット ディープ ラーニング推論に適しています。

DNNDK でサポートされる各評価ボードの SD カード システム イメージ ファイルは、https://japan.xilinx.com/products/design-tools/ai-

inference/ai-developer-hub.html#edge からダウンロードできます。評価ボード上で DNNDK v2.08 を使用する前に、最新バージョンのイ

メージ ファイルをダウンロードしておく必要があります。旧バージョンのイメージ ファイルでは、DNNDK パッケージは動作しません。この

後の各評価ボードの説明では、各 DNNDK サンプルを実行したときのスループット性能 (fps) も記載しています。

注記:

• DNNDK v2.08 を評価ボードにインストールする前に、最新バージョンのイメージ ファイルを

https://japan.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge からダウンロードしてください。

• 各評価ボードにおける DNNDK サンプルの性能数値 (fps) は、使用するニューラル ネットワーク アルゴリズムのエンド ツー エ

ンドのスループットを示しています。画像を DPU に入力してからアルゴリズの実行が完了するまでの時間で計測しています。画

像の読み出しおよび表示にかかる時間は含めていません。したがって、DPU を使用すると各ネットワーク モデルを最大で fps

の数値まで高速に実行できます。

• ResNet-50、Inception-v1 および MobileNet の fps 数値は、それぞれマルチスレッド版のサンプルで計測しています。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 9

UG1327 (v1.2) 2019 年 2 月 19 日

DP-8020 評価ボードのセットアップ

DeePhi DP-8020 評価ボードにはザイリンクス ZU2 Zynq® UltraScale+™ デバイスが実装されています。このボードでは、ザイリンクス ZU2

デバイスの性能を利用して、監視カメラ、ADAS/AD、ロボットなど膨大な演算を必要とするエッジ AI アプリケーションを評価できます。

DP-8020 のハードウェア ユーザー ガイドは、https://japan.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge から

ダウンロードできます。

図 1: DeePhi DP-8020 評価ボードとペリフェラルの接続

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 10

UG1327 (v1.2) 2019 年 2 月 19 日

DExplorer ユーティリティ ツールを使用すると、DPU の仕様情報 (DPU シグネチャ) を確認できます。このツールでは、ターゲットのバー

ジョン、動作周波数、DPU コアの数などを表示できます。次に示す画面例は、ザイリンクス ZU2 デバイスに 1 個の B1152F DPU コアを

実装し、430MHz で動作させた場合のものです。

図 2: DExplorer で表示した DeePhi DP-8020 の DPU シグネチャ

表 1 に、DP-8020 で DNNDK の各種サンプルを実行した場合のスループット性能 (fps = frames/sec) を示します。

表 1: DP-8020 の性能

ニューラル ネットワーク MAC (GOPS) fps

ResNet-50 7.7 35

Inception-v1 3.2 79

MobileNet 0.56 162

顔検出 1.1 181

動画解析 5.5 44

姿勢検出 5.0 60

ADAS 検出 5.5 31

セマンティック セグメンテーション 8.8 32

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 11

UG1327 (v1.2) 2019 年 2 月 19 日

DP-N1 ボードのセットアップ

DeePhi DP-N1 AI Box は、ザイリンクス XCZU2CG-L1SFVA625I デバイスを使用しています。2GB DDR4 メモリ、8GB eMMC フラッ

シュ、Mini DisplayPort、Micro SD、ギガビット イーサネット、および USB 3.0 を搭載した DP-N1 では、DNNDK を使用したディープ ラー

ニング アプリケーションのラピッド プロトタイピングが可能です。DP-N1 のハードウェア ユーザー ガイドは、

https://japan.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge からダウンロードできます。

プログラマブル ロジックには 1 個の B1152F DPU コアが実装されており、ディープ ラーニング推論アクセラレーションにおいて 426GOP

の INT8 ピーク性能を発揮します。図 3 に、DP-N1 の主なコネクティビティ インターフェイスを示します。

図 3: DeePhi DP-N1 評価ボードとペリフェラルの接続

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 12

UG1327 (v1.2) 2019 年 2 月 19 日

DPU シグネチャ情報は、次の画面のように表示されます。ここでは、ザイリンクス ZU2 デバイスに 1 個の B1152F DPU コアを実装し、

370MHz で動作させています。

図 4: DExplorer で表示した DeePhi DP-N1 の DPU シグネチャ

表 2 に、DP-N1 で DNNDK の各種サンプルを実行した場合のスループット性能 (fps = frames/sec) を示します。

表 2: DP-N1 の性能

ニューラル ネットワーク MAC (GOPS) fps

ResNet-50 7.7 32

Inception-v1 3.2 72

MobileNet 0.56 145

顔検出 1.1 168

動画解析 5.5 38

姿勢検出 5.0 53

ADAS 検出 5.5 25

セマンティック セグメンテーション 8.8 27

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 13

UG1327 (v1.2) 2019 年 2 月 19 日

Ultra96 ボードのセットアップ

Ultra96 は、Linaro 96Boards 仕様に基づいた Arm® ベースのザイリンクス Zynq UltraScale+™ MPSoC 開発ボードです。96Boards は

オープンな仕様で、ソフトウェア アプリケーション、ハードウェア デバイス、カーネル、およびその他のシステム ソフトウェア開発に使用可

能な開発プラットフォームの標準ボード レイアウトを定義しています。さまざまなペリフェラルやアクセラレーション エンジンをプログラマブ

ル ロジックに実装できる Ultra96 は、96Boards コミュニティの中でも異彩を放っています。Ultra96 のハードウェア資料は、

http://zedboard.org/product/ultra96 からダウンロードできます。

Ultra96 のプログラマブル ロジックには 1 個の B1152F DPU コアが実装されており、ディープ ラーニング推論アクセラレーションにおいて

383GOP の INT8 ピーク性能を発揮します。次の図に、Ultra96 の主なコネクティビティ インターフェイスを示します。

図 5: Ultra96 評価ボードとペリフェラルの接続

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 14

UG1327 (v1.2) 2019 年 2 月 19 日

DPU シグネチャ情報は、次の画面のように表示されます。ここでは、ザイリンクス ZU3 デバイスに 1 個の B1152F DPU コアを実装し、

333MHz で動作させています。

図 6: DExplorer で表示した Ultra96 の DPU シグネチャ

表 3 に、Ultra96 で DNNDK の各種サンプルを実行した場合のスループット性能 (fps = frames/sec) を示します。

表 3: Ultra96 の性能

ニューラル ネットワーク MAC (GOPS) fps

ResNet-50 7.7 25

Inception-v1 3.2 58

MobileNet 0.56 116

顔検出 1.1 133

動画解析 5.5 35

姿勢検出 5.0 48

ADAS 検出 5.5 30

セマンティック セグメンテーション 8.8 24

図 7 および図 8 に、Ultra96 ボードの WiFi ネットワーク接続のセットアップ方法を示します。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 15

UG1327 (v1.2) 2019 年 2 月 19 日

図 7: Ultra96 の WiFi 接続

図 8: Ultra96 の WiFi 設定

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 16

UG1327 (v1.2) 2019 年 2 月 19 日

ZCU102 評価ボードのセットアップ

ザイリンクス ZCU102 評価ボードはミッドレンジの ZU9 UltraScale+ デバイスを使用しており、機械学習アプリケーションの評価を手軽に

始めることができます。ZCU102 ボードの詳細は、ザイリンクス ウェブサイトの ZCU102 製品ページ

(https://japan.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html) を参照してください。

図 9: ザイリンクス ZCU102 評価ボードとペリフェラルの接続

DPU シグネチャ情報は、次の画面のように表示されます。ここでは、ザイリンクス ZU9 デバイスに 3 個の B4096F DPU コアを実装し、

333MHz で動作させています。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 17

UG1327 (v1.2) 2019 年 2 月 19 日

図 10: DExplorer で表示したザイリンクス ZCU102 の DPU シグネチャ

表 4 に、ZCU102 で DNNDK の各種サンプルを実行した場合のスループット性能 (fps = frames/sec) を示します。

表 4: ZCU102 の性能

ニューラル ネットワーク MAC (GOPS) fps

ResNet-50 7.7 175

Inception-v1 3.2 428

顔検出 1.1 686

動画解析 5.5 241

姿勢検出 5.0 335

ADAS 検出 5.5 62

セマンティック セグメンテーション 8.8 171

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 18

UG1327 (v1.2) 2019 年 2 月 19 日

ZCU104 評価ボードのセットアップ

ザイリンクス ZCU104 評価ボードはミッドレンジの ZU7 UltraScale+ デバイスを使用しており、機械学習アプリケーションの評価を手軽に

始めることができます。ZCU104 ボードの詳細は、ザイリンクス ウェブサイト (https://japan.xilinx.com/products/boards-and-

kits/zcu104.html) を参照してください。

プログラマブル ロジックには 2 個の B4096F DPU コアが実装されており、ディープ ラーニング推論アクセラレーションにおいて 2.4TOP

の INT8 ピーク性能を発揮します。図 11 に、ZCU104 の主なコネクティビティ インターフェイスを示します。

図 11: ザイリンクス ZCU104 評価ボードとペリフェラルの接続

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 19

UG1327 (v1.2) 2019 年 2 月 19 日

DPU シグネチャ情報は、次の画面のように表示されます。ここでは、ザイリンクス ZU7 デバイスに 2 個の B4096F DPU コアを実装し、

333MHz で動作させています。

図 12: DExplorer で表示したザイリンクス ZCU104 の DPU シグネチャ

表 5 に、ZCU104 で DNNDK の各種サンプルを実行した場合のスループット性能 (fps = frames/sec) を示します。

表 5: ZCU104 の性能

ニューラル ネットワーク MAC (GOPS) fps

ResNet-50 7.7 127

Inception-v1 3.2 299

顔検出 1.1 566

動画解析 5.5 195

姿勢検出 5.0 267

ADAS 検出 5.5 59

セマンティック セグメンテーション 8.8 124

注記: DNNDK v2.08 パッケージには、ZCU104 ボード用のマルチスレッド版 ResNet-50、ADAS 検出およびセグメンテーションのサンプ

ルは付属しません。ZCU104 のデフォルト設定では、これらサンプルの実行に必要な電源の要件を満たすことができないためです。この

電源の問題を解決するパッチを別途提供しています。プロジェクトの評価にこれら 3 つのサンプルが必要な場合は、ザイリンクスのサ

ポート チームにお問い合わせください。

ここからは、DP-8020 を例に、評価ボード上に DNNDK の実行環境をセットアップする手順について説明します。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 20

UG1327 (v1.2) 2019 年 2 月 19 日

OS イメージを SD カードに書き込む

SD カードへの書き込みには、Etcher の使用を推奨します。Etcher は Windows、Linux および Mac システムに対応したクロス プラット

フォーム ツールで、OS イメージを SD カードに書き込むことができます。ここでは、Windows の場合の例を示します。

1. Etcher を https://etcher.io/ からダウンロードし、保存します (下図参照)。

図 13: Etcher のダウンロード

2. Etcher をインストールします (下図参照)。

図 14: Etcher のインストール

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 21

UG1327 (v1.2) 2019 年 2 月 19 日

3. USB フラッシュ ドライブやバックアップ ハード ディスクなど、外部ストレージ デバイスがある場合は取りはずしておきます。こうする

と、SD カードの場所を見つけやすくなります。次に、SD カードをコンピューターのスロットまたは SD カード リーダーに挿入します。

4. 次の図に示す Etcher のアイコンをダブルクリックするか、スタート メニューから選択して Etcher を実行します。

図 15: Etcher のアイコン

Etcher が起動します (下図参照)。

図 16: Etcher のインターフェイス

5. [Select image] をクリックして、イメージ ファイルを選択します。.zip または .gz 形式の圧縮ファイルを選択できます。

6. Etcher が SD ドライブを検出します。書き込み先のドライブとイメージ サイズを確認し、正しいイメージを書き込むようにします。

7. [Flash] をクリックします。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 22

UG1327 (v1.2) 2019 年 2 月 19 日

図 17: SD カードへの書き込み

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 23

UG1327 (v1.2) 2019 年 2 月 19 日

評価ボードを起動する

このセクションでは、DP-8020 ボードを例に、DNNDK の評価ボードの起動方法について説明します。評価ボードを起動するには、次の

手順を実行します。

1. 電源を接続します (12V ~ 2A)。

2. UART デバッグ インターフェイスにホストを接続し、その他の必要なペリフェラルも接続します。

3. 電源を投入し、システムが起動するまで待ちます。

4. システムにログインします。

5. システムの初回起動時には、いくつかの設定を実行する必要があります。これらの設定は、再起動後に有効になります。

評価ボードへアクセスする

DP-8020 ボードへのアクセス方法は、UART 経由、イーサネット経由、またはスタンドアロンの 3 つがあります。

UART の設定

UART を利用すると、起動プロセスの監視やデバッグ時のカーネル メッセージの表示のほか、ボードへのログインも行えます。UART の

パラメーターは、次のように設定します。ブート画面の例も、次に示します。ユーザー名「root」、パスワード「root」でシステムにログインしま

す。

• ボー レート: 115200bps

• データ ビット: 8

• ストップ ビット: 1

• パリティなし

図 18: ブート画面の例

注記: Linux システムでは、Minicom を使用してターゲット ボードに直接接続できます。Windows システムでシリアル ポートを経由して

ボードに接続するには、USB-to-UART ドライバーが必要です。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 24

UG1327 (v1.2) 2019 年 2 月 19 日

イーサネット インターフェイスの使用

DP-8020 ボードにはイーサネット インターフェイスがあり、デフォルトで SSH サービスが有効です。ボードが起動したら、SSH クライアント

を使用してシステムにログインできます。

図 19: SSH を使用した評価ボードへのログイン

UART インターフェイスから ifconfig コマンドを実行してボードの IP アドレスを設定した後、SSH クライアントを使用してシステムにロ

グインします。

スタンドアロン エンベデッド システムとしての DP-8020 の使用

DP-8020 ボードには、キーボード、マウス、およびモニターを接続できます。ボードが正常に起動すると、Linux GUI デスクトップが表示さ

れます。このボードには、スタンドアロン エンベデッド システムとしてアクセスできます。

図 20: スタンドアロン Linux の GUI 画面

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 25

UG1327 (v1.2) 2019 年 2 月 19 日

DNNDK ツールを評価ボードへコピーする

イーサネット接続が確立したら、ホスト マシンから評価ボードへ DNNDK パッケージをコピーできます。DNNDK パッケージのサイズを最

小にするため、DNNDK の各評価ボードの $dnndk_pkg/board_name/samples/common ディレクトリは、DNNDK のすべてのサ

ンプルで使用する画像ファイルを格納した $dnndk_pkg/common ディレクトリへのシンボリック リンクとしています。

注記: DNNDK パッケージを Windows システムで解凍すると、これらのシンボリック リンクが壊れるため、評価ボードで DNNDK のサン

プルを実行中に問題が発生します。

DNNDK パッケージを Windows システムに保存した場合、次の手順で DNNDK 実行環境をセットアップします (DP-8020 ボード使用時

の場合)。

1. Windows システムで MobaXterm をダウンロードしてインストールします。MobaXterm は Windows 用のターミナルで、

https://mobaxterm.mobatek.net/ から入手できます。

2. MobaXterm を起動します。[Start local terminal] をクリックしてターミナルを開き、ここで Windows ファイルシステムにアクセスしま

す。

3. ボードのパッケージを解凍し、コピーします。

たとえば、DNNDK パッケージが D ドライブのルート ディレクトリにあるとします。この場合、DP-8020 ボードの IP アドレスが

192.168.0.10 とすると、次のコマンドを実行してパッケージを解凍およびコピーします。

cd d:

tar -xzvf xilinx_dnndk_v2.08.tar.gz

cd xilinx_dnndk_v2.08/

scp -r ./DP-8020 [email protected]:~/

4. DP-8020 ボードで、~/DP-8020/ ディレクトリに移動して install.sh を実行します。インストールが正しく完了すると、次のメッ

セージが表示されます。

ボードが自動的に再起動してインストールが完了し、次のようなメッセージが表示されます。

Begin to install DeePhi DNNDK ...

Install DeePhi DPU driver ...

Install DeePhi tools, runtime & libraries ...

Complete installation successfully.

注記: DNNDK v2.08 をインストールすると、以前のリリースは自動的に置き換えられます。以前のバージョンを手動でアンインストールす

る必要はありません。

DNNDK のサンプルの実行

このセクションでは、DNNDK パッケージに付属する各サンプルの実行方法について説明します。評価ボードは、DeePhi DP-8020 ボー

ドをリファレンスとして使用します。

DNNDK パッケージのインストールが正しく完了したら、これらのサンプルをコンパイルして起動できます。サンプルは、

xilinx_dnndk_v2.08/DP-8020/samples フォルダーに格納されています。ここからは、xilinx_dnndk_v2.08/DP-8020 を

$dnndk_sample_base と表記します。

サンプルの動作には Linux Window System が必要なため、SSH ターミナルを使用してボードにログインする場合、次のコマンドを実行し

て X11 フォワーディングを有効にする必要があります (コマンドは、ホスト マシンの IP アドレスが 192.168.0.10 の場合の例)。

export DISPLAY=192.168.0.10:0.0

いずれの DNNDK サンプルについても、それぞれのディレクトリに移動して make コマンドを実行し、ハイブリッド DPU 実行ファイルを生

成すると、通常の Linux アプリケーションと同じ方法で起動します。

注記:

• DNNDK のサンプルを実行するには Linux GUI デスクトップが必要なため、UART 接続は利用できません。

• 一部の DNNDK サンプルは、DPU が必要とするメモリ帯域幅が大きいため、実行中に画面がちらつくことがあります。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 26

UG1327 (v1.2) 2019 年 2 月 19 日

ResNet-50

ResNet-50 ネットワークを使用した画像分類のサンプルは、$dnndk_sample_base/samples/resnet50 ディレクトリに格納されて

います。このサンプルは、$dnndk_sample_base/samples/common ディレクトリにある画像を読み出し、各入力画像に対する分類

結果を出力します。

図 21: ResNet-50 の例

make を実行後、コマンド ./resnet50 を実行するとサンプルが起動し、分類結果として上位 5 つのラベルとそれぞれの確率が表示さ

れます (上図参照)。

マルチスレッド版 ResNet-50

マルチスレッディング モードでプログラムしてスループットを高めた ResNet-50 の画像分類のサンプルは、

$dnndk_sample_base/samples/resnet50_mt ディレクトリに格納されています。このサンプルでは、DNNDK の API を使用し

てマルチスレッド DPU アプリケーションを開発する方法を学習できます。

make を実行後、コマンド ./resnet50 4 を実行するとサンプルが起動し、1 つの入力画像が 1000 回処理された後にスループット

(単位: fps) が表示されます。オプションの「4」は、4 つのスレッドを生成して 1 つの DPU を共有することを意味します。これにより DPU の

アイドル時間が減少し、スループットが向上します。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 27

UG1327 (v1.2) 2019 年 2 月 19 日

Inception-v1

Inception-v1 ネットワークを使用した画像分類のアプリケーションは、$dnndk_sample_base/samples/inception_v1 ディレクト

リに格納されています。make を実行後、コマンド ./inception_v1 を実行するとサンプルが起動します。次に、サンプル実行時の画

面を示します。

図 22: Inception-V1 の例

マルチスレッド版 Inception-v1

Inception-v1 ネットワークを使用したマルチスレッド版の画像分類のサンプルは、

$dnndk_sample_base/samples/inception_v1_mt ディレクトリに格納されています。make を実行後、コマン

ド ./inception_v1 4 を実行すると 4 スレッドでサンプルが実行されます。実行が完了すると、スループット (単位: fps) が表示されま

す。

注記: DPU の演算性能およびコア数は評価ボードによって異なるため、マルチスレッド版 Incepion-v1 のサンプルのスループットが最大

となるスレッド数は、評価ボードによって異なります。各評価ボードの DPU シグネチャは、「dexplorer -w」を実行すると確認できます。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 28

UG1327 (v1.2) 2019 年 2 月 19 日

MobileNet

MobileNet ネットワークを使用した画像分類のサンプルは、$dnndk_sample_base/samples/mobilenet ディレクトリに格納され

ています。make を実行後、コマンド ./mobilenet を実行するとサンプルが起動します。次に、サンプル実行時の画面を示します。

注記: DNNDK v2.08 リリースには、ZCU102 および ZCU104 評価ボード用の MobileNet のサンプルは付属しません。プロジェクトの評

価にこのサンプルが必要な場合は、DNNDK のサポート チームにお問い合わせください。

図 23: MobileNet の例

マルチスレッド版 MobileNet

MobileNet ネットワークを使用したマルチスレッド版の画像分類のサンプルは、$dnndk_sample_base/samples/mobilenet_mt

ディレクトリに格納されています。make を実行後、コマンド ./mobilenet 4 を実行すると 4 スレッドでサンプルが実行されます。実行

が完了すると、スループット (単位: fps) が表示されます。

注記:

• DNNDK v2.08 パッケージには、ZCU102 および ZCU104 評価ボード用のマルチレッド版 MobileNet のサンプルは付属しませ

ん。プロジェクト評価にこのサンプルが必要な場合は、DNNDK のサポート チームにお問い合わせください。

• DPU の演算性能およびコア数は評価ボードによって異なるため、マルチスレッド版 MobileNet のサンプルのスループットが最

大となるスレッド数は、評価ボードによって異なります。各評価ボードの DPU シグネチャは、dexplorer -w を実行すると確

認できます。

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 29

UG1327 (v1.2) 2019 年 2 月 19 日

顔検出

顔検出のサンプルは、$dnndk_sample_base/samples/face_detection ディレクトリに格納されています。このサンプルは、

USB カメラから画像フレームを読み出し、検出した顔にリアルタイムでアノテーションを付加します。make を実行後、コマンド

./face_detection を実行するとサンプルが起動します。次に、実行結果の画面を示します。

図 24: 顔検出の例

注記: USB カメラによっては、プロセスを強制終了するとデモがハングすることがあります。この場合は、USB カメラをいったん取りはずし

てから接続し直してください。

姿勢検出

姿勢検出のサンプルは、$dnndk_sample_base/samples/pose_detection ディレクトリに格納されています。このサンプルは、

動画ファイルから画像フレームを読み出し、検出した人体にリアルタイムでアノテーションを付加します。make を実行後、コマン

ド ./pose_detection video/pose.mp4 (video/pose.mp4 は入力動画ファイル名) を実行するとサンプルが起動します。次

に、サンプル実行時の画面を示します。

図 25: 姿勢検出の例

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 30

UG1327 (v1.2) 2019 年 2 月 19 日

動画解析

物体検出のサンプルは、$dnndk_sample_base/samples/video_analysis ディレクトリに格納されています。このサンプルは、

動画ファイルから画像フレームを読み出し、検出した車両および歩行者にリアルタイムでアノテーションを付加します。make を実行後、

コマンド ./video_analysis video/structure.mp4 (video/structure.mp4 は入力動画ファイル名) を実行するとサンプ

ルが起動します。次に、サンプル実行時の画面を示します。

図 26: 物体検出の例

ADAS 検出

YOLO-v3 ネットワーク モデルを使用した先進運転支援システム (ADAS) アプリケーション向け物体検出のサンプルは、

$dnndk_sample_base/samples/adas_detection ディレクトリに格納されています。このサンプルは、動画ファイルから画像フ

レームを読み出し、リアルタイムでアノテーションを付加します。make を実行後、コマンド ./adas_detection video/adas.avi

(video/adas.mp4 は入力動画ファイル名) を実行するとサンプルが起動します。次に、サンプル実行時の画面を示します。

図 27: ADAS 検出の例

第 1 章: クイック スタート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 31

UG1327 (v1.2) 2019 年 2 月 19 日

セマンティック セグメンテーション

セマンティック セグメンテーションのサンプルは、$dnndk_sample_base/samples/segmentation ディレクトリに格納されていま

す。このサンプルは、動画ファイルから画像フレームを読み出し、リアルタイムでアノテーションを付加します。

make を実行後、コマンド ./segmentation video/traffic.mp4 (video/traffic.mp4 は入力動画ファイル名) を実行する

とサンプルが起動します。次に、サンプル実行時の画面を示します。

図 28: セマンティック セグメンテーションの例

サポート

ディスカッション、知識の共有、FAQ、およびテクニカル サポートのリクエストについては、ザイリンクス ウェブサイトの DNNDK コミュニ

ティ フォーラム https://forums.xilinx.com/t5/Deephi-DNNDK/bd-p/Deephi にアクセスしてください。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 32

UG1327 (v1.2) 2019 年 2 月 19 日

第 2 章: 著作権とバージョン

著作権

DNNDK (Deep Neural Network Development Kit) ツールチェーンには、サードパーティ提供のソース コードが一部含まれます。これら

著作権の宣言は、$dnndk_pkg/COPYRIGHT にあります。

バージョン

ホスト パッケージ

DNNDK リリース パッケージの「host_x86」ディレクトリには、ホスト側で使用するツール DECENT (Deep Compression Tool) と DNNC が

格納されています。次に、これらのバージョン情報を示します。

DECENT または DNNC の使用中に問題が発生した場合は、DNNDK サポート チームにバージョン情報をお知らせください。バージョ

ン情報は、コマンド decent --version and dnnc --version を実行して確認できます。

DP-8020、DP-N1、および Ultra96 ボードのバージョン情報

decent version 1.2.4

Build Label Dec 7 2018 02:47:58

(c) Copyright 2016 – 2018 Xilinx, Inc. All rights reserved.

dnnc version v2.03

DPU Target : v1.3.7

Build Label:Dec 11 2018 11:57:45

Copyright @2018 Xilinx Inc. All Rights Reserved.

ZCU102 および ZCU104 ボードのバージョン情報

decent version 1.2.4

Build Label Dec 7 2018 02:47:58

(c) Copyright 2016 – 2018 Xilinx, Inc. All rights reserved.

dnnc version v2.03

DPU Target : v1.3.0

Build Label:Dec 11 2018 11:52:13

Copyright @2018 Xilinx Inc. All Rights Reserved.

注記: 現在、ホスト マシン用ツールの DNNC のバージョンは、DNNDK の評価ボードによって異なります。今後、これらは共通のリリース

に統一される予定です。

ターゲット パッケージ

ターゲット DPU (ディープ ラーニング プロセッサ ユニット) 評価ボード用のパッケージに含まれるコンポーネントには、DExplorer、

DSight、DPU ドライバー、およびランタイム N2Cube があります。次に、各評価ボードのコンポーネントのバージョンを示します。評価ボー

ド上で DNNDK アプリケーションを実行中に問題が発生した場合は、DNNDK サポート チームにバージョン情報をお知らせください。

バージョン情報は、コマンド dexplorer -v を実行して確認できます。

第 2 章: 著作権とバージョン

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 33

UG1327 (v1.2) 2019 年 2 月 19 日

DP-8020 のコンポーネントのバージョン

DNNDK version 2.08

Copyright @ 2016-2018 DeePhi Inc. All Rights Reserved.

DExplorer version 1.5

Build Label:Dec 11 2018 20:51:06

DSight version 1.4

Build Label:Dec 11 2018 20:51:07

N2Cube Core library version 2.2

Build Label:Jan 10 2019 16:00:20

DPU Driver version 2.0

Build Label:Dec 11 2018 20:51:02

DP-N1 のコンポーネントのバージョン

DNNDK version 2.08

Copyright @ 2016-2018 DeePhi Inc. All Rights Reserved.

DExplorer version 1.5

Build Label:Dec 11 2018 20:24:43

DSight version 1.4

Build Label:Dec 11 2018 20:24:44

N2Cube Core library version 2.2

Build Label:Jan 10 2019 16:00:20

DPU Driver version 2.0

Build Label:Dec 11 2018 20:24:39

第 2 章: 著作権とバージョン

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 34

UG1327 (v1.2) 2019 年 2 月 19 日

Ultra96 のコンポーネントのバージョン

DNNDK version 2.08

Copyright @ 2016-2018 DeePhi Inc. All Rights Reserved.

DExplorer version 1.5

Build Label:Dec 11 2018 21:12:17

DSight version 1.4

Build Label:Dec 11 2018 21:12:18

N2Cube Core library version 2.2

Build Label:Jan 10 2019 16:00:20

DPU Driver version 2.0

Build Label:Dec 11 2018 21:12:13

ZCU102 のコンポーネントのバージョン

DNNDK version 2.08

Copyright @ 2016-2018 DeePhi Inc. All Rights Reserved.

DExplorer version 1.5

Build Label:Dec 11 2018 21:13:45

DSight version 1.4

Build Label:Dec 11 2018 21:13:46

N2Cube Core library version 2.2

Build Label:Jan 10 2019 16:00:20

DPU Driver version 2.0

Build Label:Dec 11 2018 21:13:42

ZCU104 のコンポーネントのバージョン

DNNDK version 2.08

Copyright @ 2016-2018 DeePhi Inc. All Rights Reserved.

DExplorer version 1.5

Build Label:Dec 11 2018 21:15:32

DSight version 1.4

Build Label:Dec 11 2018 21:15:33

N2Cube Core library version 2.2

Build Label:Jan 10 2019 16:00:20

DPU Driver version 2.0

Build Label:Dec 11 2018 21:15:28

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 35

UG1327 (v1.2) 2019 年 2 月 19 日

第 3 章: アップグレードおよび移行

この章では、2017 年 10 月に発表された最初のバージョン 1.07 以降の DNNDK (Deep Neural Network Development Kit) ツールチェー

ンの主な改良点や変更点について、各リリースごとに説明します。また、旧バージョンの DNNDK から最新バージョンへアップグレードす

る際の、DPU (ディープ ラーニング プロセッサ ユニット) アプリケーションの移行方法についても説明します。

v2.08 の変更点

v2.08 リリースから、DeePhi DP-N1 AI Box と Ultra96 の 2 つの評価ボードが新たにサポートされます。これで、既存の 3 つのボード (DP-

8020、ZCU102、および ZCU104) に加え、5 つの評価ボードを利用できるようになりました。これと並行して、DPU 性能、ツールの使いや

すさ、DNNDK の量産環境への適合性など、多くの面で DNNDK ツールチェーンの改良も継続しています。

ツールチェーンの変更点

DECENT

DECENT (Deep Compression Tool) から Nvidia NCCL ライブラリへの依存関係が解消されました。x86 ホスト マシンへの NCCL のインス

トールは不要です。

DNNC

DNNC v2.03 から、DNNDK の前方互換性のための新しいオプション --abi が導入されました。詳細は、DNNC の使用方法を参照し

てください。

例外処理の変更点

N2Cube ランタイム API の新しい例外処理モードが導入されました。以前のリリースでは、何らかのエラーが発生すると N2Cube はエラー

メッセージを出力して DNNDK アプリケーションの実行を終了していました。

v2.08 からは、エラーが発生しても N2Cube ランタイム API は対応するエラー コードを返すだけで動作を継続できるようになりました。例

外処理は、API dpuGetExceptionMessage() を使用してエラー メッセージ ログを記録したり、リソースを解放するなどして、API の

呼び出し元が適切に実行する必要があります。

前方互換性を維持するため、デフォルトは従来の例外処理方法のままです。新しいモードに変更するには、

dpuSetExceptionMode() を使用します。

API の変更点

次の 4 つの新しい API が libn2cube ライブラリに追加されました。詳細は、第 12 章: プログラミング API を参照してください。

• dpuRunSoftmax()

• dpuSetExceptionMode()

• dpuGetExceptionMode()

• dpuGetExceptionMessage()

第 3 章: アップグレードおよび移行

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 36

UG1327 (v1.2) 2019 年 2 月 19 日

サンプルの変更点

DPU の性能とスケーラビリティを評価するための新しい DNNDK サンプルが 3 つ追加されました。

- MobileNet

- マルチスレッド版 MobileNet

- YOLO-v3 ネットワーク モデルを使用した ADAS 検出

v2.07 の変更点

これ以前のリリースでは、サポートされる評価ボードは 1 つのみでした。2.07 リリースから、DP-8020、ZCU102、および ZCU104 評価ボー

ドがサポートされるようになりました。

ツールチェーンの変更点

DNNC

使いやすさを改善するため、DNNC に次のマイナー アップデートがありました。

1. ホスト システムに dot コマンドがインストールされている場合、DNNC で JPEG フォーマットのカーネル グラフ記述ファイル

<net_name>_kernel_graph.jpg を生成できるようになりました。このコマンドがインストールされていない場合は、同じ名前の

ファイルが元の gv フォーマットで生成されます。

2. カーネル記述において、単に DPUKernel の入力/出力ノード名を表示するのではなく、ノード名の入力/出力インデックスも

node_name(index) フォーマットで表示するようになりました。N2Cube の API を使用して入力を設定または出力を取得する際に

は、node_name と index を一意の識別子として使用します。

3. エラー プローブ用に、dump オプションが DNNC に追加されました (詳細は、第 7 章: ネットワークのコンパイルを参照)。

第 3 章: アップグレードおよび移行

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 37

UG1327 (v1.2) 2019 年 2 月 19 日

v2.06 の変更点

ツールチェーンの変更点

DECENT

• 新しい演算子を追加。

o Dilation convolution

o Deconvolution

o Flatten

o Concat

o Scale

o Reorg

• 新しいレイヤー融合パターンを追加。

o BatchNorm + Scale + Convolution を Convolution 層へ融合

o スタンドアロン BatchNorm + Scale を Scale 層へ融合

• TensorFlow フレームワークのサポートを追加 (DeePhi 社内評価用のみ)。

• その他のマイナー変更

o 市街地景観のセグメンテーション用データセットの自動テストをサポート

o CV_16U 画像の入力をサポート

DNNC

• 新しい演算子を追加。

o Dilation convolution

o Deconvolution

o Flatten

o Concat

o Scale

o Reorg

• 新しいコンパイラ最適化手法を追加。

o 柔軟なノード融合ストラテジを拡充

o Concat および Flatten 演算で適応型最適化を実行

• TensorFlow フレームワークのサポートを追加 (ザイリンクス社内評価用のみ)。

• DPU ABI v1.7 をサポート。

DExplorer

DPU アーキテクチャ バージョン、ターゲット バージョン、動作周波数、DPU コア数などの DPU シグネチャ情報を表示する新しいオプ

ション「-w」が追加されました。

第 3 章: アップグレードおよび移行

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 38

UG1327 (v1.2) 2019 年 2 月 19 日

API の変更点

このリリースでは、複数 IO がサポートされます。このため、後方互換性を維持する目的で、

dpuGetInputXX/dpuGetOutputXX/dpuSetInputXX/dpuSetOutputXX など、入力/出力テンソルに関連するすべての API

が変更されました。

複数 IO を必要としない場合、アプリケーションの変更は不要です。

それ以外の場合は、API の最後のパラメーター idx でいずれか 1 個のテンソルを指定します。idx の値は、DNNC で生成される

kernel_graph.gv ファイルを参照して取得します。

このノードの入力/出力テンソルの総数を取得する API として、dpuGetInputTensorCnt/dpuGetOutputTensorCnt が新たに追

加されています。

サンプルの変更点

サイズが大きいため、このリリースでは VGG-16 が除外されました。次のサンプルが新たに追加されました。

• マルチスレッド版 ResNet-50

• マルチスレッド版 Inception-v1

• セマンティック セグメンテーション

• 姿勢推定

v1.10 の変更点

ツールチェーンの変更

DECENT

DECENT でニューラル ネットワーク モデルを圧縮する際、修正情報を別ファイルの fix_info.txt として生成するのではなく、圧縮し

た Caffe モデル ファイルに組み込むようになりました。DNNC コンパイラは、この修正情報を自動的に処理します。

モデル圧縮時に、平均値が prototxt ファイルにカプセル化されるようになりました。DNNC コンパイラは、この値を自動的に処理します。

注記: ネットワーク モデルを圧縮およびコンパイルする際は、DNNDK リリースに含まれるバージョンの DECENT および DNNC を使用し

ないと、予期しないエラーが発生することがあります。

DNNC

CPU と DPU の自動マッピング。

• 多重メモリ アクセスに対する DNNC コンパイラ最適化。

• ワンクリック コンパイルが可能なニューラル ネットワークとして、ResNet-50、VGG-16、Inception、SSD、YOLO、SqueezeNet、お

よび DenseBox をサポート。

• バグ修正、ヒントの拡充、ユーザー入力のエラー チェック。

DExplorer

このリリースから、DNNDK のコンポーネント バージョンや DPU の情報を表示する DExplorer ユーティリティが追加されました。

第 3 章: アップグレードおよび移行

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 39

UG1327 (v1.2) 2019 年 2 月 19 日

DSight

このリリースから、性能プロファイリング ツールの DSight ユーティリティが追加されました。

API の変更点

新規 API

dpuSetInputImage2() – DPU タスクへの入力イメージを、平均値を指定せずに設定します。dpuSetInputImage() API との違

いに注意してください。

API の変更点

dpuEnableTaskDebug() の名前が dpuEnableTaskDump() に変更されました。

第 3 章: アップグレードおよび移行

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 40

UG1327 (v1.2) 2019 年 2 月 19 日

旧バージョンからのアップグレード

v1.10 から v2.06

このセクションでは、DNNDK v1.10 で運用中のディープ ラーニング アプリケーションを DNNDK v2.06 へアップグレードする方法につい

て、ResNet-50 の場合を例に説明します。

1. DNNDK v2.06 の DECENT を使用してネットワーク モデルを再圧縮し、新しい deploy.prototxt と deploy.caffemodel

を生成します。

2. ネットワーク モデルを再コンパイルし、新しい DPU カーネル用の ELF ファイルを生成します。v2.06 では出力ファイルに変更がある

ため、注意が必要です。kernel_graph.gv という名前の新しいファイルが DNNC によって生成されます。これは、ネットワークの

構造を示したファイルです。dot コマンド (例: dot -Tjpg -o xxx.jpg kernel_graph.gv) を使用すると、JPEG フォーマッ

トに変換できます。

3. kernel_graph.gv には、各ノードの入力および出力テンソルが表示されます。dpuGetOutputTensorCnt() または

dpuGetInputTensorCnt() を使用してノードのテンソルの総数を取得し、その後の処理では関数のパラメーター idx を使用し

てテンソルを指定します。idx は、ノードのテンソルのインデックスで、x.jpg の左から右へ向かって 0 から順番に割り当てられま

す。ネットワークに変更がなければ、運用中のコードの変更は必要ありません。

v1.07 から v1.10

このセクションでは、DNNDK v1.07 で運用中のディープ ラーニング アプリケーションを DNNDK v1.10 へアップグレードする方法につい

て、ResNet-50 の場合を例に説明します。

1. DNNDK v1.10 の DECENT を使用してネットワーク モデルを再圧縮し、新しい deploy.prototxt と deploy.caffemodel

を生成します。

2. ネットワーク モデルを再コンパイルし、新しい DPU カーネル用の ELF ファイルを生成します。生成されるファイルには、接尾辞

「_fixed」が付かないことに注意してください。たとえば、オプション —net_name=resnet50 を指定してネットワークをコンパイル

した場合、v1.07 では dpu_resnet50_fixed.elf と dpu_reset50_fc_fixed.elf が生成されます。v1.10 では、

dpu_resnet50_0.elf と dpu_resnet50_2.elf が生成されます。dpuLoadKernel() を呼び出す際は、適切な DPU

カーネル ファイルがロードされるように、ソース コードを修正してください。

3. Makefile を修正し、DPU カーネルの ELF ファイルの名前 dpu_resnet50_fixed.elf と

dpu_resnet50_fc_fixed.elf を dpu_resnet50_0.elf および dpu_resnet50_2.elf へ変更します。

4. API dpuSetInputImage() の代わりに、簡略化した新しい dpuSetInputImage2() の使用を検討してください。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 41

UG1327 (v1.2) 2019 年 2 月 19 日

第 4 章: DNNDK

概要

DNNDK (Deep Neural Network Development Kit) は、ディープ ラーニング プロセッサ ユニット (DPU) 向けのフルスタック ディープ ラー

ニング SDK です。プルーニング、量子化、コンパイル、最適化、およびランタイムをサポートしており、ディープ ニューラル ネットワークの

推論アプリケーション開発にワンストップで対応します。主な特長と機能は、次のとおりです。

ディープ ラーニング推論アプリケーション開発に向けた革新的なフルスタック ソリューション。

• 圧縮からコンパイル、ランタイムまでを完全にサポートした、最適化済みツールチェーン。

• 軽量の C/C++ プログラミング API。

• 使いやすく、徐々に学習が可能。

図 29: DNNDK フレームワーク

DNNDK に用意されている軽量の C/C++ API セットを使用すると、下層の FPGA デバイスの複雑さが抽象化されるため、FPGA の知識

がないユーザーでもディープ ラーニング推論アプリケーションを簡単に開発できます。

第 4 章: DNNDK

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 42

UG1327 (v1.2) 2019 年 2 月 19 日

ディープ ラーニング プロセッサ ユニット (DPU)

DPU は、画像/動画分類、セマンティック セグメンテーション、物体検出/追跡などさまざまなコンピューター ビジョン アプリケーションで広

く採用されているディープ ラーニング推論アルゴリズムの演算ワークロードを高速に実行できるように設計されています。

図 30: DPU のアーキテクチャ

効率的なテンソル レベルの命令セットは、VGG、ResNet、GoogLeNet、YOLO、SSD、MobileNet など多くの一般的なたたみ込みニュー

ラル ネットワークをサポートしており、これらを高速に実行できるように設計されています。DPU はエッジからクラウドまでさまざまなザイリ

ンクス Zynq®-7000 および Zynq UltraScale+™ MPSoC デバイスにスケーラブルに適合し、多様なアプリケーションの要件を満たします。

第 4 章: DNNDK

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 43

UG1327 (v1.2) 2019 年 2 月 19 日

DNNDK フレームワーク

次の図に示すように、DNNDK は DECENT (Deep Compression Tool)、DNNC (Deep Neural Network Compiler)、DNNAS (Deep Neural

Network Assembler)、ニューラル ネットワーク ランタイム (N2Cube)、DPU シミュレータ、およびプロファイラーで構成されます。

図 31: DNNDK のツール

注記: DECENT ツールにはプルーニングと量子化の機能がありますが、このパッケージに含まれるのは量子化のみです。

DECENT

推論では膨大な演算が発生するため、低レイテンシかつ高スループットという要件を満たすには、広いメモリ帯域幅が必要です。

この問題を解決するため、DECENTTM (Deep Compression Tool) は粗粒度のプルーニング、学習後の量子化および重み共有を実行し、

精度の低下を最小限に抑えながら高い性能と電力効率を達成します。

DNNC

DNNC™ (Deep Neural Network Compiler) は、DPU 専用に独自設計されたコンパイラです。ニューラル ネットワーク アルゴリズムを DPU

命令へマップし、演算ワークロードとメモリ アクセスのバランスをとることにより、DPU リソースの使用率を最大限に高めます。

第 4 章: DNNDK

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 44

UG1327 (v1.2) 2019 年 2 月 19 日

N2Cube

N2Cube (Cube of Neutral Networks) は、DPU ランタイム エンジンです。DNNDK アプリケーションのローダーとして動作し、リソース割り

当てと DPU スケジューリングを処理します。コア コンポーネントとしては、DPU ドライバー、DPU ローダー、トレーサー、およびアプリケー

ション開発用のプログラミング API があります。

N2Cube は、下層のハードウェア実装の詳細を抽象化する軽量のプログラミング インターフェイスをライブラリとして用意しています。

DPU ドライバーは Linux OS のカーネル空間で動作し、タスク スケジューリングなどの DPU 機能を実行します。また、メモリを効率的に

管理し、DPU と CPU 間のメモリ コピーのオーバーヘッドを軽減します。

DPU ローダーは、DPU コードおよびデータを DPU 専用のメモリ空間に動的にロードし、ランタイム アドレス再配置を実行します。

DPU パフォーマンス プロファイラーを使用すると、プログラマは DPU コードの効率とリソース使用量をレイヤーごとに解析できます。

DNNAS

DNNAS (Deep Neural Network Assembler) は、DPU 命令を ELF バイナリ コードにアセンブルします。DNNAS は DNNC のコード生成

バックエンドの一部であり、単体では呼び出すことができません。

プロファイラー

DPU プロファイラーは、DPU トレーサーと DSight の 2 つのコンポーネントで構成されます。DPU トレーサーは DNNDK ランタイム

N2Cube に実装されており、DPU 上でニューラル ネットワークを実行中に生のプロファイリング データを収集します。このプロファイリング

データに基づいて DSight がパフォーマンス解析に適した視覚的なチャートを生成します。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 45

UG1327 (v1.2) 2019 年 2 月 19 日

第 5 章: ネットワーク運用の概要

概要

ディープ ラーニング アプリケーションの開発には、学習と推論の 2 つのステージがあります。学習ステージでは、大量の学習データを使

用して、画像分類など特定のタスクに向けたニューラル ネットワークを設計します。推論ステージでは、学習ステージで設計したニューラ

ル ネットワークを運用し、学習ステージで与えられたのとは別の入力データを処理します。

DNNDK ツールチェーンは、ディープ ラーニングの推論アプリケーションを DPU 上で効率的に運用できるように、5 つの手順による革新

的なワークフローを採用しています。

1. ニューラル ネットワーク モデルを圧縮する。

2. ニューラル ネットワーク モデルをコンパイルする。

3. DNNDK API を使用してプログラムを作成する。

4. ハイブリッド DPU アプリケーションをコンパイルする。

5. ハイブリッド DPU 実行ファイルを実行する。

この章では、ResNet-50 を例にとって、これらの各手順について説明します。DNNDK パッケージには、表 6 に示す場所に Resnet-50 お

よび Inception-v1 の浮動小数点モデルが含まれます。

表 6: DNNDK パッケージに含まれるニューラル ネットワーク モデル

モデル Directory

ResNet-50 $dnndk_pkg/host_x86/models/resnet50

Inception-v1 $dnndk_pkg/host_x86/models/inception_v1

注記: このリリースにはプルーニング ツールは含まれないため、この章では DECENT (Deep Compression Tool) を使用したモデル量子

化についてのみ説明します。

第 5 章: ネットワーク運用の概要

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 46

UG1327 (v1.2) 2019 年 2 月 19 日

ネットワークの圧縮

DECENT に浮動小数点ネットワーク モデル、学習済みの重み、およびキャリブレーション データセットを Caffe フォーマットで入力する

と、INT8 の重みを使用した軽量な量子化済みモデルが生成されます。

表 7: DECENT の入力ファイル

No. 名前 説明

1 float.prototxt ResNet-50 の浮動小数点モデル

2 float.caffemodel ResNet-50 用の学習済み重みファイル

3 calibration dataset トレーニング用画像のサブセット (画像数 100 ~ 1000)

$dnndk_pkg/host_x86/models/resnet50 には、decent.sh という名前のスクリプト ファイルがあります (下図)。これを実行す

ると、DECENT ツールが起動し、適切なパラメーターで量子化が実行されます。

図 32: DECENT で量子化を実行するサンプル スクリプト

注記: ResNet-50 の量子化を実行する前に、DECENT で使用するキャリブレーション データセットを準備しておく必要があります。

ImageNet データセットに含まれる 100 ~ 1000 個の画像を http://academictorrents.com/collection/imagenet-2012 または

http://www.image-net.org/download.php からダウンロードし、ResNet-50 prototxt で image_data_param の source および root_folder の設

定を適宜変更します。

このスクリプトは、実行完了までに数分かかることがあります。量子化が完了したら、decent_output ディレクトリに

deploy.prototxt と deploy.caffemodel という名前のファイルが生成されます。これらのファイルを、この次の手順で DNNC コ

ンパイラに入力します。

表 8: DECENT の出力ファイル

No. 名前 説明

1 deploy.prototxt 量子化後のネットワーク記述ファイル

2 deploy.caffemodel 量子化後の Caffe モデル パラメーター ファイル (非標準 Caffe フォーマット)

第 5 章: ネットワーク運用の概要

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 47

UG1327 (v1.2) 2019 年 2 月 19 日

ネットワークのコンパイル

$dnndk_pkg/host_x86/models/resnet50 には、dnnc.sh というスクリプト ファイルもあります (図 33)。これを実行すると、

DNNC ツールが起動し、適切なオプションでモデルのコンパイルが実行されます。

図 33: サンプルの DNNC コンパイル スクリプト

このスクリプトを実行すると、ResNet-50 モデルが 2 つの DPU カーネルにコンパイルされます。これらはいずれも ELF フォーマットのファ

イルで、ResNet-50 用の DPU 命令とパラメーターを含みます。スクリプトを実行すると、DPU でサポートされないレイヤーに関する情報も

表示されます (下図参照)。ResNet-50 ネットワーク モデルをコンパイルすると、次の 4 つのカーネルに変換されます。

• カーネル 0: resnet50_0 (DPU で実行)

• カーネル 1: resnet50_1 (CPU で運用)

• カーネル 2: resnet50_2 (DPU で実行)

• カーネル 3: resnet50_3 (CPU で運用)

第 5 章: ネットワーク運用の概要

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 48

UG1327 (v1.2) 2019 年 2 月 19 日

図 34: DNNC のコンパイル ログ

カーネル resnet50_0 と resnet50_2 は、DPU 上で動作します。DNNC は、各カーネルの ELF オブジェクト ファイルを

output_dir ディレクトリに生成します (dpu_resnet50_0.elf、dpu_resnet50_2.elf)。

残りの 2 つのカーネル (resnet50_1、resnet50_3) は「Average Pooling」および「Softmax」演算用です。これらの演算は DPU でサ

ポートされないため、CPU 上で運用および実行する必要があります。

DNNDK を使用したプログラミング

DPU で実行するディープ ラーニング アプリケーションを開発するには、次の 3 つの手順を実行する必要があります。

• DNNDK API を使用して DPU カーネルを管理する。

o DPU カーネルの作成と破棄。

o DPU タスクの作成。

o 入力および出力テンソルの管理。

• DPU でサポートされないカーネルを CPU に実装する。

• データの読み出し、または結果の計算用のプリプロセスおよびポストプロセス ルーチンを追加する。

第 5 章: ネットワーク運用の概要

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 49

UG1327 (v1.2) 2019 年 2 月 19 日

ZCU102 ボード用の ResNet-50 サンプルは、$dnndk_pkg/ZCU102/samples/resnet50/ ディレクトリにあります。DPU カーネル

およびタスクを管理するコードは、main() 関数内でプログラムします。

int main(void) {

/* DPU Kernels/Tasks for running ResNet-50 */

DPUKernel* kernelConv;

DPUKernel* kernelFC;

DPUTask* taskConv;

DPUTask* taskFC;

/* Attach to DPU driver and prepare for running */

dpuOpen();

/* Create DPU Kernels for CONV & FC Nodes in ResNet-50 */

kernelConv = dpuLoadKernel(KERNEL_CONV);

kernelFC = dpuLoadKernel(KERNEL_FC);

/* Create DPU Tasks for CONV & FC Nodes in ResNet-50 */

taskConv = dpuCreateTask(kernelConv, 0);

taskFC = dpuCreateTask(kernelFC, 0);

/* Run CONV & FC Kernels for ResNet-50 */

runResnet50(taskConv, taskFC);

/* Destroy DPU Tasks & release resources */

dpuDestroyTask(taskConv);

dpuDestroyTask(taskFC);

/* Destroy DPU Kernels & release resources */

dpuDestroyKernel(kernelConv);

dpuDestroyKernel(kernelFC);

/* Detach DPU driver & release resources */

dpuClose();

return 0;

}

第 5 章: ネットワーク運用の概要

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 50

UG1327 (v1.2) 2019 年 2 月 19 日

main() 関数内には、次の処理が含まれます。

- dpuOpen() を呼び出し、DPU デバイスを開きます。

- dpuLoadKernel() を呼び出し、DPU カーネル reset50_0 および reset50_2 をロードします。

- dpuCreateTask() を呼び出し、各 DPU カーネルのタスクを作成します。

- CPU 関数の CPUCalcAvgPool (Average Pooling 用) と CPUCalcSoftmax (Softmax 用) を呼び出します。

- dpuDestroyKernel() および dpuDestroyTask() を呼び出し、DPU カーネルおよびタスクを破棄します。

- dpuClose() を呼び出し、DPU デバイスを閉じます。

メインの画像分類処理は、関数 runResnet50() で実行します。これには、次の処理が含まれます。

- OpenCV 関数の imread() を使用して 1 つの画像をフェッチした後、dpuSetInputImage2() API を呼び出してこの画像

を DPU カーネル resnet50_0 への入力に設定します。

- dpuRunTask() を呼び出し、ResNet-50 ネットワーク モデルで taskConv たたみ込み演算を実行します。

- 上記のたたみ込み演算の出力に対して Average Pooling を実行し、taskFC 演算の入力を出力として設定します。

- dpuRunTask を呼び出し、DPU 上で Fully Connected 演算 taskFC を実行します。

- Fully Connected 演算の出力を入力として使用し、CPU 上で Softmax を実行します。

- 上位 5 つの分類カテゴリと、それぞれの確率を出力します。

Mat image = imread(baseImagePath + imageName);

dpuSetInputImage2(taskConv, CONV_INPUT_NODE, image);

dpuRunTask(taskConv);

CPUCalcAvgPool(taskConv, taskFC);

dpuRunTask(taskFC);

/* Get FC result and convert from INT8 to FP32 format */

dpuGetOutputTensorInHWCFP32(taskFC, FC_OUTPUT_NODE,

FCResult, channel);

CPUCalcSoftmax(FCResult, channel, softmax);

TopK(softmax, channel, 5, kinds);

ハイブリッド実行ファイルのコンパイル

ハイブリッド実行ファイルを生成するには、$dnndk_pkg/samples/resnet50 ディレクトリへ移動して make を実行します。これで、

アプリケーション ソース コードが CPU バイナリ コードにコンパイルされ、DPU カーネル dpu_resnet50_0.elf と

dpu_resnet50_2.elf にリンクされます。

アプリケーションの実行

$dnndk_pkg/samples/resnet50 ディレクトリで ./resnet50 を実行すると、アプリケーションが動作し、出力を確認できます。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 51

UG1327 (v1.2) 2019 年 2 月 19 日

第 6 章: ネットワークの圧縮

DECENT の概要

DECENT (Deep Compression Tool) には、粗粒度プルーニングと学習後量子化の 2 つの機能があります。これらの機能により、必要な

演算回数を減らし、重みを量子化します。次の図に、DECENT の全体的なフローを示します。なお、現在のリリースに含まれるのは量子

化ツールのみです。プロジェクトの評価にプルーニング ツールが必要な場合は、ザイリンクスのサポート チームにお問い合わせくださ

い。

図 35: DECENT のプルーニングおよび量子化フロー

一般に、ニューラル ネットワークの学習では 32 ビット浮動小数点の重みと活性化値を使用します。DECENT の量子化ツールは、推論の

精度を損なわないように 32 ビット浮動小数点の重みと活性化値を 8 ビット整数 (INT8) に変換し、演算の複雑さを軽減します。固定小数

点ネットワーク モデルの方が、浮動小数点モデルよりも必要なメモリ帯域幅が少なく、速度と電力効率が向上します。DECENT は、たた

み込み、プーリング、全結合、バッチ正規化など、ニューラル ネットワークの一般的なレイヤーを数多くサポートしています。

量子化後は、少量の画像を使用して活性化値の分布を解析するキャリブレーションのみを実行すればよく、ネットワークの再学習は不要

です。ニューラル ネットワークのサイズにもよりますが、量子化は数秒から数分で完了します。

DECENT は Caffe 1.0 をベースにしており、実行するには GPU が必要です。現在のリリースでサポートされるのは、Caffe フォーマットの

みです。

注記: DECENT の出力ファイルは、Caffe モデルを拡張したもので、DNNC コンパイラへの入力としてのみ使用できます。

第 6 章: ネットワークの圧縮

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 52

UG1327 (v1.2) 2019 年 2 月 19 日

DECENT の使用方法

次に、DECENT でサポートされるオプションを示します。

表 9: DECENT のオプション一覧

名前 タイプ オプション デフォルト 説明

model 文字列 必須 – 浮動小数点 prototxt ファイル (「float.prototxt」など)。

weights 文字列 必須 – 学習済みの浮動小数点重み (「float.caffemodel」など)。

weights_bit Int32 オプション 8 量子化後の重みおよびバイアスのビット幅。

data_bit Int32 オプション 8 量子化後の活性化値のビット幅。

method Int32 オプション 0

量子化方法。0 はオーバーフローなし、1 は最小差分法

を表します。0 の方が 1 よりも実行時間は短縮できます。

オーバーフローなしを選択した場合、量子化の実行中に

値が飽和しないように注意する必要があります。量子化

結果は、外れ値の影響を大きく受けます。

最小差分法を選択した場合は、値が飽和しても量子化

への影響が少なく、外れ値への耐性があります。通常

は、オーバーフローなしを選択した場合よりも結果の範

囲が狭くなります。

calib_iter Int32 オプション 100 キャリブレーションの最大反復回数。

auto_test ブール オプション FALSE キャリブレーション後にテストを実行するかどうか (テスト

データセットが必要)。

test_iter Int32 オプション 50 テストの最大反復回数。

output_dir 文字列 オプション fix_results 固定小数点結果の出力ディレクトリ。

gpu 文字列 オプション 0 キャリブレーションおよびテストで使用する GPU デバイス

ID。

ignore_layers 文字列 オプション none 量子化の際に無視するレイヤーのリスト。

ignore_layers_file 文字列 オプション none 量子化の際に無視するレイヤーを定義した YAML ファ

イル。「ignore_layers:」で始める必要があります。

作業フロー

ニューラル ネットワーク モデルの準備

DECENT を実行する前に、次に示す浮動小数点フォーマットの Caffe モデルとキャリブレーション データ セットを用意する必要がありま

す。

• Caffe 浮動小数点ネットワーク モデルの prototxt ファイル。

• 学習済み Caffe 浮動小数点ネットワーク モデルの caffemodel ファイル。

• キャリブレーション データ セット。通常は、学習用の画像または実際のアプリケーションで使用する画像のサブセット (100 以

上) をキャリブレーション セットとして使用します。次の図に示すように、実際のキャリブレーション用画像リストと画像フォルダー

のパスに合わせて image_data_param で source および root_folder の設定を変更する必要があります。

第 6 章: ネットワークの圧縮

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 53

UG1327 (v1.2) 2019 年 2 月 19 日

図 36: 量子化に使用する Caffe レイヤーの例

注記: DECENT でサポートされるのは、3 平均値フォーマットのみです。必要に応じて 3 平均値フォーマットに変換してください。

DECENT の実行

次のコマンド ラインを実行すると、固定小数点モデルが生成されます。

$decent quantize -model float.prototxt -weights float.caffemodel [options]

このコマンド ラインで、[options] はオプションのパラメーターを表します。次に、最もよく使用されるオプションを 3 つ挙げます。

• weights_bit: 量子化後の重みおよびバイアスのビット幅 (デフォルト: 8)。

• data_bit: 量子化後の活性化値のビット幅 (デフォルト: 8)。

• method: 量子化方法。「0」はオーバーフローなし、「1」は最小差分法を表します。デフォルトは 0 です。

出力

上記コマンドの実行が正しく完了すると、デフォルトで ./fix_results/ ディレクトリ直下に次の 2 つのファイルが生成されます。これ

らのファイルは、DNNC への入力ファイルとして使用できます。

• 固定小数点モデル ネットワーク (deploy.prototxt)

• 固定小数点重み (deploy.caffemodel)

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 54

UG1327 (v1.2) 2019 年 2 月 19 日

第 7 章: ネットワークのコンパイル

DNNC の概要

次の図に、DNNC (Deep Neural Network Compiler) コンパイラのアーキテクチャを示します。まず、フロントエンド パーサーが Caffe モデ

ルを解析し、入力モデルの中間表現 (IR) を生成します。次に、オプティマイザーが IR に基づいて最適化を実行し、コード ジェネレー

ターが最適化済み IR から DPU 命令へのマッピングを実行します。

図 37: DNNC のコンポーネント

DNNC の使用方法

DNNC (Deep Neural Network Compiler) には、ニューラル ネットワーク モデルのコンパイルを制御するためのパラメーターが必要です。

これらのパラメーターは、2 つのカテゴリに分類されます。次に必須パラメーターの一覧を示し、その次にオプション パラメーターの一覧

を示します。

表 10: DNNC の必須オプション一覧

パラメーター 説明

--prototxt Caffe prototxt ファイルのパス

--caffemodel caffemodel ファイルのパス

--output_dir 出力ディレクトリのパス

--net_name ニューラル ネットワークの名前

--dpu DPU ターゲット (サポートされるオプション: 1024FA、1152FA、4096FA)

--cpu_arch CPU ターゲット (サポートされるオプション: arm32、arm64)

第 7 章: ネットワークのコンパイル

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 55

UG1327 (v1.2) 2019 年 2 月 19 日

表 11: DNNC の任意オプション一覧

パラメーター 説明

--help DNNC のすべてのオプションを表示します。

--version

DNNC のバージョン情報を表示します。DNNC ツールでサポートされる DPU ターゲットのバージョン

も表示されます。

注記: DNNC は、各 DPU ターゲットのバージョンに適したバージョンのものを使用する必要がありま

す。DPU と DNNC のバージョンが適合しているかどうかは、評価ボードでコマンド「dexplorer -w」を実

行し、ホスト マシンでコマンド「dnnc --version」を実行して確認してください。

--save_kernel カーネル記述をファイルに保存するかどうかを指定します。

--abi

DNNC で生成する DPU ELF の ABI バージョンを示します。

0 の場合、DNNC はレガシ ABI バージョンの DPU ELF を生成します。旧バージョンの N2Cube では、

従来のバージョンの DPU ELF しかサポートされません。オプション「--abi=0」を指定すると、新しい

バージョンの DNNC で従来のバージョンと互換性のある DPU ELF を生成できます。

1 の場合、DNNC は最新の ABI バージョンの DPU ELF を生成します。

注記: このオプションを利用できるのは、DNNC v2.03 以降のみです。

--mode

DPU カーネルのコンパイル モード (debug または normal) を指定します。

debug: N2Cube のスケジューリングに基づいてネットワーク モデルのレイヤーが 1 つずつ実行されま

す。デバッグ モードで DPU カーネルをコンパイルした場合、DExplorer を使用してレイヤーごとのデ

バッグまたはパフォーマンス プロファイリングを実行できます。

normal: ネットワーク モデルのすべてのレイヤーが 1 つの DPU 実行単位にパッケージ化されるため、

実行中に割り込みをかけることはできません。デバッグ モードよりも通常モードでコンパイルした方が

DPU カーネルの性能が高いため、プロダクション リリースでは通常モードの使用を推奨します。

--dump

いくつかのタイプの情報をダンプ出力します。複数のタイプを指定する場合は、区切り文字としてカン

マを使用します。

graph: 元のグラフと変換後のグラフを gv フォーマットで出力します。

weights: 各レイヤーの重みおよびバイアス データを出力します。

ir: DNNC の各レイヤーの中間表現 (IR) を出力します。

quant_info: 各レイヤーの量子化情報を出力します。

log: DNNC によって生成されるその他のコンパイル ログを出力します。

all: 上記すべての情報を出力します。

注記: graph 以外のダンプ出力ファイルは、いずれも DNNC によって復号化されます。ネットワークの

コンパイル エラーが発生した場合は、これらのダンプ ファイルを DNNDK サポート チームに送信して

解析を受けてください。

第 7 章: ネットワークのコンパイル

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 56

UG1327 (v1.2) 2019 年 2 月 19 日

ResNet50 のコンパイル

ニューラル ネットワークをコンパイルする際は、DNNC コンパイラの必須オプションを指定する必要があります。参考として、DNNDK リ

リース パッケージには ResNet50 および Inceptoin-v1 をコンパイルするためのスクリプト ファイルが付属しています。DNNC の各種オプ

ションの使用方法は、このファイルを参考にしてください。

コンパイルが正常に完了すると、DNNC は運用に必要な ELF オブジェクトとカーネル情報を生成します。これらのファイルは、パラメー

ター output_dir で指定したフォルダーに生成されます。次の図に、Inception-v1 ネットワークをコンパイルした場合の DNNC の出力

画面を示します。

図 38: DNNC の出力例

DPU でサポートされる演算の数には制限があるため (表 12: DPU でサポートされる演算参照)、DPU でサポートされない演算を含むター

ゲット ニューラル ネットワークは、DNNC によって自動的に複数のカーネルに分割されます。複数のカーネル間のデータ転送および通

信は、N2Cube によって提供される API を使用し、ユーザーが実行する必要があります。これら API を使用すると、カーネルの入力およ

び出力ノードに基づいて入力および出力アドレスを取得できます。

第 7 章: ネットワークのコンパイル

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 57

UG1327 (v1.2) 2019 年 2 月 19 日

DNNC によって生成されるカーネル記述情報は、二部で構成されます。第一部では、カーネルの数とトポロジが記述されます。

• kernel numbers: DNNC によるコンパイルで生成されたカーネルの数。いくつのカーネルが生成されるかは、個々のニューラ

ル ネットワークで使用している演算子が DPU でサポートされるかどうかによって異なります。各カーネルの詳細は、第二部で記

述されます。

• kernel topology: コンパイルが完了すると、カーネル トポロジをカーネル グラフとして記述したファイルが生成されます。DNNC

の現在の作業用ディレクトリに、「kernel_graph」という名前のファイルが標準 DOT (グラフ記述言語) フォーマットで保存されま

す (拡張子.gv)。.gv フォーマットのファイルを JPEG ファイルに変換するには、次のコマンドを実行します。

dot -Tjpg -o kernel_graph.jpg kernel_graph.gv

例として、次に Inception-v1 の場合の JPEG フォーマットのカーネル グラフを示します。カーネル グラフの各ノードにはカーネル ID とそ

のタイプが記述されており、エッジにはカーネル間の関係が 2 要素のタプルとして記述されています。最初のアイテムはソース カーネル

からの出力テンソルを表し、2 番目のアイテムはデスティネーション カーネルへの入力テンソルを表します。タプルは 2 つの要素、すなわ

ちテンソルにバインドする入力/出力ノードの名前、および入力/出力ノードのテンソル インデックスで構成されます。タプルに記述された

ノード名とインデックスを N2Cube の API に入力すると、入力または出力テンソルのアドレスを取得できます。

図 39: Inception-v1 の場合の DPU カーネル グラフ

第 7 章: ネットワークのコンパイル

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 58

UG1327 (v1.2) 2019 年 2 月 19 日

第二部では、各カーネルの詳細が記述されます。

• kernel id: 現在のカーネルの ID。DNNC によって、すべてのカーネルに一意の ID が割り当てられます。

• kernel name: 現在のカーネルの名前。DPU によってサポートされるすべてのカーネルに、対応する ELF オブジェクト ファイル

があります。このオブジェクト ファイルの名前はカーネル名に接頭辞 dpu_ を付けたもので、拡張子は .elf です。たとえば、

カーネル resnet50_0 と resnet50_2 には、それぞれ dpu_resnet50_0.elf と dpu_resnet50_2.elf が対応しま

す。カーネル名はアプリケーション コードで使用され、これを使用して N2Cube はカーネルを正しく識別します。

• type: カーネルのタイプ。DNNC では、3 つのタイプのカーネルがサポートされます。詳細は、表 13: DNNC カーネルのタイプ

を参照してください。

• nodes: 現在のカーネルに含まれるすべてのノード。DPU でサポートされるカーネルの場合、すべての名前を表示する代わりに

「NA」と表示されます。

• input node(s): 現在のカーネルのすべての入力ノード。DPU でサポートされないカーネルの場合、N2Cube の API を使用して

直前のカーネルの出力を出力ノードから取得し、現在のノードの入力ノードに入力する必要があります。

• output node(s): 現在のカーネルのすべての出力ノード。出力ノードのアドレスとサイズは、N2Cube の API を使用して取得でき

ます。

表 12: DPU でサポートされる演算

タイプ 制限

Convolution kernel-w と kernel-h は、1 ~ 8 の値が任意の組み合わせでサポートされます。

ReLU 制限なし

Pooling

Max-pooling がサポートされます。カーネル サイズは 2x2 または 3x3 とする必

要があります。

Average-pooling は、一部のバージョンの DPU IP でサポートされます。サポート

されるかどうかは、「dexplorer -w」を実行して確認してください。

Concat 制限なし

Element-wise 制限なし

InnerProduct 制限なし

注記: DPU コアでサポートされる演算は、FPGA デバイスで利用可能なハードウェア ロジック リソース量によって異なることがあります。

表 13: DNNC カーネルのタイプ

タイプ 説明

DPUKernel DPU 上で動作するカーネル。

CPUKernel CPU 上で動作するカーネル。ユーザーが実装する必要があります。

ParamKernel CPUKernel とほぼ同じですが、DNNC も重みおよびバイアス パラメーターを生

成します。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 59

UG1327 (v1.2) 2019 年 2 月 19 日

第 8 章: DNNDK を使用したプログラミング

プログラミング モデル

DPU プログラミング モデルを理解すると、DPU プラットフォーム上でのディープ ラーニング アプリケーションの開発と運用が容易になり

ます。関連するコンセプトとして、「DPU カーネル」、「DPU タスク」、「DPU ノード」および「DPU テンソル」があります。DPU プログラミング

で特に重要な概念となるのは、DPU カーネルと DPU タスクの 2 つです。

DPU カーネル

DNNC (Deep Neural Network Compiler) によるコンパイルが完了すると、ニューラル ネットワーク モデルは等価な DPU アセンブリ ファイ

ルに変換された後、DNNAS (Deep Neural Network Assembler) によって 1 つの ELF オブジェクト ファイルにアセンブルされます。この

DPU ELF オブジェクト ファイルが、DPU カーネルと見なされます。ランタイム N2Cube から見ると、API dpuLoadKernel() を呼び出し

た後は、これが 1 つの実行単位となります。N2Cube は、DPU カーネル (DPU 命令とネットワーク パラメーターを含む) を DPU 専用のメ

モリ空間にロードし、ハードウェア リソースを割り当てます。次に、dpuCreateTask() を呼び出して各 DPU カーネルを複数の DPU タ

スクにインスタンシエートすると、マルチスレッド プログラミングが可能です。

DPU タスク

DPU タスクは、DPU カーネルの実行エンティティです。各 DPU タスクには専用のプライベート メモリ空間があるため、マルチスレッド ア

プリケーションを使用して複数のタスクを並列に処理し、効率とシステム スループットを高めることができます。

DPU ノード

DPU ノードは、DPU 上で運用されるネットワーク モデルを構成する基本要素と考えられます。各 DPU ノードには、入力、出力、および

いくつかのパラメーターが関連付けられます。すべての DPU ノードには一意の名前があり、DNNDK によってエクスポートされる API は

この名前を使用して DPU ノードの情報にアクセスします。

ノードの種類には、境界入力ノード、境界出力ノード、内部ノードの 3 つがあります。

- 境界入力ノードとは、DPU カーネル トポロジにプリカーサーを持たないノードをいい、通常はカーネル内の最初のノードです。

1 つのカーネルに複数の境界入力ノードが存在することもあります。

- 境界出力ノードとは、DPU カーネル トポロジに後続のノードが存在しないノードをいいます。

- 境界入力ノードまたは境界出力ノードのいずれでもないノードは、内部ノードと見なされます。

DNNC によるコンパイルが完了すると、カーネルおよびその境界入力/出力ノードに関する情報が表示されます。次の図に、Inception-v1

をコンパイルした後の例を示します。DPU カーネル 0 の conv1_7x7_s2 が境界入力ノードで、inception_5b_output が境界出

力ノードです。

第 8 章: DNNDK を使用したプログラミング

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 60

UG1327 (v1.2) 2019 年 2 月 19 日

図 40: DNNC のコンパイル ログの例

dpuGetInputTensor*/dpuSetInputTensor* を使用する場合、nodeName パラメーターで境界入力ノードを指定する必要があ

ります。使用中の有効な境界入力ノード以外の nodeName を指定すると、DNNDK で次のようなエラー メッセージが表示されます。

[DNNDK] Node “inception_5b_output” is not a Boundary Input Node for Kernel inception_v1_0.

[DNNDK] Refer to DNNDK user guide for more info about “Boundary Input Node”.

dpuGetOutputTensor*/dpuSetOutputTensor* を使用する場合も、使用中の有効な境界出力ノード以外の nodeName を指

定すると、次のようなエラー メッセージが表示されます。

[DNNDK] Node “conv1_7x7_s2” is not a Boundary Output Node for Kernel inception_v1_0.

[DNNDK] Please refer to DNNDK user guide for more info about “Boundary Output Node”.

DPU テンソル

DPU テンソルとは多次元データの集合で、実行中に情報を格納する目的で使用します。テンソルのプロパティ (height、width、channel

など) は、DNNDK によってエクスポートされる API を使用して取得できます。

第 8 章: DNNDK を使用したプログラミング

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 61

UG1327 (v1.2) 2019 年 2 月 19 日

プログラミング インターフェイス

DNNDK には、DPU 向けディープ ラーニング アプリケーションの開発を容易にする軽量の C/C++ プログラミング API が複数のライブラ

リにカプセル化された形で用意されています。各 API の詳細は、第 12 章: プログラミング API を参照してください。

DPU のプログラミングでは、CPU と DPU 間のデータ交換が頻繁に発生します。たとえば、CPU でプリプロセスしたデータを DPU に送信

して高速処理し、DPU で生成した結果を CPU に戻してさらに処理を実行するといったケースがあります。このような処理を容易にするた

め、DNNDK にはデータ交換に役立つ API セットが用意されています。次に、いくつかの例を示します。

演算レイヤー/ノードの入力テンソルを設定する API

• dpuSetInputTensor()

• dpuSetInputTensorInCHWInt8()

• dpuSetInputTensorInCHWFP32()

• dpuSetInputTensorInHWCInt8()

• dpuSetInputTensorInHWCFP32()

演算レイヤー/ノードから出力テンソルを取得する API

• dpuGetOutputTensor()

• dpuGetOutputTensorInCHWInt8()

• dpuGetOutputTensorInCHWFP32()

• dpuGetOutputTensorInHWCInt8()

• dpuGetOutputTensorInHWCFP32()

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 62

UG1327 (v1.2) 2019 年 2 月 19 日

第 9 章: ハイブリッド コンパイル

DPU 用に開発されるディープ ラーニング アプリケーションは、ホスト CPU (x86 や Arm など) 上で動作するコードと DPU 上で動作する

コードを含むヘテロジニアス プログラムです。次の図に、DPU アクセラレーションの対象となるディープ ラーニング アプリケーションのコ

ンパイル フローを示します。

図 41: ハイブリッド コンパイル フロー

CPU で動作するコードは C/C++ 言語でプログラムし、これを GCC や LLVM などでコンパイルします。一方、DPU アクセラレーションの

対象となる演算量の多いニューラル ネットワークは、DNNC (Deep Neural Network Compiler) で DPU バイナリ コードにコンパイルしま

す。最後に、CPU と DPU のコードを GCC などでリンクし、1 個のハイブリッド バイナリ実行ファイルを生成します。この実行ファイルに

は、CPU および DPU 上でのヘテロジニアス実行に必要なすべての情報が含まれます。

注記: ハイブリッド実行ファイルには、ストリップ ツールは使用できません。ストリップすると、「DPU Kernel load failed」エラーが発生します。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 63

UG1327 (v1.2) 2019 年 2 月 19 日

第 10 章: 実行

前の章で説明したように、ディープ ラーニング アプリケーションをコンパイルおよびリンクすると、1 個のハイブリッド バイナリ実行ファイル

が生成されます。これは、見かけ上は通常のアプリケーションと変わりません。しかし内部では、標準 Linux ローダーと DPU ローダーが

ハイブリッド ディープ ラーニング アプリケーションをロードおよび実行します。次の図に、DPU ディープ ラーニング アプリケーションの実

行モデルを示します。これは、DPU ローダー、DPU プロファイラー、DPU ランタイム ライブラリ、および DPU ドライバーで構成されます。

図 42: DPU ランタイム

DPU ローダーは ELF フォーマットのハイブリッド実行ファイルからメモリへ DPU カーネルを転送し、DPU コードのメモリを動的に再配置

します。

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 64

UG1327 (v1.2) 2019 年 2 月 19 日

第 11 章: ユーティリティ

DNNDK パッケージには、DPU コンフィギュレーションおよびチェック ツールの DExplorer と、プロファイリング ツールの DSight が付属し

ます。この章では、これらのツールについて説明します。

DExplorer

DExplorer は、ターゲット ボード上で動作するユーティリティです。DPU 動作モードの設定、DNNDK バージョンの確認、DPU ステータス

の確認、および DPU コア シグネチャの確認の機能があります。次の図に、DExplorer の使用に関するヘルプ情報を示します。

図 43: DExplorer の実行オプション

DNNDK バージョンのチェック

「dexplore -v」を実行すると、DNNDK の各コンポーネント (N2Cube、DPU ドライバー、DExplorer および DSight) のバージョン情報が表

示されます。

DPU ステータスのチェック

DExplorer では、DPU ステータス情報も表示できます。これには、N2Cube の実行モード、DPU タイムアウトしきい値、DPU デバッグ レベ

ル、DPU コア ステータス、DPU レジスタ情報、DPU メモリ リソースおよび使用量などの情報が含まれます。図 44 に、DPU ステータスの

表示画面を示します。

第 11 章: ユーティリティ

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 65

UG1327 (v1.2) 2019 年 2 月 19 日

図 44: DExplorer のステータス表示

DPU 実行モードの設定

DNNDK ランタイム N2Cube には 3 種類の DPU 実行モードがあり、DNNDK アプリケーションのデバッグやプロファイリングがサポートさ

れます。

通常モード

通常モードではオーバーヘッドが発生しないため、DPU アプリケーションを最大の性能で実行できます。

プロファイル モード

このモードでは、DPU のプロファイリング スイッチが有効になります。プロファイル モードでディープ ラーニング アプリケーションを実行

すると、N2Cube はニューラル ネットワーク実行時にレイヤーごとの性能データをコンソールに出力します。これと同時に、

dpu_trace_[PID].prof という名前のプロファイルが、カレント ディレクトリに生成されます。このファイルは、DSight ツールで使用できます。

次の図に、このモードの画面の例を示します。

第 11 章: ユーティリティ

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 66

UG1327 (v1.2) 2019 年 2 月 19 日

図 45: N2Cube プロファイル モード

デバッグ モード

このモードでは、実行中に各 DPU 演算ノードの生データ (バイナリ形式の DPU 命令コード、ネットワーク パラメーター、DPU 入力テンソ

ルおよび出力テンソル) がダンプ出力されます。これにより、デバッグ時に DPU アプリケーションの問題を簡単に特定できます。

注記: プロファイル モードとデバッグ モードは、ニューラル ネットワーク モデルを DNNC (Deep Neural Network Compiler) でデバッグ

モードの DPU ELF オブジェクトにコンパイルした場合のみ利用できます。

DPU シグネチャ

ザイリンクスの各種 FPGA デバイスでさまざまなディープ ラーニング アクセラレーションの要件を満たすために、新しい DPU コアが導入

されています。たとえば、DPU アーキテクチャとして B1024F、B1152F、B1600F、B2304F、および B4096F を利用できます。ディープ

ラーニング アルゴリズムは急速に改良が進んでいるため、これらをサポートするために、各 DPU アーキテクチャはさまざまなバージョン

の DPU 命令セット (DPU ターゲット バージョンと呼びます) を実装しています。

DPU シグネチャとは、特定の DPU アーキテクチャ バージョンの仕様情報を指し、これにはターゲット バージョン、動作周波数、DPU コ

ア数、ハード アクセラレーション モジュール (Softmax など) といった情報が含まれます。-w オプションを指定すると、DPU シグネチャを

確認できます。図 46 に、dexplorer -w を実行した場合の画面の例を示します。

第 11 章: ユーティリティ

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 67

UG1327 (v1.2) 2019 年 2 月 19 日

図 46: DPU シグネチャの表示画面

DSight

DSight は DNNDK のパフォーマンス プロファイリング ツールです。ニューラル ネットワーク モデルのプロファイリング結果を視覚的に解

析できます。次の図に、使用方法を示します。

図 47: DSight のヘルプ情報

DSight は、N2Cube のトレーサーによって生成されたログ ファイルを処理して html ファイルを生成します。このファイルを使用して、

ニューラル ネットワーク モデルを視覚的に解析できます。プロファイラーの使用手順は、次のとおりです。

1. コマンド dexplorer -m profile を実行し、N2Cube をプロファイル モードに設定します。

2. ディープ ラーニング アプリケーションを実行します。実行が完了すると、dpu_trace_[PID].prof という名前のプロファイル ファ

イルが生成されます (PID はディープ ラーニング アプリケーションのプロセス ID)。

3. コマンド dsight -p dpu_trace_[PID].prof を実行します。dpu_trace_[PID].html という名前の html ファイルが生

成されます。

4. 生成された html ファイルをウェブ ブラウザーで開きます。

第 11 章: ユーティリティ

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 68

UG1327 (v1.2) 2019 年 2 月 19 日

図 48: DSight のプロファイリング チャート

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 69

UG1327 (v1.2) 2019 年 2 月 19 日

第 12 章: プログラミング API

DNNDK には、ディープ ラーニング アプリケーション開発に向けた軽量の C/C++ プログラミング API セットが用意されています。これ

は、DPU ランタイム N2Cube ライブラリ (libn2cube) と DPU ユーティリティ ライブラリ (libdputils) の 2 つのダイナミック ライブラリで

構成されます。エクスポートされた API は、それぞれヘッダー ファイル n2cube.h と dputils.h に含まれます。この章では、これらの

API について説明します。

注記:

• DNNDK アプリケーションにインクルードするヘッダー ファイルは、dnndk.h のみでかまいません。この中に、デフォルトで

n2cube.h と dputils.h の両方が含まれます。

• この後のセクションでは、各 API の詳細について説明します。「対応バージョン」の欄には、その API が初めてサポートされた

DNNDK のバージョンを示しています。

ライブラリ libn2cube

概要

ライブラリ libn2cube は、DNNDK のコア ライブラリです。DPU ローダーの機能を実装しており、DPU タスクのスケジューリング、モニタリン

グ、プロファイリング、およびリソース管理のための DPU ドライバーを呼び出すシステム コールをカプセル化しています。次の表に、エク

スポートされた各 API の概要をまとめます。

名前 libn2cube.so

説明 DPU ランタイム ライブラリ

ルーチン dpuOpen() - 使用する DPU デバイスを開いて初期化します。

dpuClose() - 使用した DPU デバイスを閉じてファイナライズ処理をします。

dpuLoadKernel() - DPU カーネルをロードし、コード/重み/バイアス セグメントに DPU メモリ

空間を割り当てます。

dpuDestroyKernel() - DPU カーネルを破棄し、関連リソースを解放します。

dpuCreateTask() - 1 つの DPU カーネルから DPU タスクをインスタンシエートし、作業用の

プライベート メモリ バッファーを割り当て、実行コンテキストを準備します。

dpuRunTask() - DPU タスクの実行を開始します。

dpuDestroyTask() - DPU タスクを破棄し、作業用のメモリ バッファーを解放し、関連する実

行コンテキストを破棄します。

dpuEnableTaskDump() - デバッグ用に、DPU タスク実行中のダンプ機能を有効にします。

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 70

UG1327 (v1.2) 2019 年 2 月 19 日

dpuEnableTaskProfile() - 性能メトリクス収集用に、DPU タスク実行中のプロファイリング機

能を有効にします。

dpuGetTaskProfile() - DPU タスクの実行時間を取得します。

dpuGetNodeProfile() - DPU ノードの実行時間を取得します。

dpuGetInputTensorCnt() - 1 つの DPU タスクの入力テンソルの総数を取得します。

dpuGetInputTensor() - 1 つの DPU タスクの入力テンソルを取得します。

dpuGetInputTensorAddress() - 1 つの DPU タスクの入力テンソルの開始アドレスを取得します。

dpuGetInputTensorSize() - 1 つの DPU タスクの入力テンソルのサイズ (単位: バイト) を取

得します。

dpuGetInputTensorScale() - 1 つの DPU タスクの入力テンソルのスケール値を取得します。

dpuGetInputTensorHeight() - 1 つの DPU タスクの入力テンソルの次元の高さ (height) を取得

します。

dpuGetInputTensorWidth() - 1 つの DPU タスクの入力テンソルの次元の幅 (width) を取得し

ます。

dpuGetInputTensorChannel() - 1 つの DPU タスクの入力テンソルの次元のチャネル

(channel) を取得します。

dpuGetOutputTensorCnt() - 1 つの DPU タスクの出力テンソルの総数を取得します。

dpuGetOutputTensor() - 1 つの DPU タスクの出力テンソルを取得します。

dpuGetOutputTensorAddress() - 1 つの DPU タスクの出力テンソルの開始アドレスを取得

します。

dpuGetOutputTensorSize() - 1 つの DPU タスクの出力テンソルのサイズ (単位: バイト) を

取得します。

dpuGetOutputTensorScale() - 1 つの DPU タスクの出力テンソルのスケール値を取得します。

dpuGetOutputTensorHeight() - 1 つの DPU タスクの出力テンソルの次元の高さ (height) を取

得します。

dpuGetOutputTensorWidth() - 1 つの DPU タスクの出力テンソルの次元の幅 (width) を取得します。

dpuGetOutputTensorChannel() - 1 つの DPU タスクの出力テンソルの次元のチャネル

(channel) を取得します。

dpuGetTensorSize() - 1 つの DPU テンソルのサイズを取得します。

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 71

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetTensorAddress() - 1 つの DPU テンソルの開始アドレスを取得します。

dpuGetTensorScale() - 1 つの DPU テンソルのスケール値を取得します。

dpuGetTensorHeight() - 1 つの DPU テンソルの次元の高さ (height) を取得します。

dpuGetTensorWidth() - 1 つの DPU テンソルの次元の幅 (width) を取得します。

dpuGetTensorChannel() - 1 つの DPU テンソルの次元のチャネル (channel) を取得します。

dpuSetIntputTensorInCHWInt8() - Caffe 順 (channel/height/width) に格納された INT8

型データを DPU タスクの入力テンソルに設定します。

dpuSetIntputTensorInCHWFP32() - Caffe 順 (channel/height/width) に格納された FP32

型データを DPU タスクの入力テンソルに設定します。

dpuSetIntputTensorInHWCInt8() - DPU 順 (height/width/channel) に格納された INT8 型

データを DPU タスクの入力テンソルに設定します。

dpuSetIntputTensorInHWCFP32() - DPU 順 (height/width/channel) に格納された FP32

型データを DPU タスクの入力テンソルに設定します。

dpuGetOutputTensorInCHWInt8() - DPU タスクの出力テンソルを取得し、Caffe 順

(channel/height/width) に INT8 型データを格納します。

dpuGetOutputTensorInCHWFP32() - DPU タスクの出力テンソルを取得し、Caffe 順

(channel/height/width) に FP32 型データを格納します。

dpuGetOutputTensorInHWCInt8() - DPU タスクの出力テンソルを取得し、DPU 順

(height/width/channel) に INT8 型データを格納します。

dpuGetOutputTensorInHWCFP32() - DPU タスクの出力テンソルを取得し、DPU 順

(height/width/channel) に FP32 型データを格納します。

dpuRunSoftmax () - 入力エレメントに対して Softmax 演算を実行し、その結果を出力メモリ

バッファーに格納します。

dpuSetExceptionMode() - DNNDK ランタイム N2Cube の例外処理モードを設定します。

dpuGetExceptionMode() - N2Cube の例外処理モードを取得します。

dpuGetExceptionMessage() - N2Cube API から返されるエラー コード (常に負の値) からエ

ラー メッセージを取得します。

インクルード

ファイル

n2cube.h

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 72

UG1327 (v1.2) 2019 年 2 月 19 日

API

ここでは、ライブラリ libn2cube に含まれる各 API のプロトタイプとパラメーターについて説明します。

dpuOpen()

名前 dpuOpen()

書式 int dpuOpen()

引数 なし

説明 DPU リソースを使用する前に、DPU デバイス ファイル「/dev/dpu」を接続して開きます。

戻り値 正常に完了すると 0、エラーが発生した場合は負の値が返されます。エラーがある場合

は、「Fail to open DPU device」というエラー メッセージが表示されます。

関連 API dpuClose()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuClose()

名前 dpuClose()

書式 int dpuClose()

引数 なし

説明 DPU リソースを使用した後に、DPU デバイス ファイル「/dev/dpu」の接続を解除して閉じます。

戻り値 正常に完了すると 0、エラーが発生した場合は負のエラー ID が返されます。エラーがある

場合は、「Fail to close DPU device」というエラー メッセージが表示されます。

関連 API dpuOpen()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 73

UG1327 (v1.2) 2019 年 2 月 19 日

dpuLoadKernel()

名前 dpuLoadKernel()

書式 DPUKernel *dpuLoadKernel

(

const char *netName

)

引数 netName ニューラル ネットワーク名へのポインター。DNNC (Deep Neural Network

Compiler) によるニューラル ネットワークのコンパイル時に生成された名前

を指定します。通常、1 つの DL アプリケーションのハイブリッド CPU+DPU

バイナリ実行ファイルには、多くの DPU カーネルが存在します。これらの

DPU カーネルは、一意の名前で識別されます。

説明 指定したニューラル ネットワークの DPU カーネルをハイブリッド CPU+DPU バイナリ実行

ファイルから DPU のメモリ空間へロードします。これには、カーネルの DPU 命令、重み、

およびバイアスが含まれます。

戻り値 正常に完了すると、ロードした DPU カーネルへのポインターが返され、それ以外の場合

はエラーが報告されます。

関連 API dpuDestroyKernel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuDestroyKernel()

名前 dpuDestroyKernel()

書式 int dpuDestroyKernel

(

DPUKernel *kernel

)

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 74

UG1327 (v1.2) 2019 年 2 月 19 日

引数 kernel 破棄する DPU カーネルへのポインター。

説明 DPU カーネルを破棄し、関連リソースを解放します。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuLoadKernel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuCreateTask()

名前 dpuCreateTask()

書式 int dpuCreateTask

(

DPUKernel *kernel,

Int mode

);

引数 kernel DPU カーネルへのポインター。

モード DPU タスクの実行モード。モードには次の 3 つがあります。

MODE_NORMAL: デフォルトのモード (モード値 0 と同じ) です。

MODE_PROF: DPU タスクを実行中に、レイヤーごとのプロファイリング情

報を出力します。パフォーマンス解析が必要な場合に使用します。

MODE_DUMP: DPU タスクの CODE/BIAS/WEIGHT/INPUT/OUTPUT

に関するレイヤーごとの生データをダンプ出力します。

ファイル名のフォーマットは、次のとおりです (「netName」はニューラル ネッ

トワーク名、「layerName」はレイヤー (またはノード) のインデックス ID)。

CODE: netName_layerName_code.txt

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 75

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuCreateTask()

WEIGHT: netName_layerName_w.txt

BIAS: netName_layerName_b.txt

INPUT: netName_layerName_i.txt

OUTPUT: netName_layerName_o.txt

注記: プロファイリングおよびダンプ機能を利用できるのは、DNNC でデ

バッグ モードとして生成された DPU カーネルのみです。

説明 DPU カーネルから DPU タスクをインスタンシエートし、対応する DPU メモリ バッファーを

割り当てます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuDestroyTask()

名前 dpuDestroyTask()

書式 int dpuDestroyTask

(

DPUTask *task

)

引数 task 破棄する DPU タスクへのポインター。

説明 DPU タスクを破棄し、関連リソースを解放します。

戻り値 正常に完了すると 0 が返され、それ以外の場合は負の値が返されます。

関連 API dpuCreateTask()

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 76

UG1327 (v1.2) 2019 年 2 月 19 日

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuRunTask()

名前 dpuRunTask ()

書式 int dpuRunTask

(

DPUTask *task

);

引数 task DPU タスクへのポインター。

説明 DPU タスクの実行を開始します。

戻り値 正常に完了すると 0 が返され、それ以外の場合は負の値が返されます。

関連 API

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuEnableTaskProfile()

名前 dpuEnableTaskProfile()

書式 int dpuEnableTaskProfile

(

DPUTask *task

);

引数 task DPU タスクへのポインター。

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 77

UG1327 (v1.2) 2019 年 2 月 19 日

説明 DPU タスクをプロファイル モードに設定します。プロファイリング機能を利用できるのは、

DNNC でデバッグ モードとして生成された DPU カーネルのみです。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuCreateTask()

dpuEnableTaskDump()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuEnableTaskDump()

名前 dpuEnableTaskDump()

書式 int dpuEnableTaskDump

(

DPUTask *task

);

引数 task DPU タスクへのポインター。

説明 DPU タスクをデバッグ モードに設定します。ダンプ機能を利用できるのは、DNNC でデ

バッグ モードとして生成された DPU カーネルのみです。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuCreateTask()

dpuEnableTaskProfile()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 78

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetTaskProfile()

名前 dpuGetTaskProfile()

書式 int dpuGetTaskProfile

(

DPUTask *task

);

引数 task DPU タスクへのポインター。

説明 DPU タスクの実行完了後に、タスクの実行時間 (単位: μs) を取得します。

戻り値 正常に完了すると 0 が返され、それ以外の場合は負の値が返されます。

関連 API dpuGetNodeProfile()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuGetNodeProfile()

名前 dpuGetNodeProfile()

書式 int dpuGetNodeProfile

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

説明 DPU タスクの実行完了後に、DPU ノードの実行時間 (単位: μs) を取得します。

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 79

UG1327 (v1.2) 2019 年 2 月 19 日

戻り値 正常に完了すると 0 が返され、それ以外の場合は負の値が返されます。この機能を利用

できるのは、DNNC でデバッグ モードとして生成された DPU カーネルのみです。

関連 API dpuGetTaskProfile()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuGetInputTensorCnt()

名前 dpuGetInputTensorCnt()

書式 Int dpuGetInputTensorCnt

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 1 つの DPU タスクの入力テンソルの総数を取得します。

戻り値 指定したノードの入力テンソルの総数。

関連 API dpuGetOutputTensorCnt()

インクルード

ファイル

n2cube.h

対応バージョン V2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 80

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensor()

名前 dpuGetInputTensor()

書式 DPUTensor*dpuGetInputTensor

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルを取得します。

戻り値 正常に完了すると、タスクの入力テンソルへのポインターが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensor()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 81

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensor()

書式 DPUTensor*dpuGetInputTensor

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルを取得します。

戻り値 正常に完了すると、タスクの入力テンソルへのポインターが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensor()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 82

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensorAddress()

名前 dpuGetInputTensorAddress()

書式 int8_t* dpuGetInputTensorAddress

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルの開始アドレスを取得します。

戻り値 正常に完了すると、タスクの入力テンソルの開始アドレスが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensorAddress()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 83

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensorAddress()

書式 int8_t* dpuGetInputTensorAddress

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルの開始アドレスを取得します。

戻り値 正常に完了すると、タスクの入力テンソルの開始アドレスが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensorAddress()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 84

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensorSize()

名前 dpuGetInputTensorSize()

書式 int dpuGetInputTensorSize

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルのサイズ (単位: バイト) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルのサイズが返され、それ以外の場合はエラーが

報告されます。

関連 API dpuGetOutputTensorSize()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 85

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensorSize()

書式 int dpuGetInputTensorSize

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルのサイズ (単位: バイト) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルのサイズが返され、それ以外の場合はエラーが

報告されます。

関連 API dpuGetOutputTensorSize()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 86

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensorScale()

名前 dpuGetInputTensorScale()

書式 float dpuGetInputTensorScale

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルのスケール値を取得します。各 DPU 入力テンソルには、デー

タ型を INT8 と FP32 で変換する際の量子化情報を示すスケール値が 1 つあります。

戻り値 正常に完了すると、タスクの入力テンソルのスケール値が返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensorScale()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 87

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensorScale()

書式 float dpuGetInputTensorScale

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルのスケール値を取得します。各 DPU 入力テンソルには、デー

タ型を INT8 と FP32 で変換する際の量子化情報を示すスケール値が 1 つあります。

戻り値 正常に完了すると、タスクの入力テンソルのスケール値が返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensorScale()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 88

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensorHeight()

名前 dpuGetInputTensorHeight()

書式 int dpuGetInputTensorHeight

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルの次元の高さ (height) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルの次元の高さ (height) が返され、それ以外の場

合はエラーが報告されます。

関連 API dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 89

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensorHeight()

書式 int dpuGetInputTensorHeight

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルの次元の高さ (height) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルの次元の高さ (height) が返され、それ以外の場

合はエラーが報告されます。

関連 API dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 90

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensorWidth()

名前 dpuGetInputTensorWidth()

書式 int dpuGetInputTensorWidth

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルの次元の幅 (width) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルの次元の幅 (width) が返され、それ以外の場合

はエラーが報告されます。

関連 API dpuGetInputTensorHeight()

dpuGetInputTensorChannel()

dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 91

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensorWidth()

書式 int dpuGetInputTensorWidth

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルの次元の幅 (width) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルの次元の幅 (width) が返され、それ以外の場合

はエラーが報告されます。

関連 API dpuGetInputTensorHeight()

dpuGetInputTensorChannel()

dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 92

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetInputTensorChannel()

名前 dpuGetInputTensorChannel()

書式 int dpuGetInputTensorChannel

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの入力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの入力テンソルの次元のチャネル (channel) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルの次元のチャネル (channel) が返され、それ以外

の場合はエラーが報告されます。

関連 API dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 93

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetInputTensorChannel()

書式 int dpuGetInputTensorChannel

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの入力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの入力テンソルの次元のチャネル (channel) を取得します。

戻り値 正常に完了すると、タスクの入力テンソルの次元のチャネル (channel) が返され、それ以外

の場合はエラーが報告されます。

関連 API dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 94

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorCnt()

名前 dpuGetOutputTensorCnt()

書式 Int dpuGetOutputTensorCnt

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルの総数を取得します。

戻り値 DPU タスクの出力テンソルの総数。

関連 API dpuGetInputTensorCnt()

インクルード

ファイル

n2cube.h

対応バージョン V2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 95

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensor()

名前 dpuGetOutputTensor()

書式 DPUTensor*dpuGetOutputTensor

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルを取得します。

戻り値 正常に完了すると、タスクの出力テンソルへのポインターが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetInputTensor()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 96

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensor()

書式 DPUTensor*dpuGetOutputTensor

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルを取得します。

戻り値 正常に完了すると、タスクの出力テンソルへのポインターが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetInputTensor()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 97

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorAddress()

名前 dpuGetOutputTensorAddress()

書式 int8_t* dpuGetOutputTensorAddress

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルの開始アドレスを取得します。

戻り値 正常に完了すると、タスクの出力テンソルの開始アドレスが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetInputTensorAddress()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 98

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensorAddress()

書式 int8_t* dpuGetOutputTensorAddress

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルの開始アドレスを取得します。

戻り値 正常に完了すると、タスクの出力テンソルの開始アドレスが返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetInputTensorAddress()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 99

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorSize()

名前 dpuGetOutputTensorSize()

書式 int dpuGetOutputTensorSize

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルのサイズ (単位: バイト) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルのサイズが返され、それ以外の場合はエラーが

報告されます。

関連 API dpuGetInputTensorSize()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 100

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensorSize()

書式 int dpuGetOutputTensorSize

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルのサイズ (単位: バイト) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルのサイズが返され、それ以外の場合はエラーが

報告されます。

関連 API dpuGetInputTensorSize()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 101

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorScale()

名前 dpuGetOutputTensorScale()

書式 float dpuGetOutputTensorScale

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルのスケール値を取得します。各 DPU 出力テンソルには、デー

タ型を INT8 と FP32 で変換する際の量子化情報を示すスケール値が 1 つあります。

戻り値 正常に完了すると、タスクの出力テンソルのスケール値が返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensorScale()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 102

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensorScale()

書式 float dpuGetOutputTensorScale

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルのスケール値を取得します。各 DPU 出力テンソルには、デー

タ型を INT8 と FP32 で変換する際の量子化情報を示すスケール値が 1 つあります。

戻り値 正常に完了すると、タスクの出力テンソルのスケール値が返され、それ以外の場合はエ

ラーが報告されます。

関連 API dpuGetOutputTensorScale()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 103

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorHeight()

名前 dpuGetOutputTensorHeight()

書式 int dpuGetOutputTensorHeight

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルの次元の高さ (height) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルの次元の高さ (height) が返され、それ以外の場

合はエラーが報告されます。

関連 API dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 104

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensorHeight()

書式 int dpuGetOutputTensorHeight

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルの次元の高さ (height) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルの次元の高さ (height) が返され、それ以外の場

合はエラーが報告されます。

関連 API dpuGetOutputTensorWidth()

dpuGetOutputTensorChannel()

dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 105

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorWidth()

名前 dpuGetOutputTensorWidth()

書式 int dpuGetOutputTensorWidth

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルの次元の幅 (width) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルの次元の幅 (width) が返され、それ以外の場合

はエラーが報告されます。

関連 API dpuGetOutputTensorHeight()

dpuGetOutputTensorChannel()

dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 106

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensorWidth()

書式 int dpuGetOutputTensorWidth

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルの次元の幅 (width) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルの次元の幅 (width) が返され、それ以外の場合

はエラーが報告されます。

関連 API dpuGetOutputTensorHeight()

dpuGetOutputTensorChannel()

dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 107

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorChannel()

名前 dpuGetOutputTensorChannel()

書式 int dpuGetOutputTensorChannel

(

DPUTask *task,

const char*nodeName,

int idx = 0

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

idx ノードの出力テンソルのいずれか 1 つをインデックスで指定します (デフォ

ルト値は 0)。

説明 DPU タスクの出力テンソルの次元のチャネル (channel) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルの次元のチャネル (channel) が返され、それ以外

の場合はエラーが報告されます。

関連 API dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン V2.06

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 108

UG1327 (v1.2) 2019 年 2 月 19 日

名前 dpuGetOutputTensorChannel()

書式 int dpuGetOutputTensorChannel

(

DPUTask *task,

const char*nodeName

);

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名前

は、DNNC によるニューラル ネットワークのコンパイル時に生成された名

前を指定します。無効なノード名を指定すると、エラー メッセージが報告さ

れます。

説明 DPU タスクの出力テンソルの次元のチャネル (channel) を取得します。

戻り値 正常に完了すると、タスクの出力テンソルの次元のチャネル (channel) が返され、それ以外

の場合はエラーが報告されます。

関連 API dpuGetOutputTensorHeight()

dpuGetOutputTensorWidth()

dpuGetInputTensorHeight()

dpuGetInputTensorWidth()

dpuGetInputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 109

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetTensorSize()

名前 dpuGetTensorSize()

書式 int dpuGetTensorSize

(

DPUTensor* tensor

);

引数 tensor DPU テンソルへのポインター。

説明 1 個の DPU テンソルのサイズ (単位: バイト) を取得します。

戻り値 正常に完了すると、テンソルのサイズが返され、それ以外の場合はエラーが報告されま

す。

関連 API dpuGetInputTensorSize()

dpuGetOutputTensorSize()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuGetTensorScale()

名前 dpuGetTensorScale()

書式 float dpuGetTensorScale

(

DPUTensor* tensor

);

引数 tensor DPU テンソルへのポインター。

説明 1 個の DPU テンソルのスケール値を取得します。

戻り値 正常に完了すると、テンソルのスケール値が返され、それ以外の場合はエラーが報告され

ます。

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 110

UG1327 (v1.2) 2019 年 2 月 19 日

関連 API dpuGetInputTensorScale()

dpuGetOutputTensorScale()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuGetTensorHeight()

名前 dpuGetTensorHeight()

書式 float dpuGetTensorHeight

(

DPUTensor* tensor

);

引数 tensor DPU テンソルへのポインター。

説明 1 個の DPU テンソルの次元の高さ (height) を取得します。

戻り値 正常に完了すると、テンソルの次元の高さ (height) が返され、それ以外の場合はエラーが

報告されます。

関連 API dpuGetInputTensorHeight()

dpuGetOutputTensorHeight()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 111

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetTensorWidth()

名前 dpuGetTensorWidth()

書式 float dpuGetTensorWidth

(

DPUTensor* tensor

);

引数 tensor DPU テンソルへのポインター。

説明 1 個の DPU テンソルの次元の幅 (width) を取得します。

戻り値 正常に完了すると、テンソルの次元の幅 (width) が返され、それ以外の場合はエラーが報

告されます。

関連 API dpuGetInputTensorWidth()

dpuGetOutputTensorWidth()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuGetTensorChannel()

名前 dpuGetTensorChannel()

書式 float dpuGetTensorChannel

(

DPUTensor* tensor

);

引数 tensor DPU テンソルへのポインター。

説明 1 個の DPU テンソルの次元のチャネル (channel) を取得します。

戻り値 正常に完了すると、テンソルの次元のチャネル (channel) が返され、それ以外の場合はエ

ラーが報告されます。

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 112

UG1327 (v1.2) 2019 年 2 月 19 日

関連 API dpuGetInputTensorChannel()

dpuGetOutputTensorChannel()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuSetIntputTensorInCHWInt8()

名前 dpuSetIntputTensorInCHWInt8()

書式 int dpuSetIntputTensorInCHWInt8

(

DPUTask *task,

const char*nodeName,

int8_t *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 入力データの開始アドレスへのポインター。

size 設定する入力データのサイズ (単位: バイト)。

説明 CPU メモリ ブロックにあるデータを DPU タスクの入力テンソルに設定します。データ型は

INT8 で、格納順は Caffe Blob (channel/height/weight) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetIntputTensorInCHWFP32()

dpuSetIntputTensorInHWCInt8()

dpuSetIntputTensorInHWCFP32()

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 113

UG1327 (v1.2) 2019 年 2 月 19 日

インクルード

ファイル

n2cube.h

対応バージョン v1.07

dpuSetIntputTensorInCHWFP32()

名前 dpuSetIntputTensorInCHWFP32()

書式 int dpuSetIntputTensorInCHWFP32

(

DPUTask *task,

const char*nodeName,

float *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 入力データの開始アドレスへのポインター。

size 設定する入力データのサイズ (単位: バイト)。

説明 CPU メモリ ブロックにあるデータを DPU タスクの入力テンソルに設定します。データ型は

32 ビット浮動小数点で、格納順は Caffe Blob (channel/height/weight) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetIntputTensorInCHWInt8()

dpuSetIntputTensorInHWCInt8()

dpuSetIntputTensorInHWCFP32()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 114

UG1327 (v1.2) 2019 年 2 月 19 日

dpuSetIntputTensorInHWCInt8()

名前 dpuSetIntputTensorInHWCInt8()

書式 int dpuSetIntputTensorInHWCInt8

(

DPUTask *task,

const char*nodeName,

int8_t *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 入力データの開始アドレスへのポインター。

size 設定する入力データのサイズ (単位: バイト)。

説明 CPU メモリ ブロックにあるデータを DPU タスクの入力テンソルに設定します。データ型は

INT8 で、格納順は DPU テンソル (height/weight/channel) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetIntputTensorInCHWInt8()

dpuSetIntputTensorInCHWFP32()

dpuSetIntputTensorInHWCFP32()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 115

UG1327 (v1.2) 2019 年 2 月 19 日

dpuSetIntputTensorInHWCFP32()

名前 dpuSetIntputTensorInHWCFP32()

書式 int dpuSetIntputTensorInHWCFP32

(

DPUTask *task,

const char*nodeName,

float *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 入力データの開始アドレスへのポインター。

size 設定する入力データのサイズ (単位: バイト)。

説明 CPU メモリ ブロックにあるデータを DPU タスクの入力テンソルに設定します。データ型は

32 ビット浮動小数点で、格納順は DPU テンソル (height/weight/channel) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetIntputTensorInCHWInt8()

dpuSetIntputTensorInCHWFP32()

dpuSetIntputTensorInHWCInt8()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 116

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorInCHWInt8()

名前 dpuGetOutputTensorInCHWInt8()

書式 int dpuGetOutputTensorInCHWInt8

(

DPUTask *task,

const char*nodeName,

int8_t *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 出力テンソルのデータを格納する CPU メモリ ブロックの開始アドレス。

size 格納する出力データのサイズ (単位: バイト)。

説明 DPU タスクの出力テンソルを取得し、データを CPU メモリ ブロックに格納します。データ

型は INT8 で、格納順は Caffe Blob (channel/height/weight) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuGetOutputTensorInCHWFP32()

dpuGetOutputTensorInHWCInt8()

dpuGetOutputTensorInHWCFP32()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 117

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorInCHWFP32()

名前 dpuGetOutputTensorInCHWFP32()

書式 int dpuGetOutputTensorInCHWFP32

(

DPUTask *task,

const char*nodeName,

float *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 出力テンソルのデータを格納する CPU メモリ ブロックの開始アドレス。

size 格納する出力データのサイズ (単位: バイト)。

説明 DPU タスクの出力テンソルを取得し、データを CPU メモリ ブロックに格納します。データ

型は 32 ビット浮動小数点で、格納順は Caffe Blob (channel/height/weight) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuGetOutputTensorInCHWInt8()

dpuGetOutputTensorInHWCInt8(),

dpuGetOutputTensorInHWCFP32()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 118

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorInHWCInt8()

名前 dpuGetOutputTensorInHWCInt8()

書式 int dpuGetOutputTensorInHWCInt8

(

DPUTask *task,

const char*nodeName,

int8_t *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 出力テンソルのデータを格納する CPU メモリ ブロックの開始アドレス。

size 格納する出力データのサイズ (単位: バイト)。

説明 DPU タスクの出力テンソルを取得し、データを CPU メモリ ブロックに格納します。データ

型は INT8 で、格納順は DPU テンソル (height/weight/channel) に準じます。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuGetOutputTensorInCHWInt8()

dpuGetOutputTensorInCHWFP32()

dpuGetOutputTensorInHWCFP32()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 119

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetOutputTensorInHWCFP32()

名前 dpuGetOutputTensorInHWCFP32()

書式 int dpuGetOutputTensorInHWCFP32

(

DPUTask *task,

const char*nodeName,

float *data,

int size

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。

data 出力テンソルのデータを格納する CPU メモリ ブロックの開始アドレス。

size 格納する出力データのサイズ (単位: バイト)。

説明 DPU タスクの出力テンソルを取得し、データを CPU メモリ ブロックに格納します。データ

型は 32 ビット浮動小数点で、格納順は DPU テンソル (height/weight/channel) に準じま

す。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuGetOutputTensorInCHWInt8()

dpuGetOutputTensorInCHWFP32()

dpuGetOutputTensorInHWCInt8()

インクルード

ファイル

n2cube.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 120

UG1327 (v1.2) 2019 年 2 月 19 日

dpuRunSoftmax()

名前 dpuRunSoftmax ()

書式 int dpuRunSoftmax

(

int8_t *input,

float *output,

int numClasses,

int batchSize,

float scale

)

引数 input Softmax 入力エレメント (int8_t 型) を格納するポインター。

output Softmax 実行結果 (浮動小数点型) を格納するポインター。メモリ空間の

割り当てと管理は、呼び出し元の関数で実行する必要があります。

numClasses Softmax 演算を実行するクラスの数。

batchSize Softmax 演算のバッチ サイズ。このパラメーターは、入力エレメント数を

numClasses で割った値を指定する必要があります。

scale Softmax 演算前に入力エレメントに適用するスケール値。通常、このパラ

メーターは DNNDK API dpuGetRensorScale() を使用して取得できます。

説明 入力エレメントに対して Softmax 演算を実行し、その結果を出力メモリ バッファーに格納し

ます。ハードウェア Softmax モジュールを利用可能な場合、この API は DPU コアをアクセ

ラレータとして使用します。DPU シグネチャ情報を表示するには、「dexplorer -w」を実行し

てください。

戻り値 0

関連 API なし

インクルード

ファイル

n2cube.h

対応バージョン V2.08

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 121

UG1327 (v1.2) 2019 年 2 月 19 日

dpuSetExceptionMode()

名前 dpuSetExceptionMode()

書式 int dpuSetExceptionMode

(

int mode

)

引数 モード ランタイム N2Cube の例外処理モードを指定します。次の値を利用できま

す。

- N2CUBE_EXCEPTION_MODE_PRINT_AND_EXIT

- N2CUBE_EXCEPTION_MODE_RET_ERR_CODE

説明 DNNDK ランタイム N2Cube の例外処理モードを設定します。libn2cube ライブラリに含ま

れるすべての API に影響します。

N2CUBE_EXCEPTION_MODE_PRINT_AND_EXIT を指定すると、エラーが発生した場

合、N2Cube API はエラー メッセージを出力して DNNDK アプリケーションの実行を終了し

ます。これは、N2Cube API のデフォルトのモードです。

N2CUBE_EXCEPTION_MODE_RET_ERR_CODE を指定すると、エラーが発生した場

合、N2Cube API はエラー コードのみを返します。例外処理は、API

dpuGetExceptionMessage() を使用してエラー メッセージ ログを記録したり、リソースを解放

するなどして、呼び出し元が適切に実行する必要があります。

戻り値 正常に完了すると 0、エラーが発生した場合は負の値が返されます。

関連 API dpuGetExceptionMode()

dpuGetExceptionMessage()

インクルード

ファイル

n2cube.h

対応バージョン v2.08

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 122

UG1327 (v1.2) 2019 年 2 月 19 日

dpuGetExceptionMode()

名前 dpuGetExceptionMode()

書式 int dpuGetExceptionMode()

引数 なし

説明 ランタイム N2Cube の例外処理モードを取得します。

戻り値 N2Cube API の現在の例外処理モード。

次のいずれかの値が返されます。

- N2CUBE_EXCEPTION_MODE_PRINT_AND_EXIT

- N2CUBE_EXCEPTION_MODE_RET_ERR_CODE

関連 API dpuSetExceptionMode()

dpuGetExceptionMessage()

インクルード

ファイル

n2cube.h

対応バージョン v2.08

dpuGetExceptionMessage()

名前 dpuGetExceptionMessage()

書式 const char *dpuGetExceptionMessage

(

int error_code

)

引数 error_code N2Cube API から返されるエラー コード。

説明 N2Cube API から返されるエラー コード (常に負の値) からエラー メッセージを取得します。

戻り値 error_code に対応するエラー メッセージを示す文字列定数へのポインター。

関連 API dpuSetExceptionMode()

dpuGetExceptionMode()

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 123

UG1327 (v1.2) 2019 年 2 月 19 日

インクルード

ファイル

n2cube.h

対応バージョン v2.08

ライブラリ libdputils

概要

ライブラリ libdputils.so は、DPU ユーティリティ ライブラリです。DPU プラットフォーム上での DL アプリケーション開発に役立つ、高度に

最適化された C/C++ API が各種揃っています。次の表に、エクスポートされた各 API の概要をまとめます。

名前 libdputils.so

説明 DPU ユーティリティ ライブラリ

ルーチン dpuSetInputImage() – ネットワーク モデルで指定した平均値を使用して、DPU タスクの入

力画像を設定します。

dpuSetInputImage2() – 平均値を使用せずに DPU タスクの入力画像を設定します。

dpuSetInputImageWithScale() – 指定したスケール値に従って DPU タスクの入力画像を設

定します。

注記: dpuSetInputImage()、dpuSetInputImage2() および dpuSetInputImageWithScale() の

3 つの API は、OpenCV の resize() を呼び出し、使用するモデルの入力次元に合わせて

入力画像を自動的にリサイズします。画像補間は、INTER_LINEAR 法を使用します。

インクルード

ファイル

dputils.h

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 124

UG1327 (v1.2) 2019 年 2 月 19 日

API

ここでは、ライブラリ libdputils に含まれる各 API のプロトタイプとパラメーターについて説明します。

dpuSetInputImage()

名前 dpuSetInputImage ()

書式 int dpuSetInputImage

(

DPUTask *task,

const char *nodeName,

const cv::Mat &image,

float *mean

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの

名前は、DNNC によるニューラル ネットワークのコンパイル時に生成

された名前を指定します。無効なノード名を指定すると、エラー メッ

セージが報告されます。

image OpenCV Mat フォーマットの入力画像。1 チャネルおよび 3 チャネル

の入力画像がサポートされます。

mean 1 チャネル入力画像の場合は 1 要素、3 チャネル入力画像の場合は

3 要素を含む平均値配列へのポインター。

注記: 平均値は、入力 Caffe prototxt から取得できます。現時点で

は、平均値ファイルのフォーマットはサポートされていません。

説明 DPU タスクの入力画像を設定します。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetInputImageWithScale ()

インクルード

ファイル

dputil.h

対応バージョン v1.07

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 125

UG1327 (v1.2) 2019 年 2 月 19 日

dpuSetInputImage2()

名前 dpuSetInputImage2 ()

書式 int dpuSetInputImage

(

DPUTask *task,

const char *nodeName,

const cv::Mat &image

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの

名前は、DNNC によるニューラル ネットワークのコンパイル時に生成

された名前を指定します。無効なノード名を指定すると、エラー メッ

セージが報告されます。

image OpenCV Mat フォーマットの入力画像。1 チャネルおよび 3 チャネル

の入力画像がサポートされます。

説明 平均値を指定せずに DPU タスクの入力画像を設定します。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetInputImageWithScale ()

インクルード

ファイル

dputil.h

対応バージョン v1.10

第 12 章: プログラミング API

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 126

UG1327 (v1.2) 2019 年 2 月 19 日

dpuSetInputImageWithScale()

名前 dpuSetInputImageWithScale ()

書式 int dpuSetInputImageWithScale

(

DPUTask *task,

const char *nodeName,

const cv::Mat &image,

float *mean,

float scale

)

引数 task DPU タスクへのポインター。

nodeName DPU ノード名へのポインター。DPU カーネル/タスクの出力ノードの名

前は、DNNC によるニューラル ネットワークのコンパイル時に生成され

た名前を指定します。無効なノード名を指定すると、エラー メッセージ

が報告されます。

image OpenCV Mat フォーマットの入力画像。1 チャネルおよび 3 チャネルの

入力画像がサポートされます。

mean 3 つの要素を含む平均値配列へのポインター。

注記: 平均値は、入力 Caffe prototxt から取得できます。平均値ファイ

ルは、現時点でサポートされていません。

scale 入力画像のスケール値。

説明 ネットワーク モデルで指定した平均値とスケール値を使用して、DPU タスクの入力画像を

設定します。

戻り値 正常に完了すると 0 が返され、それ以外の場合はエラーが報告されます。

関連 API dpuSetInputImage ()

インクルード

ファイル

dputil.h

対応バージョン v1.07

© Copyright 2019 Xilinx DNNDK ユーザー ガイド 127

UG1327 (v1.2) 2019 年 2 月 19 日

法的通知

お読みください: 重要な法的通知 本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には「貴殿」、法人その他の団体の場合には「貴社」。以下同じ) に開示される情報

(以下「本情報」といいます) は、ザイリンクスの製品を選択および使用することのためにのみ提供されます。適用される法律が許容する最大限の範囲で、

(1) 本情報は「現状有姿」、およびすべて受領者の責任で (with all faults) という状態で提供され、ザイリンクスは、本通知をもって、明示、黙示、法定を問

わず (商品性、非侵害、特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない (否認する) ものとします。ま

た、(2) ザイリンクスは、本情報 (貴殿または貴社による本情報の使用を含む) に関係し、起因し、関連する、いかなる種類・性質の損失または損害につい

ても、責任を負わない (契約上、不法行為上 (過失の場合を含む)、その他のいかなる責任の法理によるかを問わない) ものとし、当該損失または損害に

は、直接、間接、特別、付随的、結果的な損失または損害 (第三者が起こした行為の結果被った、データ、利益、業務上の信用の損失、その他あらゆる

種類の損失や損害を含みます) が含まれるものとし、それは、たとえ当該損害や損失が合理的に予見可能であったり、ザイリンクスがそれらの可能性につ

いて助言を受けていた場合であったとしても同様です。ザイリンクスは、本情報に含まれるいかなる誤りも訂正する義務を負わず、本情報または製品仕様

のアップデートを貴殿または貴社に知らせる義務も負いません。事前の書面による同意のない限り、貴殿または貴社は本情報を再生産、変更、頒布、ま

たは公に展示してはなりません。一定の製品は、ザイリンクスの限定的保証の諸条件に従うこととなるので、https://japan.xilinx.com/legal.htm#tos で見られ

るザイリンクスの販売条件を参照してください。IP コアは、ザイリンクスが貴殿または貴社に付与したライセンスに含まれる保証と補助的条件に従うことにな

ります。ザイリンクスの製品は、フェイルセーフとして、または、フェイルセーフの動作を要求するアプリケーションに使用するために、設計されたり意図され

たりしていません。そのような重大なアプリケーションにザイリンクスの製品を使用する場合のリスクと責任は、貴殿または貴社が単独で負うものです。

https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。

自動車用のアプリケーションの免責条項

オートモーティブ製品 (製品番号に「XA」が含まれる) は、ISO 26262 自動車用機能安全規格に従った安全コンセプトまたは余剰性の機能 (「セーフティ

設計」) がない限り、エアバッグの展開における使用または車両の制御に影響するアプリケーション (「セーフティ アプリケーション」) における使用は保証

されていません。顧客は、製品を組み込むすべてのシステムについて、その使用前または提供前に安全を目的として十分なテストを行うものとします。

セーフティ設計なしにセーフティ アプリケーションで製品を使用するリスクはすべて顧客が負い、製品の責任の制限を規定する適用法令および規則にの

み従うものとします。

© Copyright 2019 Xilinx, Inc. Xilinx、Xilinx のロゴ、Artix、ISE、Kintex、Spartan、Virtex、Zynq、およびこの文書に含まれるその他の指定されたブランド

は、米国およびその他各国のザイリンクス社の商標です。すべてのその他の商標は、それぞれの保有者に帰属します。

この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、または各ページの右下にある [フィードバッ

ク送信] ボタンをクリックすると表示されるフォームからお知らせください。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早急に

対応させていただきます。なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。