Banana Pi BPI
RISC-V。架构下,AI。交融算力及其软件栈实践。
面临未来大模型(LLM)、AIGC等。智能。化浪潮的应战,进迭时空在。RISC。-V方向全面布局,经过精心规划的RISC-V DSA架构以及软硬一体的优化战略,将全力为未来打造高效且易用的AI算力解决方案。现在,进迭时空现已取得了明显的发展,成功推出了第一个版其他智算核(带AI交融算力的智算。CPU。)以及配套的AI软件栈。
软件栈简介。
AI。算法。布置旨在将笼统描绘的多结构算法模型,落地运用至详细的。芯片。渠道,一般选用CPU、。GPU。、NPU等相关载体。在现在的边际和端侧核算生态中,咱们普遍认为NPU相较于传统CPU有极大的本钱优势,并且短少依据CPU定制AI算力的才能或许授权,导致在实践落地场景中,NPU的运用率很高。可是NPU有其丧命的缺陷,各家NPU都具有共同的软件栈,其生态相对关闭,缺少与其他渠道的互操作性,导致资源难以同享和整合。关于用户而言,NPU内部机制不透明,使得依据NPU的二次开发,如布置私有的立异算子,往往需求牵涉到芯片。厂商。,IP厂商和软件栈保护方,研制难度较大。
着眼于这些实践的需求和问题,咱们的智算核在规划和生态上采取了敞开战略。以通用CPU为根底,结合少数DSA定制(契合RISC-V IME扩展结构)和很多微架构立异,以通用CPU的包容性最大程度的复用开源生态的作用,在兼容开源生态的前提下,供给TOPS等级的AI算力,加快边际AI。这意味着咱们能够防止低质量的重复开发,并充分运用开源资源的丰厚性和灵敏性,以较小的投入快速布置和运用智算核。这种敞开性和兼容性不只下降了布置很多现有AI模型的门槛,还为用户供给了更多的立异可能性,使得AI解决方案不再是一个专门的范畴,而是每个。程序员。都能够参加和立异的范畴。
图一:进迭时空AI软件栈架构。
如上图所示,依据进迭时空的。AI技能。道路,咱们能轻松的以轻量化插件的方法,无感融入到每一个AI算法布置结构中,现在咱们以ONNXRun。ti。me为根底,结合深度调优的加快后端,就能够成功的将模型高效的布置到咱们的芯片上,如上图所示。关于用户来说,如果有ONNXRuntime的运用经历,就能够无缝联接。
参加进迭时空插件的运用方法如下:
○ C/。C++。
C++#include。 < onnxruntime_cxx_api.h >#include "sp。ac。emit_。or。t_env.h"std::string net_pa。ram。_path = "your_onnx_model.onnx";Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "ort-demo");Ort::SessionOptions session_options; // 可选加载SpaceMIT环境初始化加载专属EPOrt::SessionOptionsSpaceMI。TE。nvInit(session_options);Ort::Session session(env, net_param_path, session_options);// 加载输入// .......auto output_tensors = session.Run(Ort::RunOptions{nullptr}, input_node_names.data(), &input_tensor, input_count, output_node_names.data(), output_count);
○。 python。
Pythonimport onnxruntime as ortimport numpy as npimport spacemit_ortnet_param_path = "resnet18.q.onnx"session = ort.InferenceSession(net_param_path, provide。rs。=["SpaceMITExecutionProvider"])input_tensor = np.ones((1, 3, 224, 224), dtype=np.float32)outputs = session.run(None, {"data": input_tensor})。
经过敞开的软件栈,使得咱们的芯片能够在短时间内支撑很多开源模型的布置,现在已累计验证了包括图画分类、图画切割、方针。检测。、。语音辨认。、自然语言了解等多个场景的约150个模型的优化布置,timm、onnx modelzoo、ppl modelzoo等开源模型库房的支撑经过率挨近100%,并且理论上咱们能够支撑一切的揭露onnx模型。
智算核的软硬协同优化。
在保证通用性和易用性的一起,咱们运用智算核的特色,极大的优化了模型推理功率。
离线优化。
离线优化包括常见的等价核算图优化(如常量折叠、算子交融、公共子表达式消除等)、模型量化等,其间模型量化将浮点核算映射为低位定点核算,是其间作用最明显的优化方法。在智算核交融算力的加持下,算子可。编程。性很高,相较于NPU固化的量化核算方法,智算核能够依据模型运用特色,匹配更广泛的数据散布,完结量化核算的精细化、多样化,以便于在更小的核算与带宽负载下,完结更高的推理功率。
运行时优化。
差异于NPU体系中,AI算子会依据NPU支撑与否,优先调度到NPU上履行,并以host CPU作为备选履行的方法。进迭时空的智算核选用了扩展AI指令的规划,以强壮的vector算力和scalar算力作为支撑,保证恣意算子都能够在智算核上得到有用履行,无需忧虑算子支撑或调度问题。这种规划不只简化了用户的操作流程,还大大提高了模型的履行功率和稳定性。
此外,进迭时空的智算核还支撑多核协同作业,进一步提高了AI算力。用户只需在运行时经过简略的线程调度,即可灵敏调整所运用的AI算力资源。
AI算力指令根底。
智算核的AI算力主要来自扩展的AI指令。咱们针对AI运用中算力占比最高的卷积和矩阵乘法,依据RISCV Vector 1.0 根底指令,新增了专用加快指令。遵照RISCV社区IME group的方法,复用了Vector。寄存器。资源,以极小的。硬件。价值,就能给AI运用带来10倍以上的功用提高。
AI扩展指令按功用分为点积矩阵乘累加指令(后边简称矩阵累加指令)和滑窗点积矩阵乘累加指令(后边简称滑窗累加指令)两大类,矩阵累加指令和滑窗累加指令组合,能够转化成卷积核算指令。
以256位的向量矩阵合作4*8*4的mac单元为例,量化后的8比特输入数据在向量寄存器中的排布,需求被看成是4行8列的二维矩阵;而量化后的8比特权重数据在寄存器中的排布,会被看成是8行4列的二维矩阵,两者经过矩阵乘法,得到4行4列输出数据矩阵,因为输出数据是32比特的,需求两个向量寄存器寄存成果。
如图二所示,为矩阵累加指令,输入数据只从VS1中读取,权重数据从VS2中读取,两者进行矩阵乘法。
图二:矩阵累加指令数据排布示例。
如图三所示,为滑窗累加指令,输入数据只从VS1和VS1+1中读取,读取的数据,经过滑动的巨细决议(巨细为8的倍数),权重数据从VS2中读取,两者进行矩阵乘法。
图三:滑窗累加指令数据排布示例。
如下图所示,9个红点对应的9行输入数据(1*k维)和权重进行乘累加核算,就得到了一个卷积值。在做卷积核算的时分,能够把矩阵乘法看成是滑动为零的滑窗指令。经过滑动0,1,2三条指令的核算,就能够完结kernel size 为3x1的的卷积核算。然后经过h维度的三次循环,就能够得到kernel size 为3x3的卷积核算。
图四:滑窗累加指令结合矩阵累加指令核算卷积示例。
相同经过滑动0,1,2,0,1五条指令的核算,和h维度五次循环,就能够完结kernel size为5x5的卷积核算,以此类推,能够得到恣意kernel size的卷积核算。
作用演示。视频。
经过以上软硬件协同优化,咱们在多任务推理时,也有十分高的功用。
重播。
00:35。
/。
00:35。
展望。
前文说到,经过ONNX与ONNXRuntime的结合,咱们能够快捷地接入开源生态,但这仅仅是完结接入的很多方法之一。实践上,咱们还能够充分运用当时备受瞩目的MLIR生态,进一步融入开源的广阔天地。这种方法不只充溢想象力,并且具有许多优势。
首要,它能够完结模型的直接原生布置。举例来说,当咱们具有一个PyTorch模型时,凭借torch.com。pi。le功用,咱们能够直接将模型布置到方针渠道上,无需繁琐的转化和适配进程,极大地提高了布置的快捷性。
其次,MLIR生态与LLVM的紧密结合为咱们供给了强壮的codegen才能。这意味着咱们能够运用LLVM丰厚的生态体系和东西链,进行代码生成和优化,然后进一步下降AI软件栈的开发本钱。经过codegen,咱们能够将高等级的模型描绘转化为底层高效的机器代码,完结功用的最优化。
图五:进迭时空AI软件栈架构规划。
引证。
https://onnxruntime.ai/。
https://onnx.ai/。
https://mlir.llvm.org/。
https://pytorch.org/。
内容来源:https://harmonyscentsg.com/app-1/mig8 lừa đảo,http://chatbotjud.saude.mg.gov.br/app-1/futemax-ufc
(责任编辑:男性)