文章目录

  • 1. 课程简介
  • 2. 本节课内容大纲
  • 3. 机器学习编译的定义
  • 4. 机器学习编译的目标
  • 5. 为什么要学习机器学习编译?
  • 6. 机器学习编译的核心要素
    • 6.1. 备注:抽象和实现
  • 7. 总结

1. 课程简介

  该门课程是由XGBoost的作者陈天奇进行授课的。 从2022年6月18日正式开始(新鲜出炉的),每周讲授一节课程。具体内容可参考链接:中文官网或者英文官网。如果有相关问题也可以在讨论区进行留言:中文讨论区、英文讨论区。

课程目录如下所示:

  1. 机器学习编译概述
  2. 张量算子函数
  3. 张量函数与整网模型的整合
  4. 整合自定义计算库
  5. 自动化程序优化
  6. 与机器学习框架的整合
  7. 自定义硬件后端
  8. 自动张量化
  9. 计算图优化:算子融合和内存优化
  10. 部署模型到服务环境
  11. 部署模型到边缘设备

  客观来说,本课程并不适合机器学习或者深度学习的初学者。但强烈推荐同学们先学习第一课:机器学习编译概述。然后再决定是否进行更加深入的学习。

  本节课的slides链接如下:https://mlc.ai/summer22-zh/slides/1-Introduction.pdf;notes链接如下:https://mlc.ai/zh/chapter_introduction/。

2. 本节课内容大纲

  1. 什么是机器学习编译?
  2. 机器学习编译的目标是什么?
  3. 为什么要学习机器学习编译?
  4. 机器学习编译的核心要素是什么?

3. 机器学习编译的定义

  机器学习编译 (machine learning compilation, MLC) 是指,将机器学习算法从开发形态,通过变换和优化算法,使其变成部署形态。简单来说,就是将训练好的机器学习模型应用落地,部署在特定的系统环境之中的过程。

#mermaid-svg-3XmHl123LLsU371Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3XmHl123LLsU371Y .error-icon{fill:#552222;}#mermaid-svg-3XmHl123LLsU371Y .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3XmHl123LLsU371Y .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3XmHl123LLsU371Y .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3XmHl123LLsU371Y .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3XmHl123LLsU371Y .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3XmHl123LLsU371Y .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3XmHl123LLsU371Y .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3XmHl123LLsU371Y .marker.cross{stroke:#333333;}#mermaid-svg-3XmHl123LLsU371Y svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3XmHl123LLsU371Y .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3XmHl123LLsU371Y .cluster-label text{fill:#333;}#mermaid-svg-3XmHl123LLsU371Y .cluster-label span{color:#333;}#mermaid-svg-3XmHl123LLsU371Y .label text,#mermaid-svg-3XmHl123LLsU371Y span{fill:#333;color:#333;}#mermaid-svg-3XmHl123LLsU371Y .node rect,#mermaid-svg-3XmHl123LLsU371Y .node circle,#mermaid-svg-3XmHl123LLsU371Y .node ellipse,#mermaid-svg-3XmHl123LLsU371Y .node polygon,#mermaid-svg-3XmHl123LLsU371Y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3XmHl123LLsU371Y .node .label{text-align:center;}#mermaid-svg-3XmHl123LLsU371Y .node.clickable{cursor:pointer;}#mermaid-svg-3XmHl123LLsU371Y .arrowheadPath{fill:#333333;}#mermaid-svg-3XmHl123LLsU371Y .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3XmHl123LLsU371Y .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3XmHl123LLsU371Y .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-3XmHl123LLsU371Y .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-3XmHl123LLsU371Y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3XmHl123LLsU371Y .cluster text{fill:#333;}#mermaid-svg-3XmHl123LLsU371Y .cluster span{color:#333;}#mermaid-svg-3XmHl123LLsU371Y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3XmHl123LLsU371Y :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

转换
开发形态
部署形态

  开发形态是指我们在开发机器学习模型时使用的形态。典型的开发形式包括用 PyTorch、TensorFlow 或 JAX(主要指的是深度学习学习模型)等通用框架编写的模型描述,以及与之相关的权重。

  部署形态是指执行机器学习应用程序所需的形态。它通常涉及机器学习模型的每个步骤的支撑代码、管理资源(例如内存)的控制器,以及与应用程序开发环境的接口(例如用于Android 应用程序的Java API)。


  不同的AI应用对应的部署环境是互不相同的。以下图为例:电商平台不可或缺的推荐系统算法通常是部署在云平台(服务器)上;自动驾驶算法通常是部署在车辆上的专用计算设备;手机的各种APP以语音转文字的输入法为例,最终是部署在手机上的计算设备的。

  在进行机器学习模型部署时,不仅要考虑硬件系统环境,与此同时也需要考虑软件环境(如操作系统环境、机器学习平台环境等)。

4. 机器学习编译的目标

  机器学习编译的直接目标包括两点:最小化依赖和利用硬件加速。机器学习编译的最终目的是实现性能(时间复杂度、空间复杂度)优化。

  最小化依赖可以认为是集成(Integration)的一部分,提取出与应用相关的库(删除与应用无关的库),从而减少应用的大小,达到节省空间的目的。

  利用硬件加速指的是利用硬件本身的特性进行加速。可以通过构建调用原生加速库的部署代码或生成利用原生指令(如 TensorCore)的代码来做到这一点。

5. 为什么要学习机器学习编译?

  • 构建机器学习部署的解决方案。
  • 对现有机器学习框架形成更加深刻的理解。

6. 机器学习编译的核心要素

  • 张量 (Tensor) 是执行中最重要的元素。张量是表示神经网络模型执行的输入、输出和中间结果的多维数组。

  • 张量函数 (Tensor functions) 神经网络的“知识”被编码在权重和接受张量和输出张量的计算序列中。我们将这些计算称为张量函数。值得注意的是,张量函数不需要对应于神经网络计算的单个步骤。部分计算或整个端到端计算也可以看作张量函数。也就是说,不仅单个函数可以认为是张量函数,也可以把其中一部分(或者整个整体)看作是张量函数。


  下图中举了个实际的例子,第一个linear层和relu计算被折叠成一个linear_relu 函数,这需要有一个特定的linear_relu的详细实现。

6.1. 备注:抽象和实现

  对同样的目标有不同颗粒度的表示。例如对linear_relu而言,既可以使用左边两个框图进行表示,也可以用右边的循环进行表示。

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

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

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

  在后续课程中分别会涉及到四种类型的抽象:

  • 计算图
  • 张量程序
  • 库(运行时)
  • 硬件专用指令

7. 总结

  • 机器学习编译的目标

    • 集成与最小化依赖
    • 利用硬件加速
    • 通用优化
  • 为什么学习机器学习编译

    • 构建机器学习部署解决方案
    • 深入了解现有机器学习框架
    • 为新兴硬件建立软件栈
  • 机器学习编译的关键要素

    • 张量和张量函数
    • 抽象和实现是值得思考的工具

机器学习编译入门课程学习笔记第一讲 机器学习编译概述相关推荐

  1. 机器学习编译入门课程学习笔记第二讲 张量程序抽象

      本节课的slides链接如下:https://mlc.ai/summer22-zh/slides/2-TensorProgram.pdf:notes链接如下:https://mlc.ai/zh/c ...

  2. 惯性导航系统学习笔记——第一讲

    惯性导航系统学习笔记 第一讲 惯性导航系统概述 一.惯性导航基本概念 二.惯性导航基本原理 三.惯性导航应用与发展 四.小结 第一讲 惯性导航系统概述 本文为学习朱家海教授<惯性导航系统> ...

  3. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第一讲)

    作者:林夕 本文长度为2900字,建议阅读9分钟 本文为大家介绍图网络的基本概念.网络的应用以及图的结构. 标签:机器学习 目录 一.Why Networks 二.网络的应用     2.1 应用领域 ...

  4. 深度学习入门课程学习笔记06 反向传播

    本篇学习笔记对应深度学习入门课程 第七课 博客地址:http://blog.csdn.net/tangyudi 欢迎转载 反向传播: 咱们在之前的课程讲了一系列的前向传播的知识点,前向传播也就是从输入 ...

  5. Apollo星火计划学习笔记——第一讲 使用Apollo学习自动驾驶

    引言 如何学习自动驾驶? 自动驾驶是集车辆.计算机.电子电气.人工智能.通信等多学科应用为一体的的复杂系统.针对自身专业背景结合自动驾驶发展进行学习: 自动驾驶是通过智能系统来驾驶汽车从而取代了驾驶员 ...

  6. 自兴动脑人工智能课程学习笔记一:机器学习

    一.人工智能时代首选python语言 (1)Python是人工智能和数据科学领域的主流语言,快速.高效.实用.Python常用的工具库Pandas.Numpy.Matplotlib.Scikit-le ...

  7. 视觉SLAM十四讲学习笔记-第一讲

    第一讲:预备知识 SLAM介绍 SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感 ...

  8. arm cef3 linux 编译_【学习笔记】CEF Linux编译

    源码编译部分转载:https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart#markdown-header-linux ...

  9. 麻省理工公开课《算法导论》学习笔记:第一讲

    主题:简介课程,渐近概念的大局观,插入排序和归并排序,递归式函数时间分析(递归树方法) 教材:<算法导论> 收获:很感动地看到算法分析那个log(n)是为什么出现了,更深层还要听第二讲,若 ...

  10. .NET Core on K8S快速入门课程--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 目录 01-介绍K8s是什么 02-为什么要学习k8s 03-如何学习k8s ...

最新文章

  1. 使用Servlet完成单表的CRUD
  2. LINQ : 如何为LINQ TO SQL实现自定义业务逻辑
  3. 处理错误:ORA-27101: shared memory realm does not exist
  4. 黑盒之嵌入式操作系统鲁棒性研究
  5. Linux安装ImageMagick与JMagick完成过程及配置
  6. unity3d 材质概述 ---- shader
  7. Navicat for oracle 提示 cannot load oci dll,193的解决方法
  8. 拓端tecdat|R语言解释生存分析中危险率和风险率的变化
  9. 美国计算机科学教师协会,2020-2021 ACSL AMERICAN COMPUTER SCIENCE LEAGUE 美国计算机科学联赛...
  10. SVM---通俗易懂图解高斯核函数及实现
  11. Matlab在线性代数中的应用(三):求解非齐次线性方程组
  12. 使用Raspberry Pi搭建迅雷离线下载机
  13. Loadrunner_集合点(rendezvous)
  14. Flowable Modeler
  15. python程序员电脑推荐_2019程序员笔记本推荐?
  16. 安卓证书免费在线制作工具
  17. (6)Artemis持久化策略
  18. 3位领导2把椅子,应对类似情况的标准答案
  19. windows 11变回原来的右键菜单
  20. 【数据架构】SOGAF 通用实体框架 (CoE)

热门文章

  1. Python Django项目实例二
  2. NT平台ADSL拨号连接密码恢复原理
  3. 基于vue+js的商城、购物网站 毕业设计 毕设源代码的实现和设计(6)购物车
  4. C#中制作启动窗体的方法和问题
  5. 阿里云服务安装与卸载rabbitmq
  6. 51单片机小车的立项书_基于51单片机的寻迹小车设计报告.doc
  7. 用java判定三角形_人教版初中数学八年级上册“角角边”判定三角形全等公开课优质课课件教案视频...
  8. 树莓派Raspberry pi 4B 运行 WuKong-Robot 智能语音对话机器人
  9. 基于python的贪吃蛇游戏设计论文_《贪吃蛇游戏课程设计》报告毕业设计(论文)...
  10. c语言函数定义的语法格式,C语言函数 -C语言函数定义的语法格式