《Ai学习笔记》-模型集成部署

后续大多数模型提升速度和精度:

提升速度:

-知识蒸馏,以distillBert和tinyBert为代表

-神经网络优化技巧。prune来剪裁多余的网络节点,混合精度(fp32和fp26混合来降低计算精度从从而实现速度的提升)

提升精度:

-增强算力。Roberta

-改进网络。xlnet,利用transformer-xl

-多任务学习(ensemble)

DistillBERT

DistilBERT, a distilled version of BERT: smaller, faster, cheaper andlighter HuggingFace

原因:

模型:应用到线上服务对服务的计算资源要求非常高

效果:对transformer进行了知识蒸馏,得到了一个只有原始模型40%大小的学生模型,并且在下游任务上的效果和教室模型相差不多,并且inference的时间是之前的60%

使用Bert-base作为teacher model

-在12层Transformer-encoder的基础上每2层中去掉一层,减少到6层,每一层用teacher model对应层的参数初始化。

-去掉了token type embedding和pooler。

-利用teacher model的soft target和teacher model的隐层参数来训练student model.

目的:在精度损失不大的情况下压缩模型大小提高其推理速度,更适应线上应用满足业务需求。

完整的大模型在线项目流程:

为什么要部署?

模型的服务方式

模型的服务方式主要分为离线预测和在线预测两大类,这两种服务方式各有特点,适用于不同的场景需求。下面详细解释这两种服务方式:

离线预测

定义: 离线预测是指在非实时的环境下,对历史数据或批量数据进行模型预测。这种预测方式通常在数据处理和分析阶段使用,不直接响应即时查询或请求。

特点:

  1. 数据处理量大: 适合处理大量历史数据或大数据集,可以在计算资源相对充裕的时间段(如夜间)运行。
  2. 不实时: 预测结果不是立即生成,不需要实时响应用户请求,因此对延迟要求不高。
  3. 资源调度灵活: 可以利用闲时计算资源进行批处理,成本效益较高。
  4. 适用场景: 适用于数据分析、市场趋势预测、报表生成、用户行为分析等不需要即时反馈的场景。

在线预测

定义: 在线预测是指模型部署在服务器上,能够实时接收输入数据并迅速返回预测结果的一种服务方式。它强调低延迟和高可用性,以支持即时决策。

特点:

  1. 实时性: 能够立即响应用户的查询或请求,提供即时预测结果,适用于需要快速反馈的场景。
  2. 低延迟: 对系统的响应时间有严格要求,需要高效的计算能力和优化的算法设计来保证用户体验。
  3. 资源要求高: 需要持续运行的计算资源和高效的数据传输能力,以应对不确定的并发访问压力。
  4. 适用场景: 适用于推荐系统、实时交易分析、欺诈检测、语音识别、自动驾驶等需要即时决策的场景。

总结

选择离线预测还是在线预测,主要取决于应用场景对时效性的要求、数据处理规模以及资源成本的考量。离线预测适用于大数据量的批处理分析,而在线预测则更侧重于实时交互和服务响应。在实际应用中,两者往往结合使用,比如先通过离线预测进行模型训练和参数优化,然后将模型部署为在线服务,以满足不同业务场景的需求。

部署方式:

1.server framework + deeplearning framework api

2.server framework+ deeplearning serving

Server Framework (服务器框架)

服务器框架是构建应用程序后端的核心,它提供了处理网络请求、数据处理、安全控制及与其他系统交互的能力。常见的服务器框架包括但不限于:

  • Flask / Django (Python): Flask以其轻量级和灵活性著称,适合快速搭建小型服务;Django则是一个功能全面的高级Web框架,适合构建大型项目,自带ORM、模板引擎等。
  • Express.js (Node.js): 适用于快速构建Web应用和服务的轻量级框架,特别适合开发RESTful APIs。
  • Spring Boot (Java): 面向Java平台,简化了新Spring应用的初始搭建以及开发过程,提供了默认配置来快速运行应用程序。

Deep Learning Framework API / Serving

这部分专注于如何高效、可靠地部署和管理深度学习模型,确保模型能够在生产环境中实时响应预测请求。关键技术和框架包括:

  • TensorFlow Serving: 专为TensorFlow模型设计的高性能服务系统,支持模型版本管理、高效加载和低延迟预测服务。
  • PyTorch Serving: 类似于TensorFlow Serving,针对PyTorch模型,旨在简化从研究到生产的路径,提供动态加载模型、版本控制等功能。
  • ONNX Runtime: 开放神经网络交换(ONNX)格式的支持工具,允许模型在不同框架间转换,并高效执行,支持TensorFlow、PyTorch等多种模型格式。

综合部署方式

结合这两部分,一个典型的部署流程可能如下:

  1. 模型训练: 使用TensorFlow、PyTorch等框架训练模型。
  2. 模型转换与优化: 如有必要,将模型转换为通用格式如ONNX,进行优化以提高推理速度。
  3. 部署准备: 利用Server Framework(如Flask)搭建后端服务,配置API端点。
  4. 集成Deep Learning Serving: 将训练好的模型通过TensorFlow Serving或类似服务部署,确保模型加载至服务器内存,准备接受预测请求。
  5. 接口对接: 通过Server Framework的API调用Deep Learning Serving中的模型接口,处理客户端请求,将预测结果返回给前端应用或客户端。

这样的架构设计既充分利用了深度学习框架的强大功能,又通过服务器框架的灵活性和可扩展性保证了服务的稳定性和效率,是实现复杂AI应用部署的优选方案。

算法人员思考问题维度:

-长耗时操作

-一次性操作

-接口控制

-处理时长

-模型大小

-服务降级策略

-回滚兼容策略

-实验方式

-多模型并行或者串行

部署架构参考

python Server Framework & model API

Flask(灵活,轻量级,插件多)

Tornado(异步,速度快,插件少)

Django(全能,重,大型项目)


Python API实验、训练

Python/C++ API部署、预测

Bert-as-service & Tf-serving

https://github.com/hanxiao/bert-as-service

https://github.com/tensorflow/serving

https://www.tensorflow.org/tfx/guide/serving

可以基于docker来部署

tensorflow-模型容器化

是的,TensorFlow 主要是为了构建和运行机器学习模型而设计的。它是Google开发的一个开源软件库,特别强大于深度学习领域。TensorFlow 提供了一系列工具和库,帮助开发者完成以下任务:

  1. 构建模型:你可以使用 TensorFlow 来定义各种机器学习模型,无论是简单的线性模型还是复杂的深度神经网络。通过组合不同的层、激活函数和损失函数,你可以创建出定制化的模型来解决特定问题。

  2. 训练模型:TensorFlow 支持数据的导入、预处理,并提供了多种优化算法来训练模型。它利用反向传播和自动微分来高效地更新模型参数,以最小化损失函数。

  3. 评估与调整:模型训练完成后,你可以使用 TensorFlow 测试模型性能,进行验证,并根据需要调整模型参数或结构以优化结果。

  4. 部署模型:TensorFlow 支持将训练好的模型部署到服务器、移动设备或网页应用中,进行实时或批量预测。

  5. 分布式计算:TensorFlow 支持分布式训练,能够在多个GPU或TPU上并行运行,大大加快训练速度。

  6. 高级特性:除了基础功能,TensorFlow 还包括诸如模型优化、模型服务、可视化工具(如TensorBoard)等高级特性,便于模型的调试、监控和优化。

因此,简单来说,TensorFlow 是一个用于创建、训练、评估和部署机器学习模型的综合平台。

具体代码分析:

阅读理解与多模型集成技术

XLNet代码分析 - 李理的博客

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

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

相关文章

OpenCV与PySide6、QT Designer的联合使用

一、一个简单的demo,用QT Designer创建一个QMainWindow,并且放置一个QLabel,用以显示从OpenCV读取到的图像文件。 1、打开QT Designer,新建QMainWindow,放置一个QLabel,命名为label_show: 2、将…

Linux系统命令traceroute详解(语法、选项、原理和实例)

目录 一、traceroute概述 二、语法 1、基本语法 2、命令选项 三、帮助信息 四、示例 1. 使用默认模式(ICMP Echo)追踪到目标主机 2. 使用UDP模式(需要root权限)追踪到目标主机 3. 不解析IP地址为主机名,直接显…

Nodejs(文件操作,构建服务器,express,npm)

文章目录 文件操作1.读取文件1)步骤2)范例 2.写文件1)步骤2)范例 3.删除文件4.重命名文件夹5删除文件夹 Url1.url.parse()2.url.fomat() Query1.query.parse()2.query.stringfy()3.编码和解码 第三方模块1.nodemailer2.body-parse…

反弹shell详细易懂讲解,看这一篇就够了

文章目录 反弹shell详细易懂讲解,看这一篇就够了一: 基础shell知识什么是shell,bash与shell的区别?通俗解释类型功能常见命令 二: 什么是反弹shell三: 反弹shell类型bash反弹shellNetcat 一句话反弹curl反弹shell正确姿势 wget方式反弹awk反弹 Shellsoc…

Linux环境基础开发工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 软件包管理器-yum 什么是软件包及安装方式 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档: https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

Java进阶学习笔记29——Math、System、Runtime

Math: 代表的是数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。 示例代码: package cn.ensourced1_math;public class MathTest {public static void main(String[] args) {// 目标:了解Math类提供…

安全分析[1]之网络协议脆弱性分析

文章目录 威胁网络安全的主要因素计算机网络概述网络体系结构 网络体系结构脆弱性分组交换认证与可追踪性尽力而为匿名与隐私对全球网络基础实施的依赖无尺度网络互联网的级联特性中间盒子 典型网络协议脆弱性IP协议安全性分析IPSec(IP Security)IPv6问题 ICMP协议安…

Shell环境变量深入:自定义系统环境变量

Shell环境变量深入:自定义系统环境变量 目标 能够自定义系统级环境变量 全局配置文件/etc/profile应用场景 当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序使用 以后只要是所有Shell程序或命令使用的变量…

民国漫画杂志《时代漫画》第23期.PDF

时代漫画23.PDF: https://url03.ctfile.com/f/1779803-1248634922-4eafac?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

Multi-objective reinforcement learning approach for trip recommendation

Multi-objective reinforcement learning approach for trip recommendation A B S T R A C T 行程推荐是一项智能服务,为游客在陌生的城市提供个性化的行程规划。 它旨在构建一系列有序的 POI,在时间和空间限制下最大化用户的旅行体验。 将候选 POI 添…

【C++ 】学习问题及补充

一.自定义类型不初始化直接就赋值&#xff0c;比如string类会怎么样 vectr<string>里已经给每个string对象已经分配好空间&#xff0c;为什么不初始化再赋值会报错 在C中&#xff0c;std::string类是一个动态字符串类&#xff0c;它内部管理着一个字符数组&#xff0c;用…

C++ | Leetcode C++题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; class Solution { public:int minDepth(TreeNode *root) {if (root nullptr) {return 0;}queue<pair<TreeNode *, int> > que;que.emplace(root, 1);while (!que.empty()) {TreeNode *node que.front().first;int depth que…

蓝桥杯物联网竞赛_STM32L071_17_DMA收发 不定长DMA接收

前言&#xff1a; 前面已经说过&#xff0c;由于国赛的代码量的增加&#xff0c;cpu在其他代码的时间块会较省赛大大增加&#xff0c;为了减少对cpu的依赖所以学习DMA收发数据 对于串口中断收发来说串口接收数据无法收取不定长数据所以不好用&#xff0c;而DMA有收集不定长数…

汇编:字符串的输出

在16位汇编程序中&#xff0c;可以使用DOS中断21h的功能号09h来打印字符串&#xff1b;下面是一个简单的示例程序&#xff0c;演示了如何在16位汇编程序中打印字符串&#xff1a; assume cs:code,ds:data ​ data segmentszBuffer db 0dh,0ah,HelloWorld$ //定义字符串 data …

Hadoop概览以及编译hadoop说明

一、Hadoop概述 Hadoop 是一个用于跨计算机集群存储和处理大型数据集的软件框架。它旨在处理大数据&#xff0c;即传统数据库无法有效管理的极其庞大和复杂的数据集。Hadoop不是传统意义上的数据仓库&#xff0c;因为它们的用途不同&#xff0c;架构也不同。Hadoop 是一个跨分布…

Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)

Search your data 这里有两个比较有用的参数需要注意一下 Search timeout&#xff1a;设置每个分片的搜索超时时间。从集群级别可以通过 search.default_search_timeout 来设置超时时间。如果在 search.default_search_timeout 设置的时间段内未完成搜索请求&#xff0c;就会…

京东应届生公司内网说了一句‘什么时候被pdd收购‘,结果惨遭辞退

京东应届生公司内网说了一句’什么时候被pdd收购’&#xff0c;结果惨遭公司开除 这个事最近在圈子讨论比较多 前二天&#xff0c;有一个上海交大毕业的应届生&#xff0c;在京东实习了9个月&#xff0c;好不容易转正12天后&#xff0c;只因在内网说了一句话&#xff0c;就被…

【传知代码】无监督动画中关节动画的运动表示-论文复现

文章目录 概述动画技术的演进原理介绍核心逻辑环境配置/部署方式小结 本文涉及的源码可从无监督动画中关节动画的运动表示该文章下方附件获取 概述 该文探讨了动画在教育和娱乐中的作用&#xff0c;以及通过数据驱动方法简化动画制作的尝试。近期研究通过无监督运动转移减少对…

python数据分析-CO2排放分析

导入所需要的package import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import datetime %matplotlib inline plt.rcParams[font.sans-serif] [KaiTi] #中文 plt.rcParams[axes.unicode_minus] False #负号 数据清洗…