1 谈谈机器学习模型的部署
本文目录导航:
谈谈机器学习模型的部署(1)
机器学习模型的部署是将训练好的模型高效地运行到实践消费环境的关键环节。
随着机器学习技术的宽泛运行,不同工具和框架如Scikit-Learn、Spark、TensorFlow、MXnet、PyTorch等为数据迷信家提供了丰盛的选用,同时也带来了部署模型的应战。
本文将简明讨论模型部署的基本环节和应战,并引见几种罕用的部署工具。
模型部署的外围步骤是将训练模型耐久化,而后在主机上加载模型并提供服务接口。
以RandomForestClassification为例,以下将区分引见经常使用Scikit-Learn、Spark和TensorFlow启动模型耐久化的方法。
Scikit-Learn:经常使用Iris数据集训练RandomForestClassifier模型,经过`()`将模型耐久化为文件。
加载模型仅需调用`()`。
虽然Scikit-Learn对Pickle机制启动了封装和提升,但Pickle自身存在一些限度,如序列化效率疑问和兼容性疑问。
Spark:Spark提供Pipeline和Model支持保留到文件,繁难在其余SparkContext中加载。
经过调用`()`和`()`方法启动模型耐久化和加载。
Spark模型保留为二进制文件,仅Spark自己可以加载,目录结构明晰,蕴含模型阶段数据。
TensorFlow:TensorFlow经常使用``将模型导出为元图(MetaGraph),蕴含元数据、Pickle文件和其余checkpoints。
TensorFlow雷同应用Pickle机制存储模型,并参与额外的元数据。
加载模型时需确保一切依赖包已正确加载,如在模型加载时调用`__forest`。
部署模型时,经常使用Web主机(如Flask)参与模型加载和治感性能,而后经过REST API提供预测服务。
但是,消费环境部署还面临多方面应战,包括模型版本控制、资源治理、性能提升、安保性等疑问。
为了处置模型部署的应战,多个开源工具如Clipper、Seldon、MFlow、MLeap、Oracle Graphpipe、MXnet Model Server等应运而生。
这些工具经过简化部署流程、提供预测服务治理和提升模型性能等性能,降落了部署复杂性。
Clipper:由UC Berkeley RISE Lab开发的系统,提供预测服务,经过解耦用户运行与机器学习模型,简化部署流程。
Clipper支持容器和微服务技术,经常使用Redis启动性能治理、Prometheus监控,支持Kubernetes或本地Docker治理容器,支持多种模型部署。
Seldon:专一于基于开源软件的机器学习系统控制,提供在Kubernetes上部署模型的工具。
Seldon支持模型、Transformer、Router、Combiner等组件构建运转图,成功AB测试、模型ensemble等性能。
Seldon的图形式极大简化了模型组合和运转时的治理。
经常使用Seldon部署Scikit-Learn、Spark和TensorFlow生成的模型均能成功。
在实践部署环节中,或者会遇到一些疑问,如兼容性、资源性能和性能提升等。
部署模型时需综合思考工具个性和实践运行场景需求,选用适合的工具启动模型部署。
本文仅概述了模型部署的基本环节和几种经常出现工具的经常使用方法,更多具体消息和最佳通常可经过相关文档和社区资源启动深入学习。
后续文章将更深化地讨论机器学习模型部署的初级主题和技术细节。
PyTorch生成3D模型
本文将引见如何应用深度学习技术生成3D模型,经常使用了PyTorch和PolyGen。
有一个新兴的深度学习钻研畛域专一于将 DL 技术运行于 3D 几何和计算机图形运行程序,这一常年钻研的汇合证实了这一点。
关于宿愿自己尝试一些 3D 深度学习的 PyTorch 用户,Kaolin 库值得钻研。
关于 TensorFlow 用户,还有TensorFlow Graphics。
一个特意抢手的子畛域是 3D 模型的生成。
发明性地组合 3D 模型、从图像极速生成 3D 模型以及为其余机器学习运行程序和模拟创立分解数据只是 3D 模型生成的有数用例中的一小局部。
但是,在 3D 深度学习钻研畛域,为你的数据选用适合的示意是成功的一半。
在计算机视觉中,数据的结构十分繁难:图像由密集的像素组成,这些像素划一平均地陈列成准确的网格。
3D 数据的环球没有这种分歧性。
3D 模型可以示意为体素、点云、网格、多视图图像集等。
这些输入示意也都有自己的一组缺陷。
例如,体素虽然计算老本很高,但输入分辨率很低。
点云不编码外表或其法线的概念,因此不能仅从点云惟一地推断出拓扑。
网格也不对拓扑启动惟一编码,由于任何网格都可以细分以发生相似的外表。
PolyGen,一种用于网格的神经生成模型,它联结预计模型的面和顶点以间接生成网格。
DeepMind GitHub 上提供了官网成功。
如今经典的PointNet论文为点云数据建模提供了蓝图,例如 3D 模型的顶点。
它是一种通用算法,不对 3D 模型的面或占用启动建模,因此不可独自经常使用 PointNet 生成共同的防水网格。
3D-R2N2驳回的体素方法将咱们都相熟的 2D 卷积裁减到 3D,并人造地从 RGB 图像生成防水网格。
但是,在更高的空间分辨率下,体素示意的计算老本很高,有效地限度了它可以发生的网格的大小。
Pixel2Mesh可以经过变形模板网格(通常是椭圆体)从单个图像预测 3D 模型的顶点和面。
指标模型必定与模板网格同胚,因此经常使用凸模板网格(例如椭圆体)会在椅子和灯等高度非凸的物体上引入许多假面。
拓扑修正网络(TMN) 经过引入两个新阶段在 Pixel2Mesh 上启动迭代:拓扑修正阶段用于修剪会参与模型重建误差的失误面,以及边界细化阶段以平滑由面修剪引入的锯齿状边界。
假设你有兴味,我剧烈倡导同时检查AtlasNet和Hierarchical Surface Prediction。
虽然变形和细化模板网格的罕用方法体现良好,但它始于对模型拓扑的关键假定。
就其外围而言,3D 模型只是 3D 空间中的一组顶点,经过各个面启动分组和衔接在一同。
能否可以避开两边示意并间接预测这些顶点和面?
PolyGen 经过将 3D 模型示意为顶点和面的严厉排序序列,而不是图像、体素或点云,对模型生成义务采取了一种相当共同的方法。
这种严厉的排序使他们能够运行基于留意力的序列建模方法来生成 3D 网格,就像 BERT 或 GPT 模型对文本所做的那样。
PolyGen 的总体指标有两个:首先为 3D 模型生成一组正当的顶点(或者以图像、体素或类标签为条件),而后生成一系列面,一个接一个,衔接顶点在一同,并为此模型提供一个正当的外表。组合模型将网格上的散布示意为两个模型之间的联结散布:顶点模型示意顶点,面模型示意以顶点为条件的面。
顶点模型是一个解码器,它试图预测以先前标志为条件的序列中的下一个标志(并且可选地以图像、体素字段或类标签为条件)。
人脸模型由一个编码器和一个解码器指针网络组成,该网络示意顶点序列上的散布。
该指针网络一次性有效地“选用”一个顶点,以参与到以后面序列并构建模型的面。
该模型以先前的人脸序列和整个顶点序列为条件。
由于 PolyGen 架构相当复杂并且依赖于各种概念,因此本文将仅限于顶点模型。
盛行的ShapeNetCore数据集中的每个模型都可以示意为顶点和面的汇合。
每个顶点由一个 (x, y, z) 坐标组成,该坐标形容了 3D 网格中的一个点。
每个面都是一个索引列表,指向导致该面角的顶点。
关于三角形面,此列表长 3 个索引。
关于 n 边形面,此列表是可变长度的。
原始数据集十分大,因此为了节俭期间,我在此处提供了一个更轻量级的预处置数据集子集供你启动试验。
该子集仅蕴含来自 5 个状态类别的模型,并且在转换为 n 边形后少于 800 个顶点(如下所述)。
为了使序列建模方法施展作用,数据必定以一种受解放的、确定性的方式示意,以尽或者多地消弭可变性。
出于这个要素,作者对数据集启动了一些简化。
首先,他们将一切输入模型从三角形(衔接 3 个顶点的面)转换为 n 边形(衔接 n 个顶点的面),经常使用Blender 的平面抽取修正器兼并面。
这为相反的拓扑提供了更紧凑的示意,并缩小了三角剖分中的歧义,由于大型网格并不总是具备惟一的三角剖分。
为了篇幅的缘故,我不会在这篇文章中讨论 Blender 脚本,但有很多资源,包括官网文档和GitHub 上的这套低劣示例,很好地涵盖了这个主题。
我提供的数据集曾经预先抽取。
要继续启动,请下载此示例 文件。
这个模型是一个基本的立方体,有 8 个顶点和 6 个面。
以下繁难代码片段从单个 文件中读取一切顶点。
其次,顶点首先从它们的 z 轴(在这种状况下为垂直轴)按升序排序,而后是 y 轴,最后是 x 轴。
这样,模型顶点是自下而上示意的。
在 vanilla PolyGen 模型中,而后将顶点衔接成一维序列向量,关于较大的模型,该向量最终会获取一个十分长的序列向量。
作者在论文的附录 E 中形容了一些减轻这种累赘的修正。
要对一系列顶点启动排序,咱们可以经常使用字典排序。
这与对字典中的单词启动排序时驳回的方法相反。
要对两个单词启动排序,您将检查第一个字母,而后假设有平局,则检查第二个字母,依此类推。
关于“aardvark”和“apple”这两个词,第一个字母是“a”和“a”,所以咱们移动到第二个字母“a”和“p”来通知我“aardvark”在“apple”之前。
在这种状况下,咱们的“字母”是按顺序陈列的 z、y 和 x 坐标。
最后,顶点坐标被归一化,而后被量化以将它们转换为团圆的 8 位值。
这种方法已在像素递归神经网络和WaveNet中用于对音频信号启动建模,使它们能够对顶点值施加分类散布。
在最后的WaveNet论文中,作者评论说“分类散布更灵敏,并且可以更容易地对恣意散布启动建模,由于它不对它们的状态做任何假定。
” 这种品质关于建模复杂的依赖相关很关键,例如 3D 模型中顶点之间的对称性。
顶点模型由一个解码器网络组成,它具备变压器模型的一切规范特色:输入嵌入、18 个变压器解码器层的堆栈、层归一化,最后是在一切或者的序列标志上示意的 softmax 散布。给定一个长度为的扁平顶点序列,其指标是在给定模型参数的状况下最大化数据序列的对数似然:
与 LSTM 不同的是,transformer 模型能够以并行方式处置顺序输入,同时仍使来自序列一局部的消息能够为另一局部提供高低文。
这一切都归功于他们的留意力模块。
3D 模型的顶点蕴含各种对称性和远点之间的复杂依赖相关。
例如,思考一个典型的桌子,其中模型对角的腿是彼此的镜像版本。
留意力模块准许对这些类型的形式启动建模。
嵌入层是序列建模中用于将有限数量的标志转换为特色集的罕用技术。
在言语模型中,“国度”和“民族”这两个词的含意或者十分相似,但与“苹果”这个词却相距甚远。
当单词用惟一的标志示意时,就没有相似性或差同性的固有概念。
嵌入层将这些标志转换为矢量示意,可以对无心义的距离感启动建模。
PolyGen 将雷同的原理运行于顶点。
该模型经常使用三种类型的嵌入层:坐标示意输入标志是 x、y 还是 z 坐标,值示意标志的值,以及位置编码顶点的顺序。
每个都向模型传播无关令牌的一条消息。
由于咱们的顶点一次性在一个轴上输入,坐标嵌入为模型提供了基本的坐标消息,让它知道给定值对应的坐标类型。
值嵌入对咱们之前创立的量化顶点值启动编码。
咱们还须要一些序列控制点:额外的开局和中止标志区分标志序列的开局和完结,并将标志填充到最大序列长度。
由于并行化而失落的给定序列位置 n的位置消息经过位置嵌入来复原。 也可以经常使用位置编码,一种不须要学习的敞开方式的表白。在经典的 Transformer 论文“ Attention Is All You Need ”中,作者定义了一种由不同频率的正弦和余弦函数组成的位置编码。他们经过试验确定位置嵌入的性能与位置编码一样好,但编码的长处在于比训练中遇到的序列更长。无关位置编码的杰出视觉解释,请检查此博客文章。
生成一切这些标志序列后,最后要做的是创立一些嵌入层并将它们组合起来。
每个嵌入层都须要知道希冀的输入字典的大小和输入的嵌入维度。
每层的嵌入维数为 256,这象征着咱们可以将它们与加法相结合。
字典大小取决于输入可以具备的惟一值的数量。
关于值嵌入,它是量化值的数量加上控制标志的数量。
关于坐标嵌入,关于每个坐标 x、y 和 z,它是一个,关于上述任何一个(控制标志)都不是一个。
最后,位置嵌入关于每个或者的位置或最大序列长度都须要一个。
PolyGen 还宽泛经常使用有效预测掩码来确保其生成的顶点和面部序列编码有效的 3D 模型。
例如,必定强迫口头诸如“z 坐标不递减”和“中止标志只能出如今完整顶点(z、y 和 x 标志的三元组)之后”之类的规定,以防止模型发生有效的网格. 作者在论文的附录 F 中提供了他们经常使用的掩蔽的宽泛列表。
这些解放仅在预测时强迫口头,由于它们实践上会侵害训练性能。
与许多序列预测模型一样,该模型是自回归的,这象征着给定期间步的输入是下一个期间步的或者值的散布。
整个序列一次性预测一个标志,模型在每一步都会检查先后期间步骤中的一切标志以选用其下一个标志。
解码战略选择了它如何从这个散布当选用下一个Token。
假设经常使用次优解码战略,生成模型有时会堕入重复循环或发生品质较差的序列。咱们都看到生成的文本看起来像是胡言乱语。PolyGen 驳回称为 核采样 的解码战略来生成高品质序列。原始论文在文本生成高低文中运行了这种方法,但它也可以运行于顶点。前提很繁难:仅从 softmax 散布中共享 top-p 概率品质的标志中随机抽取下一个标志。这在推理时运行以生成网格,同时防止序列退步。无关核采样的 PyTorch 成功,请参阅此要点。
除了无条件生成模型外,PolyGen 还支持经常使用类标签、图像和体素启动输入调理。
这些可以指点生成具备特定类型、外观或状态的网格。
类标签经过嵌入投影,而后参与到每个留意力块中的自留意力层之后。
关于图像和体素,编码器创立一组嵌入,而后用于与转换器解码器的交叉留意。
PolyGen 模型形容了一个弱小、高效和灵敏的框架,用于有条件地生成 3D 网格。
序列生成可以在各种条件和输入类型下成功,从图像到体素到繁难的类标签,甚至只是一个起始标志。
示意网格顶点散布的顶点模型只是联结散布难题的一局部。
我计划在以后的文章中引见面部模型。
同时,我激励你检查DeepMind 的 TensorFlow 成功,并尝试生成条件模型!
原文链接:
生成式人工默认与AI大模型
生成式人工默认作为人工默认畛域的一个分支,努力于基于现有数据或内容生成新的数据或内容,如文本、图像、代码、视频和音乐。
近年来,得益于泛滥发现与提高,该畛域取得了清楚停顿,并吸引了宽泛关注。
在营销、文娱、教育、设计和医疗保健等多个行业和畛域中,生成式人工默认展现出宽泛的运行后劲。
其中,生成反抗网络(GAN)是一个清楚的模型,它由一个生成器和一个甄别器组成。
这两个神经网络以相似游戏的方式相互竞争,生成器的指标是发明能够诈骗甄别器的实在数据,而甄别器则努力区分实在数据和欺诈数据。
GAN在数据增强、格调转移和图像生成等义务中体现杰出。
罕用框架和库,如Tensorflow、Keras、PyTorch、GANLib、MXNet、Chainer和gan in Action,简化了GAN架构的经常使用、训练和试验环节。
GAN的运行包括图像分解与生成、图像到图像的翻译、文本到图像的分解、数据增强和训练数据生成。
变分自编码器(VAEs)是一种经过学习给定数据集的概率散布生成新样本的模型。
它们应用编码器和解码器神经网络,将输入数据转换为潜在空间中的点,这些点代表概率散布。
解码器应用潜在空间的采样点重建原始数据。
VAE经过将潜在空间正则化以遵照预约义散布(如正态散布),能够发生实在且多样化的样本。
罕用框架和库包括Tensorflow、Keras、PyTorch、Edward、Pyro、MXNet和Chainer。
VAE在分解数据创立、图像生成与格调转换、图像去噪、意外检测和文本到图像的分解方面有宽泛运行。
自回归模型经过依据序列的前一个值预测序列的后一个值来生成数据,能捕捉数据点之间的相关性和依赖性。
它们在语音分解、音乐作曲和文本生成等义务中体现杰出。
成功生成式人工默认自回归模型的深度学习框架包括PixelCNN和PixelRNN,罕用工具如Tensorflow、Keras、PyTorch、JAX、MXNet、Chainer和flex。
自回归模型在图像分解、期间序列数据和音乐生成等运行中展现出弱小才干。
Transformer模型在生成式人工默认,特意是人造言语处置(NLP)畛域,被宽泛运行。
基于自我留意概念的Transformer模型能够发现输入序列中符号之间的咨询和依赖相关,如句子或段落中的单词。
Transformer由编码器和解码器组成,编码器将输入序列转换为一系列高低文向量,解码器应用高低文向量生成输入序列。
自我留意机制准许模型同时关注高低文向量和自身的先验输入,以生成连接和相关性高的输入。
大型言语模型(LLM)在生成式人工默认畛域取得严重打破,尤其是在人造言语处置畛域。
这些模型能够以史无前例的准确性和流利性了解、生成和操纵相似人类的文本。
ChatGPT、DALL·E3、文心一言、GitHub Copilot、AlphaCode、Bard、Cohere Generate、Baichuan 3和Claude等盛行模型展现了生成式人工默认在多个畛域的宽泛运行。
其中,Baichuan 3在中文义务上体现出逾越GPT-4的才干。
随着技术开展、运行深化以及人们的接受度提高,生成式人工默认的前景十分宽广。
未来,随着技术始终提高和运行场景的拓展,生成式人工默认将作为人工默认技术的关键组成局部,为人类带来翻新与改革。