Vitis AI 学习--基于Xilinx赛灵思ZYNQ 开发板实现硬件加速(一)

开发板型号: Xilinx ZYNQ  MPSoC  (ALINX AXU2CG-A)

下载好vitis-ai 后,就可以开始开发拉!

如果在docker 下载或者 docker pull 拉取 Vitis Ai 镜像中遇到问题,欢迎翻看我之前有关docker 的博客。

持续更新中.....

-------------------------------------------------------------------------------------------------------------------------------

1.启动Vitis AI ,激活Anaconda 的 tensorflow 环境

先cd到 dpu-compiler-docker 的路径

cd Vitis_Ai && ./dpu-compiler-docker.sh

 激活虚拟环境

conda activate vitis-ai-tensorflow

 注意:进入 docker 时,执行 docker 命令时用户所在路径被暂时替换为了/workplace,并且无 法访问原用户路径(home/$USER/)下的内容

2.量化

量化需要测试集数据来进行校准(Calibration),我们已预先准备好了校准用的数据集 Compile_Tools/model/vehicle/JPEGImages 。 此 外 , 运 行 该 脚 本 需 要 同 路 径 下 提 供 的 input_fn.py 文件,它负责指示数据集的路径和图像数据的输入格式处理,用于与量化工具入 口对接。

2.1 进入路径 Compile_Tools/
cd AI-Model-Zoo/all_models_1.2/tensorflow/detection/tf_yolov3_voc_416_416_65.63G_1.2/Compile_Tools
2.2 运行如下命令进行量化操作:
source 1_tf_quantize.sh

出现报错:
100% (32 of 32) |########################| Elapsed Time: 0:02:20 Time:  0:02:20
INFO: Calibration Done.
2024-09-05 09:44:06.542443: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1629] [DECENT_WARNING] Shift cut of node conv2d_48/convolution is 20. It exceed range [0, 16], modify quantize pos from 22 to 18
2024-09-05 09:44:06.544886: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1629] [DECENT_WARNING] Shift cut of node conv2d_50/convolution is 19. It exceed range [0, 16], modify quantize pos from 22 to 19
2024-09-05 09:44:06.544940: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1629] [DECENT_WARNING] Shift cut of node conv2d_52/convolution is 20. It exceed range [0, 16], modify quantize pos from 23 to 19
2024-09-05 09:44:06.551135: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1550] [DECENT_WARNING] Shift bias of node conv2d_48/convolution is 17. It exceed range [0, 16], modify quantize pos from 6 to 7
2024-09-05 09:44:06.551194: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1550] [DECENT_WARNING] Shift bias of node conv2d_50/convolution is 18. It exceed range [0, 16], modify quantize pos from 6 to 8
2024-09-05 09:44:06.551229: W tensorflow/contrib/decent_q/utils/graph_quantizer.cc:1550] [DECENT_WARNING] Shift bias of node conv2d_52/convolution is 18. It exceed range [0, 16], modify quantize pos from 6 to 8
Killed

增加 虚拟机核数 以及 内存后,重新 source

报错如下:

N/A% (0 of 32) |                         | Elapsed Time: 0:00:00 ETA:  --:--:--2024-09-05 10:22:54.285002: F tensorflow/contrib/decent_q/kernels/fix_neuron_ops.cc:36] Cannot open file: modle/vehicle/vai_q_output/temp/conv2d_68_kernel_biases_wquant for op: conv2d_68/kernel/biases/wquant
Fatal Python error: Aborted

给权限:

(vitis-ai-tensorflow) alinx@ubuntu:/workspace/AI-Model-Zoo/all_models_1.2/tensor
flow/detection/tf_yolov3_voc_416_416_65.63G_1.2/Compile_Tools$ sudo chmod 777 -R .

重新遇到第一种报错

将虚拟机的内存扩到允许范围内的最大值(本机内存为16g,虚拟机设置到了11g)

source 成功 ,量化完成后打印如下信息(大概3分钟左右)

 3.编译 DPU Kernel

这一步需要 路径 Compile_Tools/hardware/AXU*器件名*_*DPU 型号*/下对应的.dcf 配置文件和.json 描述文件。

确认json 中 dcf 文件的 路径 准确无误

回到路径 Compile_Tools/下,查看 2_vai_compile.sh,确认.json 的路径无误。(其中 TARGET 为器件名)

 3.1 执行指令编译
source 2_vai_compile.sh

 完成后生成的路径为 model/vehicle/c_output_*器件名*_*DPU 型号*/ dpu_tf_yolov3_vehicle.elf。同时会打印 DPU kernel(yolov3)的相关信息

3.2 调用DPU Kernel 分析工具

在.elf 生成的文件目录下, 使用 DDump 查看.elf 中 yolov3 Kernel 中包括输入输出接口在内的全部信息。

cd modle/vehicle/vai_c_output_AXU2CGA_DPU_B1152/ 
ddump -f dpu_tf_yolov3_voc.elf -a

 4.生成动态链接库 .so 文件

有了.elf 文件之后,下一步需要交叉编译,用于生成动态链接库.so 文件。它包含了 yolov3 kernel,只需要 python 应用程序的驱动即可在目标板上进行 yolov3 推断。

4.1下载 Xilinx Runtime docker  来使用 64bit ARM GCC 交叉编译工具链

注意,带有符号 runtime-docker:$ 的命令都是在 Runtime Docker 中完成的。

cd Vitis_Ai  &&  ./runtime-docker.sh

pull 完成后,cd 到 Compile_Tools/ 目录

cd AI-Model-Zoo/all_models_1.2/tensorflow/detection/tf_yolov3_voc_416_416_65.63G_1.2/Compile_Tools/

打开 3_lib_compiler_runtime.sh,确认 .elf 文件路径,并注释掉最后一行

 运行

runtime-docker:$ source 3_lib_compiler_runtime.sh

执行完毕后,生成 .so 文件

 将其拷贝至实验工程目录下的 code/deploy_in_board/Alinx_DNN/ tf_yolov3_vehicle_deploy/

至此,为了在目标板上运行 yolov3 推断,在进行的 host 主机端(PC) 的准备工作已经全部完成。 

### 回答1: Zynq 7045 开发板是一款由赛灵思公司(Xilinx)开发的嵌入式处理器系统开发板。该开发板采用了XilinxZynq-7000系列芯片,它是一种SoC(System-on-Chip)设计,在一颗芯片上集成了一颗FPGA和一颗ARM Cortex-A9处理器。 Zynq 7045 开发板具备强大的处理能力和灵活的可编程逻辑资源。它使用了高性能的ARM Cortex-A9双核处理器,可以运行多个操作系统和应用程序,并且支持硬件加速和协同处理。另外,它还拥有512MB DDR3 SDRAM,256Mb QSPI Flash等外部存储器,可用于存储应用程序和数据。 Zynq 7045 开发板的FPGA部分可用于设计和实现各种硬件功能。它拥有240K逻辑单元,同时还集成了多个高速串行接口,如Gigabit以太网、USB、SDIO等,可用于连接外部设备和通信接口。此外,开发板还配备了各种外设接口,如GPIO、SPI、UART等,方便用户与外部设备进行通信和交互。 对于嵌入式系统开发人员来说,Zynq 7045 开发板提供了丰富的开发工具和资源。Xilinx提供了Vivado Design Suite软件,它是一款强大的FPGA设计开发工具,可用于设计和实现FPGA逻辑。此外,还有软件开发工具链,如Xilinx SDK和Vitis,用于开发和调试ARM Cortex-A9的软件程序。 总结来说,Zynq 7045 开发板是一款功能强大、灵活性高的嵌入式处理器系统开发板。它结合了FPGA的可编程性和ARM Cortex-A9的高性能处理能力,可用于各种应用领域,如嵌入式系统设计、无线通信、图像处理等。开发人员可以借助丰富的开发工具和资源,高效地进行硬件和软件开发,实现各种复杂的嵌入式系统设计。 ### 回答2: Zynq-7045开发板是由Xilinx公司开发的一款适用于嵌入式系统设计的高性能集成电路开发板。其主要特点如下: 首先,Zynq-7045开发板采用了XilinxZynq-7000系列器件,该系列器件集成了高性能的可编程逻辑和双核ARM Cortex-A9处理器。这一特点使得开发板同时具备了硬件加速和软件处理的能力,可以满足各种复杂的应用需求。 其次,Zynq-7045开发板具有丰富的外设和接口,包括GPIO、UART、I2C、SPI、PCIe等,这些外设和接口可以满足不同应用场景下的输入输出需求,并支持灵活的扩展功能。 此外,Zynq-7045开发板配备了一组高速DDR3存储器,可以提供足够的存储容量和快速的数据传输速度,同时还可以通过SD卡或者SATA接口来扩展存储空间。 最后,Zynq-7045开发板具有强大的软件支持,包括Xilinx的Vivado开发套件和SDK软件开发工具,开发人员可以使用这些工具进行硬件设计和软件开发,实现高度定制的嵌入式系统。 综上所述,Zynq-7045开发板是一款功能强大的嵌入式系统开发平台,具有高性能、丰富的外设和接口、可扩展的存储容量以及强大的软件支持。它适用于各种嵌入式系统设计,包括工业控制、智能监测、图像处理、无人机等领域。 ### 回答3: Zynq-7045开发板是一款基于Xilinx Zynq-7000系列SoC(系统级芯片)的开发板Zynq-7045 SoC集成了ARM Cortex-A9双核处理器和Xilinx 7系列可编程逻辑器件,可在一个单一芯片上实现高性能处理和可编程逻辑功能。 Zynq-7045开发板具有丰富的硬件资源,包括DDR3内存、USB接口、以太网端口、HDMI接口、SD卡插槽、用户按键和LED指示灯等。开发板还提供了用于调试和编程的JTAG接口,以及支持外围设备扩展的PMOD和FMC接口。 通过使用Zynq-7045开发板,开发人员可以利用ARM Cortex-A9处理器的高性能处理能力和Xilinx可编程逻辑器件的灵活性来实现各种应用。他们可以使用ARM处理器来运行Linux操作系统,并利用FPGA可编程逻辑来实现特定的外围接口或实时数据处理。 开发人员可以使用Xilinx Vivado设计套件来开发和编译他们的设计,并使用Xilinx Software Development Kit (SDK)来开发和调试ARM Cortex-A9处理器的软件。同时,开发人员可以利用丰富的Xilinx IP核库来快速实现他们的设计功能。 总之,Zynq-7045开发板是一款功能强大的开发工具,提供了丰富的硬件资源和灵活性,可用于各种应用领域的设计和开发。无论是嵌入式系统、图像和信号处理、通信还是工业自动化等,Zynq-7045开发板都能提供出色的性能和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值