FC2カウンター FPGAの部屋 Vitis-AI 2.5 の Custom OP Workflow のクイックスタートを使って、TensorFlow + Keras で学習した MNIST を XMDEL にする
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vitis-AI 2.5 の Custom OP Workflow のクイックスタートを使って、TensorFlow + Keras で学習した MNIST を XMDEL にする

Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる2”の続き。

前回は、たぶん MNIST の量子化を行ってコンパイルして XMODL を生成した。今回は、私が自分で学習した MNIST の h5 ファイルを使用して、XMODEL を作成してみよう。

TensorFlow + Kerasを使ってみた3(以前使用したCNNを使った学習)”で学習した MNIST 用 CNN の h5 ファイルを使用する。
なお、Tensorflow のバージョンは 1.8.0 で、Keras のバージョンは 2.1.6 だった。

mnist_cnn5_model.h5 ファイルを Vitis-AI/tf2_custom_op_demo ディレクトリにコピーした。
Custom_OP_Workflow_16_221204.png

量子化は quantize.py で実行されているので、quantize.py をコピーして quantize_mnist.py に名前を変更した。
quantize_mnist.py のハードコードされているモデルの名前と量子化して出力するファイル名を変更した。
Custom_OP_Workflow_17_221204.png

quantize_mnist.py を実行した。
python quantize_mnist.py
Custom_OP_Workflow_18_221204.png
Custom_OP_Workflow_19_221204.png

(vitis-ai-tensorflow2) Vitis-AI /workspace/tf2_custom_op_demo > python quantize_mnist.py 
2022-11-29 00:49:09.449636: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /opt/xilinx/xrt/lib:/usr/lib:/usr/lib/x86_64-linux-gnu
2022-11-29 00:49:09.449656: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2.8.0
2.8.0
2022-11-29 00:49:11.139032: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /opt/xilinx/xrt/lib:/usr/lib:/usr/lib/x86_64-linux-gnu
2022-11-29 00:49:11.139049: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)
2022-11-29 00:49:11.139099: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:163] no NVIDIA GPU device is present: /dev/nvidia0 does not exist
2022-11-29 00:49:11.139418: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d_1 (Conv2D)           (None, 24, 24, 5)         130       
                                                                 
 activation_1 (Activation)   (None, 24, 24, 5)         0         
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 12, 12, 5)        0         
 2D)                                                             
                                                                 
 flatten_1 (Flatten)         (None, 720)               0         
                                                                 
 dense_1 (Dense)             (None, 100)               72100     
                                                                 
 activation_2 (Activation)   (None, 100)               0         
                                                                 
 dense_2 (Dense)             (None, 10)                1010      
                                                                 
 activation_3 (Activation)   (None, 10)                0         
                                                                 
=================================================================
Total params: 73,240
Trainable params: 73,240
Non-trainable params: 0
_________________________________________________________________
[VAI INFO] Start CrossLayerEqualization...
10/10 [==============================] - 1s 56ms/step
[VAI INFO] CrossLayerEqualization Done.
[VAI INFO] Start Quantize Calibration...
313/313 [==============================] - 3s 6ms/step
[VAI INFO] Quantize Calibration Done.
[VAI INFO] Start Post-Quant Model Refinement...
[VAI INFO] Start Quantize Position Ajustment...
[VAI INFO] Quantize Position Ajustment Done.
[VAI INFO] Start Getting Shape Information...
[VAI INFO] Getting model layer shape information
[VAI INFO] Getting Shape Information Done.
[VAI INFO] Post-Quant Model Refninement Done.
[VAI INFO] Start Model Finalization...
[VAI INFO] Model Finalization Done.
[VAI INFO] Quantization Finished.
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.

***************** Summary *****************
Quantized model is saved in  ./quantized/quantized_mnist_cnn5.h5


./quantized/quantized_mnist_cnn5.h5 ファイルが出力された。

コンパイルを行った。
vai_c_tensorflow2 -m ./quantized/quantized_mnist_cnn5.h5 -a ../kv260_myarch.json -o ./ -n tf2_mnist_cnn5
Custom_OP_Workflow_20_221204.png
Custom_OP_Workflow_21_221204.png

(vitis-ai-tensorflow2) Vitis-AI /workspace/tf2_custom_op_demo > vai_c_tensorflow2 -m ./quantized/quantized_mnist_cnn5.h5 -a ../kv260_myarch.json -o ./ -n tf2_mnist_cnn5
**************************************************
* VITIS_AI Compilation - Xilinx Inc.
**************************************************
[INFO] Namespace(batchsize=1, inputs_shape=None, layout='NHWC', model_files=['./quantized/quantized_mnist_cnn5.h5'], model_type='tensorflow2', named_inputs_shape=None, out_filename='/tmp/tf2_mnist_cnn5_0x101000017010406_org.xmodel', proto=None)
[INFO] tensorflow2 model: /workspace/tf2_custom_op_demo/quantized/quantized_mnist_cnn5.h5
[INFO] keras version: 2.8.0
[INFO] Tensorflow Keras model type: sequential
/opt/vitis_ai/conda/envs/vitis-ai-tensorflow2/lib/python3.7/site-packages/xnnc/translator/tensorflow_translator.py:2537: H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.
  layer['config']['shape'] = h5f['optimizer_weights'][name+':0'].value.tolist()
[INFO] parse raw model     :100%|█| 10/10 [00:00<00:00, 12139.81it/s]           
[INFO] infer shape (NHWC)  :100%|█| 18/18 [00:00<00:00, 1657.50it/s]            
[INFO] perform level-0 opt :100%|█| 2/2 [00:00<00:00, 476.87it/s]               
[INFO] perform level-1 opt :100%|█| 2/2 [00:00<00:00, 1887.63it/s]              
[INFO] generate xmodel     :100%|█| 18/18 [00:00<00:00, 1958.13it/s]            
[INFO] dump xmodel: /tmp/tf2_mnist_cnn5_0x101000017010406_org.xmodel
[UNILOG][INFO] Compile mode: dpu
[UNILOG][INFO] Debug mode: function
[UNILOG][INFO] Target architecture: DPUCZDX8G_ISA1_B3136_0101000017010406
[UNILOG][INFO] Graph name: sequential, with op num: 26
[UNILOG][INFO] Begin to compile...
[UNILOG][INFO] Total device subgraph number 3, DPU subgraph number 1
[UNILOG][INFO] Compile done.
[UNILOG][INFO] The meta json is saved to "/workspace/tf2_custom_op_demo/./meta.json"
[UNILOG][INFO] The compiled xmodel is saved to "/workspace/tf2_custom_op_demo/.//tf2_mnist_cnn5.xmodel"
[UNILOG][INFO] The compiled xmodel's md5sum is 2ef83615a04046e55ee9e1fcecdff9e7, and has been saved to "/workspace/tf2_custom_op_demo/./md5sum.txt"



tf2_minist_cnn5.xmodel が生成された。
Custom_OP_Workflow_22_221204.png

netronで XMODEL の構成を見た。
Custom_OP_Workflow_23_221204.png
Custom OP Workflow と同じ MNIST なので、うまく行ったようだ。
  1. 2022年12月04日 04:30 |
  2. Vitis-AI
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5783-b550ca6d
この記事にトラックバックする(FC2ブログユーザー)