FC2カウンター FPGAの部屋 Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる2
fc2ブログ

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

FPGAの部屋

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

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

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

Vitis-AI 2.5 のカスタム OP ワークフローをやってみようということで、前回は、tf2_custom_op_demo.tar.gz をダウンロードして解凍し、1_run_train.sh を実行して学習した。今回は、量子化を行ってコンパイルして XMODL を生成した。

量子化を行った。
bash 3_run_quantize.sh
Custom_OP_Workflow_9_221202.png
Custom_OP_Workflow_10_221202.png

(vitis-ai-tensorflow2) Vitis-AI /workspace/tf2_custom_op_demo > bash 3_run_quantize.sh
2022-11-29 00:30:07.215340: 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:30:07.215358: 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:30:08.950130: 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:30:08.950152: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)
2022-11-29 00:30:08.950183: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:163] no NVIDIA GPU device is present: /dev/nvidia0 does not exist
2022-11-29 00:30:08.950373: 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, 28, 28, 1)]       0         
                                                                 
 conv2d (Conv2D)             (None, 22, 22, 32)        1600      
                                                                 
 batch_normalization (BatchN  (None, 22, 22, 32)       128       
 ormalization)                                                   
                                                                 
 conv2d_1 (Conv2D)           (None, 16, 16, 32)        50208     
                                                                 
 batch_normalization_1 (Batc  (None, 16, 16, 32)       128       
 hNormalization)                                                 
                                                                 
 max_pooling2d (MaxPooling2D  (None, 8, 8, 32)         0         
 )                                                               
                                                                 
 conv2d_2 (Conv2D)           (None, 4, 4, 64)          51264     
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 2, 2, 64)         0         
 2D)                                                             
                                                                 
 custom_layer (Mylayer)      (None, 2, 2, 64)          256       
                                                                 
 flatten (Flatten)           (None, 256)               0         
                                                                 
 dense (Dense)               (None, 10)                2570      
                                                                 
=================================================================
Total params: 106,154
Trainable params: 106,026
Non-trainable params: 128
_________________________________________________________________
[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 84ms/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.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...
313/313 [==============================] - 8s 19ms/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.h5


./quantized/quantized.h5 が生成された。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する8”で生成した kv260_myarch.json を Vitis-AI のホーム・ディレクトリにコピーした。

コンパイルを行う。
vai_c_tensorflow2 -m ./quantized/quantized.h5 -a ../kv260_myarch.json -o ./ -n tf2_custom_op
Custom_OP_Workflow_11_221203.png
Custom_OP_Workflow_12_221203.png

(vitis-ai-tensorflow2) Vitis-AI /workspace/tf2_custom_op_demo > vai_c_tensorflow2 -m ./quantized/quantized.h5 -a ../kv260_myarch.json -o ./ -n tf2_custom_op
**************************************************
* VITIS_AI Compilation - Xilinx Inc.
**************************************************
[INFO] Namespace(batchsize=1, inputs_shape=None, layout='NHWC', model_files=['./quantized/quantized.h5'], model_type='tensorflow2', named_inputs_shape=None, out_filename='/tmp/tf2_custom_op_0x101000017010406_org.xmodel', proto=None)
[INFO] tensorflow2 model: /workspace/tf2_custom_op_demo/quantized/quantized.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, 13443.28it/s]           
[INFO] infer shape (NHWC)  :100%|█| 22/22 [00:00<00:00, 23022.63it/s]           
[INFO] perform level-0 opt :100%|█| 2/2 [00:00<00:00, 658.34it/s]               
[INFO] perform level-1 opt :100%|█| 2/2 [00:00<00:00, 1920.91it/s]              
[INFO] infer shape (NHWC)  :100%|█| 24/24 [00:00<00:00, 34580.31it/s]           
[INFO] generate xmodel     :  0%| | 0/24 [00:00<?, ?it/s]                       WARNING: Logging before InitGoogleLogging() is written to STDERR
W1129 00:44:08.246577   190 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%|█| 24/24 [00:00<00:00, 4493.30it/s]            
[INFO] dump xmodel: /tmp/tf2_custom_op_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: 38
[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_custom_op.xmodel"
[UNILOG][INFO] The compiled xmodel's md5sum is b7bcab55b1965061ca5c14e9bcd008a5, and has been saved to "/workspace/tf2_custom_op_demo/./md5sum.txt"


tf2_custom_op.xmodel が生成された。
Custom_OP_Workflow_13_221203.png

netronで XMODEL の構成を見た。
Custom_OP_Workflow_14_221203.pngCustom_OP_Workflow_15_221203.png
  1. 2022年12月03日 09:07 |
  2. Vitis-AI
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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