FC2カウンター FPGAの部屋 自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する3
fc2ブログ

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

FPGAの部屋

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

自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する3

自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する2”の続き。

白線間走行用CNNをKerasで学習する”で学習した白線間走行用 CNN を Vitis-AI のカスタム OP ワークフローで動作させてみたいということで、前回は、train_eval_line.py による学習を行った。今回は、量子化とコンパイルを行って、XMODEL を生成した。

量子化を行った。
python quantize_curve_line.py
Custom_OP_Workflow_40_221208.png
Custom_OP_Workflow_41_221208.png

(vitis-ai-tensorflow2) Vitis-AI /workspace/tf2_custom_op_demo > python quantize_curve_line.py 
2022-12-08 03:06:20.049079: 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-12-08 03:06:20.049101: 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-12-08 03:06:21.606180: 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-12-08 03:06:21.606207: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)
2022-12-08 03:06:21.606233: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:163] no NVIDIA GPU device is present: /dev/nvidia0 does not exist
2022-12-08 03:06:21.606406: 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: "model"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 input_1 (InputLayer)        [(None, 10, 56, 1)]       0         
                                                                 
 conv2d (Conv2D)             (None, 6, 52, 2)          52        
                                                                 
 max_pooling2d (MaxPooling2D  (None, 3, 26, 2)         0         
 )                                                               
                                                                 
 custom_layer (Mylayer)      (None, 3, 26, 2)          156       
                                                                 
 flatten (Flatten)           (None, 156)               0         
                                                                 
 dense (Dense)               (None, 100)               15700     
                                                                 
 dense_1 (Dense)             (None, 3)                 303       
                                                                 
=================================================================
Total params: 16,211
Trainable params: 16,211
Non-trainable params: 0
_________________________________________________________________
[VAI INFO] Update custom_layer_type: ['Mylayer']
[VAI INFO] setting custom layer weights, layer name: custom_layer
[VAI INFO] setting custom layer weights, layer name: custom_layer
[VAI INFO] Start CrossLayerEqualization...
 1/10 [==>...........................] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 2/10 [=====>........................] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 3/10 [========>.....................] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 4/10 [===========>..................] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 5/10 [==============>...............] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 6/10 [=================>............] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 7/10 [====================>.........] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 8/10 [=======================>......] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
 9/10 [==========================>...] - ETA: 0s[VAI INFO] setting custom layer weights, layer name: custom_layer
10/10 [==============================] - 1s 66ms/step
[VAI INFO] setting custom layer weights, layer name: custom_layer
[VAI INFO] CrossLayerEqualization Done.
[VAI INFO] setting custom layer weights, layer name: custom_layer
[VAI INFO] setting custom layer weights, layer name: custom_layer
[VAI INFO] Layer custom_layer(<class 'train_eval_line.Mylayer'>) is not supported by DPU, it will not be quantized and may be mapped to run on CPU or other IPs. Please see User Guide for list of supported operations and APIs of vai_q_tensorflow2.
[VAI INFO] setting custom layer weights, layer name: custom_layer
[VAI INFO] Start Quantize Calibration...
830/830 [==============================] - 5s 5ms/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_curve_line.h5


コンパイルを行った。
vai_c_tensorflow2 -m ./quantized/quantized_curve_line.h5 -a ../kv260_myarch.json -o ./ -n tf2_curve_line
tf2_curve_line.xmodel が生成された。
Custom_OP_Workflow_42_221208.png
Custom_OP_Workflow_43_221208.png

(vitis-ai-tensorflow2) Vitis-AI /workspace/tf2_custom_op_demo > vai_c_tensorflow2 -m ./quantized/quantized_curve_line.h5 -a ../kv260_myarch.json -o ./ -n tf2_curve_line
**************************************************
* VITIS_AI Compilation - Xilinx Inc.
**************************************************
[INFO] Namespace(batchsize=1, inputs_shape=None, layout='NHWC', model_files=['./quantized/quantized_curve_line.h5'], model_type='tensorflow2', named_inputs_shape=None, out_filename='/tmp/tf2_curve_line_0x101000017010406_org.xmodel', proto=None)
[INFO] tensorflow2 model: /workspace/tf2_custom_op_demo/quantized/quantized_curve_line.h5
[INFO] keras version: 2.8.0
[INFO] Tensorflow Keras model type: functional
/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%|█| 12/12 [00:00<00:00, 14873.42it/s]           
[INFO] infer shape (NHWC)  :100%|█| 21/21 [00:00<00:00, 22003.59it/s]           
[INFO] perform level-0 opt :100%|█| 2/2 [00:00<00:00, 698.64it/s]               
[INFO] perform level-1 opt :100%|█| 2/2 [00:00<00:00, 2537.39it/s]              
[INFO] generate xmodel     :  0%| | 0/21 [00:00<?, ?it/s]                       WARNING: Logging before InitGoogleLogging() is written to STDERR
W1208 03:08:54.900501  2409 tool_function.cpp:171] [UNILOG][WARNING] The operator named custom_layer, type: Mylayer, is not defined in XIR. XIR creates the definition of this operator automatically. You should specify the shape and the data_type of the output tensor of this operation by set_attr("shape", std::vector<int>) and set_attr("data_type", std::string)
[INFO] generate xmodel     :100%|█| 21/21 [00:00<00:00, 5217.72it/s]            
[INFO] dump xmodel: /tmp/tf2_curve_line_0x101000017010406_org.xmodel
[UNILOG][WARNING] The operator named custom_layer, type: Mylayer, is not defined in XIR. XIR creates the definition of this operator automatically. You should specify the shape and the data_type of the output tensor of this operation by set_attr("shape", std::vector<int>) and set_attr("data_type", std::string)
[UNILOG][INFO] Compile mode: dpu
[UNILOG][INFO] Debug mode: function
[UNILOG][INFO] Target architecture: DPUCZDX8G_ISA1_B3136_0101000017010406
[UNILOG][INFO] Graph name: model, with op num: 29
[UNILOG][INFO] Begin to compile...
[UNILOG][INFO] Total device subgraph number 5, DPU subgraph number 2
[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_curve_line.xmodel"
[UNILOG][INFO] The compiled xmodel's md5sum is 47bfeeb7ac6e503ec52b1bd314a5875c, and has been saved to "/workspace/tf2_custom_op_demo/./md5sum.txt"


netronで tf2_curve_line.xmodel の構成を見た。
Custom_OP_Workflow_44_221208.pngCustom_OP_Workflow_45_221208.png

  1. 2022年12月09日 04:53 |
  2. Vitis-AI
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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