首页 > 其他分享 >开源机器学习系统(一)

开源机器学习系统(一)

时间:2024-04-08 09:37:37浏览次数:28  
标签:机器 编译器 模型 神经网络 学习 开源 计算

找到懂机器学习系统开发的人太难了。现今的学生都一心学习机器学习算法,很多学生对于底层的运作原理理解得很浅。而当他们在实际中应用机器学习技术时才意识到系统的重要性,那时想去学习,却没有了充沛的学习时间。

导言

为了支持在不同应用中高效开发机器学习算法,人们设计和实现了机器学习框架(如TensorFlow、PyTorch、MindSpore等)。广义来说,这些框架实现了以下共性的设计目标:

  • 神经网络编程: 深度学习的巨大成功使得神经网络成为了许多机器学习应用的核心。根据应用的需求,人们需要定制不同的神经网络,如卷积神经网络(Convolutional Neural Networks)和自注意力神经网络(Self-Attention Neural Networks)等。这些神经网络需要一个共同的系统软件进行开发、训练和部署。
  • 自动微分: 训练神经网络会具有模型参数。这些参数需要通过持续计算梯度(Gradients)迭代改进。梯度的计算往往需要结合训练数据、数据标注和损失函数(Loss Function)。考虑到大多数开发人员并不具备手工计算梯度的知识,机器学习框架需要根据开发人员给出的神经网络程序,全自动地计算梯度。这一过程被称之为自动微分。
  • 数据管理和处理: 机器学习的核心是数据。这些数据包括训练、验证、测试数据集和模型参数。因此,需要系统本身支持数据读取、存储和预处理(例如数据增强和数据清洗)。
  • 模型训练和部署: 为了让机器学习模型达到最佳的性能,需要使用优化方法(例如Mini-Batch SGD)来通过多步迭代反复计算梯度,这一过程称之为训练。训练完成后,需要将训练好的模型部署到推理设备。
  • 硬件加速器: 神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU)加速。因此,机器学习系统需要高效利用多种硬件加速器。
  • 分布式执行: 随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单个机器可以提供的内存。因此,机器学习框架需要天然具备分布式执行的能力。

一个完整的机器学习框架一般具有如图所示的基本架构
img

  • 编程接口: 考虑到机器学习开发人员背景的多样性,机器学习框架首先需要提供以高层次编程语言(如Python)为主的编程接口。同时,机器学习框架为了优化运行性能,需要支持以低层次编程语言(如C和C++)为主的系统实现,从而实现操作系统(如线程管理和网络通讯等)和各类型硬件加速器的高效使用。
  • 计算图: 利用不同编程接口实现的机器学习程序需要共享一个运行后端。实现这一后端的关键技术是计算图技术。计算图定义了用户的机器学习程序,其包含大量表达计算操作的算子节点(Operator Node),以及表达算子之间计算依赖的边(Edge)。
  • 编译器前端: 机器学习框架往往具有AI编译器来构建计算图,并将计算图转换为硬件可以执行的程序。这个编译器首先会利用一系列编译器前端技术实现对程序的分析和优化。编译器前端的关键功能包括实现中间表示、自动微分、类型推导和静态分析等。
  • 编译器后端和运行时: 完成计算图的分析和优化后,机器学习框架进一步利用编译器后端和运行时实现针对不同底层硬件的优化。常见的优化技术包括分析硬件的L2/L3缓存大小和指令流水线长度,优化算子的选择或者调度顺序。
  • 异构处理器: 机器学习应用的执行由中央处理器(Central Processing Unit,CPU)和硬件加速器(如英伟达GPU、华为Ascend和谷歌TPU)共同完成。其中,非矩阵操作(如复杂的数据预处理和计算图的调度执行)由中央处理器完成。矩阵操作和部分频繁使用的机器学习算子(如Transformer算子和Convolution算子)由硬件加速器完成。
  • 数据处理: 机器学习应用需要对原始数据进行复杂预处理,同时也需要管理大量的训练数据集、验证数据集和测试数据集。这一系列以数据为核心的操作由数据处理模块(例如TensorFlow的tf.data和PyTorch的DataLoader)完成。
  • 模型部署: 在完成模型训练后,机器学习框架下一个需要支持的关键功能是模型部署。为了确保模型可以在内存有限的硬件上执行,会使用模型转换、量化、蒸馏等模型压缩技术。同时,也需要实现针对推理硬件平台(例如英伟达Orin)的模型算子优化。最后,为了保证模型的安全(如拒绝未经授权的用户读取),还会对模型进行混淆设计。
  • 分布式训练: 机器学习模型的训练往往需要分布式的计算节点并行完成。其中,常见的并行训练方法包括数据并行、模型并行、混合并行和流水线并行。这些并行训练方法通常由远端程序调用(Remote Procedure Call, RPC)、集合通信(Collective Communication)或者参数服务器(Parameter Server)实现。

标签:机器,编译器,模型,神经网络,学习,开源,计算
From: https://www.cnblogs.com/moguw/p/18120397

相关文章

  • 白嫖 kimi.ai 的 API 接口,给这个开源项目点赞!
    Kimi是当前国内相当火爆的AI产品,输出结果和使用体验都非常不错。Kimi开放了API接口,新用户注册后会免费赠送15元额度。KimiAPI的网址:platform.moonshot.cn/console这是光明正大的白嫖方式,一定不要错过哦。如果赠送额度用完了,你还想继续免费体验,那么,下面的这......
  • 从模型到部署,教你如何用Python构建机器学习API服务
    本文分享自华为云社区《Python构建机器学习API服务从模型到部署的完整指南》,作者:柠檬味拥抱。在当今数据驱动的世界中,机器学习模型在解决各种问题中扮演着重要角色。然而,将这些模型应用到实际问题中并与其他系统集成,往往需要构建API服务。本文将介绍如何使用Python构建机器学习......
  • SRIO学习(1)SRIO介绍以及IP核详解
    文章目录一、SRIO介绍1.1、概要1.2、RapidIO与传统嵌入互连方式的比较1.3、串行RapidIO协议(SRIO)二、RapidIO协议结构及包格式2.1、逻辑层2.2传输层2.3物理层三、IP核详解3.1、逻辑层3.1.1I/O端口3.1.2消息(Message)端口3.1.3用户自定义端口3.1.4维护端口3.1.5Stat......
  • SRIO学习(1)SRIO IP核时钟和复位
    文章目录前言一、时钟1.1、整体说明1.2、典型时钟速率1.3、时钟总结1.4、示例工程二、复位前言通过对时钟和复位的理解可以更好的了解IP核的工作过程,不过不理解也不影响使用,exampledesign帮我们都做好了。一、时钟可以直接看总结1.1、整体说明PHY在两个时钟域......
  • 每天五分钟掌握深度学习框架pytorch:本专栏说明
    专栏大纲专栏计划更新章节在100章左右,之后还会不断更新,都会配备代码实现。以下是专栏大纲部分代码实现代码获取为了方便用户浏览代码,本专栏将代码同步更新到github中,所有用户可以读完专栏内容和代码解析之后,下载对应的代码,跑一跑模型算法,这样会加深自己对算法模型......
  • C++学习笔记九--模版
    目录前言1.函数模版1.函数模版的概念和定义2.函数模版的实例化2.类模版1.类模版的概念和定义2.类模版的实例化3.示例代码前言        这篇文章介绍下C++中的模版,包括函数模版和类模版。1.函数模版    在编程的过程中,编写函数都会考虑将其写......
  • C++智能指针学习——小谈引用计数
    目录前言控制块简介共享控制块引用计数与弱引用计数创建过程__shared_ptr__shared_count_Sp_counted_base弱引用计数增加过程再谈共享控制块__weak_count引用计数增加过程弱引用计数的减少过程弱引用计数减为0引用计数的减少过程引用计数减为0参考文章前言本文结合源码讨论std::......
  • 狂神说Java Web学习笔记_HTTP
    HTTP详解HTTP超文本传输协议(HyperTextTransferProtocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。文本:html,字符串….超文本:图片,音乐,视频,定位,地图…….默认端口:80HTTPSHTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP......
  • 狂神说Java Web学习笔记_Maven
    Maven项目架构管理工具我们目前用它就是为了方便导入jar包,可以帮你自动导入一个jar包所依赖的其他jar包。Maven的核心思想:约定大于配置配置环境变量配置阿里云加速镜像maven安装目录的conf/settings.xml在<mirrors></mirrors>标签中添加mirror子节点<mirrors......
  • 狂神说Java Web学习笔记_Java Web基本概念
    JavaWeb基本概念静态Web动态WebWeb服务器技术讲解ASPPHPJSP/ServletB/SC/SWeb服务器TomcatTomcat实际运行JSP页面和ServletIISTomcat详解Tomcat目录结构分析配置server.xml是服务器核心配置文件,在这里可以设置端口号、设置域名或IP、默认加载的项目、请求编......