本教材的中文名称设定为 人工智能系统,主要讲解支持人工智能的计算机系统设计,对应的中英文课程名称为 人工智能系统 System for AI。本课程中将交替使用一下词汇:人工智能系统,AI-System 和 System for AI。
本教材为微软人工智能教育与共建社区中规划的人工智能相关教材之一,在A-基础教程模块下,课程编号和名称为 A6-人工智能系统。
欢迎访问微软人工智能教育与共建社区的A-基础教程模块访问更多相关内容。
如果您觉得教材对您有帮助,请不要忘记给本站加星(点击网页顶部的Star标签),星越多说明本教材越对大家有帮助,我们就越会努力完善本站。
-
如果使用浏览器在线观看的话,可以使用 Edge 或 Chrome 浏览器,加这个Math展示控件
-
也可以clone全部内容到本地,然后用VSCode浏览,但VSCode中需要安装能读取Markdown格式的扩展,比如Markdown AllInOne插件。
-
本教程提供数据包:在"SourceCode"文件夹中下载"DataDownload.py"并运行,输入本地目录后即可开始下载数据包,并自动解压至当地。
近年来人工智能特别是深度学习技术得到了飞速发展,这背后离不开计算机硬件和软件系统的不断进步。在可见的未来,人工智能技术的发展仍将依赖于计算机系统和人工智能相结合的共同创新模式。需要注意的是,计算机系统现在正以更大的规模和更高的复杂性来赋能于人工智能,这背后不仅需要更多的系统上的创新,更需要系统性的思维和方法论。与此同时,人工智能也反过来为设计复杂系统提供支持。
我们注意到,现在的大部分人工智能相关的教材,特别是深度学习和机器学习相关课程主要集中在相关理论、算法或者应用,与系统相关的教材并不多见。我们希望人工智能系统教材能让人工智能相关教育变得更加体系化和普适化,以共同促进人工智能与系统交叉人才的培养。
本教材主要为本科生高年级和研究生设计,帮助学生:
-
完整的了解支持深度学习的计算机系统架构,并通过实际的问题,来学习深度学习完整生命周期下的系统设计。
-
介绍前沿的系统和人工智能相结合的研究工作,包括AI for Systems and Systems for AI,以帮助高年级的本科生和研究生更好的寻找和定义有意义的研究问题。
-
从系统研究的角度出发设计实验课程。通过操作和应用主流和最新的框架、平台和工具来鼓励学生动手实现和优化系统模块,以提高解决实际问题的能力,而不仅仅是了解工具使用。
先修课程与教材: C/C++/Python, 计算机体系结构,算法导论,操作系统,编译原理,计算机网络
教材主要包括以下特点:
-
体系化: 本书内容设计围绕深度学习系统全栈进行阐述,同时涵盖深度学习系统的设计原则,工作综述和方法学。
-
深入浅出: 以易于理解的文字和内容呈现方式,简化的实例,抽象出关键系统问题。同时兼顾当前前沿的研究工作,有一定深度。
-
启发式思考:系统问题的抽象与定义优先于解决方法与优化的介绍。兼顾人工智能系统领域的经典问题和代表性解决方法。启发读者思考,展开新工作。
-
兼收并蓄:本教材的设计不仅会借助微软和微软亚洲研究院在人工智能和系统交叉领域的研究成果和经验,其中包括微软及微软亚洲研究院开发的系统,平台和工具,也会参考和介绍业界主流经典的人工智能系统工作。教材也鼓励其他学校和老师根据自己的需求添加和调整更多的高级内容,或者设计新的实验。
- 1. 人工智能系统概述
- 1.1 深度学习的历史,现状与发展
- 1.1.1 深度学习的广泛应用
- 1.1.2 深度学习方法
- 1.1.3 神经网络基本理论的奠定
- 1.1.4 深度学习算法,模型的现状和趋势
- 1.2 算法,框架,体系结构与算力的进步
- 1.2.1 大数据和分布式系统
- 1.2.2 深度学习算法的进步
- 1.2.3 计算机体系结构和计算能力的进步
- 1.2.4 计算框架的进步
- 1.3 深度学习系统组成与生态
- 1.3.1 深度学习系统的设计目标
- 1.3.2 深度学习系统的大致组成
- 1.3.3 深度学习系统生态
- 1.4 深度学习样例背后的系统问题
- 1.4.1 一个深度学习样例与其中的系统问题
- 1.4.2 模型算子实现中的系统问题
- 1.4.3 框架执行深度学习模型的生命周期
- 1.4.4 更广泛的人工智能系统生态
- 1.4.5 深度学习框架及工具入门实验
- 1.5 影响深度学习系统设计的理论,原则与假设
- 1.5.1 抽象-层次化表示与解释
- 1.5.2 摩尔定律与算力发展趋势
- 1.5.3 局部性原则与内存层次结构
- 1.5.4 深度学习负载的线性代数计算与缺陷容忍特性
- 1.5.5 并行加速与阿姆达尔定律优化上限
- 1.5.6 冗余与可靠性
- 1.1 深度学习的历史,现状与发展
- 2. 深度神经网络基础
- 2.1 神经网络基本概念
- 2.1.1 神经元细胞的数学模型
- 2.1.2 神经网络的主要功能
- 2.1.3 为什么需要激活函数
- 2.2 神经网络的训练
- 2.2.1 基本训练流程
- 2.2.2 损失函数
- 2.2.3 梯度下降
- 2.2.4 反向传播
- 2.3 用神经网络解决回归问题
- 2.3.1 提出问题
- 2.3.2 万能近似定理
- 2.3.3 定义神经网络结构
- 2.3.4 前向计算
- 2.3.5 反向传播
- 2.4 用神经网络解决分类问题
- 2.4.1 提出问题
- 2.4.2 定义神经网络结构
- 2.4.3 前向计算
- 2.4.4 反向传播
- 2.4.5 运行结果
- 2.5 深度神经网络基础知识
- 2.5.1 抽象与设计
- 2.5.2 权重矩阵初始化
- 2.5.3 批量归一化
- 2.5.4 过拟合
- 2.6 梯度下降的优化算法
- 2.6.1 随机梯度下降,动量等算法
- 2.7 卷积神经网络基础知识
- 2.7.1 卷积神经网络的能力
- 2.7.2 卷积神经网络的典型结构
- 2.7.3 卷积核的作用
- 2.7.4 卷积后续的运算
- 2.7.5 卷积神经网络的特性
- 2.7.6 卷积类型
- 2.7.7 计算卷积核梯度的实例说明
- 2.8 循环神经网络基础知识
- 2.8.1 循环神经网络的发展简史
- 2.8.2 循环神经网络的结构和典型用途
- 2.8.3 深度循环神经网络
- 2.8.4 双向循环神经网络
- 2.9 注意力机制与Transformer
- 2.9.1 序列到序列模型
- 2.9.2 注意力机制
- 2.9.3 Transformer
- 2.1 神经网络基本概念
- 3. 深度学习框架基础
- 3.1 基于数据流图的深度学习框架
- 3.1.1 深度学习框架发展概述
- 3.1.2 编程范式:声明式和命令式
- 3.1.3 自动微分基础
- 3.1.4 基于数据流图的深度学习框架
- 3.1.5 计算图调度与执行
- 3.1.6 小结与讨论
- 3.2 神经网络计算中的控制流
- 3.2.1 背景
- 3.2.2 静态图:向数据流图中添加控制流原语
- 3.2.3 动态图:复用宿主语言控制流语句
- 3.2.4 动态图转换为静态图
- 3.2.5 小结与讨论
- 3.1 基于数据流图的深度学习框架
- 4. 矩阵运算与计算机体系结构
- 4.1 深度学习常见模型结构
- 4.1.1 全连接层映射到矩阵运算
- 4.1.2 卷积层映射到矩阵运算
- 4.1.3 循环网络层映射到矩阵运算
- 4.1.4 注意力层映射到矩阵运算
- 4.2 计算机体系结构与矩阵运算
- 4.2.1 CPU体系结构
- 4.2.2 CPU实现高效计算矩阵乘
- 4.3 GPU体系结构与矩阵计算
- 4.3.1 GPU体系结构
- 4.3.2 GPU编程模型
- 4.3.3 GPU实现一个简单的计算
- 4.1 深度学习常见模型结构
- 5. 深度学习框架的编译与优化
- 5.1 深度神经网络编译器
- 5.1.1 前端
- 5.1.2 后端
- 5.1.3 中间表达
- 5.1.4 优化过程
- 5.2 计算图优化
- 5.2.1 计算图与图优化
- 5.2.2 算术表达式化简
- 5.2.3 公共子表达式消除
- 5.2.4 常数传播
- 5.2.5 通用矩阵乘自动融合
- 5.2.6 算子融合
- 5.2.7 子图替换
- 5.2.8 随机子图替换
- 5.3 内存优化
- 5.3.1 深度学习模型内存分析与预估
- 5.3.2 基于拓扑序的最小内存分配
- 5.3.3 根据整数线性规划求解最优内存放置
- 5.3.4 张量换入换出与张量重计算
- 5.4 内核优化
- 5.4.1 算子表达式
- 5.4.2 算子表示与调度逻辑的分离
- 5.4.3 自动调度搜索与代码生成
- 5.5 算子调度优化
- 5.5.1 操作符融合
- 5.5.2 编译时调度
- 5.1 深度神经网络编译器
- 6. 分布式训练算法与系统
- 6.1 分布式计算简介
- 6.1.1 串行到并行计算
- 6.1.2 并行计算加速定律
- 6.2 分布式深度学习的意义
- 6.2.1 算子内并行
- 6.2.2 算子间并行
- 6.3 分布式训练算法分类
- 6.3.1 数据并行
- 6.3.2 模型并行
- 6.3.3 流水并行
- 6.4 深度学习并行训练同步方式
- 6.4.1 同步并行
- 6.4.2 异步并行
- 6.4.3 半同步并行
- 6.5 分布式训练系统简介
- 6.5.1 用户接口
- 6.5.2 单节点执行单元
- 6.5.3 通信与协调
- 6.6 分布式训练的通信协调
- 6.6.1 通信协调的硬件
- 6.6.2 通信协调的软件
- 6.1 分布式计算简介
- 7. 异构计算集群调度与资源管理系统
- 7.1 异构计算集群管理系统简介
- 7.1.1 多租环境运行的训练作业
- 7.1.2 作业生命周期
- 7.1.3 集群管理系统架构
- 7.2 训练作业,镜像与容器
- 7.2.1 深度学习作业依赖与规格
- 7.2.2 环境依赖:镜像
- 7.2.3 运行时资源隔离:容器
- 7.2.4 从操作系统视角看GPU技术栈
- 7.2.5 人工智能作业开发体验
- 7.3 调度
- 7.3.1 调度问题优化目标
- 7.3.2 群调度
- 7.3.3 DRF调度
- 7.3.4 容量调度
- 7.3.5 虚拟集群
- 7.3.6 抢占式调度
- 7.3.7 深度学习调度算法实验与模拟研究
- 7.4 面向深度学习的集群管理系统
- 7.4.1 深度学习工作负载的需求
- 7.4.2 异构硬件的多样性
- 7.4.3 深度学习平台的管理与运维需求
- 7.4.4 深度学习负载与异构硬件下的调度设计
- 7.4.5 代表性异构集群管理系统
- 7.5 存储
- 7.5.1 沿用大数据平台存储路线
- 7.5.2 沿用高性能计算平台存储路线
- 7.5.3 面向深度学习的存储
- 7.6 开发与运维
- 7.6.1 平台功能模块与敏捷开发
- 7.6.2 监控体系构建
- 7.6.3 测试
- 7.6.4 平台部署与DevOps
- 7.6.5 平台运维
- 7.6.6 部署异构资源集群管理系统实验
- 7.1 异构计算集群管理系统简介
- 8. 深度学习推理系统
- 8.1 推理系统简介
- 8.1.1 对比推理与训练过程
- 8.1.2 推理系统的优化目标与约束
- 8.2 模型推理的离线优化
- 8.2.1 通过程序理解推理优化动机
- 8.2.2 推理延迟
- 8.2.3 层间与张量融合
- 8.2.4 目标后端自动调优
- 8.2.5 模型压缩
- 8.2.6 低精度推理
- 8.3 部署
- 8.3.1 可靠性和可扩展性
- 8.3.2 部署灵活性
- 8.3.3 模型转换与开放协议
- 8.3.4 移动端部署
- 8.3.5 推理系统简介
- 8.3.6 配置镜像与容器进行云上训练,推理与压测实验
- 8.4 推理系统的运行期优化
- 8.4.1 推理系统的吞吐量
- 8.4.2 加速器模型并发执行
- 8.4.3 动态批尺寸
- 8.4.4 多模型装箱
- 8.4.5 内存分配策略调优
- 8.4.6 深度学习模型内存分配算法实验与模拟研究
- 8.5 开发、训练与部署的全生命周期管理-MLOps
- 8.5.1 MLOps的生命周期
- 8.5.2 MLOps工具链
- 8.5.3 线上发布与回滚策略
- 8.6.4 MLOps持续集成,持续交付(CI/CD)
- 8.6.5 MLOps工具与服务
- 8.6 推理专有芯片
- 8.6.1 推理芯片架构对比
- 8.6.2 神经网络推理芯片的动机和由来
- 8.6.3 数据中心推理芯片
- 8.6.4 边缘推理芯片
- 8.6.5 芯片模拟器
- 8.1 推理系统简介
- 9. 自动化机器学习系统
- 9.1 自动化机器学习
- 9.1.1 超参数搜索
- 9.1.2 神经网络结构搜索
- 9.1.3 自动特征工程
- 9.2 自动化机器学习系统与工具设计
- 9.2.1 自动化机器学习工具概览
- 9.2.2 探索式训练过程
- 9.2.3 自动化机器学习系统编程范式和系统优化前沿
- 9.1 自动化机器学习
- 10. 强化学习系统
- 10.1 强化学习基本概念
- 10.2 分布式强化学习系统
- 11. 模型压缩与加速
- 11.1 模型压缩简介
- 11.1.1 模型大小持续增长
- 11.1.2 硬件算力增速放缓
- 11.1.3 模型压缩方法
- 11.2 基于稀疏化的模型压缩
- 11.2.1 人工智能系统与稀疏性
- 11.2.2 深度神经网络的稀疏化与剪枝
- 11.3 模型压缩与硬件加速
- 11.3.1 稀疏模型硬件加速
- 11.3.2 量化模型硬件加速
- 11.1 模型压缩简介
- 12. 人工智能安全与隐私
- 12.1 人工智能内在安全与隐私
- 12.1.1 内在安全问题
- 12.1.2 内在隐私问题
- 12.2 人工智能训练安全与隐私
- 12.2.1 训练时安全
- 12.2.2 训练时隐私
- 12.2.3 联邦学习
- 12.3 人工智能服务安全与隐私
- 12.3.1 服务时安全
- 12.3.2 服务时的用户隐私
- 12.3.3 服务时的模型隐私
- 12.1 人工智能内在安全与隐私
- 13. 人工智能优化计算机系统
- 13.1 简介与趋势
- 13.1.1 系统设计的范式转移
- 13.2 学习增强系统的应用
- 13.2.1 流媒体系统
- 13.2.1 数据库索引
- 13.2.3 系统性能和参数调优
- 13.2.4 芯片设计
- 13.2.5 预测性资源调度
- 13.3 学习增强系统的落地挑战
- 13.3.1 系统数据
- 13.3.2 系统模型
- 13.3.3 系统动态性
- 13.3.4 系统正确性
- 13.1 简介与趋势
-
反馈
如果您对本模块内容有任何反馈,欢迎在 GitHub Issues模块中留言,我们会积极了解您的反馈,并尽量满足您的要求。
-
贡献
如果您想向本模块提供任何有价值的教程内容,请fork本仓库到您自己的账号,编辑内容并提交Pull Request,我们会及时审阅并处理。
请参考如下流程:
- (1) 创建分支,书写内容,提交Pull Request。
- (2) 抄送审阅者。
- (3) 合并并删除分支。
欢迎向本模块贡献有价值的内容。
加星点赞是一种良好的Open Source的程序员素养,作者的目标是得到10000颗星!星越多,我们的创作团队越努力! 送人玫瑰,手有余香,传播给你的朋友,让大家一起进步!