2 FPGA助力Python加速计算 陈志勇

CodeWarrior

2019/10/11 发布于 技术 分类

文字内容
1. FPGA 助力 Python 加速计算 陈志勇 高级技术市场经理 安富利电子科技 2019年9月21日, 上海
2. Python 工程师关心的问题 Python 语言:易学易读易用、可扩展性、可移植性等。 Python 开发工具:库丰富、效率高、调试方便 Python 的应用: 人工智能、数据分析等 Python 的生态环境:软件平台、硬件平台、方案合作伙伴等 用 Python 如何开发嵌入式产品?如何实现 算法硬件加速? Ø 之前基于python开发的工程师很少接触嵌入式环境, 接触硬件 Ø 本次题目的主要内容 Ø Python <- tools -> FPGA Ø 算法硬件加速:用FPGA的逻辑硬件实现算法加速 Ø 算法如何在FPGA 中实现?如何用”与或非”门电路去写 算法? Ø 目前哪些 Xilinx FPGA的开发工具支持python 语言? Ø 目前Xilinx 工具支持python 的主要应用领域 Ø Ø Ø Ø Ø 2
3. Python 与嵌入式计算 Python 工程师开发嵌入式产品的时候哪些地方可能会遇到性能瓶颈? Ø 传统的计算平台:基于通用处理器的架构,Intel x86 Ø 新的嵌入式计算平台:MCU,DSP,FPGA,GPU、ASSP等 Ø 嵌入式计算: Ø 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠 性、成本、体积、功耗有严格要求的专用计算机系统,它一般由嵌入式微处理器、外围硬件设备、 嵌入 式操作系统以及用户的应用程序等四个部分组成。 Ø 嵌入式系统促使计算机的形态和性能更加小型化,多功能,低功耗. Ø 加速计算: Ø 如何提高计算效率,提高计算性能 Ø 加速计算框架的考虑 Ø 加速计算平台的考虑 Ø FPGA 是如何作为加速平台的?在边缘和云端 3
4. FPGA 介绍 Ø FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的 产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路 的不足,又克服了原有可编程器件门电路数有限的缺点。 Ø 设计语言:硬件描述语言(HDL)是一种用来设计数字逻辑系统和描述数字电路的语言,常用 的主要有VHDL、Verilog HDL Ø 信号处理:数据可以并行处理 Ø 主要实现功能: Ø 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 Ø 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 Ø 新一代PCIE加速卡:人工智能、金融计算、数据库、高性能计算、视频转码等。 Ø 主要应用: Ø 通信设备:路由器、交换机、5G 设备 Ø 工业市场:工业伺服、控制器、安防相机、机器视觉、超声设备等。 Ø 消费类和广播设备:电视台演播设备、电视墙 Ø 测量测试仪器:示波器、信号发生器、逻辑分析仪等 4
5. 串行计算和并行计算 FPGA 运行频率 基于 FPGA 计算 - Parallelism 600 MHz 1 clock cycle C8 C128 250 MHz 1 clock cycle 传统的基于 DSP 计算 - Serial 5 = 250 MSPS DSP 运行频率 1 GHz 126 loops needed to process samples = 600 MSPS 126 clock cycles = 8 MSPS / MAC unit
6. 软件仿真和硬件仿真 Ø 软件仿真:这种方法主要是使用计算机软件来模拟运行, 用户不需要搭建硬件电路就可以对程序进行验证,特别 适合于偏重算法的程序。软件仿真的缺点是无法完全仿 真与硬件相关的部分,因此最终还要通过硬件仿真来完 成最终的设计。 Ø 大部分算法工程师经常做的事情 Ø 大量的仿真软件:Matlab,Simulink Ø 数学建模:核心技术 Ø 硬件仿真:使用附加的硬件来替代用户系统的单片机并 完成单片机全部或大部分的功能。使用了附加硬件后用 户就可以对程序的运行进行控制,例如单步,全速,查 看资源断点等。硬件仿真是开发过程中所必须的。 Ø 大家对硬件加速的最初印象 Ø 不仅是嵌入式系统 6
7. 加速计算 (Accelerate Computing) Ø 近期很热门的话题 Ø 目的:提高算法计算效率,缩短算法开发时间和验证时间 Ø 加速框架: Ø 分布式计算:多节点计算 Ø 并行计算:多处理器、多线程计算 Ø 分布式计算引擎:Spark Ø 并行计算语言(函数式编程):Scala Ø 加速方法: Ø 算法的优化 Ø 算法的并行化 Ø CPU: 多核 CPU Ø GPU: 多核处理器 Ø 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC 端实现。 Ø Hardware in the loop simulation 7 多核处理器系统
8. FPGA 如何实现算法加速 Ø HDL:硬件描述语言 (Verilog, VHDL),通过与或非 门、触发器等逻辑电路实现一些特定的功能。 Ø 最核心技术:算法并行处理。相比于传统CPU的串 行处理架构 Ø 存储器架构:芯片内有大容量存储器,不需要和外 面的 DDR 做反复读写。 Ø DSP 硬核:硬核乘加器,一个时钟实现。 Ø 数据的处理以FPGA 时钟 cycle 来计算的 Ø 100M 时钟,10ns Ø D 触发器:数据可以准确和时钟同步。一个 时钟 cycle 可以实现多个数据流的同步:数 据打齐 Ø 纯并行处理架构 / 流水线处理架构 8 FPGA 基本架构
9. 赛灵思 Zynq UltraScale+ MPSoC (16nm SOC 芯片) Memory Subsystem High Bandwidth Low Latency Real-Time Processors 32-bit Dual-Core Graphics Processor ARM Mali-400MP2 High Speed Peripherals Application Processor Key Interfaces 64-bit Dual/Quad-Core Video Codec Fabric Acceleration 8K4K (15fps) 4K2K (60fps) Customizable Engines High Speed Connectivity Platform & Power Management 9 Granular Power Control Functional Safety Configuration & Security Unit Anti-Tamper & Trust Industry Standards
10. 高层次综合工具 (Vivado HLS) Ø Ø Ø Ø Ø Ø Ø 是一种从 C -> RTL 语言的转换工具 全面覆盖 C、C++、OpenCL,能够进行浮点运算和任意精度浮点运算 可以输出 Verilog和 VHDL代码 可以通过制定约束 (Directive) 来提高运算性能和优化资源利用率 从算法验证到硬件实现的自动化工作流程 适合C算法的工程师进行快速硬件验证 赛灵思提供基于 OpenCV 的库函数,适用于图像处理 Ø 高层次EDA开发工具,C开发者的福音,Xilinx 开发工具的核心引擎。 Ø 怎么用C语言写硬件逻辑设计? Ø 使用C 的编程语法 Ø 借用硬件设计的思路
11. 赛灵思 openCV 库:xFopencv - HW Accelerated OpenCV Functions Level 1 Absolute Channel difference combine Channel Accumulate extract Accumulate Color convert squared Accumulate Convert bit weighted depth Arithmetic Table lookup addition Arithmetic Histogram subtraction Bitwise: AND, OR, Gradient XOR, NOT Phase Pixel-wise Min/Max multiplication Location Mean & Integral image Standard Deviation Gradient Thresholding Magnitude 11 Level 2 Level 3 Box Scale/Resize Histogram of Oriented Gradients (HOG) Gaussian StereoRectify ORB Median Warp Affine SVM (binary) Sobel Warp Perspective OTSU Thresholding Mean Shift Tracking (MST) Custom convolution Fast corner Dilate Harris corner Canny edge detection Erode Remap Image pyramid Bilateral Equalize Histogram Color Detection LK Dense Optical Flow StereoLBM Ø Xilinx并没有专注在机器视觉算 法,HLS中所使用的算法基本 都是开源的 OpenCV 算法 Ø 目前HLS提供的视觉算法函数, 只是opencv原版函数的一个重 构。功能以及接口参数基本上 同原opencv函数保持一致,方 便客户使用。同时适合于HLS 综合成 HDL代码硬件实现 Ø 客户可以直接调用这些函数, 也可以参考它们的实现,针对 自己的算法做修改
12. 什么是 PYNQ? • PYNQ: Python Productivity for Zynq (Xilinx SOC 芯片) • http://www.pynq.io/ • PYNQ is an open-source project from Xilinx® that makes it easy to design embedded systems with Xilinx Zynq® Systems on Chips (SoCs). • Using the Python language and libraries, designers can exploit the benefits of programmable logic and microprocessors in Zynq to build more capable and exciting embedded systems. PYNQ can be ported to any Zynq or ZynqMP PetaLinux supported platform 12
13. PYNQ 是如何加速 Python 设计效率的? • Programmable logic circuits are presented as hardware libraries called overlays. These overlays are analogous to software libraries. A software engineer can select the overlay that best matches their application. The overlay can be accessed through an application programming interface (API). Creating a new overlay still requires engineers with expertise in designing programmable logic circuits. The key difference however, is the build once, re-use many times paradigm. Overlays, like software libraries, are designed to be configurable and re-used as often as possible in many different applications. 解释: Ø PYNQ:软件框架 Ø Hardware library:'>library: overlay,硬件IP 库 Ø Software library:'>library: 软件库 Ø 通过API 调用 Ø Overlay 怎么产生:需要FPGA 工程师设计 IP Ø 这些overlay 库可以 re-use Ø 大前提:需要FPGA 工程师设计好硬件外设和算子库,需要firmware 工程师设计好驱动。先要搭好这个 PYNQ框架。目前开源社区已经有大量设计好的 overlay and driver 供使用。 13
14. PYNQ 是如何加速 Python 设计效率的 – con’t PYNQ uses Python for programming both the embedded processors and the overlays. Python is a “productivity-level” language. To date, C or C++ are the most common, embedded programming languages. In contrast, Python raises the level of programming abstraction and programmer productivity. These are not mutually-exclusive choices, however. PYNQ uses CPython which is written in C, and integrates thousands of C libraries and can be extended with optimized code written in C. Wherever practical, the more productive Python environment should be used, and whenever efficiency dictates, lower-level C code can be used. 解释: Ø C/ C++ 统治了嵌入式编程 Ø PYNQ 框架支持 Cpython,支持 C library,C code 14
15. PYNQ 是如何加速 Python 设计效率的 – con’t PYNQ is an open-source project that aims to work on any computing platform and operating system. This goal is achieved by adopting a web-based architecture, which is also browser agnostic. We incorporate the open-source Jupyter notebook infrastructure to run an Interactive Python (IPython) kernel and a web server directly on the ARM processor of the Zynq device. The web server brokers access to the kernel via a suite of browser-based tools that provide a dashboard, bash terminal, code editors and Jupyter notebooks. The browser tools are implemented with a combination of JavaScript, HTML and CSS and run on any modern browser. 解释: Ø PYNQ 开发框架:web-based architecture, browser as client Ø 开发环境:Jupyter notebook Ø Host:Zynq 器件 ARM 处理器 (IPython kernel and web server)。开发者可以在嵌入式平台做实时调试, 利用实际的硬件环境。 Ø 常规python程序调试:开发者仍然可以用之前熟悉的环境去调试,host 可以是PC机,先把python 程序的 逻辑调试成功。PYNQ 主要是做了python算子和外设的硬件加速,做了个映射的工作。 15
16. How to build PYNQ for user Zynq Board (客户的板子) • Follow the Steps: • 16 https://pynq.readthedocs.io/en/v2.4/pynq_sd_c ard.html#pynq-sd-card
17. Build Overlay (搭建硬件库) 17
18. 安富利 Ultra96 开发板:PYNQ 介绍 18
19. Ultra96 PYNQ v2.4 版本 It is a union of 3 major Open Source pieces that turn the Ultra96 into a complete Linux based distribution, palm of your hand computing system: 2018.3 Xilinx aarch64 PetaLinux Ubuntu Bionic AArch64 Root FS with Python 3.6 + + 100’s more onboard + 1000’s more available on the fly through “apt” Debian Package Manager 19 Xilinx PYNQ Python module and classes + v2.4 PYNQ works with Xilinx 2018.3 tool versions only! = (.img)
20. PYNQ Framework: interfacing Python with Xilinx SoC 20
21. PYNQ Library 21
22. PYNQ 开源社区项目 http://www.pynq.io/community.html Jupyter Notebook Python PL Overlay Bitstream 22 PYNQ Notebook
23. PYNQ Links • PYNQ Official Website • http://www.pynq.io/ • PYNQ Community • http://www.pynq.io/community.html • Source Code for PYNQ Project • https://github.com/Xilinx/Pynq • PYNQ Docs • https://pynq.readthedocs.io/en/latest/ind ex.html 23
24. Optical Flow 案例分析 Demo的目的: 1. Xilinx SoC 可以支持Python, OpenCV 开发 2. PYNQ可以提高 Xilinx SoC 的开发效率 3. PYNQ 中增加了 对Hardware Overlay的支持,提供了专门的Python API对Hardware Overlay进行操作,可以动态加载 bitstream。 Optical Flow Demo 中比较了用软件实现的Farneback光流算法和用 硬件逻辑实现的dense non-pyramidal Lucas-Kanade光流算法之间 的性能差异。 4. 参考链接:https://github.com/Xilinx/PYNQComputerVision/blob/master/boards/Ultra96/notebooks/4__Overlay s-opticalflow.ipynb OpenCV xFOpenCV Python, Hardware Overlay, API Python Linux PS Linux PL Software Stack 24 PS PL Accelerator (dense non-pyramidal Lucas-Kanade Hardware Stack Optical Flow Demo Based on PYNQ + Avnet Ultra96
25. Optical Flow 案例分析 – con’t # Program Overlay # Here we program the overlay on the FPGA, load the associated overlay library and load the PYNQ xlnk memory manager library import cv2 #NOTE: This needs to be loaded first # Load calcOpticalFlowDenseNonPyrLK overlay from pynq import Overlay bs = Overlay (“/user/…../xv2CalcOpticalFlowDenseNonPyhLK.bit”) bs.download() import pynq_cv.overlays.xv2CalcOpticalFlowDenseNonPyrLK as xv2 # load xlnk memory manager from pynq import xlink xlink.set_allocator_library(‘/user/…..xv2CalcOpticalFlowDenseNonPyrLK.so’) Mem_manager = xlnk() # Software Code import numpy as np frame1 = cv2.imread('./images/vtest/scene00002.png') prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) yuv = np.zeros_like(frame1) num_frames = 3 start = time.time() for i in range(num_frames): fileName = ('./images/vtest/scene0000' + str(i+3) + '.png') frame2 = cv2.imread(fileName) next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY) flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 1, 5, 1.2, 0) 25 ………. # Hardware Accelerator Code import numpy as np frame1 = cv2.imread('./images/vtest/scene00002.png') prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) (height,width,channels) = frame1.shape xFprvs = mem_manager.cma_array((height,width),np.uint8) xFnext = mem_manager.cma_array((height,width),np.uint8) xFflowX = mem_manager.cma_array((height,width),np.float32) xFflowY = mem_manager.cma_array((height,width),np.float32) num_frames = 3 start = time.time() for i in range(num_frames): fileName = ('./images/vtest/scene0000' + str(i+3) + '.png') frame2 = cv2.imread(fileName) next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY) xFnext[:] = next[:] xv2.calcOpticalFlowDenseNonPyrLK(xFprvs, xFnext, xFflowX, xFflowY)
26. Python in Edge AI Computing – Xilinx DNNDK Ø 目前赛灵思的AI开发工具支持 python 语言 输入,可以做 AI inference 的数据前处理和 后处理的工作。这部分工作可以在SOC的 ARM 里面实现。 Ø Xilinx AI Developer Resource Ø https://www.xilinx.com/products/desig n-tools/ai-inference/ai-developerhub.html#edge Ø Xilinx Edge AI Tutorial Ø https://github.com/Xilinx/Edge-AIPlatform-Tutorials Ø Xilinx ModelZoo Ø https://www.xilinx.com/bin/public/ope nDownload?filename=all_models_2019 0528.zip Ø Xilinx AI Forums Ø https://forums.xilinx.com/t5/Deephi26 DNNDK/bd-p/Deephi
27. 马达控制和可预测性维护 HLS/SDSoC Translation and Overlay FOC Algorithm Control System Using Numpy and Scikit-learn With Jupyter Notebook 27 马达控制可视化: Python with Jupyter Notebook
28. Python in Cloud AI Computing – Xilinx Machine Learning Suite Ø Ø Ø Ø 开发套件: Machine learning suite AI inference IP: xDNN AI development tools: xfDNN 在云端的AI 应用,可以接受 python 语言进行部署,做数据预处理和后处理工作。 Supported Frameworks: • Caffe • MxNet • Tensroflow Examples • DeepDetect REST Tutorial • DeepDetect Webcam • Image Classification • x8 FPGA Pooling GoogLeNet v1 Demo on AWS F1 instance xfDNN Tools • Compiler • Quantizer Easy to use Python Interface 28 Precompiled Models • 8/16-bit GoogLeNet v1 • 8/16-bit ResNet50 • 8/16-bit Flowers102 • 8/16-bit Places365 • 8/16-bit GoogleNet v3 • Face Detection • Yolo-v2 for object detection Supported Server Platforms • Intel x86 Supported FaaS • AWS F1 Xilinx Alveo PCIe 加速卡 • U50, U200, U250, U280
29. Python in Xilinx ML Framework Deploy Ø 4x higher real time inference over From Community GPUs Ø Highest Perf/Watt Ø Easy to Use ML Frameworks and APIs From Xilinx xfDNN Middleware, Tools and Runtime xDNN CNN Processing Engine 29
30. 安富利公司介绍 安富利 Xilinx 产品线中国区团队: Ø 团队人数:约70人,包括销售、技术支持和市场人员, 分布在中国17个城市,是国内最大的FPGA支持团队。 Ø 技术专家团队:为了配合Xilinx 主要的技术领域推广, 我们有技术专家分别负责不同的技术方向,包括:无 线和信号处理、高速IO和嵌入式设计等。 Ø 设计服务团队:我们有独立的Xilinx的设计服务团队, 可以为亚太区的客户提供基于 Xilinx 平台的参考设计 和解决方案。 Ø 技术培训:我们每年经常举办研讨会和workshop,帮 助客户尽快了解Xilinx和安富利的新产品、新工具和新 的市场应用。同时通过workshop的形式让工程师快速 掌握新工具的使用。 Ø 中国区联系方式:xilinxchina@avnet.com 30
31. Avnet Booth in PYCON CHINA 2019 Ø 安富利展台:基于PYNQ平台的计算机视觉和 AI 演示 Ø 演示目的:软件实现和硬件加速性能比较 Ø 演示链接:https://github.com/Xilinx/PYNQComputerVision Ø OpenCV Optical Flow Ø ImageNet Classification Ø All PYNQ releases ship with the popular OpenCV library pre-installed. The PYNQ computer vision overlays enable accelerating OpenCV components in Programmable Logic (PL). These overlays expose a subset Xilinx‘ xfOpenCV library at the Python level. PYNQ 实现系统框图 31
32. PYNQ on Ultra96 生态系统 Ø Ultra96 目前是一款基于 Xilinx 16nm SOC 器件性价比很好的开发板 Ø 基于统一的硬件平台,方便客户和第三方快速搭建硬件环境 Ø Python 社区活动: Ø 培训:举办系列培训活动,让python 开发者逐步了解硬件加速计算的理念 Ø 生态:建立PYNQ 生态系统,和 python 开发者广泛合作 Ø 算法:专注在算法应用的客户(计算机视觉、AI和大数据等) Ø 产品:专注在小批量样机的设计 Ø 领域:注重嵌入式计算,边缘计算,加快产品落地 Ø 第三方合作:注重在AI 应用、视觉应用 欢迎大家和我们一起推动 Python 加速计算 ! 32
33. Thank you. 陈志勇 Email: zhiyong.chen@Avnet.com Mobile: 150-0020-8088