AI模型部署初认识

AI部署这个词儿大家肯定不陌生,可能有些小伙伴还不是很清楚这个是干嘛的,但总归是耳熟能详了。

近些年来,在深度学习算法已经足够卷卷卷之后,深度学习的另一个偏向于工程的方向–部署工业落地,才开始被谈论的多了起来。当然这也是大势所趋,毕竟AI算法那么多,如果用不着,只在学术圈搞研究的话没有意义。因此很多AI部署相关行业和AI芯片相关行业也在迅速发展,现在虽然已经2021年了,但我认为AI部署相关的行业还未到头,AI也远远没有普及。

简单收集了一下知乎关于“部署”话题去年和今年的一些提问:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述提问的都是明白人,随着人工智能逐渐普及,使用神经网络处理各种任务的需求越来越多,如何在生产环境中快速、稳定、高效地运行模型,成为很多公司不得不考虑的问题。不论是通过提升模型速度降低latency提高用户的使用感受,还是加速模型降低服务器预算,都是很有用的,公司也需要这样的人才。

在经历了算法的神仙打架、诸神黄昏、灰飞烟灭等等这些知乎热搜后。AI部署工业落地这块似乎还没有那么卷…相比AI算法来说,AI部署的入坑机会更多些。

聊聊AI部署

AI部署的基本步骤:

  • 训练一个模型,也可以是拿一个别人训练好的模型
  • 针对不同平台对生成的模型进行转换,也就是俗称的parse、convert,即前端解释器
  • 针对转化后的模型进行优化,这一步很重要,涉及到很多优化的步骤
  • 在特定的平台(嵌入端或者服务端)成功运行已经转化好的模型
  • 在模型可以运行的基础上,保证模型的速度、精度和稳定性

就这样,虽然看起来没什么,但需要的知识和经验还是很多的。

因为实际场景中我们使用的模型远远比ResNet50要复杂,我们部署的环境也远远比实验室的环境条件更苛刻,对模型的速度精度需求也比一般demo要高。

对于硬件公司来说,需要将深度学习算法部署到性能低到离谱的开发板上,因为成本能省就省。在算法层面优化模型是一方面,但更重要的是从底层优化这个模型,这就涉及到部署落地方面的各个知识(手写汇编算子加速、算子融合等等);对于软件公司来说,我们往往需要将算法运行到服务器上,当然服务器可以是布满2080TI的高性能CPU机器,但是如果QPS请求足够高的话,需要的服务器数量也是相当之大的。这个要紧关头,如果我们的模型运行的足够快,可以省机器又可以腾一些buffer上新模型岂不很爽,这个时候也就需要优化模型了,其实优化手段也都差不多,只不过平台从arm等嵌入式端变为gpu等桌面端了。

作为AI算法部署工程师,你要做的就是将训练好的模型部署到线上,根据任务需求,速度提升2-10倍不等,还需要保证模型的稳定性。

是不是很有挑战性?

需要什么技术呢?

需要一些算法知识以及扎实的工程能力。

老潘认为算法部署落地这个方向是比较踏实务实的方向,相比设计模型提出新算法,对于咱们这种并不天赋异禀来说,只要肯付出,收获是肯定有的(不像设计模型,那些巧妙的结果设计不出来就是设计不出来你气不气)。

其实算法部署也算是开发了,不仅需要和训练好的模型打交道,有时候也会干一些粗活累活(也就是dirty work),自己用C++、cuda写算子(预处理、op、后处理等等)去实现一些独特的算子。也需要经常调bug、联合编译、动态静态库混搭等等。

算法部署最常用的语言是啥,当然是C++了。如果想搞深度学习AI部署这块,C++是逃离不了的。

所以,学好C++很重要,起码能看懂各种关于部署精巧设计的框架(再列一遍:Caffe、libtorch、ncnn、mnn、tvm、OpenVino、TensorRT,不完全统计,我就列过我用过的)。当然并行计算编程语言也可以学一个,针对不同的平台而不同,可以先学学CUDA,资料更多一些,熟悉熟悉并行计算的原理,对以后学习其他并行语言都有帮助。

系统的知识嘛,还在整理,还是建议实际中用到啥再看啥,或者有项目在push你,这样学习的更快一些。

可以选择上手的项目:

  • 好用的开源推理框架:Caffe、NCNN、MNN、TVM、OpenVino
  • 好用的半开源推理框架:TensorRT
  • 好用的开源服务器框架:triton-inference-server
  • 基础知识:计算机原理、编译原理等

在这里插入图片描述

AI大模型学习的理论基础

数学基础:

  • 线性代数:AI 大模型中大量使用向量和矩阵运算,如矩阵乘法、向量点积等,用于表示和操作数据。
  • 概率论与统计学:模型中的概率分布、随机变量和参数估计等都需要概率论和统计学的知识。
  • 微积分:优化算法中的梯度计算和反向传播等都涉及到微积分的概念。

算法原理:

  • 反向传播:这是深度学习中常用的算法,用于更新模型的参数,通过计算损失函数的梯度来调整模型。
  • 随机梯度下降:一种常用的优化方法,通过不断迭代更新参数来最小化损失函数。
  • 激活函数:用于对神经元的输出进行非线性变换,增加模型的表达能力。

模型架构设计:

  • 卷积神经网络(CNN):擅长处理图像、视频等具有空间结构的数据,通过卷积操作提取特征。
  • 循环神经网络(RNN):适用于处理序列数据,如自然语言处理中的文本。
  • Transformer:一种全新的架构,在自然语言处理中取得了巨大成功,通过自注意力机制捕捉长距离依赖关系。

在大规模数据处理中的优势:

  • 能够处理海量的数据,通过分布式训练等技术可以加速训练过程。
  • 可以自动学习数据中的模式和特征,不需要人工设计特征。
  • 模型的泛化能力强,可以应用于各种不同的任务和领域。

挑战:

  • 模型的复杂度高,需要大量的计算资源和时间来训练。
  • 容易过拟合,需要进行适当的正则化和超参数调整。
  • 解释性较差,难以理解模型的决策过程。

在这里插入图片描述

AI模型部署方法

在AI深度学习模型的训练中,一般会用Python语言实现,原因是其灵活、可读性强。但在AI模型实际部署中,主要会用到C++,原因在于其语言自身的高效性。

对于AI模型的部署,有这几种方法可供选择:

  • 使用 C++ 实现深度学习模型(★★★)
    可以使用 C++ 编写自己的深度学习库或框架,但这需要您具有深入的数学和计算机科学知识。此外,也可以使用现有的开源 C++ 框架,如 TensorRT 和 OpenCV DNN 等。

  • 导出深度学习模型到应用平台(★★)
    许多深度学习框架支持将训练好的模型导出为 C++ 可以读取的格式,如 ONNX、TensorFlow Lite、Caffe2 等。这样可以在不重新训练模型的情况下,在 C++ 代码中加载和运行模型。

  • 使用 C++ 库来加载和运行深度学习模型(★)
    许多开发人员使用现有的 C++ 库来加载和运行深度学习模型,如 OpenCV、Dlib、Libtorch 等。这些库提供了一些方便的函数和接口,可以轻松地集成到您的 C++ 项目中。

在这里插入图片描述

AI模型部署框架

模型部署常见的推理框架有:ONNX、NCNN、OpenVINO、 TensorRT、Mediapipe。

  • ONNX
    官网:https://onnx.ai/
    github:https://github.com/onnx/onnx

开放神经网络交换ONNX(Open Neural Network Exchange)是一套表示深度神经网络模型的开放格式,由微软和Facebook于2017推出,然后迅速得到了各大厂商和框架的支持。通过短短几年的发展,已经成为表示深度学习模型的实际标准,并且通过ONNX-ML,可以支持传统非神经网络机器学习模型,大有一统整个AI模型交换标准的趋势。

无论使用什么样的训练框架来训练模型(比如TensorFlow/Pytorch/OneFlow/Paddle),你都可以在训练后将这些框架的模型统一转为ONNX存储。ONNX文件不仅存储了神经网络模型的权重,还存储了模型的结构信息、网络中各层的输入输出等一些信息。目前,ONNX主要关注在模型预测方面(inferring),将转换后的ONNX模型,转换成我们需要使用不同框架部署的类型,可以很容易的部署在兼容ONNX的运行环境中。

  • NCNN
    github:https://github.com/Tencent/ncnn

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架,也是腾讯优图实验室成立以来的第一个开源项目。ncnn 从设计之初深刻考虑手机端的部署和使用,无第三方依赖,跨平台,手机端 CPU 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 App。

从NCNN的发展矩阵可以看出,NCNN覆盖了几乎所有常用的系统平台,尤其是在移动平台上的适用性更好,在Linux、Windows和Android、以及iOS、macOS平台上都可以使用GPU来部署模型。

  • OpenVINO
    官网:https://docs.openvino.ai/latest/home.html
    github:https://github.com/openvinotoolkit/openvino

OpenVINO是一种可以加快高性能计算机视觉和深度学习视觉应用开发速度的工具套件,支持各种英特尔平台的硬件加速器上进行深度学习,并且允许直接异构执行。OpenVINO™工具包是用于快速开发应用程序和解决方案的综合工具包,可解决各种任务,包括模拟人类视觉,自动语音识别,自然语言处理,推荐系统等。可在英特尔®硬件上扩展计算机视觉和非视觉工作负载,从而最大限度地提高性能。

OpenVINO在模型部署前,首先会对模型进行优化,模型优化器会对模型的拓扑结构进行优化,去掉不需要的层,对相同的运算进行融合、合并以加快运算效率,减少内存拷贝;FP16、INT8量化也可以在保证精度损失很小的前提下减小模型体积,提高模型的性能。在部署方面,OpenVIVO的开发也是相对比较简单的,提供了C、C++和python3种语言编程接口。

  • TensorRT
    官网:https://developer.nvidia.com/zh-cn/tensorrt
    github:https://github.com/NVIDIA/TensorRT

NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK。此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高吞吐量。

在推理过程中,基于 TensorRT 的应用程序的执行速度可比 CPU 平台的速度快 40 倍。借助 TensorRT,您可以优化在所有主要框架中训练的神经网络模型,精确校正低精度,并最终将模型部署到超大规模数据中心、嵌入式或汽车产品平台中。

TensorRT 以 NVIDIA 的并行编程模型 CUDA 为基础构建而成,可帮助您利用 CUDA-X 中的库、开发工具和技术,针对人工智能、自主机器、高性能计算和图形优化所有深度学习框架中的推理。

  • Mediapipe
    官网:https://google.github.io/mediapipe/
    github:https://github.com/google/mediapipe

MediaPipe是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。作为一款跨平台框架,MediaPipe 不仅可以被部署在服务器端,更可以在多个移动端 (安卓和苹果 iOS)和嵌入式平台(Google Coral 和树莓派)中作为设备端机器学习推理 (On-device Machine Learning Inference)框架。

除了上述的特性,MediaPipe 还支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同时,在移动端和嵌入式平台,MediaPipe 也支持设备本身的 GPU 加速。

在这里插入图片描述

如何选择

  1. ONNXRuntime 是可以运行在多平台 (Windows,Linux,Mac,Android,iOS) 上的一款推理框架,它接受 ONNX 格式的模型输入,支持 GPU 和 CPU 的推理。唯一不足就是 ONNX 节点粒度较细,推理速度有时候比其他推理框架如 TensorRT 较低。
  2. NCNN是针对手机端的部署。优势是开源较早,有非常稳定的社区,开源影响力也较高。
  3. OpenVINO 是 Intel 家出的针对 Intel 出品的 CPU 和 GPU 友好的一款推理框架,同时它也是对接不同训练框架如 TensorFlow,Pytorch,Caffe 等。不足之处可能是只支持 Intel 家的硬件产品。
  4. TensorRT 针对 NVIDIA 系列显卡具有其他框架都不具备的优势,如果运行在 NVIDIA 显卡上, TensorRT 一般是所有框架中推理最快的。一般的主流的训练框架如TensorFlow 和 Pytorch 都能转换成 TensorRT 可运行的模型。当然了,TensorRT 的限制就是只能运行在 NVIDIA 显卡上,同时不开源 kernel。
  5. MediaPipe 不支持除了tensorflow之外的其他深度学习框架。MediaPipe 的主要用例是使用推理模型和其他可重用组件对应用机器学习管道进行快速原型设计。MediaPipe 还有助于将机器学习技术部署到各种不同硬件平台上的演示和应用程序中,为移动、桌面/云、web和物联网设备构建世界级ML解决方案和应用程序。

在这里插入图片描述

AI模型部署平台

AI 模型部署是将训练好的 AI 模型应用到实际场景中的过程。以下是一些常见的 AI 模型部署平台:

  1. 云端部署
    云端部署是最流行的 AI 模型部署方式之一,通常使用云计算平台来托管模型和处理请求。例如,Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP) 等云服务提供商都提供了 AI 模型部署解决方案。

  2. 边缘设备部署
    边缘设备部署是将模型部署到 IoT 设备或嵌入式系统等边缘设备上的过程。这种部署方式可以减少延迟和网络带宽消耗,并提高隐私性和安全性。

  3. 移动设备部署
    移动设备部署是将 AI 模型部署到移动设备上的过程,允许设备在本地执行推理而不需要依赖网络连接。这种部署方式对于需要快速响应和保护用户隐私的应用非常有用。

  4. 容器化部署
    容器化部署是将 AI 模型封装到一个轻量级的容器中,然后在不同的环境中进行部署和运行。容器化部署可以提高可移植性和灵活性,并简化部署过程。

AI大模型的训练与优化
训练和优化大规模机器学习模型确实是一个具有挑战性的任务,以下是一些有效的方法和技巧:

  1. 计算资源分配:合理分配计算资源,例如使用 GPU 加速训练、分布式训练等技术,以提高训练效率。
  2. 参数调优:通过网格搜索、随机搜索或基于启发式的方法来调整模型的超参数,如学习率、正则化参数等。
  3. 正则化方法:应用正则化技术,如 L1、L2 正则化或dropout,以防止过拟合并提高模型的泛化能力。
  4. 模型压缩:采用压缩技术,如剪枝、量化等,减少模型的参数量和计算量,使其能够在资源有限的设备上运行。
  5. 数据增强:通过数据增强技术,如翻转、旋转、缩放等,增加训练数据的多样性,提高模型的鲁棒性。
  6. 梯度裁剪:限制梯度的范数,以避免梯度爆炸或消失问题。
  7. 早停法:根据验证集上的性能,在合适的时候停止训练,避免过拟合。
  8. 迁移学习:利用已有的预训练模型,在新的任务上进行微调,加快训练过程。
  9. 并行计算:使用多线程、多进程或分布式计算框架,加速模型的训练。
  10. 混合精度:在训练中使用低精度数据类型,如 FP16,减少内存消耗和计算时间。

在这里插入图片描述

未来发展趋势与挑战

AI 大模型学习的未来发展一些关键的趋势包括:

  1. 更大规模和更复杂的模型:随着计算能力的提高,我们将看到更大型、更复杂的模型出现,能够处理更庞大的数据和更复杂的任务。
  2. 多模态学习:结合多种数据形式,如图像、音频、文本等,进行综合学习,提高模型的理解能力。
  3. 可解释性和透明度:提高模型的可解释性,使人们能够更好地理解模型的决策过程。
  4. 分布式训练和边缘计算:利用分布式计算和边缘计算技术,加速模型训练和在边缘设备上的部署。
  5. 与人类的协同合作:AI 与人类将更加紧密地合作,共同解决问题。

然而,当前也面临一些挑战:

  1. 计算资源需求:训练大规模模型需要大量的计算资源,这可能限制其在一些场景中的应用。
  2. 数据隐私和安全:随着数据量的增加,数据隐私和安全问题将变得更加突出。
  3. 伦理和社会影响:需要关注 AI 技术对社会结构、就业等方面的影响。
  4. 技术瓶颈和限制:例如模型的泛化能力、对抗攻击的鲁棒性等方面仍存在挑战。

为了解决这些问题,可以探索以下研究方向:

  1. 高效的模型压缩和优化:减少模型的计算和存储需求,使其更易于部署。
  2. 联邦学习和隐私保护技术:在保护数据隐私的前提下进行模型训练。
  3. 人机协作的设计与研究:探索如何让 AI 与人类更好地协作。
  4. 可解释性方法的研究:提高模型的可解释性,增加人们对模型决策的信任。
  5. 对抗攻击和鲁棒性的研究:增强模型对恶意攻击的抵御能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/887533.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在,危害性会很大。但远程文件包含漏洞的利用条件较为苛刻;因此,在web应用系统的功能设计上尽量不要让前端用户直接传变…

水下声呐数据集,带标注

水下声呐数据集,带标注 水下声呐数据集 数据集名称 水下声呐数据集 (Underwater Sonar Dataset) 数据集概述 本数据集是一个专门用于训练和评估水下目标检测与分类模型的数据集。数据集包含大量的水下声呐图像,每张图像都经过专业标注,标明…

银河麒麟桌面操作系统修改默认Shell为Bash

银河麒麟桌面操作系统修改默认Shell为Bash 💐The Begin💐点点关注,收藏不迷路💐 在银河麒麟桌面操作系统(ARM版)中,若要将默认Shell从Dash改为Bash,可执行以下步骤: 打开…

记一次炉石传说记牌器 Crash 排查经历

大家好这里是 Geek技术前线。最近在打炉石过程中遇到了HSTracker记牌器的一个闪退问题,尝试性排查了下原因。这里简单记录一下 最近炉石国服回归;由于设备限制,我基本只会在 Mac 上打炉石。并且由于主要打竞技场,所以记牌器是必不…

河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例

河南移动,作为电信全业务运营企业,不仅拥有庞大的客户群体和业务规模,还引领着业务产品与服务体系的创新发展。河南移动的原有核心营业系统承载着超过6000万的庞大用户量,管理着超过80TB的海量数据,因此也面临着数据规…

AI类课程的笔记

信息论、导论、模式识别(数据挖掘)、语义网络与知识图谱、深度学习、强化学习 (零)信息论 详见另一篇博文 信息论自总结笔记(仍然在更新)_信息论也更新了-CSDN博客https://blog.csdn.net/sinat_27382047/article/details/12690…

Elasticsearch 实战应用

Elasticsearch 实战应用 引言 Elasticsearch 是一个分布式、RESTful 风格的搜索和分析引擎,能够快速、实时地处理大规模数据,广泛应用于全文搜索、日志分析、推荐系统等领域。在这篇博客中,我们将从 Elasticsearch 的基本概念入手&#xff…

无神论文解读之ControlNet:Adding Conditional Control to Text-to-Image Diffusion Models

一、什么是ControlNet ControlNet是一种能够控制模型生成内容的方法,能够对文生图等模型添加限制信息(边缘、深度图、法向量图、姿势点图等),在当今生成比较火的时代很流行。 这种方法使得能够直接提供空间信息控制图片以更细粒…

Hive数仓操作(十七)

一、Hive的存储 一、Hive 四种存储格式 在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用Text 和 ORC : 1. Text 说明:Hive 的默认存储格式。存储方式:行存储。优点…

设计模式、系统设计 record part03

创建者模式 1.创建、使用,二者分离 2.降低,耦合度 3.使用者,不用关注,对象的创建细节 工厂模式: 1.对象由工厂生产, 2.使用者与工厂交流,不与对象直接打交道, 3.在工厂里直接更换对象…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者:胡玉龙,快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据…

静止坐标系和旋转坐标系变换的线性化,锁相环线性化通用推导

将笛卡尔坐标系的电压 [ U x , U y ] [U_x, U_y] [Ux​,Uy​] 通过旋转变换(由锁相环角度 θ P L L \theta_{PLL} θPLL​ 控制)转换为 dq 坐标系下的电压 [ U d , U q ] [U_d, U_q] [Ud​,Uq​]。这个公式是非线性的,因为它涉及到正弦和余弦函数。 图片中的推导过程主要…

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架: https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架,标志着目标检测又多了一个检测利器,于是尝试在windows下部署yolov11的tensorrt模型,并最终成功。 重要说明:安装环境视为最基…

总结TypeScript相关知识

目录 引入认识特点安装使用变量声明类型推导 JS 和 TS 共有类型number类型boolean类型string类型Array类型null和undefined类型object类型symbol类型对象类型函数类型 可选和只读type 和 interface索引签名类型断言非空类型断言类型缩小严格赋值检测现象TS 新增类型字面量类型a…

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …

windows下安装rabbitMQ并开通管理界面和允许远程访问

如题&#xff0c;在windows下安装一个rabbitMQ server&#xff1b;然后用浏览器访问其管理界面&#xff1b;由于rabbitMQ的默认账号guest默认只能本机访问&#xff0c;因此需要设置允许其他机器远程访问。这跟mysql的思路很像&#xff0c;默认只能本地访问&#xff0c;要远程访…

Jenkins pipeline配置示例

前提条件&#xff1a;已经安装Jenkins并能正常启动 如果Jenkins安装启动遇到问题可以参考&#xff1a; 1.创建pipeline 点击新建项目&#xff1a; 输入名称&#xff0c;选择pipeline&#xff1a; 进入配置页面&#xff0c;如果要配置GitHub Webhook要勾选&#xff1a;<fo…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

交换排序:冒泡排序、递归实现快速排序

目录 冒泡排序 1.冒泡排序的核心思想 2.冒泡排序的思路步骤 3.冒泡排序代码 4.代码分析 5.对冒泡排序的时间复杂度是O(N^2)进行解析 6.冒泡排序的特性总结 递归实现快速排序(二路划分版本) 1.快速排序基本思路 2.代码思路步骤 3.代码实现 4.代码分析 (1)递归终止条…

lrzsz串口文件传输

此时如果需要传输文件&#xff0c;需要借助rz/sz工具&#xff0c;可以使用的传输协议有ZMODEM、YMODEM、XMODEM&#xff0c;默认是ZMODEM。 https://en.wikipedia.org/wiki/ZMODEM https://gallium.inria.fr/~doligez/zmodem/zmodem.txt 这里记录item2下使用rz/sz进行文件传输…