【GTC 22】通过 PAI-Blade 更方便、更鲁棒地使用 TensorRT

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 随着 AI 应用的快速发展和广泛应用,AI 应用开发和工程部署及模型优化也日益引起了产业界关注。如何更高效地完成 AI 算法从研究领域到生产部署的应用开发流程是一个常见的问题。本次 GTC 2022 S41395 中,阿里云计算平台 PAI 团队分享了通过模型系统优化工具 PAI-Blade 更好地应用 TensorRT,BladeDISC 等相关技术方案,优化云上应用场景。

随着 AI 应用的快速发展和广泛应用,AI 应用开发和工程部署及模型优化也日益引起了产业界关注。如何更高效地完成 AI 算法从研究领域到生产部署的应用开发流程是一个常见的问题。本次 GTC 2022 S41395 中,阿里云计算平台 PAI 团队分享了通过模型系统优化工具 PAI-Blade 更好地应用 TensorRT,BladeDISC  等相关技术方案,优化云上应用场景。


背景及动机

AI 应用的主要特点是拥有大量、高度密集和并行的张量数值计算。在深度学习 AI 的热潮之下,国内外也涌现了不少支持 AI 数值计算的加速器及新硬件。但是就目前而言, NVIDIA GPU 在云端依然是最主流的 AI 加速硬件;无论从性能、生态、还是普及程度,NVIDIA GPU 都是佼佼者。TensorRT  是 NVIDIA GPU 平台上提供的一款免费模型推理加速工具,它在许多深度学习模型上都取得了领先的加速效果。然而,在许多情况下顺滑地通过TensorRT 完成从研究到生产的部署却成为了用户最头疼的问题。我们把这些困难总结为如下三个挑战:

  • 从研究到部署的切换
  • ONNX 的缺点
  • TensorRT  的局限性


挑战 1: 从研究到部署切换

  1. 转换链路和流程太长,许多转换和优化过程需要人工参与和介入
  2. 在广泛的应用场景中,从训练到生产迁移过程中的每个步骤所依赖的开发技能不同
  1. 算法建模、模型训练、模型转换、模型优化部署
  2. Python,C/C++, CUDA 等
  3. 不同训练框架,不同的硬件加速器
  1. 平台和框架迁移的成本


挑战 2: ONNX 的缺点

ONNX 是一个开源的社区项目,它的目标是成为各个机器学习框架之间的可交换格式。因为 ONNX 格式具有严格的标准,并且在框架之间保持中立,在 AI 应用的发展过程中得到了许多权威机构的支持。目前 ONNX 的社区仍然比较繁荣和活跃。在 NVIDIA 平台上面 ONNX-TensorRT 得到了官方支持和广泛使用。


尽管如此,ONNX 社区不同工具之间的兼容性存在明显的问题。主要原因可能包括:

  1. 深度学习算法和框架仍然在持续发展,ONNX 标准难以覆盖新生 Operator;在 OpSet  覆盖率上面目前无法做到 100%
  2. 标准的制定依赖于产业的共识和努力,然而 ONNX 社区上下游之间对 ONNX 标准的支持水平参差不齐;ONNX 标准语义和框架及后端之间的语义存在不对齐的情况
  3. 主流框架的导出 ONNX 方式主要依赖于 tracing 机制;难以覆盖 control flow 等一些复杂的情况


挑战 3: TensorRT 的局限性

  1. 对前端框架算子操作(Operator)和数据类型的仅提供有限的支持
  1. ONNX-TensorRT 支持了 129 个 ONNX 算子,具体信息可以参考 support-matrix
  2. ONNX 接近 160 个算子,TensorFlow  拥有超过 750 个算子, PyTorch  拥有超过 2000 个算子
  1. 仅提供对动态 shape 的有限支持
  1. 动态 batching、文本/语音序列长度、图像/视频分辨率的动态性在推理场景中很常见
  2. TensorRT  需要通过设置 OptimizationProfile 来确定动态 shape 的范围;这在一些场景中并不现实,而且容易引起错误和鲁棒性问题
  1. 已构建的 Engine 无法跨 GPU compute capabilities 使用,同时优化无法迁移到非 NVIDIA GPU 的设备


这些挑战在现实中成为了困扰开发用户完成 AI 算法研究到 AI 生产部署的问题,并且用户经常为此付出了更多的时间和成本。基于用户的调研和反馈,PAI-Blade 旨在提供更加易用,更加鲁棒,更加自动的模型优化工具。


PAI-Blade 的设计原则

通过统一的流程在不同框架上自动完成多样化的优化策略


  • Performance: 优异的执行性能仍然是我们考虑的最主要问题;没有性能的优化工具,不拥有价值。
  • Generality: 广泛的通用性能够适配更多场景,同时提供更多的开发和部署自由。
  • 支持 TensorFlow/PyTorch/ONNX
  • 支持多样的加速硬件,包括 GPU/CPU/DCU 等等
  • 支持不同的加速方案,BladeDISC/TensorRT/TVM/MNN 等等
  • Usability and Robustness: 易用性和鲁棒性能够降低用户的学习成本在生产系统中集成的成本。
  • 统一的简洁的 API
  • 最大程度的自动化
  • 轻量的集成负担(仅需要几行代码)


PAI-Blade 和以往其他的工具主要的不同点在于它不仅仅考虑性能,而是更加强调性能、通用性、易用性与鲁棒性的协同设计。


PAI-Blade 的设计考虑

可插拔的设计

PAI-Blade 将优化功能实现为原始框架的扩展形式。在这种设计考虑之下,优化部署开发的用户不需要迁移框架和编程语言,只需要几行(甚至完全没有)代码改动就可以完成自动化的优化部署。


支持不同后端接入的可扩展架构

PAI-Blade 的性能来有赖于高性能的后端加速器的支持。为此,我们设计了可扩展、可复用的统一优化流程。以 PyTorch  为例,下面图例分别展示了接入 TensorRT、量化和 BladeDISC 的方法。

接入 ONNX-TensorRT  的流程


接入量化的流程


接入 BladeDISC  的流程

在这种统一的优化流程中,所有信息的传递,层级与层级的交互更加通畅了,也为我们组合多种优化工具打开了空间。


多层 fallback  支持

到目前为止,深度学习模型优化流程的鲁棒性和易用性并没有得到足够的重视。因为一个算子不支持,而放弃整个模型的优化的事情常有发生。许多 AI 应用开发者不得不因此而止步。


为了避免这种情况发生,降低用户的使用门槛,PAI-Blade 引入了多层的 fallback  机制:

  • 操作(Operation) 不支持时 fallback
  • 子图转换失败时 fallback
  • 运行时异常 fallback

如上图,在优化执行过程中,PAI-Blade 会主动在  Graph IR(Intermediate Representation)  上根据每个操作的输入情况,判定当前操作是否会被后端加速器支持,如果不支持则 fallback  到原端框架的 Runtime 执行。


在此基础之上,PAI-Blade 通过并查集算法合并能够被支持的操作成为若干子图;然后将子图转换到后端加速,如果子图转换失败则会进一步 fallback。最后,转换成功的子图会运行在加速器上。如果在运行时发现异常,或者输入不匹配的情况(数据类型、shape 范围不支持),则会 fallback  到框架的 Runtime 上运行。


自动化优化流程

由于 PAI-Blade 协同设计了从训练框架前端到硬件加速器后端的转换流程,优化过程中不需要用户介入:

  1. 不支持的算子自动 fallback,不需要开发 plugin
  2. 自动圈图转换和子图优化
  3. 自动选择最佳的优化策略

借助 fallback  保证了模型转换的成功率 ,并且让过程更加自动化,进一步降低了使用门槛。同时优化所需要的信息在同一个系统流程中自动获取和传递,相比导出到其他框架部署,用户不需要干预和介入优化中间流程。


BladeDISC  动态 shape 优化

在推理应用场景中,动态 shape 的使用场景很多样。期待用户通过限制自己应用场景中的动态 shape 并不实际。比如,组 batch 的时间会影响服务的响应延时;NLP 场景中的动态序列长度可能引起 shape 的组合爆炸;CV 检测和识别的场景中同样大小的图片可能得到完全不同的个数的输出结果。


为了更加彻底地解决推理应用场景中的动态 shape 问题,PAI-Blade 原生支持BladeDISC  动态 AI 编译引擎。BladeDISC 是基于 MLIR 构建的动态 AI 编译器,它也从 TensorRT、XLA 和 TVM 等框架中汲取了很多经验。但是相比于 ONNX 和 HLO(XLA), BladeDISC 选择了 MHLO 作为 Tensor-Level IR,因为 MHLO 在 IR 和编译器层面提供了更好的动态 shape 支持。

BladeDISC 首先从 TensorFlow  和 PyTorch  中对支持的算子进行合并圈图,然后将子图转换成为 MHLO 模块。在此之后,BladeDISC  会执行许多编译 pass 来转换和优化 MLIR 模块,包括 placer、shape inference、control flow lowering、fusion、高性能 codegen 等等。


在这些 pass 中间,值得一提的是 fusion 和 codegen。目前 BladeDISC  的 fusion 策略主要会节省 kernel launch  和访存的开销。除此之外,fusion 同样会高性能代码生成创建了更多的机会和空间。PAI-Blade 和 BladeDISC  相关代码已经开源,可以参考 https://github.com/alibaba/BladeDISC。同时,GTC22 S41073-Generalized and Transparent AI Optimization Solutions with AI Compilers from Cloud Service Providers 拥有更加详细的关于 BladeDISC  的技术揭秘。


PAI-Blade 案例介绍

Detecron2 是一个基于 PyTorch  构建的检测分割深度学习算法库。这里选取Detectron2 的主要原因是其框架中提供了一些 SOTA 的检测分割算法网络结构,同时框架拥有很强的自定义和扩展能力。但是,从 Detectron2 中直接导出到 TensorRT 进行优化部署相对较为困难。PAI-Blade 基于 TorchScript 及圈图和 fallback  机制,在解决的导出问题的同时拿到了不错的执行性能,如下图:

Detectron2 上 TorchBlade(fp16) 对比 Torch(fp16) 加速效果(NVIDIA T4, CUDA11.5)


PAI-Blade 特性总结

  • Performance: 集成最好的优化后端,提升对动态 Shape 的支持。
  • Generality: 良好的通用性,支持主流的机器学习框架、加速硬件。
  • Usability and Robustness: 降低工程师学习的成本和系统集成的成本。

PAI-Blade 和 BladeDISC  现已开源, https://github.com/alibaba/BladeDISC,也欢迎大家一起共建。

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
机器学习/深度学习 弹性计算 人工智能
GTC 22 精彩看点 | 锁定阿里云机器学习 PAI 分享
3月21日,2022英伟达 GTC 大会即将拉开帷幕。此次 GTC 22 大会上,阿里云将带来有关推理优化/部署、深度学习编译器、大模型部署、训练优化、云手游等主题的内容,分享云端机器学习平台最新的创新实践。
GTC 22 精彩看点 | 锁定阿里云机器学习 PAI 分享
|
7月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
251 14
|
7月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
132 1
|
7月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
7月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
348 0
|
7月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
986 0
|
7月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【2月更文挑战第20天】 在数据科学与人工智能的领域中,支持向量机(SVM)是一种强大的监督学习算法,它基于统计学习理论中的VC维理论和结构风险最小化原理。本文将深入探讨SVM的核心概念、工作原理以及实际应用案例。我们将透过算法的数学原理,揭示如何利用SVM进行有效的数据分类与回归分析,并讨论其在处理非线性问题时的优势。通过本文,读者将对SVM有更深层次的理解,并能够在实践中应用这一算法解决复杂的数据问题。
95 0
|
7月前
|
机器学习/深度学习 分布式计算 算法
大模型开发:你如何确定使用哪种机器学习算法?
在大型机器学习模型开发中,选择算法是关键。首先,明确问题类型(如回归、分类、聚类等)。其次,考虑数据规模、特征数量和类型、分布和结构,以判断适合的算法。再者,评估性能要求(准确性、速度、可解释性)和资源限制(计算资源、内存)。同时,利用领域知识和正则化来选择模型。最后,通过实验验证和模型比较进行优化。此过程涉及迭代和业务需求的技术权衡。
124 2
|
7月前
|
机器学习/深度学习 数据采集 存储
使用机器学习算法进行文本分类的方法与实践
本文将介绍使用机器学习算法进行文本分类的方法与实践。通过分析文本特征、选择合适的机器学习算法和构建有效的训练模型,可以实现准确和高效的文本分类任务。我们还将探讨如何处理文本数据预处理、特征提取和模型评估等方面的关键问题,以帮助读者更好地应用机器学习技术解决文本分类挑战。
|
7月前
|
机器学习/深度学习 人工智能 算法
利用Python实现简单的机器学习算法——线性回归
本文介绍了如何使用Python语言和相关库,通过实现线性回归算法来进行简单的机器学习模型训练和预测。通过详细的代码示例和解释,帮助读者了解机器学习中的基础概念和实践操作。

相关产品

  • 人工智能平台 PAI
  • 下一篇
    DataWorks