锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

机器学习编译第1讲:机器学习编译概述

时间:2023-02-12 15:30:00 mlc连接器

MLC-机器学习编译-第一讲-机器学习编译概述

课程主页:https://mlc.ai/summer22-zh/

文章目录

      • 1.0 概述
      • 1.1 机器学习编译是什么?
      • 1.2 为什么学习机器学习编译
      • 1.3 机器学习编译的关键要素
        • 1.3.1 注:抽象和实现
      • 1.4 总结

1.0 概述

机器学习应用程序无处不在。我们的智能家居设备由自然语言处理(NLP)由语音识别模型驱动,自动驾驶技术依赖于计算机视觉模型作为支柱,推荐系统帮助我们在探索时找到新内容。

同样有趣的是AI部署环境的应用它非常丰富。推荐系统算法通常由大公司部署在云平台上;当我们谈论自动驾驶时,我们首先想到的是强大的 GPU 或车辆上的专用计算设备;我们使用手机上的智能应用程序来识别花园里的花,以及如何照顾它们;越来越多的物联网传感器也在内置的微芯片中运行AI算法。

如果我们深入研究这些环境,就会涉及到更多的环境多样性。即使是属于同一类别的环境(如云),也有硬件(ARM 或 x86)操作系统容器执行环境运行时计算库 (Runtime Libraries) 或所涉及的加速器类型的问题。 智能机器学习模式从智能机器学习模式出发研发阶段转而部署在这些多样化的生产环境中,需要相当多的繁重工作。即使是我们最熟悉的环境(比如在 GPU 上),包含非标准算子的深度学习模型的部署仍然需要大量的项目。

上述许多例子都与机器学习推理有关——即在获得模型权重后进行预测的过程。同时,我们还发现训练(Training) 将过程本身部署到不同的环境中将变得越来越重要。这些需求来自于隐私保护、将模型学习扩展到分布式节点集群或在用户设备中保持模型更新的需要。建模选择推理/训练场景增加了机器学习的生产和部署的复杂性。
在这里插入图片描述
本课程将讨论如何将机器学习引入生产环境。我们将讨论一系列促进机器学习的算法落地部署方法。由于机器学习和开源系统正在开发新技术,机器学习的着陆部署仍然是一个开放和活跃的领域。然而,我们开始看到一些常见的问题和主题,最终成为本课程的主题。


1.1 机器学习编译是什么?

机器学习编译 (machine learning compilation, MLC) 从开发阶段,通过转换和优化算法,将机器学习算法转化为部署状态

  • 开发形式 指我们在开发机器学习模型时使用的形式。典型的开发形式包括使用 PyTorch、TensorFlow 或 JAX 一般框架编写的模型描述及相关权重。
  • 部署形式 它是指执行机器学习应用程序所需的形式。它通常涉及支持代码、管理资源(如内存)的控制器,以及与应用程序开发环境的接口(如 android 应用程序的 java API)。


我们用术语编译 (compilation)因为这个过程可以被视为一个非常类似于传统编译器的过程,即编译器开发我们的应用程序,并将其编译成可部署的库。然而,机器学习编译在许多方面仍然不同于传统编译。

首先,这个过程不一定涉及代码生成。例如,部署形式可以是一组预定义的库函数 ML 编译只将开发形式转换为调用这些库。挑战和解决方案也大不相同。这就是为什么我们想把机器学习编译作为一个不同于传统编译的独立主题。当然,我们也会在机器学习编译中找到一些有用的传统编译概念。

机器学习编译通常有以下目标:

  • 集成和最小化依赖 :通常涉及部署过程集成 (Integration),即将必要的元素组合在一起以用于部署应用程序。 例如,如果我们想使用Android相机应用程序来检测猫,我们将需要图像分类模型的必要代码,但不需要与模型无关的其他部分(例如,我们不需要包括它) NLP 应用程序的embedding table)。代码集成,最小化依赖项的能力它可以减小应用程序的大小,使应用程序部署到更多的环境中。
  • 用硬件加速: 每个部署环境都有自己的一套本地加速技术,其中许多是专门为机器学习开发的。机器学习编译的目标之一是利用硬件本身的特性加速。 我们可以构建部署代码或生成和利用原始加速库原生指令(如 TensorCore)代码做到这一点。
  • 通用优化: 运行相同模型执行的等效方法有很多。 MLC 一般优化形式是不同形式的优化最小化内存使用或提高执行效率实施转换模型的方式。

这些目标没有严格的界限。例如,集成和硬件加速也可以被视为通用优化。根据具体的应用场景,我们可能对一些模型和生产环境感兴趣,或者我们可能对部署多个模型和选择最昂贵的问题感兴趣。

重要的是,机器学习和编译并不一定意味着一个单一而稳定的解决方案。事实上,随着硬件和模型数量的增加,许多机器学习和编译实践涉及到与来自不同背景的开发人员的合作。硬件开发人员需要支持最新的硬件加速,机器学习工程师需要实现额外的优化,算法工程师也引入了新的模型。


1.2 为什么学习机器学习编译

本课程将机器学习编译作为法论和相应的工具集。这些工具可以与普通机器学习系统一起使用,也可以简单地在普通机器学习系统中工作,为用户提供价值。

  • 机器学习工程师,机器学习和编译为解决问题提供了基本的方法和工具。它有助于回答我们能用什么方法特定模型的部署和内存效率,如何将优化模型的单个部分的经验推广到更端到端的解决方案等一系列问题。

  • 机器学习科学家可以学习机器学习编译更深入地了解将模型投入生产所需的步骤。机器学习框架本身隐藏了一些技术复杂性,但当我们试图开始部署新模型或将模型部署到框架支持不完善的平台上时,我们仍然面临着巨大的挑战。机器学习编译给了机器学习算法科学家理解背后基本原理的机会,并知道为什么我的模型运行速度低于预期,以及如何使部署更有效。

  • 对于硬件制造商来说,机器学习为构建机器学习软件栈提供了一种通用的方法最好使用他们构建的硬件。在尽可能减少整体工程工作量的前提下,提供自动化软件优化工具,跟上新一代硬件和模型的开发。 重要的是,机器学习编译技术并不是孤立的。许多 MLC 该技术已被应用或集成到常见的机器学习框架和机器学习部署过程中。 MLC 在塑造机器学习框架生态系统时 API、架构和连接组件发挥着越来越重要的作用。

  • 最后,学习 MLC 这很有趣。借助这套现代机器学习编译工具,我们可以从先进的机器学习模型、代码优化到裸机的各个阶段端到端 (end to end) 了解这里发生的事情,用它们来解决我们的问题


1.3 机器学习编译的关键要素


在前一部分中,我们总结了机器学习编译。现在,我们将深入讨论机器学习编译的一些关键要素。让我们回顾一个执行两层神经网络模型的例子。

在这个特定的模型中,我们通过展平输入图像中的像素获得向量 (Vector);然后,我们应用线性转换将输入图像投影到长度 200 并运行ReLU 激活函数。最后,我们将其映射到长度 10 向量,向量的每个元素对应于图像属于特定类别的可能性。

  • 张量 (Tensor) 它是执行中最重要的元素。张量是指神经网络模型执行的输入、输出和中间结果的多维数组。li
  • 张量函数 (Tensor functions): 神经网络的“知识”被编码在权重和接受张量和输出张量的计算序列中。我们将这些计算称为张量函数。值得注意的是,张量函数不需要对应于神经网络计算的单个步骤。部分计算或整个端到端计算也可以看作张量函数。


我们有多种方法可以在特定环境中实现模型执行。 上面的例子展示了一个例子。 值得注意的是,有两个区别: 首先,第一个linear层和relu计算被折叠成一个 linear_relu 函数,这需要有一个特定的linear_relu的详细实现。 当然,现实世界的用例,linear_relu 可以通过各种代码优化技术来实现,其中一些技术在的后面的课程中会进行介绍。 机器学习编译的过程就是是将上图左侧的内容转换为右侧的过程。在不同的场景中,这个过程可以是手动完成的,也可以使用一些自动转换工具,或两者兼而有之。

1.3.1 备注:抽象和实现

我们可能注意到的一件事是,我们使用了几种不同的方式来表示张量函数。例如,linear_relu 可以表示为图形中的组合框或循环嵌套 (loop nest) 表示。

我们使用 抽象 (Abstraction) 来表示我们用来表示相同张量函数的方式。不同的抽象可能会指定一些细节,而忽略其他 实现(Implementations) 细节。例如,linear_relu 可以使用另一个不同的 for 循环来实现。

抽象和实现可能是所有计算机系统中最重要的关键字抽象指定“做什么”,实现提供“如何”做。没有具体的界限。根据我们的看法,for 循环本身可以被视为一种抽象,因为它可以使用 python 解释器实现或编译为本地汇编代码。

MLC 实际上是在相同或不同抽象下转换和组装张量函数的过程。我们将研究张量函数的不同抽象类型,以及它们如何协同工作以解决机器学习部署中的挑战。


1.4 总结

  • 机器学习编译的目标:集成与最小化依赖、利用硬件加速、通用优化
  • 为什么学习机器学习编译:构建机器学习部署解决方案、深入了解现有机器学习框架、为新兴硬件建立软件栈
  • 机器学习编译的关键要素:张量和张量函数、抽象和实现是值得思考的工具
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章