SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
[AMD Official Use Only - General]
Vitis-AIを用いて
自分のデータで学習・推論
2022/07/26
岩渕 甲誠
[AMD Official Use Only - General]
自己紹介
 岩渕 甲誠(いわぶち こうせい)
 システムエンジニア
◼ 2003年4月 株式会社セック入社
◼ 主に組み込みソフトウェア開発に従事
✓ 人工衛星
✓ ロボット
 2017年 FPGA研究プロジェクト開始
2
https://www.jaxa.jp/projects/sas/hayabusa2/index_j.html
[AMD Official Use Only - General]
目次
3
 Vitis-AIとは
 開発環境
 MNISTの学習~AIコンパイル
 アプリケーションの実装
 ZCU102:動作環境構築
 動作結果
[AMD Official Use Only - General]
Vitis-AIとは
 Xilinx社が無償で提供する、AIをFPGAで動作させるため
の開発、実行環境。
◼ モデルをPruningにより最適化するツールのAIオプティマイザーは
有償。
 FPGAでAI処理するIPであるDPUや各種ツール、ライブラ
リ、学習済みのモデル、サンプルアプリケーションなどが含
まれている。
 資料
◼ UG1414
Vitis AIユーザーガイド
◼ 今回はVitis AIユーザーガイド
を元に進めます。
4
https://japan.xilinx.com/products/design-tools/
vitis/vitis-ai.html
[AMD Official Use Only - General]
Vitis-AIとは
 Vitis-AIを用いたFPGAでのYOLO
5
[AMD Official Use Only - General]
Vitis-AIとは
 Vitis-AIを用いた開発の流れ
 作成したコンパイル済みモデルとアプリケーションを用
いて、FPGAに組み込んだDPUで推論を実行する。
6
DNN
学習
量子化
AIコン
パイル
アプリケー
ション実装
学習済み
モデル
量子化
済み
モデル
コンパイル
済み
モデル
アプリ
ケーション
1. アプリケーションを実行
2. コンパイル済みモデルを読み込
み、FPGAに送信
3. 画像を読み込み、FPGAに送信
4. 推論実行
5. 結果を取得
FPGA
DPU
CPU
アプリ
モデル
6
モデル
[AMD Official Use Only - General]
Vitis-AIとは
 DPU(Deeplearning Processing Unit)
◼ ディープラーニングの積和演算、内積などのテンソルの計算を高速
に処理するエンジン。
◼ 実体は、FPGA上に実装されるIPである。
 DPUを使用するにはFPGA回路に組み込んで合成する。
◼ 今回はZCU102向けに合成済みのものを用いる。
◼ FPGA回路(xclbinファイル)、Linuxカーネルイメージ、ファイルシ
ステム等を含むSDカードイメージが提供されている。(後述)
7
https://japan.xilinx.com/products/
design-tools/vitis/vitis-ai.html
[AMD Official Use Only - General]
開発環境
 今回動作させるMNIST文字認識の開発環境
 Vitis-AIのダウンロード
8
OS Ubuntu 18.04
Vitis-AI Ver 2.0
フレームワーク TensorFlow 2.6
言語 モデル学習 Python
アプリケーション C++
Docker Ver 20.10.17
評価ボード ZCU102
$ git clone https://github.com/Xilinx/Vitis-AI
$ cd Vitis-AI
$ git checkout –b v2.0 v2.0
[AMD Official Use Only - General]
開発環境
 TensorFlowやPyTorch、Python、C/C++などの開発
環境、Vitis-AIのツールはDocker、conda仮想環境で提
供されている。
◼ Docker環境を起動し、フレームワーク毎のconda環境を選択。
◼ Dockerイメージのダウンロードのみで、ツール類のセットアップは
不要
9
docker Xilinx/vitis-ai:2.0
conda viti-ai-tensorflow2
• TensorFlow 2.6
• Python, C, C++
• AIクォンタイザー
• AIコンパイラー
conda viti-ai-tensorflow
conda viti-ai-caffe
conda viti-ai-pytorch
[AMD Official Use Only - General]
サンプルアプリケーションのソースコード
 以降で解説するMNISTサンプルアプリケーションのソ
ースコードを添付する。
 サンプルアプリのソースツリー
◼ Vitis-AI 配下に展開する。
10
mnist
common
logs
mnist_app
mnist_data.tar.gz
mnist_app
src
main.cc
ai_comp.sh
mnist.py
アプリケーションソースコード (p.23)
アプリケーションヘッダファイル
モデルファイル格納ディレクトリ
AIコンパイル実行スクリプト (p.20)
MNIST学習、量子化ソースコード
(p.12, p.15, p.16)
推論用のMNISTデータ (p.26)
build.sh アプリケーションビルドスクリプト (p.24)
Vitis-AI
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 以下を実行する環境
◼ 学習
◼ 量子化
◼ AIコンパイル
 仮想環境起動
◼ Dockerイメージ
 xilinx/vitis-ai:2.0
◼ Conda環境
 vitis-ai-tensorflow2
11
acri@:~/Vitis-AI$ ./docker_run.sh xilinx/vitis-ai:2.0
・・・
Do you agree to the terms and wish to proceed [y/n]? y
Setting up acri 's environment in the Docker container...
Running as vitis-ai-user with ID 0 and group 0
==========================================
__ ___ _ _ _____
  / (_) | (_) / |_ _|
  / / _| |_ _ ___ ______ /  | |
 / / | | __| / __|______/ /  | |
 / | | |_| __  / ____  _| |_
/ |_|__|_|___/ /_/ ______|
==========================================
Docker Image Version: 2.0.0.1103 (CPU)
Vitis AI Git Hash: 06d7cbb
Build Date: 2022-01-12
For TensorFlow 1.15 Workflows do:
conda activate vitis-ai-tensorflow
For Caffe Workflows do:
conda activate vitis-ai-caffe
For PyTorch Workflows do:
conda activate vitis-ai-pytorch
For TensorFlow 2.6 Workflows do:
conda activate vitis-ai-tensorflow2
Vitis-AI /workspace > conda activate vitis-ai-tensorflow2
(vitis-ai-tensorflow2) Vitis-AI /workspace >
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 Vitis-AIの開発の流れ
12
DNN
学習
量子化
AIコン
パイル
アプリケー
ション実装
学習済み
モデル
量子化
済み
モデル
コンパイル
済み
モデル
アプリ
ケーション
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 MNISTの学習
◼ 本サンプルで作成するネットワークは右図の通り
◼ Vitis-AIは学習時点では無関係
13
Input
Conv2D (relu)
MaxPooling
Conv2D (relu)
MaxPooling
Dense (relu)
Dense (softmax)
inputs = tf.keras.layers.Input(shape=(28, 28, 1),
name="mnist_input")
x = layers.Conv2D(32, (3, 3), activation='relu')(inputs)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, (3, 3), activation='relu')(x)
x = layers.MaxPooling2D((2, 2), strides=(1, 1),
padding='same')(x)
x = layers.Conv2D(64, (3, 3), strides=(1, 1), padding='same',
activation='relu')(x)
x = layers.Flatten()(x)
x = layers.Dense(64, activation='relu')(x)
x = layers.Dense(10, activation='softmax')(x)
model = tf.keras.models.Model(inputs, x, name="MNIST_model")
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5)
log_dir = 'logs/100/'
model.save(log_dir+'mnist.h5')
ネットワーク
定義
学習
モデル保存
mnist.py(抜粋)
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 Vitis-AIの開発の流れ
14
DNN
学習
量子化
AIコン
パイル
アプリケー
ション実装
学習済み
モデル
量子化
済み
モデル
コンパイル
済み
モデル
アプリ
ケーション
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 量子化とは
◼ 学習済みモデルの重みは32bit浮動小数点で保存されている。
◼ FPGAでは回路リソースの削減、メモリ帯域幅の削減などの目的の
為、浮動小数点ではなくINT8などの固定小数点を用いる。
◼ 量子化では、学習済みモデルを固定小数点に変換する。その際に
キャリブレーションのため、学習に用いたデータが100個程度必要
になる。
15
https://japan.xilinx.com/products/design-tools/
vitis/vitis-ai.html
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 MNISTの量子化
◼ TensorFlow 2.xの量子化は学習に続けてコード上で行う。
◼ TensorFlow 1.xでは、Freeze化した後、vai_q_tensorflowコ
マンドで行う。
◼ VitisQuantizerのAPIはユーザーガイドを参照。
16
model = tf.keras.models.Model(inputs, x, name="MNIST_model")
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=2)
log_dir = 'logs/100/'
model.save(log_dir+'mnist.h5’)
quantizer = vitis_quantize.VitisQuantizer(model)
quantized_model = quantizer.quantize_model(
calib_dataset=train_images[0:10],
include_cle=True,
cle_steps=10,
include_fast_ft=True)
quantized_model.save(log_dir+'quantized.h5')
学習
学習済み
モデル保存
量子化
量子化済み
モデル保存
mnist.pyの続き
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 MNISTの学習と量子化を実行
◼ Docker環境、Conda環境を起動する。
◼ MNIST学習、量子化のPythonスクリプトを実行
◼ quantized.h5 が生成されていることを確認
17
(vitis-ai-tensorflow2) Vitis-AI /workspace/Vitis-AI/mnist > python mnist.py
:
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mn
11493376/11490434 [==============================] - 1s 0us/step
11501568/11490434 [==============================] - 1s 0us/step
:
Epoch 5/5
1875/1875 [==============================] - 17s 9ms/step - loss: 0.0349 - accuracy: 0.9894
313/313 [==============================] - 1s 2ms/step - loss: 0.0504 - accuracy: 0.9865
Accuracy = 0.9865000247955322
:
[VAI INFO] Quantization Finished.
(vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > ls logs/100/
mnist.h5 quantized.h5
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 Vitis-AIの開発の流れ
18
DNN
学習
量子化
AIコン
パイル
アプリケー
ション実装
学習済み
モデル
量子化
済み
モデル
コンパイル
済み
モデル
アプリ
ケーション
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 AIコンパイルとは
◼ 量子化済みモデルをDPUで処理するよう、DPUの命令シーケンス
に変換する。
◼ 演算の並列処理などの最適化も行う。
◼ DPUの種類によって生成する命令シーケンスが異なるため、DPU
アーキテクチャを指定する。ここで初めてハードウェア依存となるた
め、量子化までは異なるボードでも同じ手順となる。
19
https://japan.xilinx.com/products/design-tools/
vitis/vitis-ai.html
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 AIコンパイルのコマンド
◼ vai_c_tensorflow2 コマンドで行う。
◼ コマンドはDocker環境にインストール済み。
◼ コマンドの詳細はユーザーガイドを参照。
20
(vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > vai_c_tensorflow2 
-m logs/100/quantized.h5 
-a /opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json 
-o logs/100/ai_comp 
-n mnist
オプション 説明
-m 量子化済みモデルファイル
-a アーキテクチャファイル
-o 出力先ディレクトリ
-n ネットワークモデルの名前
[AMD Official Use Only - General]
MNISTの学習~AIコンパイル
 MNISTのAIコンパイルを実行
◼ Docker環境、Conda環境を起動する。
◼ AIコンパイル実行スクリプト(ai_comp.sh)を実行
◼ mnist.xmodel (コンパイル済みモデル)が生成されていることを
確認
21
(vitis-ai-tensorflow2) Vitis-AI /workspace/Vitis-AI/mnist > ./ai_comp.sh logs/100/
**************************************************
* VITIS_AI Compilation - Xilinx Inc.
**************************************************
:
[UNILOG][INFO] The compiled xmodel is saved to "/workspace/mnist/logs/100//ai_comp/mnist.xmodel"
[UNILOG][INFO] The compiled xmodel's md5sum is 46b2b76170d0c8a7b6edb5c4fd201646, and has been saved
to "/workspace/mnist/logs/100/ai_comp/md5sum.txt"
(vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > ls logs/100/
ai_comp mnist.h5 quantized.h5
(vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > ls logs/100/ai_comp/
md5sum.txt meta.json mnist.xmodel
[AMD Official Use Only - General]
アプリケーションの実装
 Vitis-AIの開発の流れ
22
DNN
学習
量子化
AIコン
パイル
アプリケー
ション実装
学習済み
モデル
量子化
済み
モデル
コンパイル
済み
モデル
アプリ
ケーション
[AMD Official Use Only - General]
アプリケーションの実装
 MPSoCのCPUはARMであるためクロスコンパイルが必要
 クロスコンパイル環境構築(Docker環境は終了)
◼ Vitis-AI 内のhost_cross_compiler_setup.shを実行
 petalinux_sdk_2021.2がダウンロードされる
◼ environment-setup-cortexa72-cortexa53-xilinx-linuxを
実行
 環境変数が設定される
23
Vitis-AI
setup
mpsoc
VART
host_cross_compiler_setup.sh
petalinux_sdk_2021.2
environment-setup-cortexa72-cortexa53-xilinx-linux
<HOME>
ダウンロード
sysroot
[AMD Official Use Only - General]
アプリケーションの実装
 アプリケーション(main.cc)のフロー
24
コンパイル済みモデル
読み込み
モデル情報(入出力テ
ンソルなど)取得
画像ファイル名
一覧取得
全画像に対して
繰り返し
画像データ取得
画像データを
バッファにコピー
FPGAで推論実行
推論結果表示
(上位5クラス表示)
精度表示
[AMD Official Use Only - General]
アプリケーションの実装
 アプリケーションのビルド
◼ クロスコンパイル環境を設定する
◼ アプリケーションビルドスクリプト(build.sh)を実行する
◼ mnist_app が生成されていることを確認
25
acri@:~/workspace/mnist/mnist_app$ ls
build.sh src
acri@:~/workspace/mnist/mnist_app$ ./build.sh
No LSB modules are available.
No LSB modules are available.
aarch64-xilinx-linux-g++ (GCC) 10.2.0
:
acri@:~/workspace/mnist/mnist_app$ ls
build.sh mnist_app src
[AMD Official Use Only - General]
ZCU102:動作環境構築
 ZCU102のSDカードイメージ
◼ XilinxのサイトからSDカードイメージをダウンロードし、SDカードに
書き込むのみ。
 https://japan.xilinx.com/member/forms/download/des
ign-license-xef.html?filename=xilinx-zcu102-dpu-
v2021.2-v2.0.0.img.gz
◼ DPUが組み込まれたFPGA回路情報(xclbinファイル)も含まれて
いる。
 PetaLinux起動手順
◼ 書き込んだSDカードをZCU102に挿す。
◼ UARTのシリアルケーブルを接続する。
◼ 電源ON
 独自の回路、環境としたい場合は
カスタムプラットフォームを作成する。
26
[AMD Official Use Only - General]
ZCU102:動作環境構築
 SDカードの/home/root に以下のファイルをコピー
◼ コンパイル済みモデルファイル
 mnist/logs/100/ai_comp/mnist.xmodel
◼ アプリケーション実行ファイル
 mnist/mnist_app/mnist_app
◼ 推論用のMNISTデータ
 mnist_data.tar.gzを展開
27
/home/root
mnist_app
mnist_data
mnist.xmodel
mnist_0000.dat
mnist_0999.dat
mnist_label.txt
:
SDカード上のファイルツリー
FPGA
DPU
CPU
アプリ
モデル
6
モデル
これを動作させる
準備が整った
[AMD Official Use Only - General]
実行結果
 ZCU102上で以下のコマンドを実行
◼ 精度 :99.3%
◼ 推論時間:1回目343μs、2回目以降は約250μs
28
root@xilinx-zcu102-2021_2:~# ./mnist_app mnist.xmodel
:
343 micro sec
Image : mnist_0000.dat, label = 5
top[0] prob = 0.863923 name = 5
top[1] prob = 0.085540 name = 3
top[2] prob = 0.026088 name = 6
top[3] prob = 0.013964 name = 8
top[4] prob = 0.008470 name = 9
:
247 micro sec
Image : mnist_0999.dat, label = 6
top[0] prob = 0.978142 name = 6
top[1] prob = 0.007016 name = 8
top[2] prob = 0.004255 name = 0
top[3] prob = 0.003314 name = 4
top[4] prob = 0.002747 name = 5
correct_num = 993
Accuracy = 0.993000
[AMD Official Use Only - General]
まとめ
 Vitis-AI ver2.0、TensorFlow 2.6を使用して
MNISTの学習からAIコンパイルまでと、これを動作さ
せるアプリケーションについて、環境構築からサンプル
を用いた実際の処理について解説した。
 ZCU102上で動作させ、推論が動作することを確認し
た。
 解説した内容はMNISTだけでなく、YOLOなど他のネ
ットワークに対しても適用できるものである。
29
[AMD Official Use Only - General]
宣伝
 高位合成の書籍を出版しました。
◼ 「高位合成によるFPGA回路設計」 (森北出版)
◼ FPGA初心者、ソフトウェア技術者向け
 FPGAアーキテクチャの基礎
 Vitisを使った高位合成の実装方法
 Vitis-AIを使ったMNIST、YOLOv3
◼ ここではVitis-AI 1.2を使用しています
30

Weitere ähnliche Inhalte

Was ist angesagt?

プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜京大 マイコンクラブ
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」直久 住川
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料一路 川染
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!masakazu matsubara
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングSho Hosoda
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
データ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラデータ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラNVIDIA Japan
 

Was ist angesagt? (20)

プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
データ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラデータ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラ
 

Ähnlich wie 第9回ACRiウェビナー_セック/岩渕様ご講演資料

Openstack ceph 20171115 vtj
Openstack ceph 20171115 vtjOpenstack ceph 20171115 vtj
Openstack ceph 20171115 vtjTakehiro Kudou
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)シスコシステムズ合同会社
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
NetApp Session at PEX Tokyo 2013
NetApp Session at PEX Tokyo 2013NetApp Session at PEX Tokyo 2013
NetApp Session at PEX Tokyo 2013NetApp Japan
 
ECSとGitLabでCI環境構築
ECSとGitLabでCI環境構築ECSとGitLabでCI環境構築
ECSとGitLabでCI環境構築iwata jaws-ug
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~日本マイクロソフト株式会社
 
進化を続けるIBM Bluemix 最新情報(2015年3月)
進化を続けるIBM Bluemix 最新情報(2015年3月)進化を続けるIBM Bluemix 最新情報(2015年3月)
進化を続けるIBM Bluemix 最新情報(2015年3月)Noriyuki Egi
 
.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptx.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptxMichinari Kobuna
 
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介Daisuke Ikeda
 
Cephベンチマーク kvm
Cephベンチマーク kvmCephベンチマーク kvm
Cephベンチマーク kvmToshimi Kawabata
 
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談光平 八代
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesTakeshi Fukuhara
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイiwata jaws-ug
 
脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...
脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...
脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...NTT DATA Technology & Innovation
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化Issei Hiraoka
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方dena_study
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)シスコシステムズ合同会社
 
Citrix merchandizing server step by-step 構築&操作ガイド
Citrix merchandizing server step by-step 構築&操作ガイドCitrix merchandizing server step by-step 構築&操作ガイド
Citrix merchandizing server step by-step 構築&操作ガイドCitrix Systems Japan
 
20121119.dodai projectの紹介
20121119.dodai projectの紹介20121119.dodai projectの紹介
20121119.dodai projectの紹介Osamu Habuka
 

Ähnlich wie 第9回ACRiウェビナー_セック/岩渕様ご講演資料 (20)

Openstack ceph 20171115 vtj
Openstack ceph 20171115 vtjOpenstack ceph 20171115 vtj
Openstack ceph 20171115 vtj
 
Try IoT with Node-RED
Try IoT with Node-REDTry IoT with Node-RED
Try IoT with Node-RED
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
NetApp Session at PEX Tokyo 2013
NetApp Session at PEX Tokyo 2013NetApp Session at PEX Tokyo 2013
NetApp Session at PEX Tokyo 2013
 
ECSとGitLabでCI環境構築
ECSとGitLabでCI環境構築ECSとGitLabでCI環境構築
ECSとGitLabでCI環境構築
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
 
進化を続けるIBM Bluemix 最新情報(2015年3月)
進化を続けるIBM Bluemix 最新情報(2015年3月)進化を続けるIBM Bluemix 最新情報(2015年3月)
進化を続けるIBM Bluemix 最新情報(2015年3月)
 
.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptx.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptx
 
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
 
Cephベンチマーク kvm
Cephベンチマーク kvmCephベンチマーク kvm
Cephベンチマーク kvm
 
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
 
脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...
脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...
脅威へ、しなやかかつ持続可能に対応するためのIaC環境 ~循環型IaC~ (CloudNative Security Conference 2022 プレ...
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
 
Citrix merchandizing server step by-step 構築&操作ガイド
Citrix merchandizing server step by-step 構築&操作ガイドCitrix merchandizing server step by-step 構築&操作ガイド
Citrix merchandizing server step by-step 構築&操作ガイド
 
20121119.dodai projectの紹介
20121119.dodai projectの紹介20121119.dodai projectの紹介
20121119.dodai projectの紹介
 

Mehr von 直久 住川

公開用_講演資料_SCSK.pdf
公開用_講演資料_SCSK.pdf公開用_講演資料_SCSK.pdf
公開用_講演資料_SCSK.pdf直久 住川
 
ACRi-Webinar_Feb2023_agenda_20230225.pdf
ACRi-Webinar_Feb2023_agenda_20230225.pdfACRi-Webinar_Feb2023_agenda_20230225.pdf
ACRi-Webinar_Feb2023_agenda_20230225.pdf直久 住川
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料直久 住川
 
第11回ACRiウェビナー_インテル/竹村様ご講演資料
第11回ACRiウェビナー_インテル/竹村様ご講演資料第11回ACRiウェビナー_インテル/竹村様ご講演資料
第11回ACRiウェビナー_インテル/竹村様ご講演資料直久 住川
 
ACRiルーム副室長_安藤様_講演資料
ACRiルーム副室長_安藤様_講演資料ACRiルーム副室長_安藤様_講演資料
ACRiルーム副室長_安藤様_講演資料直久 住川
 
DSF実行委員長_酒井様_講演資料
DSF実行委員長_酒井様_講演資料DSF実行委員長_酒井様_講演資料
DSF実行委員長_酒井様_講演資料直久 住川
 
ACRi事務局_住川_講演資料
ACRi事務局_住川_講演資料ACRi事務局_住川_講演資料
ACRi事務局_住川_講演資料直久 住川
 
VCK5000_Webiner_GIGABYTE様ご講演資料
VCK5000_Webiner_GIGABYTE様ご講演資料VCK5000_Webiner_GIGABYTE様ご講演資料
VCK5000_Webiner_GIGABYTE様ご講演資料直久 住川
 
AMD_Xilinx_AI_VCK5000_20220602R1.pdf
AMD_Xilinx_AI_VCK5000_20220602R1.pdfAMD_Xilinx_AI_VCK5000_20220602R1.pdf
AMD_Xilinx_AI_VCK5000_20220602R1.pdf直久 住川
 
VCK5000_Webiner_Fixstars様ご講演資料
VCK5000_Webiner_Fixstars様ご講演資料VCK5000_Webiner_Fixstars様ご講演資料
VCK5000_Webiner_Fixstars様ご講演資料直久 住川
 
20220525_kobayashi.pdf
20220525_kobayashi.pdf20220525_kobayashi.pdf
20220525_kobayashi.pdf直久 住川
 
220526_ACRi_Ando01r.pdf
220526_ACRi_Ando01r.pdf220526_ACRi_Ando01r.pdf
220526_ACRi_Ando01r.pdf直久 住川
 
2205ACRi_jinguji.pdf
2205ACRi_jinguji.pdf2205ACRi_jinguji.pdf
2205ACRi_jinguji.pdf直久 住川
 
ACRiポジショントーク_山科.pdf
ACRiポジショントーク_山科.pdfACRiポジショントーク_山科.pdf
ACRiポジショントーク_山科.pdf直久 住川
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料直久 住川
 
ACRiウェビナー:アジェンダ
ACRiウェビナー:アジェンダACRiウェビナー:アジェンダ
ACRiウェビナー:アジェンダ直久 住川
 
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...直久 住川
 
ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料直久 住川
 
ACRiウェビナー_ジーデップ・アドバンス様ご講演資料
ACRiウェビナー_ジーデップ・アドバンス様ご講演資料ACRiウェビナー_ジーデップ・アドバンス様ご講演資料
ACRiウェビナー_ジーデップ・アドバンス様ご講演資料直久 住川
 

Mehr von 直久 住川 (20)

公開用_講演資料_SCSK.pdf
公開用_講演資料_SCSK.pdf公開用_講演資料_SCSK.pdf
公開用_講演資料_SCSK.pdf
 
ACRi-Webinar_Feb2023_agenda_20230225.pdf
ACRi-Webinar_Feb2023_agenda_20230225.pdfACRi-Webinar_Feb2023_agenda_20230225.pdf
ACRi-Webinar_Feb2023_agenda_20230225.pdf
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
 
第11回ACRiウェビナー_インテル/竹村様ご講演資料
第11回ACRiウェビナー_インテル/竹村様ご講演資料第11回ACRiウェビナー_インテル/竹村様ご講演資料
第11回ACRiウェビナー_インテル/竹村様ご講演資料
 
2022-12-17-room.pdf
2022-12-17-room.pdf2022-12-17-room.pdf
2022-12-17-room.pdf
 
ACRiルーム副室長_安藤様_講演資料
ACRiルーム副室長_安藤様_講演資料ACRiルーム副室長_安藤様_講演資料
ACRiルーム副室長_安藤様_講演資料
 
DSF実行委員長_酒井様_講演資料
DSF実行委員長_酒井様_講演資料DSF実行委員長_酒井様_講演資料
DSF実行委員長_酒井様_講演資料
 
ACRi事務局_住川_講演資料
ACRi事務局_住川_講演資料ACRi事務局_住川_講演資料
ACRi事務局_住川_講演資料
 
VCK5000_Webiner_GIGABYTE様ご講演資料
VCK5000_Webiner_GIGABYTE様ご講演資料VCK5000_Webiner_GIGABYTE様ご講演資料
VCK5000_Webiner_GIGABYTE様ご講演資料
 
AMD_Xilinx_AI_VCK5000_20220602R1.pdf
AMD_Xilinx_AI_VCK5000_20220602R1.pdfAMD_Xilinx_AI_VCK5000_20220602R1.pdf
AMD_Xilinx_AI_VCK5000_20220602R1.pdf
 
VCK5000_Webiner_Fixstars様ご講演資料
VCK5000_Webiner_Fixstars様ご講演資料VCK5000_Webiner_Fixstars様ご講演資料
VCK5000_Webiner_Fixstars様ご講演資料
 
20220525_kobayashi.pdf
20220525_kobayashi.pdf20220525_kobayashi.pdf
20220525_kobayashi.pdf
 
220526_ACRi_Ando01r.pdf
220526_ACRi_Ando01r.pdf220526_ACRi_Ando01r.pdf
220526_ACRi_Ando01r.pdf
 
2205ACRi_jinguji.pdf
2205ACRi_jinguji.pdf2205ACRi_jinguji.pdf
2205ACRi_jinguji.pdf
 
ACRiポジショントーク_山科.pdf
ACRiポジショントーク_山科.pdfACRiポジショントーク_山科.pdf
ACRiポジショントーク_山科.pdf
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料
 
ACRiウェビナー:アジェンダ
ACRiウェビナー:アジェンダACRiウェビナー:アジェンダ
ACRiウェビナー:アジェンダ
 
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
 
ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料
 
ACRiウェビナー_ジーデップ・アドバンス様ご講演資料
ACRiウェビナー_ジーデップ・アドバンス様ご講演資料ACRiウェビナー_ジーデップ・アドバンス様ご講演資料
ACRiウェビナー_ジーデップ・アドバンス様ご講演資料
 

第9回ACRiウェビナー_セック/岩渕様ご講演資料

  • 1. [AMD Official Use Only - General] Vitis-AIを用いて 自分のデータで学習・推論 2022/07/26 岩渕 甲誠
  • 2. [AMD Official Use Only - General] 自己紹介  岩渕 甲誠(いわぶち こうせい)  システムエンジニア ◼ 2003年4月 株式会社セック入社 ◼ 主に組み込みソフトウェア開発に従事 ✓ 人工衛星 ✓ ロボット  2017年 FPGA研究プロジェクト開始 2 https://www.jaxa.jp/projects/sas/hayabusa2/index_j.html
  • 3. [AMD Official Use Only - General] 目次 3  Vitis-AIとは  開発環境  MNISTの学習~AIコンパイル  アプリケーションの実装  ZCU102:動作環境構築  動作結果
  • 4. [AMD Official Use Only - General] Vitis-AIとは  Xilinx社が無償で提供する、AIをFPGAで動作させるため の開発、実行環境。 ◼ モデルをPruningにより最適化するツールのAIオプティマイザーは 有償。  FPGAでAI処理するIPであるDPUや各種ツール、ライブラ リ、学習済みのモデル、サンプルアプリケーションなどが含 まれている。  資料 ◼ UG1414 Vitis AIユーザーガイド ◼ 今回はVitis AIユーザーガイド を元に進めます。 4 https://japan.xilinx.com/products/design-tools/ vitis/vitis-ai.html
  • 5. [AMD Official Use Only - General] Vitis-AIとは  Vitis-AIを用いたFPGAでのYOLO 5
  • 6. [AMD Official Use Only - General] Vitis-AIとは  Vitis-AIを用いた開発の流れ  作成したコンパイル済みモデルとアプリケーションを用 いて、FPGAに組み込んだDPUで推論を実行する。 6 DNN 学習 量子化 AIコン パイル アプリケー ション実装 学習済み モデル 量子化 済み モデル コンパイル 済み モデル アプリ ケーション 1. アプリケーションを実行 2. コンパイル済みモデルを読み込 み、FPGAに送信 3. 画像を読み込み、FPGAに送信 4. 推論実行 5. 結果を取得 FPGA DPU CPU アプリ モデル 6 モデル
  • 7. [AMD Official Use Only - General] Vitis-AIとは  DPU(Deeplearning Processing Unit) ◼ ディープラーニングの積和演算、内積などのテンソルの計算を高速 に処理するエンジン。 ◼ 実体は、FPGA上に実装されるIPである。  DPUを使用するにはFPGA回路に組み込んで合成する。 ◼ 今回はZCU102向けに合成済みのものを用いる。 ◼ FPGA回路(xclbinファイル)、Linuxカーネルイメージ、ファイルシ ステム等を含むSDカードイメージが提供されている。(後述) 7 https://japan.xilinx.com/products/ design-tools/vitis/vitis-ai.html
  • 8. [AMD Official Use Only - General] 開発環境  今回動作させるMNIST文字認識の開発環境  Vitis-AIのダウンロード 8 OS Ubuntu 18.04 Vitis-AI Ver 2.0 フレームワーク TensorFlow 2.6 言語 モデル学習 Python アプリケーション C++ Docker Ver 20.10.17 評価ボード ZCU102 $ git clone https://github.com/Xilinx/Vitis-AI $ cd Vitis-AI $ git checkout –b v2.0 v2.0
  • 9. [AMD Official Use Only - General] 開発環境  TensorFlowやPyTorch、Python、C/C++などの開発 環境、Vitis-AIのツールはDocker、conda仮想環境で提 供されている。 ◼ Docker環境を起動し、フレームワーク毎のconda環境を選択。 ◼ Dockerイメージのダウンロードのみで、ツール類のセットアップは 不要 9 docker Xilinx/vitis-ai:2.0 conda viti-ai-tensorflow2 • TensorFlow 2.6 • Python, C, C++ • AIクォンタイザー • AIコンパイラー conda viti-ai-tensorflow conda viti-ai-caffe conda viti-ai-pytorch
  • 10. [AMD Official Use Only - General] サンプルアプリケーションのソースコード  以降で解説するMNISTサンプルアプリケーションのソ ースコードを添付する。  サンプルアプリのソースツリー ◼ Vitis-AI 配下に展開する。 10 mnist common logs mnist_app mnist_data.tar.gz mnist_app src main.cc ai_comp.sh mnist.py アプリケーションソースコード (p.23) アプリケーションヘッダファイル モデルファイル格納ディレクトリ AIコンパイル実行スクリプト (p.20) MNIST学習、量子化ソースコード (p.12, p.15, p.16) 推論用のMNISTデータ (p.26) build.sh アプリケーションビルドスクリプト (p.24) Vitis-AI
  • 11. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  以下を実行する環境 ◼ 学習 ◼ 量子化 ◼ AIコンパイル  仮想環境起動 ◼ Dockerイメージ  xilinx/vitis-ai:2.0 ◼ Conda環境  vitis-ai-tensorflow2 11 acri@:~/Vitis-AI$ ./docker_run.sh xilinx/vitis-ai:2.0 ・・・ Do you agree to the terms and wish to proceed [y/n]? y Setting up acri 's environment in the Docker container... Running as vitis-ai-user with ID 0 and group 0 ========================================== __ ___ _ _ _____ / (_) | (_) / |_ _| / / _| |_ _ ___ ______ / | | / / | | __| / __|______/ / | | / | | |_| __ / ____ _| |_ / |_|__|_|___/ /_/ ______| ========================================== Docker Image Version: 2.0.0.1103 (CPU) Vitis AI Git Hash: 06d7cbb Build Date: 2022-01-12 For TensorFlow 1.15 Workflows do: conda activate vitis-ai-tensorflow For Caffe Workflows do: conda activate vitis-ai-caffe For PyTorch Workflows do: conda activate vitis-ai-pytorch For TensorFlow 2.6 Workflows do: conda activate vitis-ai-tensorflow2 Vitis-AI /workspace > conda activate vitis-ai-tensorflow2 (vitis-ai-tensorflow2) Vitis-AI /workspace >
  • 12. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  Vitis-AIの開発の流れ 12 DNN 学習 量子化 AIコン パイル アプリケー ション実装 学習済み モデル 量子化 済み モデル コンパイル 済み モデル アプリ ケーション
  • 13. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  MNISTの学習 ◼ 本サンプルで作成するネットワークは右図の通り ◼ Vitis-AIは学習時点では無関係 13 Input Conv2D (relu) MaxPooling Conv2D (relu) MaxPooling Dense (relu) Dense (softmax) inputs = tf.keras.layers.Input(shape=(28, 28, 1), name="mnist_input") x = layers.Conv2D(32, (3, 3), activation='relu')(inputs) x = layers.MaxPooling2D((2, 2))(x) x = layers.Conv2D(64, (3, 3), activation='relu')(x) x = layers.MaxPooling2D((2, 2), strides=(1, 1), padding='same')(x) x = layers.Conv2D(64, (3, 3), strides=(1, 1), padding='same', activation='relu')(x) x = layers.Flatten()(x) x = layers.Dense(64, activation='relu')(x) x = layers.Dense(10, activation='softmax')(x) model = tf.keras.models.Model(inputs, x, name="MNIST_model") model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, train_labels, epochs=5) log_dir = 'logs/100/' model.save(log_dir+'mnist.h5') ネットワーク 定義 学習 モデル保存 mnist.py(抜粋)
  • 14. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  Vitis-AIの開発の流れ 14 DNN 学習 量子化 AIコン パイル アプリケー ション実装 学習済み モデル 量子化 済み モデル コンパイル 済み モデル アプリ ケーション
  • 15. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  量子化とは ◼ 学習済みモデルの重みは32bit浮動小数点で保存されている。 ◼ FPGAでは回路リソースの削減、メモリ帯域幅の削減などの目的の 為、浮動小数点ではなくINT8などの固定小数点を用いる。 ◼ 量子化では、学習済みモデルを固定小数点に変換する。その際に キャリブレーションのため、学習に用いたデータが100個程度必要 になる。 15 https://japan.xilinx.com/products/design-tools/ vitis/vitis-ai.html
  • 16. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  MNISTの量子化 ◼ TensorFlow 2.xの量子化は学習に続けてコード上で行う。 ◼ TensorFlow 1.xでは、Freeze化した後、vai_q_tensorflowコ マンドで行う。 ◼ VitisQuantizerのAPIはユーザーガイドを参照。 16 model = tf.keras.models.Model(inputs, x, name="MNIST_model") model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, train_labels, epochs=2) log_dir = 'logs/100/' model.save(log_dir+'mnist.h5’) quantizer = vitis_quantize.VitisQuantizer(model) quantized_model = quantizer.quantize_model( calib_dataset=train_images[0:10], include_cle=True, cle_steps=10, include_fast_ft=True) quantized_model.save(log_dir+'quantized.h5') 学習 学習済み モデル保存 量子化 量子化済み モデル保存 mnist.pyの続き
  • 17. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  MNISTの学習と量子化を実行 ◼ Docker環境、Conda環境を起動する。 ◼ MNIST学習、量子化のPythonスクリプトを実行 ◼ quantized.h5 が生成されていることを確認 17 (vitis-ai-tensorflow2) Vitis-AI /workspace/Vitis-AI/mnist > python mnist.py : Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mn 11493376/11490434 [==============================] - 1s 0us/step 11501568/11490434 [==============================] - 1s 0us/step : Epoch 5/5 1875/1875 [==============================] - 17s 9ms/step - loss: 0.0349 - accuracy: 0.9894 313/313 [==============================] - 1s 2ms/step - loss: 0.0504 - accuracy: 0.9865 Accuracy = 0.9865000247955322 : [VAI INFO] Quantization Finished. (vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > ls logs/100/ mnist.h5 quantized.h5
  • 18. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  Vitis-AIの開発の流れ 18 DNN 学習 量子化 AIコン パイル アプリケー ション実装 学習済み モデル 量子化 済み モデル コンパイル 済み モデル アプリ ケーション
  • 19. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  AIコンパイルとは ◼ 量子化済みモデルをDPUで処理するよう、DPUの命令シーケンス に変換する。 ◼ 演算の並列処理などの最適化も行う。 ◼ DPUの種類によって生成する命令シーケンスが異なるため、DPU アーキテクチャを指定する。ここで初めてハードウェア依存となるた め、量子化までは異なるボードでも同じ手順となる。 19 https://japan.xilinx.com/products/design-tools/ vitis/vitis-ai.html
  • 20. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  AIコンパイルのコマンド ◼ vai_c_tensorflow2 コマンドで行う。 ◼ コマンドはDocker環境にインストール済み。 ◼ コマンドの詳細はユーザーガイドを参照。 20 (vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > vai_c_tensorflow2 -m logs/100/quantized.h5 -a /opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json -o logs/100/ai_comp -n mnist オプション 説明 -m 量子化済みモデルファイル -a アーキテクチャファイル -o 出力先ディレクトリ -n ネットワークモデルの名前
  • 21. [AMD Official Use Only - General] MNISTの学習~AIコンパイル  MNISTのAIコンパイルを実行 ◼ Docker環境、Conda環境を起動する。 ◼ AIコンパイル実行スクリプト(ai_comp.sh)を実行 ◼ mnist.xmodel (コンパイル済みモデル)が生成されていることを 確認 21 (vitis-ai-tensorflow2) Vitis-AI /workspace/Vitis-AI/mnist > ./ai_comp.sh logs/100/ ************************************************** * VITIS_AI Compilation - Xilinx Inc. ************************************************** : [UNILOG][INFO] The compiled xmodel is saved to "/workspace/mnist/logs/100//ai_comp/mnist.xmodel" [UNILOG][INFO] The compiled xmodel's md5sum is 46b2b76170d0c8a7b6edb5c4fd201646, and has been saved to "/workspace/mnist/logs/100/ai_comp/md5sum.txt" (vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > ls logs/100/ ai_comp mnist.h5 quantized.h5 (vitis-ai-tensorflow2) Vitis-AI /workspace/mnist > ls logs/100/ai_comp/ md5sum.txt meta.json mnist.xmodel
  • 22. [AMD Official Use Only - General] アプリケーションの実装  Vitis-AIの開発の流れ 22 DNN 学習 量子化 AIコン パイル アプリケー ション実装 学習済み モデル 量子化 済み モデル コンパイル 済み モデル アプリ ケーション
  • 23. [AMD Official Use Only - General] アプリケーションの実装  MPSoCのCPUはARMであるためクロスコンパイルが必要  クロスコンパイル環境構築(Docker環境は終了) ◼ Vitis-AI 内のhost_cross_compiler_setup.shを実行  petalinux_sdk_2021.2がダウンロードされる ◼ environment-setup-cortexa72-cortexa53-xilinx-linuxを 実行  環境変数が設定される 23 Vitis-AI setup mpsoc VART host_cross_compiler_setup.sh petalinux_sdk_2021.2 environment-setup-cortexa72-cortexa53-xilinx-linux <HOME> ダウンロード sysroot
  • 24. [AMD Official Use Only - General] アプリケーションの実装  アプリケーション(main.cc)のフロー 24 コンパイル済みモデル 読み込み モデル情報(入出力テ ンソルなど)取得 画像ファイル名 一覧取得 全画像に対して 繰り返し 画像データ取得 画像データを バッファにコピー FPGAで推論実行 推論結果表示 (上位5クラス表示) 精度表示
  • 25. [AMD Official Use Only - General] アプリケーションの実装  アプリケーションのビルド ◼ クロスコンパイル環境を設定する ◼ アプリケーションビルドスクリプト(build.sh)を実行する ◼ mnist_app が生成されていることを確認 25 acri@:~/workspace/mnist/mnist_app$ ls build.sh src acri@:~/workspace/mnist/mnist_app$ ./build.sh No LSB modules are available. No LSB modules are available. aarch64-xilinx-linux-g++ (GCC) 10.2.0 : acri@:~/workspace/mnist/mnist_app$ ls build.sh mnist_app src
  • 26. [AMD Official Use Only - General] ZCU102:動作環境構築  ZCU102のSDカードイメージ ◼ XilinxのサイトからSDカードイメージをダウンロードし、SDカードに 書き込むのみ。  https://japan.xilinx.com/member/forms/download/des ign-license-xef.html?filename=xilinx-zcu102-dpu- v2021.2-v2.0.0.img.gz ◼ DPUが組み込まれたFPGA回路情報(xclbinファイル)も含まれて いる。  PetaLinux起動手順 ◼ 書き込んだSDカードをZCU102に挿す。 ◼ UARTのシリアルケーブルを接続する。 ◼ 電源ON  独自の回路、環境としたい場合は カスタムプラットフォームを作成する。 26
  • 27. [AMD Official Use Only - General] ZCU102:動作環境構築  SDカードの/home/root に以下のファイルをコピー ◼ コンパイル済みモデルファイル  mnist/logs/100/ai_comp/mnist.xmodel ◼ アプリケーション実行ファイル  mnist/mnist_app/mnist_app ◼ 推論用のMNISTデータ  mnist_data.tar.gzを展開 27 /home/root mnist_app mnist_data mnist.xmodel mnist_0000.dat mnist_0999.dat mnist_label.txt : SDカード上のファイルツリー FPGA DPU CPU アプリ モデル 6 モデル これを動作させる 準備が整った
  • 28. [AMD Official Use Only - General] 実行結果  ZCU102上で以下のコマンドを実行 ◼ 精度 :99.3% ◼ 推論時間:1回目343μs、2回目以降は約250μs 28 root@xilinx-zcu102-2021_2:~# ./mnist_app mnist.xmodel : 343 micro sec Image : mnist_0000.dat, label = 5 top[0] prob = 0.863923 name = 5 top[1] prob = 0.085540 name = 3 top[2] prob = 0.026088 name = 6 top[3] prob = 0.013964 name = 8 top[4] prob = 0.008470 name = 9 : 247 micro sec Image : mnist_0999.dat, label = 6 top[0] prob = 0.978142 name = 6 top[1] prob = 0.007016 name = 8 top[2] prob = 0.004255 name = 0 top[3] prob = 0.003314 name = 4 top[4] prob = 0.002747 name = 5 correct_num = 993 Accuracy = 0.993000
  • 29. [AMD Official Use Only - General] まとめ  Vitis-AI ver2.0、TensorFlow 2.6を使用して MNISTの学習からAIコンパイルまでと、これを動作さ せるアプリケーションについて、環境構築からサンプル を用いた実際の処理について解説した。  ZCU102上で動作させ、推論が動作することを確認し た。  解説した内容はMNISTだけでなく、YOLOなど他のネ ットワークに対しても適用できるものである。 29
  • 30. [AMD Official Use Only - General] 宣伝  高位合成の書籍を出版しました。 ◼ 「高位合成によるFPGA回路設計」 (森北出版) ◼ FPGA初心者、ソフトウェア技術者向け  FPGAアーキテクチャの基礎  Vitisを使った高位合成の実装方法  Vitis-AIを使ったMNIST、YOLOv3 ◼ ここではVitis-AI 1.2を使用しています 30