链载Ai

标题: 云原生 AI:打造大模型工程化落地的最佳实践 [打印本页]

作者: 链载Ai    时间: 5 小时前
标题: 云原生 AI:打造大模型工程化落地的最佳实践


一、云原生与 AI 的结合


ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;visibility: visible;">

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;visibility: visible;">自 2022 年 11 月 OpenAI 发布 ChatGPT 以来,AI 加速融入实际应用的进程日益加快。伴随着 AI 需求的增多,加快日常迭代对于 AI 厂商来说越来越重要,而云原生刚好能在资源效率和开发交付效率上为 AI 应用赋能。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;visibility: visible;">2024 年 3 月,CNCF 发布了首份关于云原生人工智能 CloudNative AI 的白皮书,详尽地探讨了将云原生技术与人工智能融合的当前状态、面临的挑战以及未来的发展方向:https://www.cncf.io/reports/cloud-native-artificial-intelligence-whitepaper。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;visibility: visible;">结合业界的诸多讨论和火山引擎云原生团队的一些实践,如果需要从从分层架构层面理解云原生 AI,我们认为云原生 AI 将需要重点围绕资源管理、应用管理提供能力,如下图所示:

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;visibility: visible;">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;"/>

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;visibility: visible;">平台层面,围绕计算加速/访问加速/配置与权限管理提供服务:

ML Lifecycle 层面,围绕 AI 模型训练/推理的生命周期提供服务:

这种分层结构使得 AI 工程师、Platform 工程师、SRE 三类角色各自有相应的关注重点,可以上下分层协作。接下来,我们将结合产品化的实践,介绍 AI 应用在云原生场景下的部署实战。

二、AI 应用部署


随着业界对于人工智能应用场景的不断拓展,企业在 AI 上的投资正在持续加大,但在工程层面,AI 应用涉及的服务模块和服务配置项繁多,比如推理引擎、模型配置等,配置复杂度高,会给用户带来较高的使用门槛,影响业务迭代效率。

如前文所述,企业在平台层面可以围绕计算加速/访问加速/配置与权限管理做一些建设,比如:

火山引擎云原生团队针对上述问题做了一些探索,下面是我们基于落地实践总结的一些在平台层面可提供的通用解决方案。


2.1 AI 预置镜像

在工程环境中,AI 模型所使用的基础镜像相对收敛,机器学习框架、依赖软件等相对比较统一,这为我们向企业用户提供可靠且高度一致的 AI 开发环境提供了可能。

我们在火山引擎云原生 AI 套件中提供了一系列预置镜像,预装常见的 AI 框架、工具和相关依赖。这些镜像是在火山引擎的云环境中验证过,每个地域都有提供,可以满足开发机、AI 应用构建、开发环境 commit 等多种使用场景。

AI 应用通常很大(十几 GiB 或更大),导致应用冷启动缓慢,会影响用户对服务的整体印象和满意度。同时,大镜像又会导致传输和部署时间长,增加运维成本。针对这个问题,我们提供了三种不同的镜像加速方案,满足 AI 训练、推理、精调等场景下的加速需求。

方案一:镜像懒加载

方案二:P2P 加速

方案三:自定义节点镜像

我们也提供模型仓库服务,由模型仓库提供模型的版本管理、安全扫描、制品同步、回收清理等功能,同时支持对接外部模型仓库,如 HuggingFace 等。


2.2AI 模型灰度发布

AI 模型部署时,为了保障推理效果能让用户满意,企业可以选择进行灰度发布,逐步调大新模型的流量。通常情况下,模型会存储在模型仓库中,我们可以借助模型仓库的版本管理能力管理模型的不同版本。部署模型时,运行环境通常不会有变化,差异点在于通过 PVC 挂载的模型不同。同时由于模型的体积通常都很大,部署新模型时可借助上述模型加载加速能力来降低冷启动的耗时。

网关层面上,借助灰度标签,工程师可以控制存量模型和新模型的流量比例,以实现灰度发布的能力。在灰度发布过程中,网关提供了丰富的技术和业务观测数据,进一步确保灰度过程的稳定性。


2.3模型发布流水线

从模型发布的端到端角度来看,模型发布涉及到模型的测试、模型存储管理、模型部署、灰度发布等过程,这个过程涉及到较多的环节和组件。

为了提升整体的发布效率,减少人工介入带来的发布风险,我们提供了模型发布流水线,通过流水线将端到端的发布过程自动化,如下所示:


三、AI推理性能加速


首先我们先通过两张图快速回顾下 Transformer 和 StableDiffusion 模型的架构:

左图是经典的 Transformer 架构,它在大规模数据集上的训练效率高,同时 self-attention 机制使得模型在处理复杂语言任务时表现出色,但 Transformer 架构的一些因素又极大影响了其推理性能:

右图是经典的 Stable Diffusion 架构,具有高效的图像生成能力,还可以用于视频和动画的生成、图像编辑等。Stable Diffusion 将随机噪声转化为图像是个迭代的过程,导致计算复杂度较高,同时在推理过程中需要大量显存。


3.1推理性能加速方案

在生产环境中部署 AI 模型时,工程师通常会使用专门的推理引擎管理请求和模型,比如业界常用 Triton Inference Server/vLLM/TGI 部署 LLM 模型,使用 ComfyUI/Stable-Diffusion WebUI 部署 StableDiffusion 模型。

虽然推理引擎各种各样,但它们的核心能力基本类似,主要包括两方面:

这里以 Triton Inference Server 为例端到端分析影响 AI 推理请求的因素,Triton Server 主体分为两部分:

基于生产环境中推理引擎架构和工作流程的理解,我们可以总结出端到端的推理性能优化方案:

AI 模型通常很大,一般会被放在 TOS/NAS 等远端存储,在有请求时远程拉取和加载。此时模型的访问性能会极大影响模型请求的端到端性能,这也是 AI 推理中影响端到端性能极为关键的环节。接下来我们将结合生产实践,重点分析如何使用云原生技术解决存储访问加速问题。


3.2存储访问加速

AIGC 场景下,很多企业会选择通过 Stable Diffusion 模型生成图片。在这个场景下,模型启动前就需要先读取基础模型,再响应外部的请求。我们将这个过程做下拆分,可以分成四个阶段:

整个流程中有两个比较显著的耗时点,一个是拉镜像,另一个是拉模型。

在火山引擎云原生团队服务企业用户的落地实践中,我们采取的方式是引入 Fluid,它能很好地解决这些问题。

Fluid 是一个 CNCF 开源项目,它定义了一套 API,抽象出的数据集(DataSet)、存储运行时(Runtime)等概念,既对接了 Alluxio、JuiceFS 这些优秀的存储系统,也对接了各大云厂商的存储产品,因此能将数据的使用和数据的存储解耦开,支持在不同环境中使用不同的存储运行时。

同时在管理存储运行时的过程中,Fluid 也能提供弹性伸缩的能力,贴合业务的流量峰谷以降低缓存成本。在业务高峰时,可以将存储运行时的 Pod 调度到性能更好的节点、增大副本数,来提升性能抗住压力;在业务低峰时,也能减小副本数来减少成本。

在数据集和存储运行时都正常运行后,Fluid 会创建一个新的 PVC,在最简单的场景下,使用数据的业务方,只要使用这个新的 PVC,修改下应用中使用的 PVC 名字和挂载路径,就能享受到数据加速的效果:

另外我们还能利用 Fluid 提供的预热(DataLoad)功能,让 Runtime 将我们指定的文件,提前从远端存储拉取到 Runtime 的缓存集群中,在应用读取时,避免去远端存储拉取。

我们基于客户的业务场景做了一些规模测试,证实 Fluid+Runtime 确实可以大幅减少 Stable Diffusion Pod 的首次文生图耗时。如下表所示,Worker 数量的不同、是否预热,提供的性能是不同的,这样用户在成本和性能之间的选择也更加灵活。

之后我们也会基于这个方案,去自研更快、更稳定的存储运行时,在模型文件的读取上,也会考虑和 veTurboIO 结合,然后在产品上去提升易用性、在稳定性上做更大规模的测试。


3.3 性能测试

前面介绍了推理加速的理论方法,也介绍了通过 Fluid 和 Alluxio 去加速推理服务,还有一个问题:如何衡量推理服务的性能

在我们的场景下,会衍生出这些问题:

这就需要一个性能测试工具来回答上述问题。衡量推理服务的性能要从指标入手,这里我们可以把性能指标简单分为两类:系统指标服务指标

系统指标是指我们可以采集到的 CPU、内存、GPU 的使用率(node exporter、NVIDIA 的 dcgm exporter);服务指标可以来自测试工具自身的报告、推理框架,也可以通过计算获得(如成本)。

值得注意的是,服务的性能和模型的表现之间可能会有冲突,有些优化手段是有损的,使用这些方法后模型的效果会降低,但性能会提升。所以用户也可以不断尝试优化方法,在满足模型效果的前提下,去寻找适合的部署配置。

针对 LLM 场景,我们比较关注延迟和吞吐,比如 TTFT 首 token 延迟和 TPOT 输出的每个 token 的耗时,还有 input 和 output 的吞吐量。

下图展示了我们内部当前正在开发的测试工具,通过 Kubernetes CRD 或者火山引擎云原生产品的 OpenAPI,让用户来做一些配置,比如测试目标、用来部署模型的 backend 框架、要部署的模型和一些部署参数,再设定一些测试场景,比如总的测试请求量、发送速率等,设置完之后,测试工具能自动的在 Kubernetes 集群里,在不同的 GPU 节点上部署 model server,然后执行测试、获得测试数据。经过多种参数、多轮测试后,我们就能知道应该在哪种规格的节点上、使用哪些参数、什么框架来部署模型,能获得一个最大的吞吐。

后面我们会将这些工作都开源出来,支持云原生 AI 领域的发展。

下面展示了我们测评工具的输出,一类是文本类的,偏向程序视角的使用,一方面是易于解析,另一方面也方便后面和其他工具配合使用,形成工作流。另一类是图表,偏向用户视角,能直观看到测试的关键指标,和不同部署配置之间的性能差异。


四、GPU 检测自愈


Llama3 的发布是 AI 开源领域的里程碑,但其报告显示硬件故障率高达 78%,GPU 故障占 58.7%,严重影响训练效率和模型性能,这要求我们在硬件稳定性和故障管理上投入更多关注。

下图是火山引擎云基础团队总结的 GPU 异常检测和处理方案,展示了在 AI 算力基础设施中,GPU 故障的多样性、检测场景的广泛性以及处理流程的复杂性。

面对 GPU 故障检测自愈的复杂度,我们形成了这样的解决方案:

通过定期检查和监听 IaaS 异常事件,我们可以及时准确对集群中 GPU 健康状态进行检查,并在出现异常时,执行预定义的故障处理流程:

值得注意的是,这些自愈动作是高度可配置的。用户可以根据自身业务需求和资源策略,灵活选择执行全部或部分自愈动作。这种灵活性不仅提升了故障处理的效率,也最大化了资源的利用率和业务的连续性。

检测自愈效果的好坏,很大程度上取决于故障检测的准确度。我们提出了一种精细化的异常检测与自愈策略,这张表格展示了我们的检测项与自愈动作的对应关系:

我们列出了多种 GPU 异常情况,包括但不限于过热、硬件故障、驱动问题等,并对每一种异常都设计了相应的自愈动作,如自动重启、资源重新分配、故障隔离等。这种一一对应的策略,确保了一旦检测到异常,系统能够立即采取正确的自愈措施,从而最大限度地减少系统停机时间,保障 AI 服务的连续性和稳定性。

GPU 检测自愈通过一个内部后端系统实现:

检测方面,既有系统通过 Job 下发执行检测逻辑,也有通过 NPD 检测节点异常,并将检测结果写回 Node Objects 上。对于自愈动作,是通过下发 Job 用目标集群和节点进行操作。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5