《机器学习系统:设计和实现》以mindspore为例的学习

东东就是我 东东就是我     2023-03-09     127

关键词:

9.模型部署

1.模型压缩

通过量化、剪枝等手段减小模型体积以及计算复杂度的技术,可以分为需要重训的压缩技术和不需要重训的压缩技术两类。

2.算子融合

通过表达式简化、属性融合等方式将多个算子合并为一个算子的技术,融合可以降低模型的计算复杂度及模型的体积。

3.常量折叠

将符合条件的算子在离线阶段提前完成前向计算,从而降低模型的计算复杂度和模型的体积。常量折叠的条件是算子的所有输入在离线阶段均为常量。

4.数据排布

根据后端算子库支持程度和硬件限制,搜索网络中每层的最优数据排布格式,并进行数据重排或者插入数据重排算子,从而降低部署时的推理时延。

5.模型混淆

对训练好的模型进行混淆操作,主要包括新增网络节点和分支、替换算子名的操作,攻击者即使窃取到混淆后的模型也不能理解原模型的结构。此外,混淆后的模型可以直接在部署环境中以混淆态执行,保证了模型在运行过程中的安全性。

9.1模型转换和优化

9.1.1 模型转换

不同训练框架的模型转为ONNX

9.1.2 算子融合


Convolution + Batchnorm算子融合

9.2.3 算子替换

9.2.4算子重排

9.3 模型压缩

9.3.1量化

T是量化前的数据范围。通过以更少的位数表示浮点数据,模型量化可以减少模型尺寸,进而减少在推理时的内存消耗,并且在一些低精度运算较快的处理器上可以增加推理速度。

根据量化数据表示的原始数据范围是否均匀,还可以将量化方法分为线性量化和非线性量化。

9.3.2 模型稀疏

模型稀疏是通过去除神经网络中部分组件(如权重、特征图、卷积核)降低网络的存储和计算代价,它和模型权重量化、权重共享、池化等方法一样,属于一种为达到降低模型计算复杂度的目标而引入的一种强归纳偏置。

9.3.3 知识蒸馏

知识蒸馏,也被称为教师-学生神经网络学习算法,已经受到业界越来越多的关注。大型深度模型在实践中往往会获得良好的性能,因为当考虑新数据时,过度参数化会提高泛化性能。在知识蒸馏中,小模型(学生模型)通常是由一个大模型(教师模型)监督,算法的关键问题是如何从老师模型转换的知识传授给学生模型。通过把一个全新的更深的更窄结构的深度神经网络当作学生神经网络,然后把一个预先训练好的神经网络模型当作教师神经网络。利用这个教师神经网络模型来帮助学生神经网络模型的算法是当下的一个研究热点。

9.4 模型推理

训练模型经过前面的转换、压缩等流程后,需要部署在计算硬件上进行推理。执行推理主要包含以下步骤:

前处理:将原始数据处理成适合网络输入的数据。

执行推理:将离线转换得到的模型部署到设备上执行推理流程,根据输入数据计算得到输出数据。

后处理:模型的输出结果做进一步的加工处理,如筛选阈值。

9.5模型安全


1.解析模型并获取计算图

对于一个训练好的模型,首先根据模型结构解析模型文件并获取模型计算逻辑的图表达(计算图)用于后续操作。获取的计算图包括节点标识、节点算子类型、节点参数权重以及网络结构等信息。

2.对计算图的网络结构加扰

通过图压缩和图增广等技术,对计算图中节点与节点之间的依赖关系进行加扰,达到隐藏模型真实计算逻辑的效果。其中,图压缩通过整图检查来匹配原网络中的关键子图结构,这些子图会压缩并替换为单个新的计算节点。对于压缩后的计算图,图增广通过在网络结构中加入新的输入/输出边,进一步隐藏节点间的真实依赖关系。新增的输入/输出边可以来自/指向图中现已有的节点,也可以来自/指向本步骤新增的混淆节点。

3.对计算图的节点匿名化

遍历步骤(2)处理后的计算图,筛选出需要保护的节点。对于图中的每个需要保护的节点,将节点标识、节点算子类型以及其它能够描述节点计算逻辑的属性替换为无语义信息的符号。对于节点标识匿名化,本步骤保证匿名化后的节点标识仍然是唯一的,以区分不同的节点。对于算子类型匿名化,为了避免大规模计算图匿名化导致的算子类型爆炸问题,可以将计算图中算子类型相同的节点划分为若干不相交的集合,同一个集合中节点的算子类型替换为相同的匿名符号。步骤(5)将保证节点匿名化后,模型仍然是可被识别和执行的。

4.对计算图的参数权重加扰

对于每个需要保护的权重,通过一个随机噪声和映射函数对权重进行加扰。每个权重加扰时可以使用不同的随机噪声和映射函数,步骤(6)将保证权重加扰不会影响模型执行结果的正确性。将经过步骤(2)(3)(4)处理后的计算图保存为模型文件供后续使用。

5.算子接口变换

步骤(5)(6)将对每个需要保护的算子类型进行算子形态变换,生成若干候选混淆算子。原算子与混淆算子之间是一对多的对应关系,候选混淆算子的数量等于步骤(3)划分的节点集合的数量。 本步骤根据步骤(2)(3)(4)的得到的匿名化算子类型、算子输入/输出关系等信息,对相应算子的接口进行变换。算子接口的变换方式包括但不局限于输入输出变换、接口名称变换。其中,输入输出变换通过修改原算子的输入输出数据,使得生成的混淆算子与原算子的接口形态不同。新增的输入输出数据包括步骤(2)图增广新增的节点间数据依赖和步骤(4)权重混淆引入的随机噪声。接口名称变换将原算子名称替换为步骤(3)生成的匿名化算子名称,保证节点匿名化后的模型仍然是可被识别和执行的,且算子的名称不会泄露其计算逻辑。

6.算子实现变换

对算子的代码实现进行变换。代码实现的变换方式包括但不局限于字符串加密、冗余代码等软件代码混淆技术,保证混淆算子与原算子实现语义相同的计算逻辑,但是难以阅读和理解。不同的算子可以采用不同代码混淆技术的组合进行代码变换。除代码等价变形之外,混淆算子还实现了一些额外的计算逻辑,如对于步骤(4)中参数被加扰的算子,混淆算子也实现了权重加扰的逆映射函数,用于在算子执行过程中动态消除噪声扰动,保证混淆后模型的计算结果与原模型一致。将生成的混淆算子保存为库文件供后续使用。

7.部署模型和算子库

将混淆态模型文件以及相应的混淆算子库文件部署到目标设备上。

8.混淆模型加载

根据模型结构解析混淆态模型文件并获取模型计算逻辑的图表达,即经过步骤(2)(3)(4)处理后得到的混淆计算图。

9.计算图初始化

对计算图进行初始化,生成执行任务序列。根据安全配置选项,若需要保护模型运行时安全,则直接对混淆计算图进行初始化,生成执行任务序列,序列中的每个计算单元对应一个混淆算子或原算子的执行。若仅需保护模型传输和存储时安全,则可先将内存中的混淆计算图恢复为原计算图,然后对原计算图进行初始化,生成执行任务序列,序列中的每个单元对应一个原算子的执行,这样可以进一步降低推理时的性能开销。

10.推理任务执行

根据AI应用程序输入的推理数据,遍历执行任务序列中的每个计算单元,得到推理结果。若当前计算单元对应的算子是混淆算子时,调用混淆算子库;否则,调用原算子库。

9.6 总结

不同的模型部署场景下,通常对于模型大小、运行时内存占用、推理时延和推理功耗等指标有限制。

针对模型大小指标,通常在离线阶段通过模型压缩技术来优化,比如量化技术、剪枝技术、知识蒸馏技术等,除此之外,一部分模型优化技术,比如融合技术 9.2.2节等,也有助于模型轻量化,不过其效果比较微弱。

针对运行时内存指标,主要有三方面的优化:优化模型大小、优化部署框架包大小以及优化运行时临时内存。模型大小的优化手段在上一点中已经说明;部署框架包大小主要通过精简框架代码、框架代码模块化等方式来优化。运行时临时内存主要通过内存池实现内存之间的复用来优化,这部分可以参见 6.4节。

针对模型的推理时延指标,主要有两方面的优化,一方面是离线时通过模型优化技术 9.2.2节和模型压缩技术 9.3节尽可能降低模型推理所需的计算量;另一方面是通过加大推理的并行力度 9.4.2节和优化算子实现 9.4.3节来充分挖掘硬件的计算潜力。值得注意的是,除了考虑计算量和算力,推理时的访存开销也是一个重要的影响因素,这一点在 9.2.2节小节和 9.4.3节小节中进行了相关优化。

针对模型的推理功耗,主要的优化思路是降低模型的计算量,这与针对模型推理时延的优化手段有重合之处,可以参考离线的模型优化技术 9.2.2节和模型压缩技术 9.3节。

本章除了介绍优化模型部署的各方面指标的优化技术以外,还介绍了安全部署相关的技术,如模型混淆、模型加密等。部署安全一方面可以保护企业的重要资产,另一方面可以防止黑客通过篡改模型从而入侵攻击部署环境。

《机器学习系统:设计和实现》以mindspore为例的学习

...码,编译器的作用主要是转换和优化,这和机器学习系统的输入输出,机器学习系统的目标是完全一致的。所以在进阶篇我们将用两个章节详细介绍AI编译器,里面的很多概念是和通用编译器中的概念是相同的ÿ... 查看详情

带你认识mindspore量子机器学习库mindquantum(代码片段)

摘要:MindSpore在3.28日正式开源了量子机器学习库MindQuantum,本文介绍MindQuantum的关键技术。本文分享自华为云社区《MindSpore量子机器学习库MindQuantum》,作者:HWCloudAI。MindSpore在3.28日正式开源了量子机器学习库MindQ... 查看详情

机器学习初学笔记

机器学习是人工智能的一个分支。人工智能的研究是从以“推理”为重点到以“知识”为重点,再到以“学习”为重点,一条自然、清晰的脉络。显然,机器学习是实现人工智能的一个途径,即以机器学习为手段解决人工智能中... 查看详情

java-springboot基于机器学习得心脏病预测系统的设计与实现-计算机毕业设计

项目介绍基于机器学习得心脏病预测系统通过对机器学习心脏病数据大数据分析统计系统的建设以实现机器学习心脏病数据分析统计功能。通过对心脏疾病变化市场的充分研究,结合自身技术储备情况,设计并开发了一... 查看详情

华为开源自研ai框架昇思mindspore入门体验:手写数字识别(代码片段)

目录一、环境安装1.进入MindSpore官网2.选择安装版本3.确保为Windows系统4.安装MindSpore5.验证安装6.安装依赖二、模型训练1.下载并处理数据集2.创建模型三、以Notebook运行本教程是在CPU-Ubuntu上安装MindSpore1.8.1,以LeNet5网络模型为例... 查看详情

《深入理解tensorflow架构设计与实现原理》_彭靖田学习材料整理

...、环境准备和基础概念,着重介绍了以数据流图为核心的机器学习编程框架的设计原则与核心实现,紧着还将TensorFlow与深度学习相结合,从理论基础和程序实现这两个方面系统介绍了CNN、GAN和RNN等经典模型,然后深剖析了TensorFl... 查看详情

深度学习基于华为mindspore的手写体图像识别实验(代码片段)

...odelArts实验平台完成实验,也可在本地搭建python3.7.5和MindSpore1.0.0环境完成实验。2.3实验总体设计创建实验环境:在本地搭建MindSpore环境。导入实验所需模块:该步骤通常都是程序编辑的第一步,将实验代码所需要... 查看详情

rpa介绍(代码片段)

一 术语表机器人流程自动化(RPA):在数字系统中模拟和集成人类行为以优化业务流程的软件机器人。RPA自动化捕获数据、运行应用程序、触发响应并与其他系统通信以执行各种任务。RPA路线图(RPAroadmap):自动化设计阶段之... 查看详情

基于mindspore的mass网络实现(代码片段)

 自然语言处理(Natural LanguageProcessing,NLP)是指计算机通过分析文本,建立计算框架实现语言表示及应用的模型,从而使其获得对语言的理解及应用的能力。从1950年Turing提出著名的“图灵测试”以来,让机器学会&ldquo... 查看详情

mindspore安装和使用mindspore2.0.0版本简单实现数据变换transforms功能(代码片段)

本篇文章主要是讲讲MindSpore的安装以及根据官方提供的例子实现数据变换功能。昇思MindSpore是一款开源的AI框架,旨在实现易开发、高效执行、全场景覆盖三大目标。目录1、加入MindSpore社区2、安装前准备2.1、获取安装命令2.2... 查看详情

机器学习系统设计

1.解决机器学习问题的方法收集大量数据 开发复杂的特征(forexample:usingemailheaderdatainspamemails)开发算法去用不同的方式处理输入(recognizingmisspellingsinspam). 哪种方法有用视情况而定2.误差分析 解决机器学习问题的推荐方法:以... 查看详情

spark机器学习pdf下载

Spark机器学习内容简介······本书每章都设计了案例研究,以机器学习算法为主线,结合实例探讨了Spark的实际应用。书中没有让人抓狂的数据公式,而是从准备和正确认识数据开始讲起,全面涵盖了推荐系统、回归、聚类、... 查看详情

从零到部署,在线实现一个完整的机器学习任务(以美国居民收入预测为例)(代码片段)

...该页可在线实现本文内的项目内容。本节我们将使用python机器学习库sklearn,以及web服务库tornado来从零完成一个完整的机器学习任务流程。如果阅读起来有困难,建议您先学习了解这两门教程,相关基础教 查看详情

sklearn实现逻辑回归_以python为工具python机器学习系列(代码片段)

sklearn实现逻辑回归_以python为工具【Python机器学习系列(十)】文章目录1.线性逻辑回归2.非线性逻辑回归3.乳腺癌数据集案例      ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯... 查看详情

01_机器学习简介

...:机器学习(周志华)、Python数据分析与挖掘实战、机器学习系统设计、面向机器智能TensorFlow实践、TensorFlow技术解析与实战。(不建议直接去读) 学习概要:   查看详情

《机器学习系统:设计和实现》读后感和一些思考

目录计算图、编译器前端、编译器后端计算图计算图的作用计算图的组成静态计算图与动态计算图编译器前端 IR中间表示机器学习框架的中间表示常见编译器前端优化方法编译器后端概述通用硬件优化:算子拆分和算子融合... 查看详情

mindspore联邦学习框架解决行业级难题

...ff1a;华为开发者大会2021HMSCore6AI技术论坛,主题演讲《MindSpore联邦学习框架解决隐私合规下的数据孤岛问题》。演讲嘉宾:华为MindSpore联邦学习工程师大家都知道,人工智能的发展离不开广泛的数据支撑。数据是基础&#... 查看详情

python3.9.13能不能安装torch模块

...,您可以使用Python3.9.13安装Torch模块。Torch是一个开源的机器学习库,可以在Python上实现深度学习和机器学习。它提供了一个强大的编程框架,可以用来实现许多机器学习算法,如深度神经网络,卷积神经网络,递归神经网络等... 查看详情