
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
机器学习是许多人在学习人工智能技术的时候需要重点掌握的一个编程技术知识,而本文我们就通过案例分析来简单了解一下,什么是机器学习编译。
机器学习编译(Machinelearningcompilation,MLC)就是将机器学习模型从它的开发形态转换到部署形态并加以优化的过程。
开发形态(Developmentform)指的是在开发机器学习模型时使用的元素集合。一个的开发形态涉及使用通用的框架如Pytorch、TensorFlow或JAX等编写的模型描述,以及与之相关的权重。
部署形态(Deploymentform)指的是机器学习应用程序运行所需要的元素集合。它通常涉及一组生成的代码,以支持机器学习模型的每一步,管理资源(如内存)的例程,以及应用开发环境的接口(如安卓应用的javaAPI)。
机器编译的的两个目标
集成和依赖小化(Integrationanddependencyminimization):在框架如pytorch等让不同的实现模块整合到一起,需要支持,整合、小化相关依赖。
部署的过程通常涉及到整合--将必要的元素组装在一起用于部署应用程序。例如,如果我们想让一个安卓相机应用能够检测到猫,我们需要组装运行花卉分类模型的必要代码,但不一定需要其他与模型无关的部分(例如,我们不需要包括NLP应用的嵌入表查询代码)。组装和小化必要的依赖关系的能力对于减少整体规模和增加应用程序可以部署的环境的可能数量相当重要。
充分利用硬件原生加速技术(Leveraginghardwarenativeacceleration):个部署环境都有自己的一套原生加速技术,其中许多是专门为ML开发的。机器学习编译过程的一个目标是利用该硬件的原生加速技术。我们可以通过构建调用原生加速库的部署形式或生成利用原生指令(如TensorCore)的代码来实现。
其实就一个问题:在执行部署模式下,如何利用好硬件本身的加速特性。
总的来说,机器学习编译的目标就是对不同目标进行优化,以小化内存使用或提高执行效率的方式转变模型执行。如嵌入式设备如何尽可能地减少内存的使用、如何让模型更快、如何进行多机多卡的部署等等。
机器学习编译关键元素
张量(Tensor):就是一个多维数组,神经网络模型的输入、输出和中间结果都是以张量的形式表示
张量函数(TensorFunctions):神经网络的"知识"被编码在权重和输入张量和输出张量的计算序列中。我们称这些计算为张量函数。值得注意的是,一个张量函数不需要对应于神经网络计算的一个步骤。部分计算或整个端到端的计算也可以被看作是张量函数。
有多种方法来实现模型在特定环境下的执行。值得注意的是,有两个区别:
linear操作与relu操作被合并成了一个linear_relu操作。
有了一个特定的linear_relu操作的具体实现
当然,在现实用例中,linear_relu会使用各种代码优化技术来实现。
MLC是一个左边的东西转换到右边的过程。在不同的环境中,这可能是手工完成,也可能由一些自动翻译工具完成,或者两者都有。
抽象和实现
我们可能注意到一件事,我们用几种不同的方式来表示一个张量函数,例如,linear_relu就表示成了图形中一个紧凑的方框,内部表示嵌套循环表示。
我们用抽象(abstraction)来表示同一个张量函数的表示。不同的抽象可以指定一些细节,而忽略其他的实现细节。例如linear_relu可以用不同forloops来实现。
抽象和实现也许是所有计算机系统中重要的关键词。
抽象规定了“做什么”;实现提供了“怎么做”,这里没有具体的界限。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音达内三江区域学习了解。