3为什么使用 JuiceFS ?
接下来将详细探模型部署这一关键阶段的具体工作 。下图展示了我们最初采用的架构,即将所有模型文件 , 包括 Python/ target=_blank class=infotextkey>Python 代码、Python 依赖和扩展,都打包成一个 Container Image,然后在 Kubernetes 上运行 。然而 , 这一流程面临着以下挑战:
文章插图
【BentoML:如何使用 JuiceFS 加速大模型加载?】(BentoML:最初模型部署流程图)
- 首先,一个 Container Image 由一系列 Layer 组成,因此 Container Image 最小的下载和缓存单位是 Layer,虽然在下载 Container Image 时,Container Image 的 Layer 是并行下载的,但 Layer 在解压的时候是串行的 。当解压到模型所在的 Layer 时速度会减慢,同时占用大量的 CPU 时间 。
- 另一个挑战是当不同的 Bento 使用相同的模型时 。这种架构会浪费多份相同的空间,并且被打包到不同的 Image 中,作为不同 Layer 存在 , 导致了多次下载和解压,这是极大的资源浪费 。因此,这种架构无法共享模型 。
- 首先 , 它采用 POSIX 协议,无需再加一层抽象就使我们能够以连贯的方式读取数据 。
- 其次,它可以达到很高的吞吐,可以接近整个 S3 或 GCS 的带宽 。
- 第三,它能够实现良好的共享模型 。当我们将模型存储在 JuiceFS 中时 , 不同实例可以共享同一个大型语言模型 。
文章插图
(BentoML:使用 JuiceFS 后的模型部署流程图)
此外,我们进一步优化了下载和缓存的颗粒度,不仅每个模型都有自己的缓存颗粒度,而且 JuiceFS 对大文件分割成了一系列 chunk , 以 chunk 为单位进行下载和缓存,利用这个特性可以实现类似于大模型的 Stream Loading 的效果 。
我们还充分利用了 GKE 的 Image Streaming 技术 。通过 Model Streaming 和 Image Streaming 同时进行数据拉取,我们成功降低了启动时间,提升了整体性能 。
4集成 JuiceFS 时遇到的挑战
- 挑战 1:无缝集成
- 挑战 2: 引入新组件对业务逻辑的影响
- 挑战 3: JuiceFS 下载速度问题
5展望
在未来 , 我们将深入进行更多的可观测性工作,以确保整个架构保持良好的运行状态,并获得足够的指标以便更好地优化配置,尽量避免再次出现类似的问题 。
希望可以高效利用 JuiceFS 自带的缓存能力 。例如,将模型提前种植到 JuiceFS 后 , 这意味着在业务集群中,可以提前在节点中预热模型的缓存,从而进一步提升缓存和冷启动时间的性能 。
推荐阅读
- Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
- 如何基于Docker镜像逆向生成Dockerfile
- 一文解析如何基于 LangChain 构建 LLM 应用程序
- cdr中的裁剪工具应该咋使用,cdr图框精确裁剪后看不到内容
- cdr如何才能画梯形
- 木质地板如何保养与清洁 木质地板怎么清洁
- 花卉丹顶红如何养殖 丹顶红花怎么养殖
- 种植牙有使用年限吗多少岁 种植牙有使用年限吗
- 华为手机如何去掉设置里的红点,华为手机如何取消图标上红点数字
- ai画笔工具怎么让点自动连接,ai镜像工具应该咋滴才可以使用