芯原微硬件赋能-VeriSilicon NPU与acuitylite

发布时间 2023-12-20 04:07:58作者: 吴建明wujianming

芯原微电子硬件赋能-VeriSilicon NPU与acuitylite

欢迎使用acuitylite的文档!

Acuitylite是一种用于嵌入式系统的端到端神经网络部署工具。Acuitylite支持将caffe/ddarknet/onx/tensorflow/tflite型号转换为TIM-VX/tflite机箱。此外,Acuitylite支持异步uint8和异步int8量化。

注意:已经引入了一些重要的更改,并更新了与Acuitylite6.20.0(包括)之前的版本不兼容的API。请仔细阅读文档和演示。

索引和表格

Guide

API Reference

Demo

PaddleLite硬件赋能: VeriSilicon NPU

1.VeriSilicon NPU

 

芯原微电子(上海)股份有限公司(芯原股份,688521.SH)是一家依托自主半导体IP,为客户提供平台化、全方位、一站式芯片定制服务和半导体IP授权服务的企业。在芯原独有的芯片设计平台即服务(Silicon Platform as a Service, SiPaaS)经营模式下,通过基于公司自主半导体IP搭建的技术平台,芯原可在短时间内打造出从定义到测试封装完成的半导体产品,为包含芯片设计公司、半导体垂直整合制造商 (IDM)、系统厂商、大型互联网公司和云服务提供商在内的各种客户提供高效经济的半导体产品替代解决方案。

 

AcuityLite是VeriSilicon提供的模型转换量化工具,目前以二进制形式无偿开放给社区使用; 通过AcuityLite,用户可以将在不同训练框架下得到的模型转换成基于TIM-VX API的源代码形式,详情可移步Acuitylite 官方支持文档

2.PaddleLite 后端框架总览

 

 

3.PaddleLite/TIM-VX 算子对接

本课程为算子开发示意,意在通过对算子对接过程的讲解让读者可以对paddlelite的后端开发流程有所了解,同时也能够将本课程中的算子开发经验移植到具体的开发板中,后续的课程中会探讨在开发板上的模型部署实战。

软件版本信息:

Component

Version Information

PaddleLite

3f0b7a351fdfa397ccce594f884e052e4afe0358

TIM-VX

f0a0f1728ae16acc0e2abbc365c286d420171423

开发环境信息:

Ubuntu 20.04.1 GCC: gcc v9.4.0

3.1 搭建开发环境

3.1.1 源代码配置

git clone git@github.com:PaddlePaddle/Paddle-Lite.git $paddlelite_root  #源代码目录

cd $paddlelite_root && git submodule update --init --recursive

默认paddlelite的开发流程会直接使用真实的硬件设备作为测试平台,但考虑到硬件设备的获取难度以及对接算子逻辑的本身实际需要,本文中会先使用VeriSilicon提供的NPU模拟器作为实验平台

修改编译以支持x86 模拟器需要应用 enable_ut_on_x86.patch

cd $paddlelite_root && patch -p1 < $path_to_patch

3.1.2 编译PaddleLite以及TIM-VX后端

cd $paddlelite_root

 ./lite/tools/build_linux.sh --with_static_mkl=OFF  --arch=x86  --with_extra=ON --with_log=ON --with_nnadapter=ON --nnadapter_with_verisilicon_timvx=ON --nnadapter_verisilicon_timvx_src_git_tag=main --nnadapter_verisilicon_timvx_viv_sdk_url=https://github.com/sunshinemyson/TIM-VX/releases/download/v1.1.30.2/viv_sdk_linux_x86_vsim.6.4.12.tgz full_publish

3.1.3 验证编译结果

# 编译目录名称会根据平台不同而不同,目前tim-vx的prebuild只支持x86的平台,其他平台可能会遇到link error

cd $paddlelite_root/build.lite.linux.x86.gcc/lite

# 单元测试需要手动编译

cd test/kernels

make test_kernel_conv_compute #其他的Test target名字可以从$paddlelite_root/lite/test/kernels/CMakeLists.txt文件内容中获得

# 准备执行环境

export VIVANTE_SDK_DIR=$paddlelite_root/build.lite.linux.x86.gcc/third_party/install/tim-vx/prebuilt-sdk/

export LD_LIBRARY_PATH=${VIVANTE_SDK_DIR}/drivers:$paddlelite_root/build.lite.linux.x86.gcc/inference_lite_lib/cxx/lib/

export VSI_NN_LOG_LEVEL=5

export VIV_VX_DEBUG_LEVEL=1

export GLOG_v=5

./test_kernel_conv_compute

单元测试执行之后就可以从log中看到TIM-VX创建计算图的相关打印信息则表示成功的将单元测试部署到了VeriSilicon的NPU模拟器上了,如下图所示:

 

3.2 后端对接详解

   

4 总结

算子接入是NPU厂商和软件生态之间的最基本互动形式,本文中主要围绕paddlelite后端算子对接,通过具体的实例可以让开发者对paddlelite内核中对后端接入的框架有所了解,也能够通过实际的算子用例分析对比对VerSilicon的TIM-VX算子API有一定程度的了解;同时,通过对单元测试的开发环境搭建和测试,读者也可以为后续的端侧部署打下一些基础。 目前,支持VeriSilicon NPU的开放硬件平台主要有一下几家: