BentoML:如何使用 JuiceFS 加速大模型加载?

作者 | 管锡鹏
BentoML 是一个开源的大语言模型(LLM) AI 应用的开发框架和部署工具,致力于为开发者提供最简单的构建大语言模型 AI 应用的能力,其开源产品已经支持全球数千家企业和组织的核心 AI 应用 。
当 BentoML 在 Serverless 环境中部署模型时 , 其中一个主要挑战是冷启动慢,尤其在部署大型语言模型时更为明显 。由于这些模型体积庞大,启动和初始化过程耗时很长 。此外,由于 Image Registry 的带宽较小,会让大体积的 Container Image 进一步加剧冷启动缓慢的问题 。为了解决这一问题,BentoML 引入了 JuiceFS 。
JuiceFS 的 POSIX 兼容性和数据分块使我们能够按需读取数据,读取性能接近 S3 能提供的性能 的上限,有效解决了大型模型在 Serverless 环境中冷启动缓慢的问题 。使用 JuiceFS 后 , 模型加载速度由原来的 20 多分钟缩短至几分钟 。在实施 JuiceFS 的过程中,我们发现实际模型文件的读取速度与预期基准测试速度存在差异 。通过一系列优化措施,如改进数据缓存策略和优化读取算法,我们成功解决了这些挑战 。在本文中,我们将详细介绍我们面临的挑战、解决方案及相关优化 。
1BentoML 简介以及 Bento 的架构
在介绍模型部署环节的工作之前,首先需要对 BentoML 是什么以及它的架构做一个简要的介绍 。
BentoML 是一个高度集成的开发框架,采用简单易用的方式,支持以开发单体应用的方式进行开发 , 同时以分布式应用的形式进行部署 。这意味着开发者可以用很低的学习成本来快速开发一个高效利用硬件资源的大语言模型 AI 应用 。BentoML 还支持多种框架训练出来的模型,包括 PyTorch、TensorFlow 等常用 ML 框架 。起初,BentoML 主要服务于传统 AI 模型,但随着大型语言模型的兴起,如 GPT 的应用,BentoML 也能够服务于大语言模型 。
BentoML 产生的制品称为 Bento,Bento 的角色类似于 Container Image,是用于 AI 应用部署的最基本单位,一个 Bento 可以轻松部署在不同的环境中 , 比如 Docker、EC2、AWS Lambda、AWS SageMaker、Kafka、Spark、Kube.NETes 。
一个 Bento 包含了业务代码、模型文件、静态文件,同时我们抽象出来了 API Server 和 Runner 的概念,API Server 是流量的入口 , 主要承载一些 I/O 密集型的任务,Runner 通常是执行模型的推理工作,主要承载一些 GPU/CPU 密集型的任务,从而可以将一个 AI 应用中不同硬件资源需求的任务进行轻松解耦 。

BentoML:如何使用 JuiceFS 加速大模型加载?

文章插图
Bento Architecture
Bento ArchitectureBentoCloud 是一个使 Bento 可以部署在云上的平台,一般开发任务分为三个阶段:
BentoML:如何使用 JuiceFS 加速大模型加载?

文章插图
BentoCloud Architecture
  • 第一阶段:开发阶段
当项目使用 BentoML 进行 AI App 开发时,产生制品 Bento 。此阶段 BentoCloud 的角色是 Bento Registry 。
  • 第二阶段:集成阶段
若要将 Bento 部署到云环境中,需要一个 OCI 镜像(Container Image) 。在这个阶段,我们有一个组件称为 yatai-image-builder,负责将 Bento 构建成 OCI 镜像 , 以便后续应用 。
  • 第三阶段:部署阶段,也是本文的重点内容
这其中一个关键组件是 yatai-serverless 。在这个阶段,yatai-serverless 负责将上一阶段构建的 OCI 镜像部署到云上 。
BentoML:如何使用 JuiceFS 加速大模型加载?

文章插图
yatai-serverless Architecture
2Serverless 平台部署大模型的挑战
  • 挑战 1:冷启动慢
对于 Serverless 平台而言,冷启动时间至关重要 。想象一下,当请求到达时 , 从零开始增加副本,这可能需要超过 5 分钟 。在这段时间内,前面的某些 HTTP 基础设施可能认为已经超时,对用户体验不利 。特别是对于大语言模型,其模型文件通常很大,可能达到十几到二十几 GB 的规模 , 导致在启动时拉取和下载模型的阶段非常耗时,从而显著延长冷启动时间 。
  • 挑战 2:数据一致性问题
这是 Serverless 平台中特有的问题 。我们的平台通过对 Bento 的一些建模解决了这些问题 。
  • 挑战 3:数据安全性问题
这是将 Bento 部署到云上的主要原因之一 , 也是 BentoML 提供给用户的核心价值之一 。众所周知,OpenAI 以及国内的一些大语言模型会提供一些 HTTP API 供用户使用,但由于许多企业或应用场景对数据安全性有极高的要求,因此他们不可能将敏感数据传递给第三方平台的 API 进行处理 。他们希望将大型语言模型部署到自己的云平台上,以确保数据的安全性 。


推荐阅读