人工智能部署到Adreno?GPUPyTorch开发

AdrenoGPU可以加速复杂几何图形的渲染,在提供高性能图形和丰富的用户体验的同时拥有很低的功耗。

TVM使用TVM的原生OpenCL后端和OpenCLML后端以支持加速AdrenoGPU上的深度学习。TVM的原生OpenCL后端通过结合纹理内存使用和Adreno友好布局来改进Adreno。OpenCLML是由高通发布的SDK,提供了大多数深度学习运算符的内核加速库。

本指南展示以下方面的不同设计

TVM的OpenCL后端已被增强以利用Adreno特色功能,如

Adreno的一个优势是对纹理的巧妙处理。目前,TVM能够通过对Adreno的纹理支持获得益处。下图显示了AdrenoA5x架构。

图1用于OpenCLAdrenoA5x架构的高层次概览

使用纹理的原因:

总体而言,与基于OpenCL缓冲区的解决方案相比,使用纹理可以获得显著的性能提升。

通常,我们将目标指定为target="opencl",以生成如下所示的内核的常规OpenCL目标。

__kernelvoidtvmgen_default_fused_nn_conv2d_kernel0(__globalfloat*restrictp0,__globaldouble*restrictp1,__globalfloat*restrictconv2d_nhwc){//body..上述OpenCL内核定义有__globalfloat*类型指针,它们实质上是OpenCLbuffer对象。

通过修改目标定义为target="opencl-device=adreno"启用基于纹理的增强后,我们可以看到生成的内核使用纹理支持的OpenCL图像对象,如下所示。

__kernelvoidtvmgen_default_fused_nn_conv2d_kernel0(__write_onlyimage2d_tpad_temp_global_texture,__read_onlyimage2d_tp0){//body..image2d_t是内置的OpenCL类型,用于表示二维图像对象并提供几个附加功能。当我们使用image2d_t时,我们一次读取4个元素可以更有效地利用硬件。

本节提供有关构建和部署模型到Adreno目标机的方法说明。Adreno是通过ADB连接与主机连接的远程目标。在这里部署已编译的模型需要在主机和目标上使用一些工具。

TVM提供了简单的、用户友好的命令行工具以及专为开发者设计的PythonAPI接口,可用于各种步骤,如自动调整、构建和部署。

图2Adreno设备的构建和部署流水线

上图展示了以下各个阶段的通用流程:

此教程以下各节将涵盖上述内容。

对于Docker设置,先决条件只是主机上有Docker工具。

以下命令可以构建Adreno的Docker镜像:

./docker/build.shci_adrenodockertagtvm.ci_adrenoci_adreno现在,我们可以使用以下命令构建主机和目标工具:

./tests/scripts/ci.pyadreno-i要使用OpenCLMLSDK构建TVM,在构建时需要导出OpenCLMLSDK,如下所示:

exportADRENO_OPENCL=./tests/scripts/ci.pyadreno-i成功编译后,您将进入Dockershell。构建将生成两个文件夹:

build-adreno-target:包含Android目标组件。

在使用Docker环境时,Android设备与主机共享,所以在主机上需要安装ADB版本为1.0.41,因为Docker使用相同的版本。

您还可以在Docker环境中检查ADB设备的可用性:

以下命令将配置主机编译:

mkdir-pbuildcdbuildcp../cmake/config.cmake.#启用RPC功能以与远程设备通信。echoset(USE_RPCON)>>config.cmake#我们在主机(x86)上使用图执行器验证模型。echoset(USE_GRAPH_EXECUTORON)>>config.cmake#启用溢出时的回溯以获取更多调试信息。echoset(USE_LIBBACKTRACEAUTO)>>config.cmake#目标主机将是llvm。echoset(USE_LLVMON)>>config.cmake此外,我们可以推送以下配置条目,以使用OpenCLML支持进行编译:

exportADRENO_OPENCL=echoset(USE_CLML${ADRENO_OPENCL})>>config.cmake现在我们可以像下面这样构建:

cmake..make最后,我们可以导出Python路径:

exportPYTHONPATH=$TVM_HOME/python:${PYTHONPATH}python3-c"importtvm"#验证tvmPython包现在,我们可以使用以下配置来配置和构建目标组件。目标构建需要安装AndroidNDK。

exportADRENO_OPENCL=echoset(USE_CLML"${ADRENO_OPENCL}")>>config.cmakeechoset(USE_CLML_GRAPH_EXECUTOR"${ADRENO_OPENCL}")>>config.cmake对于Android目标构建,ANDROID_NDK_HOME是一个依赖项,我们应该在环境变量中设置相同的依赖项。以下命令将构建Adreno目标组件:

RPC设置也可用于通过python接口或来自主机设备的tvmc工具将已编译的模型部署到远程设备。

RPC设置有多个组件,如下所示。

TVMTracker:TVMTracker是主机端的守护程序,管理远程设备并为主机端应用程序提供服务。应用程序可以连接到此跟踪器并获取远程设备句柄以进行通信。

TVMRPC:TVMRPC是在远程设备上运行的本地应用程序(本情况下是Android),并向在主机上运行的TVMTracker注册自身。

因此,对于基于RPC的设置,我们将在主机和目标设备上运行上述组件。以下部分解释了如何手动设置相同的内容,以及如何在使用自动化工具的Docker环境中设置相同的内容。

自动化RPC设置:此处,我们将解释如何在Docker环境中设置RPC。

以下命令在Docker环境中启动tracker,其中tracker监听端口9190。

./tests/scripts/ci.pyadreno-i#在anrenodocker上启动一个新的shellsourcetests/scripts/setup-adreno-env.sh-etracker-p9190现在,以下命令可以在具有IDabcdefgh的远程Android设备上运行TVMRPC。

./tests/scripts/ci.pyadreno-i#在adrenodocker上启动一个新的shell。sourcetests/scripts/setup-adreno-env.sh-edevice-p9190-dabcdefgh此外,以下命令可用于在任何其他Docker终端上查询RPC设置详细信息。

这些RPC设置完成后,我们在主机127.0.0.1(rpc-tracker)上拥有rpc-tracker,端口9190(rpc-port)可用。

.._commandline_interface:

模型导入和调整:使用以下命令从任何框架导入模型并对其进行自动调整。此处我们使用来自Keras的模型,它使用RPC设置进行调整,并最终生成调整日志文件keras-resnet50.log。

python3-mtvm.driver.tvmctune--target="opencl-device=adreno"\--target-host="llvm-mtriple=aarch64-linux-gnu"\resnet50.h5-o\keras-resnet50.log\--early-stopping0--repeat30--rpc-keyandroid\--rpc-tracker127.0.0.1:9190--trials1024\--tuning-recordskeras-resnet50-records.log--tunerxgb模型编译:

使用以下命令编译模型并生成TVM编译器输出。

python3-mtvm.driver.tvmccompile\--cross-compiler${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang\--target="opencl,llvm"--target-llvm-mtripleaarch64-linux-gnu--target-opencl-deviceadreno\--tuning-recordskeras-resnet50.log-okeras-resnet50.tarresnet50.h5在启用OpenCLML卸载时,我们需要如下添加目标clml。调整日志对于OpenCLML卸载同样有效,因为OpenCL路径是没有经过OpenCLML路径的任何运算符的回退选项。调整日志将用于这类运算符。

python3-mtvm.driver.tvmccompile\--cross-compiler${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang\--target="opencl,clml,llvm"--target-llvm-mtripleaarch64-linux-gnu--target-opencl-deviceadreno\--tuning-recordskeras-resnet50.log-okeras-resnet50.tarresnet50.h5在成功编译后,上述命令会产生keras-resnet50.tar。这是一个压缩存档,包含有kernelsharedlib(mod.so)、graphjson(mod.json)和参数二进制(mod.params)。

在目标上部署和运行:

可以通过RPC方式和本地部署方式实现在Android目标上运行编译后的模型。

我们可以使用下面的tvmc命令通过RPC基础设置在远程目标上部署。

基于部署的tvmc通常是通过RPC设置从远程主机快速验证在目标上编译的模型的一种方式。

通常,生产环境使用原生部署环境,如AndroidJNI或CPP原生环境。此处我们需要使用交叉编译的tvm_runtime接口来部署tvm编译输出,即TVMPackage。

该节解释如何使用Python接口导入、自动调整、编译和运行模型的过程。TVM通过tvmc抽象提供高级接口,以及低级的RelayAPI。我们将详细讨论这两者。

TVMC接口:

在使用tvmcPython接口时,我们首先加载一个生成TVMCModel的模型。TVMCModel将用于自动调整以生成调整缓存。编译进程使用TVMCModel和调整缓存(可选)来生成TVMCPackage。现在TVMCPackage将保存到文件系统,或者可以用于部署和在目标设备上运行。

保存的TVMCPackage也可以用于使用rtvm工具进行原生部署。

Relay接口:

RelayAPI接口提供了对TVM编译器接口的低级API访问。与tvmc接口类似,RelayAPI接口提供了各种前端API,用于将模型转换为RelayModule。RelayModule将用于所有种类的转换,如精度转换、CLML卸载和其他自定义转换(如果有)。生成的Module也将用于自动调整。最后,我们使用relay.buildAPI生成库模块。从这个库模块,我们可以导出编译产物,如模块共享库(mod.so)、参数(mod.params)和json图(mod.json)。这个库模块将用于创建图形运行时以在目标设备上部署和运行。

TVM编译输出以模块共享库(mod.so)、图形json(mod.json)和参数(mod.params)的形式表示。TVMPackage的存档表示也包含相同的内容。

通常对于任何Android应用程序集成来说,基于CPP/C的接口就足够了。

TVM原生地公开了c_runtime_api,用于加载TVM编译的模块并运行相同的模块。

.._advanced_usage:

本节详细介绍在TVM上使用Adreno目标机时的一些高级用法和其他信息。

生成源码检查

除了标准的tvm编译产物(kernel库mod.so、图形mod.json和参数mod.params)之外,我们还可以从libhandle生成openclkernel源码、clml卸载图等。TVM编译的输出被组织为一个TVM模块,其中包含许多其他导入的TVM模块。

下面的代码段可以将CLML子图以json格式转储。

#查找"clml"类型的导入模块。clml_modules=list(filter(lambdamod:mod.type_key=="clml",lib.get_lib().imported_modules))#循环遍历所有clml子图并转储以json格式的CLML子图。forcmodinclml_modules:print("CLMLSrc:",cmod.get_source())类似地,下面的代码段可以从编译的TVM模块中提取opencl

我们可以选择float16,float16_acc32(混合精度),float32(标准)。

为了充分利用GPU硬件功能并利用半精度计算和内存管理的优势,我们可以将具有浮点运算的原始模型转换为使用半精度运算的模型。选择较低的精度将积极地影响模型的性能,但也可能导致模型精度下降。

要执行转换,您需要在任何一个前端生成Relay模块的同时调用Adreno特定的转换API。

fromtvm.driver.tvmc.transformimportapply_graph_transformsmod=apply_graph_transforms(mod,{"mixed_precision":True,"mixed_precision_ops":["nn.conv2d","nn.dense"],"mixed_precision_calculation_type":"float16","mixed_precision_acc_type":"float16",},)tvm.driver.tvmc.transform.apply_graph_transforms是对ToMixedPrecision传递的简化API,为了获取所需的精度。

然后我们可以以任意方便的方式编译我们的模型:

withtvm.transform.PassContext(opt_level=3):lib=relay.build(mod,target_host=target_host,target=target,params=params)在使用tvmcPython接口时,下面的参数启用到float16的精度转换:

mixed_precision=True,mixed_precision_ops=["nn.conv2d","nn.dense"],mixed_precision_calculation_type="float16",mixed_precision_acc_type="float16"同样,tvmc命令行接口选项有以下列出的选项:

ToMixedPrecision方法是将FP32的Relay图转换为FP16版本(使用FP16或FP32累积数据类型)的过程。进行此转换对于减小模型大小很有用,因为它将权重的期望大小减半(FP16_acc16情况)。

ToMixedPrecision过程的使用简化为以下代码:

fromtvm.driver.tvmc.transformimportapply_graph_transformsmod=apply_graph_transforms(mod,{"mixed_precision":True,"mixed_precision_ops":["nn.conv2d","nn.dense"],"mixed_precision_calculation_type":"float16","mixed_precision_acc_type":"float32",},)tvm.driver.tvmc.transform.apply_graph_transforms是对ToMixedPrecision过程的简化API,以获取所需的精度。

然后我们可以以任何方便的方式编译我们的模型:

withtvm.transform.PassContext(opt_level=3):lib=relay.build(mod,target_host=target_host,target=target,params=params)在使用tvmcPython接口时,下面的参数启用到float16_acc32的精度转换:

mixed_precision=True,mixed_precision_ops=["nn.conv2d","nn.dense"],mixed_precision_calculation_type="float16",mixed_precision_acc_type="float32"

THE END
1.AI各个工具的作用与用法AI各个工具的作用与用法 # 各个工具的作用与用法 ## 引言 人工智能()技术已经深入到咱们生活的方方面面其应用领域之广工具之丰富令人叹为观止。本文旨在介绍工具的分类、作用与用法帮助读者对这些工具有一个全面、深入的理解。 ## 工具的分类 工具可按照其功能、技术和应用场景实行分类。下面我们将分别从这三个...http://www.slrbs.com/jrzg/aitong/42878.html
2.AI钢笔工具用法.docx钢笔工具:快捷键P,在钢笔工具A的情况下,按住Ctrl不放可以变成L工具,「按住Shift画直线,按一下-(减号)变成區,按一下+(加号)变成蜃AI各个快捷键,需要熟记,效率大大增加。下面讲讲直角点,控制杆,平滑: .钢笔工具:快捷键P,在钢笔工具A的情况下,按住Ctrl不放可以变成L工具,「按住Shift画直线,按一下-(减号)变成...https://m.taodocs.com/p-646552107.html
3.AI绘图学习:从零基础到熟练掌握AdobeIllustrator的全攻略AI软件简介 Adobe Illustrator 是一款由Adobe Systems开发的专业矢量图形设计软件,广泛应用于平面设计、插画、标志设计、图形设计等多个领域。其直观的用户界面和强大的绘图工具集,为设计师提供了灵活多样的创作空间,帮助其创造出高质量的矢量图像。 工具栏导航 ...https://www.imooc.com/article/349563
4.AI分析图1、图案图形填充与比例缩放 2、选择-相同-外观 可选择同色阶的面 3、吸管工具特殊用法 ——吸界面外颜色,吸管——按住鼠标左键——吸界面外颜色 ——只吸图框颜色或填充颜色,...https://www.jianshu.com/p/06f9f210fddc
1.热门AI工具盘点:60+具体工作嘲中的效率提升指南当人手一个 AI 助理的时候,你的价值将不再是你做什么,而是你让 AI 助理做什么、怎么让它去做。 限制我们发挥 AI 价值的不是 AI 的能力,而是你的见识、想象力和表达能力。 接下来,这篇文章将为大家盘点当前主流的 AI 工具、使用场景和使用方法。 https://blog.csdn.net/xiaokangss/article/details/144034879
2.探索Illustrator中的工具列了解Illustrator 中的不同工具列類型和如何使用它們。此外,了解如何自訂工具列,並建立和管理其他工具列。https://helpx.adobe.com/tw/illustrator/using/tools.html
3.AI选择工具的基本操作方法人工智能(AI)选择工具在平面设计中发挥着重要作用,让我们一起来学习如何正确使用这一功能。首先,我们需要在电脑桌面上找到“AI图标”,点击打开软件。 定位和选择编辑对象 在打开的AI软件中,我们需要准确定位并选择我们要编辑的对象。这可能是一幅图片、一个图层或者其他设计元素。确保清楚地知道自己想要对哪个对象进行操...https://mm44.cn/wangzhanjianshe/542413.html
4.智能ai写作长篇小说?HeyFridayAI写作 作为新媒体的我不得不像你们安利一个新媒体写稿的必备良药,从此解决秃头烦恼。 每次写稿到头大的时候,FridayAI写作工具简直是写作救星,即使它们不会直接撰写出整篇文章,但会根据我们的需求智能生成部分内容,并且给新媒体er很多灵感。 https://tool.a5.cn/article/show/84860.html
5.格式ai用什么软件创建,AI创作助手,格式AI软件推荐及使用方法详解...随着人工智能技术的飞速发展,AI在各个领域的应用越来越广泛,在内容创作领域,AI写作助手已经成为了许多创作者的得力助手,而格式AI作为一种新兴的AI创作工具,也受到了广泛关注,如何使用格式AI软件进行创作呢?本文将为您详细介绍格式AI软件的创建方法及使用技巧。 https://ai-bots.cn/sites/4245.html
6.那些年我在CSDN追过的安全白帽大佬,respect这是作者学习安全知识时的总结性文章,文章较长也较全面。包括信息采集、SQL注入、XSS攻击、文件上传漏洞、MSF渗透、提权及移动、BurpSuite工具用法、Wireshark工具用法、Powershell基础等知识。 Web渗透总结: Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具 https://www.eet-china.com/mp/a169261.html
7.20236个经过亲测有效的ChatGPT用法技巧和工具从上面回复中,我看到了自己很多忽略的地方。首先,通过“历史”的维度,可以让大家看到更全面的产业图景。其次,我比较熟悉的精益创业 MVP 套路,在 AI 商业创业方面仍然重要,可以把验证商业可行性放进来。第三,可以明确把各个技术路线未来发展预测都放进来,供大家参考。最后,需要提供落地工具。 https://koacheats.com/6-chatgpt-uses-tips-and-tools/
8.[系统安全]三.IDAPro反汇编工具初识及逆向解密实战前文普及了逆向分析基础知识,告诉大家如何学好逆向分析;这篇文章将详细讲解IDA Pro反汇编工具的基础用法,并简单讲解一个EXE逆向工程解密实战方法。希望对入门的同学有帮助,作者的目的是与安全人共同进步,加油~ IDA和OD是逆向分析和系统安全领域的“倚天屠龙”,掌握它们的用法至关重要,甚至决定你的深度。https://cloud.tencent.com/developer/article/1910242
9.AI工具和用法汇总—集合的集合江阴雨辰互联AI 工具和用法汇总 汇集整理 by Staok/瞰百,源于相关资料在我这慢慢越积累越多,到了不得不梳理的程度。 文中有许多内容作者还没有亲自尝试,所以很多内容只是罗列,但信息大源都已给出,授人以渔,欢迎 PR 补充细节内容,比如 好的教程、简明使用步骤、工具的优缺点、使用经验等等!!! https://www.yc00.com/news/1695225767a751039.html
10.AI网格工具用法?ai网格工具使用技巧教程:渐变网格允许对对象的颜色非常灵活和全面的实现.它在对象内部产生将遵循轮廓的...https://www.3d66.com/answers/question_1378272.html
11.AI作画AI绘画StableDiffusion插件Controlnet安装使用...模型已经全部打包好啦,对此感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。 AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性...https://www.51969.com/post/19611243.html
12.ai怎么使用shaper工具?shaper工具快捷键的用法Illustrator教程ai在绘制立体图形的时候,会使用shaper工具,该怎么用这个工具呢?下面我们就来看看shaper工具快捷键的用法,需要的朋友可以参考下 ChatGPT & MidJourney 绘图免魔法无限使用 【点击领取】 shaper工具在AI中也算是比较重要的工具,那么shaper工具到底是如何使用的呢,下面我们就来看看详细的教程。https://www.jb51.net/Illustrator/762491.html
13.《AI智能工具的应用与实操》考试今天,我们将通过一系列精心设计的题目,测试您对当前流行的AI工具的理解和应用能力。本次考试涵盖了包括文心一言、Kimi Chat、秘塔AI搜索和AiPPT在内的多款工具,旨在评估您在内容生成、文档分析、图像处理、搜索技巧以及PPT制作等方面的实操技能。 请仔细阅读题目,并根据您的知识和理解选择最合适的答案。您所展现的...https://www.wjx.cn/xz/275009152.aspx
14.干货分享,16个AI操作小技巧AI是一款非常好用的矢量图形处理工具,今天UI设计培训像素妹给大家整理出来16个好用的操作小技巧,希望能够提高大家的工作学习效率。 1、神奇的“~”键 在键盘“esc”键下方,有一个存在感很低的“~”键。当我们绘制形状时按着“~”键,可以画出令人惊叹的神奇图案。 http://uixxs.com/index.php/content/973