首页 > 其他分享 >天工开物For J6启航新章:仿真篇

天工开物For J6启航新章:仿真篇

时间:2024-09-01 10:28:24浏览次数:9  
标签:仿真 天工开物 启航 J6 平台 开发板 编译 ARM 代码

1. 仿真概述

1.1 什么仿真?

仿真是使用其它相似的系统来模仿真实的需要研究或使用的系统,其所遵循的基本原则是相似性原理。仿真从框架上涉及到两个系统:1)被仿的系统:需要研究或使用的系统;2)仿真出来的系统:在用户侧视角与被仿的系统有一定相似性。
注意:这里的系统是个抽象的概念,可以是软件,也可以是硬件,还可以是复杂的综合事件。在 征程6 开发平台中,仿真的对象为“开发板及其上的系统”

1.2 为什么要仿真?

仿真在不同行业不同背景下的的目的是不同的,这些目的包括但不限于:

  • 设计组装自动控制系统。
  • 评价目标系统性能和功能。
  • 为目标系统设计扩展功能和组件。

在J6开发平台中,仿真系统可以为我们提供下列便捷:

  1. 缓解开发工作对开发板硬件的依赖
    物理开发板的 CPU 是 ARM 的,其系统指令也是 ARM 平台的,其上应用程序的代码需要经过 arm 编译器的处理。在缺少物理开发板的情况下,经过接口仿真在开发服务器(X86平台)上实现了与 ARM 平台侧相似(因为系统及计算架构有异存在些许差异的情况是可能的,但差距一般很小)的功能。因为仿真接口和ARM平台侧接口在设计上保持了完全一致性,所以所开发的应用程序在经过不同编译器处理后即可生成的平台适用的目标程序并加以运行。对于开发而言,开发者在没有获得物理开发板前提前开始功能开发和验证工作,从仿真的 X86 平台切换真实的 ARM 平台时,只需要对所开发的代码修改编译器和运行时库便可以快速完成从仿真到真实平台的转换过程;对于用户学习而言,OE 所提供的 ARM 侧程序也可以通过改编译器和运行时库在开发服务器上加以使用。
  2. 避免多人共享同一物理开发板时带来的环境冲突问题
    物理开发板属于临界资源,其上的系统版本在某一时刻是确定而且是唯一的。如果不同人在开发时所依赖的系统版本不同,那么得不到系统版本满足的开发人员便无法进行开发工作。而仿真环境是通对通过 docker image 的版本加以区分的,其独立且可以通过 DOCKER 容器构建多个相同或不同的仿真环境,如此一来,不同开发者对系统版本的依赖便可得到解决。
  3. 数据回灌仿真
  4. 为代码调试提供便利
    在开发环境中同时存在了业务源代码、编译的目标程序以及 X86 平台调试工具 gdb。可以对业务代码逐行进行裆部调试,加速功能 bug 的排查。

1.3 仿真系统的优缺点

仿真系统包括方便快捷、成本低廉、工作效率高等诸多优点,但是每一个事物都有其两面性,仿真系统也存在一定缺点。在 征程6 开发平台中,仿真系统的缺点包括:

  1. 性能一致性
    因为特定业务场景需要,真实开发板在设计时引入了特定加速硬件以加速计算过程,而仿真所依赖的开发机一般是为通用计算而设计的普通 PC 机,并不包含真实开发板所具备的加速硬件。所以这里的仿真更多是功能上的仿真。当然,显卡作为普通计算机组件在很多 PC 机上是配备了的,同时显卡也是AI加速的主要器件之一,在接口仿真实现时可以通过显卡加速。然而这里仍然有两个方面需要考虑:1)显卡的加速效果与显卡配置相关,同时即使配置上去了是否可以达到真实的开发板上特别设计过的加速硬件也很难说。2)仿真有很多个,其加速代码的质量和开发时间也是逐步进行的,所以同样硬件条件下随着工具链版本迭代加速效果也可能是不同的。
  2. 功能一致性
    因为仿真系统和被仿真系统在计算架构、操作系统等方面存在差异,同样的数据输入在经过处理后得到的输出结果可能存在些许差异,但差距一般很小。
  3. 开发投入
    因为业务代码的最终运行环境(arm架构)和 仿真环境间的差异,需要在开发阶段构建两套编译脚本: X86 平台编译脚本 For 仿真; arm 平台编译脚本 For 最终的板端部署。
  4. 系统特性约束
    仿真的本质是 X86 平台上“模仿”出接口以实现在 ARM 平台上的功能。在 X86 仿真平台下无法使用 ARM 平台下特有的功能和指令,如 Neon。因此,功能仿真过后在最后的实车部署阶段,还是需要依赖工程的深度优化(Neon 加速等),还会涉及对齐等工作。

2. 仿真在J6计算平台的实现

2.1 仿真框架概述

在J6开发平台中,仿真功能是通过地平线统一异构计算框架 HUCP(Horizon Unified Computing Platform)来实现的。相对于 征程5 的 DNN 预测库,HUCP 支持自定义算子(Plugin)并 新增了数学计算库(FFT、BLAS等)、CV 库等的封装, 进行了功能和边界的扩展以提供计算图全图(视频通路 + 前/后处理 + 多模型串街 + 自定义计算)表达的能力,支持将全图一起送入下游编译。

注:为支持全图表达能力,在 Torch 开发环境新增 FLAP 和 LEAP 两套自定义计算组件,支持通过 DSL、Numba、Triton 等算法友好的 Python 编程方式,添加模型前/中/后的自定义计算,包括:

  1. 在 Pyramid、GDC 等硬件 IP 功能上拆分封装出的各种 OP(LEAP)
  2. CPU/ VPU 上实现的自定义计算(前/后处理,自定义算子等)(FLAP)

2.2 仿真实现原理

Description
上图 是 征程6 开发平台感知部署框架的构成,可以看出 HUCP 介于应用程序和运行平台之间,是应用程序和运行平台之间的“中间件”。对上,HUCP 为上层应用开发设计和提供了一套统一的应用程序编程接口(API);对下,隐蔽不同 CPU 架构在接口实现上带来的差异,不同架构的运算平台调用各自的系统接口对 HUCP 提供的编程接口进行实现和编译以生成不同架构的动态链接库供编译器连接时调用。

3. 仿真哪些东西

仿真功能依赖于统一异构计算框架 HUCP,而 HUCP 所提供的应用程序编程接口在实现时不仅调用了BPU、CPU、DSP 等常规硬件资源,同时也包含对 Pyramid、GDC、Stitch、Codec 等视频通路上的硬件 IP(不包含非计算的 camera 接入部分)资源的利用。在 征程6 SoC 上这些硬件是真实存在的,在 X86 平台下,通过接口的 X86 平台实现对这些硬件进行了仿真,从而透明化了不同平台间接口调用的差异。对于应用程序开发者而言,在面向接口编程的思想指导下仅需在编译阶段选择对应平台的编译工具和编译库即可。

4. 功能如何使用

4.1 基础使用环境准备

仿真功能作为算法工具链发布套件的一部分,其所依赖的环境已经集成在工具链发布(v3.0.12之后)的docker 镜像中,仿真功能基础示例(horizon_j6_open_explorer_xxx-py38_20240430/samples/ucp_tutorial/dnn/basic_samples/code/00_quick_start)也包含在工具链每次发版的 OE 包中。因此跟使用AI工具链其他功能一样,在开始使用仿真功能之前,需要先参考工具链使用手册 load 算法工具链的 docker 镜像,然后根据镜像构建映射了 OE 包的用户容器。 用户容器启动后便可参考基础示例体验仿真功能了.

注:详细的工具链使用手册 docker 基础环境准备和 docker 使用,请参考J5开发环境部署

4.2 业务代码编写

UCP 为应用程序开发者提供了统一的业务编程接口,在面向接口编程的思想指导下透明化了不同平台间接口调用的差异。因此,在业务代码构建上,不同运行平台的业务代码并无差别,开发者可将注意力集中在业务逻辑之上,待业务代码构建完成后开发者仅需在编译时选择对应平台的编译工具和编译库即可完成编译进行业务测试。
注:如果想在基于 ARM 架构的开发板平台上通过 ARM 平台下特有的功能和指令(如Neon)加速业务处理过程,同时基于仿真调试业务逻辑,可通过编译宏区别平台分别进行编程,由此带来的工作量和两个环境下数据对齐问题需要用户自己评估。

4.3 编译脚本构成

仿真平台和被仿真平台的 CPU 架构和指令集是不同的,所以说使用的编译器和运行时库也会存在差异。业务代码构建完成后,进行编译时,需要针对不同的目标运行平台选择正确的编译器和运行时库,下下述为X86 仿真平台和 ARM 目标开发板平台在部署工程实现时依赖库和脚本间的差异(来自 OE 包基础实例程序horizon_j6_open_explorer_xxx-py38_20240430/samples/ucp_tutorial/dnn/basic_samples/code/00_quick_start)。

  • 依赖库差异
    Description
  • SHELL编译脚本差异
    Description
  • CMakeLists.txt脚本中ARM&X86差异
    Description

5. 仿真案例

5.1 快速入门

该示例代码展示了 x86 仿真平台和 arm 开发板平台的基本脚本逻辑和编译逻辑,用户可以以此参照为自己的工程添加仿真构建逻辑。
Description

5.2 扩展工程案例

OE 包原 ai_benchmark 示例为方便向开发者提供参考模型后处理逻辑,构建了插件式“数据处理+模型推理+推理结果处理与展示”业务流框架。为方便开发者使用仿真功能进行自有模型的后处理代码调试,最大限度复用已有的插件式雨雾流程框架,我们对原有的 ai_benchmark 工程进行了部分修改并添加了仿真编译脚本,开发者可以参考扩展工程中 fcos 的后处理代码逻辑(类继承关系)构建适配自己模型的后处理文件并在配置中加以引用。因扩展工程中编译脚本是自动进行新增文件索引和编译的,用户只需要将自己扩展的后处理代码文件保存至与 fcos 的后处理代码文件统计的 method 目录(注意头文件和源文件分别存放)下进行编译即可,无需进行他们脚本代码的开发。

扩展工程相对于 OE 包中原 ai_benchmark 示例代码有如下差异:

  1. 保留了原 ai_benchmark 示例代码中所有的插件式框架代码,包括推理数据准备、模型推理代码以及与后处理、输出四者间的调度逻辑。
  2. 删除了源代码中大部分模型的后处理逻辑,仅保留了 fcos 的部分以作示例。
  3. 添加仿真编译脚本并对原有的 CMakeLists.txt 进行变动同时对测试运行脚本 env.sh 微调以适应仿真场景需要。
  4. 用户可以参考 fcos 的后处理逻辑可针对自己的模型构建后处理进行功能仿真验证。
    点击下载 扩展示例工程代码

6. 其他说明

6.1 与 征程5 仿真对比

J征程5 仿真功能提供的是一套基于 GPU 环境的 QAT 定点模型(红框1)推理方式,但因为该模型位于编译之前,所以端侧 runtime 数据类型的变化并不能同步体现在 x86 端。而相同的场景下,征程6 使用新一代 HBDK4 工具链对其进行了标准化,如下图所示,编译环节会同时产出一个上板模型和一个可 GPU 推理的仿真模型(红框2),SoC 和 x86 端可以使用完全相同的 API 无感地加载和推理这两个模型。因此,在J6工具链中,算法同学能够在 x86 环境下快速、便捷地完成原型验证、回灌仿真等工作,节约大量算法/工程对齐的开销,后续也能丝滑地迁移至 SoC 环境(只需替换模型文件,基于交叉编译工具重新编译工程即可),从而极大地提升了生产开发效率。
Description

标签:仿真,天工开物,启航,J6,平台,开发板,编译,ARM,代码
From: https://www.cnblogs.com/horizondeveloper/p/18391060

相关文章

  • 天工开物|征程 6 启航新章:量化流程PTQ篇
    01 概论:PTQ基础目前在GPU上训练的模型大部分都是浮点模型,即参数使用的是float类型存储。而地平线BPU架构的计算平台使用的是int8的计算精度(业内计算平台的通用精度),能运行定点量化模型。地平线征程6算法工具链(以下简称工具链)作为专业量化工具,是一套完整的边缘计算平......
  • 昱合昇|通风天窗图集:05J621-3
    05J621-3《通风天窗》是由建筑标准设计研究院主编的一本通风设备图集,该图集主要适用于各类工业厂房建筑屋顶(包括钢结构屋面、混凝土屋面以及柔性屋面等)、民用建筑或是公共建筑,主要作用是以通风排烟为主、采光为辅。能够为建筑通风排烟设计选用和安装施工提供参考指导。在05J6......
  • 【Java求职者的福音:专业简历优化服务,助力梦想启航】
    手机或电脑浏览器就可以打开,面霸宝典【全拼音】.com这里可以优化简历,模拟面试,企业项目源码,最新最全大厂高并发面试题,项目场景题,算法题,底层原理题在Java技术的浩瀚星海中,您是那颗璀璨的新星,正蓄势待发,准备在职场上绽放光芒。但在这个充满机遇与挑战的时代,如何让您的简历......
  • 从双非本科到985硕士:我的逆袭之路,即将启航上海AI实验室大模型算法岗位
    暑期实习基本结束了,校招即将开启。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC在变少,岗位要求还更高了。最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。喜欢本文记得收藏、关注、点赞。更多交流,可......
  • 关于05J621-3《通风天窗》图集的设计和制安说明
    05J621-3《通风天窗》是一本关于通风天窗的标准图集,目前已被18J621-3《通风天窗》图集所更新迭代,但是这本图集仍然在业内有所应用。今天咱就从这本图集的设计要求、制作、安装及验收四个方面进行说明。一、设计要求1、通风天窗的选用应按按照建筑的通风与采光要求,根据当地的......
  • 深中通道元宇宙启航!3DCAT实时云渲染助力沉浸式体验深中通道
    2024年6月30日上午,深圳至中山跨江通道(以下简称“深中通道”)开通活动在深中通道西人工岛举行。10时50分许,深中通道正式开通。下午3时已通车试运营。粤港澳大湾区超级工程深中通道(图源新华网)01 幻海云桥:沉浸式体验的新纪元就在开通的同一天,中山日报社与3DCAT、广东涌态信息等......
  • 21J621-1《天窗》选用说明
    21J621-1《天窗》将天窗分为平屋面罩体天窗、平屋面平天窗、钢天窗架天窗、屋面采光带、坡屋面天窗、地下室天窗、导光管采光系统七种类别。在使用环境、使用要求等方面有一定要求,小编为大家介绍一下。1、启闭及控制方式21J621-1《天窗》中的天窗启闭方式分为三种:手动、电......
  • loj6669 Nauuo and Binary Tree 题解
    https://loj.ac/p/6669赛时做法先\(n-1\)次问出深度逐层考虑。slv(vector<int>a,vector<int>b)表示在点集\(a\)中寻找\(b\)中点的父亲,询问\(a[0]\)和\(b\)中所有点的距离分治下去复杂度不会算,印象中过了树剖oiwiki二叉树:最多只有一个轻儿子类似「即时战略」......
  • QOJ6504 Flower‘s Land 2 题解
    QOJ6504Flower'sLand2题解题目链接:QOJ6504Flower'sLand2题意:给定一个只包含\(0,1,2\)的序列,\(T\)次询问,询问有两种:区间所有数加\(1\)然后模\(3\)求一段区间能否通过每次删掉相邻两个相同的数删完(如\(1,0,0,2,2,1\)就满足条件)题解:考虑用什么方法来维护区间......
  • 【北京中移产业生态孵化中心】——创新梦想启航地,新兴产业加速器!
    【科技创新,未来已来】在这个飞速发展的时代,科技创新是推动社会进步的关键力量。北京昌平办公孵化器,作为新兴产业的摇篮中心,现已全面开放企业注册地址,诚邀怀揣梦想、手握创新项目的您加入!只要您有好项目,这里就是您实现梦想的起点,一切皆有可能!【5G引领,智驭未来】5G时代已来,它......