Dawn's Blogs

分享技术 记录成长

0%

模型是如何部署在线上的

模型部署按照部署设备分类,主要分为两类:

  • 云端/服务器上的部署,将模型作为一个线上服务进行部署。
  • 移动端/设备端上的部署,就是将模型作为 SDK 进行部署。

本文主要探讨模型作为一个线上服务进行部署。

作为线上服务部署

把 AI 模型作为一个线上服务部署,就需要提供外界访问的接口:

  • Restful HTTP 接口,使用 Flask、Django 等构建 HTTP API 服务。
  • RPC 接口,如 GRPC、Thrift 等。

也可以使用深度学习框架 Serving 实现快速部署:Torch Serving、Tensorflow Serving、Triton 等。

服务优化

模型部署涉及到了服务优化,例如内存占用太大怎么办、响应速度太慢怎么办,如何在线模型更新等等问题。

更小的内存占用

优化内存占用,有两个基本思路:

  • 模型的参数都需要保存在内存中?
  • 把模型变小。

分布式 kv 存储

如下图的模型结构,分为两个部分:

  • dense 网络:右侧深层网络,输入用户画像、用户行为序列等高级特征,结构较复杂。
  • sparse 网络:左侧浅层网络,输入用户或物料 id,结构非常简单。

推荐模型中,由于用于、候选物料极多, sparse 网络的参数占模型参数的 99%。但是进行预测时,sparse 网络只有输入的用户和候选内容 ID 对应的节点参与运算,dense 网络大部分节点都参与运算

image-20231030113409693

dense 网络每次计算都用到,且占用空间小,不适合独立存储;sparse 网络每次计算只用到很少一部分参数,适合独立存储。

所以将 dense 网络存储在内存中,sparse 网络以分布式 kv 的方式进行存储

压缩模型

多用于 NLP、CV 等领域,可以使用:

  • 模型量化(把模型从浮点数变为整数 INT8)。
  • 蒸馏(将复杂的网络特征提取出来,迁移到参数量小的网络中)。

压缩模型会使得模型的效果变差,要在模型效果和计算速度上进行 balance。

更快的推理速度

模型加速推理的优化方向:

  • 算法层加速:
    • 训练前:选用轻量级的网络。
    • 训练后加速
  • 框架层加速:tensorRT 等。
  • 硬件层加速:使用 GPU 而不是 CPU。

算法层加速 - 训练后加速

训练后加速方法:

  • 模型量化。
  • 模型蒸馏。
  • 模型剪枝:去掉模型中不重要的参数。

模型剪枝可行性:研究表明,并不是所有的参数都在模型中发挥作用,部分参数作用有限、表达冗余,甚至会降低模型的性能。

image-20231030114328061

  • 模型拆分:模型按照计算逻辑拆分成几部分,推理时只需要计算部分模型,其他部分在合适时机提前计算、存储好

框架层加速

使用 tensorRT 等加速计算框架,可以合并网络结构、提高计算的并发度。

硬件加速

硬件加速就是使用 GPU 来进行推理,而不是使用 CPU。

硬件加速并不是万能药,对于简单模型不适合硬件加速,I/O 耗时大于计算耗时。

更快的模型更新

模型热更新时,有模型文件大加载时间长加载/更新时不可用来预测的问题,所以通过加锁的方式解决模型热更新,会造成服务短暂不可用

double buffer 机制

为了解决加锁时服务不可用的问题,所以可以在内存空间中保存两份模型,一份用于正常运行,另一份用于更新模型,模型更新完成后切换新模型进行预测。

online learning 在线学习

在推荐领域经常用到,这里只是提出来不做详细解释。

image-20231030115700729

可维护性 & 开发效率提升

Serving 框架

成熟的 Serving 框架可以简化开发,提供包括但不限于以下:

  • 对外暴露 HTTP/GRPC 接口。
  • 模型版本管理。
  • 动态 batch。

A/B 实验

部署多个模型服务,用于接收 client 的请求,通过流量控制实现 A/B 实验。

image-20231030120530335

MLOps

MLOps = ML + Dev + Ops,MLOps 的原则:

  • Automation:环节尽可能自动化
  • Continuous:模型的持续集成、持续部署、持续监控、持续训练
  • Versioning:代码、数据、模型的版本管理
  • Experiment Tracking:实验记录
  • Testing:数据、模型、应用的自动化测试
  • Monitoring:输入数据、模型输出的监控、降级
  • Reproducibility:减少随机性,保证可复现

image-20231030120327944