在嵌入式计算机上运行AI的挑战
这是来自Sunya OS创始人Nikhil Bhaskaran在物联网2019的一篇演讲,Sunya OS是一个优化了嵌入式系统的AI库的操作系统,使开发人员能够以非常低的成本非常快速地构建AI边缘解决方案。在接下来的五年里,人工智能将渗透到一切事物之中;而边缘分析将成为人工智能的下一件大事。
目前人工智能领域的工作更多的是从应用的角度来解决工业问题。人们希望尽快将解决方案推向市场。为此,大多数人工智能库都内置在云中。在这种情况下,有一个很大的堆栈,第一个挑战从数据开始。
你需要训练一个模型,最大的挑战不是创建一个模型,而是找到数据并以一种有效地训练模型的方式安排数据。因此,获取正确的数据有很大的市场。
第二部分是模型的建立。有许多应用程序不需要创建像人脸识别和目标检测这样的模型。因为这些常见的应用程序已经有现成的模型,所以只需要为应用程序选择合适的模型。之后,您需要进一步训练您的模型,因为大多数模型通常针对不同的数据集进行训练,而这些数据集不能提供良好的输出。
由于每个库都擅长某一方面,因此需要仔细选择适合应用程序的正确库。
在有了工作模式之后,必须有目的地使用它来产生足够的资金。一些赚钱的人应该关注的问题是:它(模型)应该用于什么?市场在寻找什么?
除此之外,还有一个主要的竞争,因为人工智能中的每个人都直接在云上进行模型训练和数据工作。然而,人工智能同样可以在嵌入式计算机上运行良好。这通常是人们不知道的。
所有的人工智能都会在边缘发生
在云端运行模型时,通常使用googleengineapi或Amazon的对象识别模型,并为此支付一定的费用。一旦解决方案建立起来,在一段时间内你必须支付大量的钱。
相反,同样的模型可以被编码到硬件上。在嵌入式系统上,您可以获得云的性能,而无需长期付费。所有的分析都在嵌入式设备上进行,它只向云端发送有限的数据。
边缘分析将是人工智能的下一个大事件。AI库发送的所有数据都将由处理器进行计算并给出结果。例如,在过去,当在玩游戏时,所有的数学计算都是在GPU中完成的。现在,芯片上有向量处理单元,可以快速处理来自云端的向量(数据)。
GPU也擅长浮点运算。
人们不知道很多人工智能应用程序可以构建在公司可以优化的芯片上。
今天可用于人工智能的库的数量约为800多个,这听起来可能令人难以置信,但当电脑问世时,人们从来没有想到它竟然这么大。渐渐地,它成为我们生活中的必需品。人工智能将比这个大得多。在接下来的五年里,人工智能将渗透到一切事物之中。很多产品都会内置人工智能。
目前,有二十多家公司从事人工智能技术。其中最受欢迎的有腾讯、Caffe、Chainer、ONNX和PyTorch。
嵌入式系统面临的挑战
在人工智能领域工作的人经常面临诸如模型大小、选择合适的模型和框架等挑战。系统方面的挑战是大多数人没有意识到的。其中包括:
平台
在云中,代码是预先安装的。但是对于嵌入式,您需要获取源代码并将其编译到机器中。
吸引力
找到正确的来源也是一个挑战。人们需要做大量的研究来找到正确的源代码、正确的补丁并配置它们。
体系结构支持
通常使用ARM,它可以是ARM7或ARM8。在ARM8中霓虹灯支持的帮助下,硬件fpu(浮点单元)提供5倍的性能。这是非常有利的,但也具有挑战性。
汇编
交叉编译无法提供所需的性能。因此,要获得性能并使库在硬件上以最佳方式工作,您需要执行本机编译。这需要很长的编码时间,并且消耗大量的时间。
安装
编译后可能会遇到几个错误消息。需要注意正确安装库,尤其是对于新机器。
不仅仅是这些,所有库通常都有一些依赖关系。每个工具/框架/库平均有4-5个依赖项。
这些包也需要编译,以便从安装在嵌入式系统上的AI库中获得最佳性能。称为Docker的软件是运行包的最快方法,但它在运行时并没有得到优化,必须小心使用。
业界有这样一种看法,要想在边缘运行人工智能,你需要大量的计算,或者需要有更好的计算能力,这样才能获得足够的性能。然而,这是不正确的。当这个解决方案被出售时,你的成本会更高。所以,重点应该放在更好的工程上,这样可以降低价格。这应该在不损害最新技术进步的情况下实现。
OpenGL和OpenCL库
在一个嵌入式系统中,当CPU明显存在时,GPU和NPU是可选的。如果你有GPU,那么它将有OpenGL或OpenCL库。OpenGL是一个图形库,它将接收到的图形计算传递给GPU。OpenCL是一个计算库,它检查硬件上的计算能力;它得到的任何计算请求都在系统中分布。通过添加OpenCL,您的性能会非常高。它是一个额外的层,处理请求比操作系统好得多。
在应用程序方面还有很多工作要做。在云中编写代码之后,当您运行它时,分析过程就开始了。在此过程中,代码生成未知数量的威胁,如果系统无法处理这些威胁,这些威胁可能会导致硬件故障。但在嵌入式系统中,它是定制的。
在这里,边缘计算扮演了一个主要角色,它直接在硬件上执行计算操作,而不是将数据发送到云端进行计算。
随着嵌入式人工智能领域的发展,有一些框架只是为这方面而构建的。目前,TVM在这方面做得最好。