当前位置: 首页 > backend >正文

OpenShift AI - 用 ModelCar 构建容器化模型,提升模型弹性扩展速度

《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在 OpenShift 4.18 + OpenShift AI 2.19 的环境中验证

文章目录

  • 什么是 ModelCar
  • 构建模型镜像
  • 在 OpenShift AI 使用模型镜像
    • 部署模型
    • 扩展速度对比
  • 参考

什么是 ModelCar

KServe 典型的模型初始化方法是从 S3 Bucket 获取模型。由于每次初始化都要下载模型文件,这一过程对于小型模型来说是可行的,但对于大型模型来说就成了性能瓶颈,因为在自动扩展的过程中会大大延迟启动时间。

ModelCar 是 KServe 为应对这一问题的方案,它具备以下突出优势:

  • 模型文件已放在容器镜像中,当镜像在节点中已被缓存的时候,可避免重复下载模型文件,从而可显著减少模型启动的延迟。
  • 因为在节点上运行相同模型的 pod 将访问同一镜像,无需在每个 pod 中下载模型数据,因此可减少本地磁盘空间的使用。

构建模型镜像

  1. 创建下载模型的文件 download_model.py。
$ cat > download_model.py << EOF
from huggingface_hub import snapshot_download# Specify the Hugging Face repository containing the model
model_repo = "Qwen/Qwen2.5-0.5B-Instruct"
snapshot_download(repo_id=model_repo,local_dir="/models",allow_patterns=["*.safetensors", "*.json", "*.txt"],
)
EOF
  1. 创建构建镜像的文件 Containerfile。
$ cat > Containerfile << EOF
FROM registry.access.redhat.com/ubi9/python-311:latest as baseUSER rootRUN pip install huggingface-hub# Download the model file from hugging face
COPY download_model.py .RUN python download_model.py # Final image containing only the essential model files
FROM registry.access.redhat.com/ubi9/ubi-micro:9.4# Copy the model files from the base container
COPY --from=base /models /modelsUSER 1001
EOF
  1. 构建包含模型的镜像。
podman build . -t modelcar-example:latest --platform linux/amd64
  1. 将镜像推送到 Registry。
$ podman images localhost/modelcar-example
REPOSITORY                  TAG         IMAGE ID      CREATED         SIZE
localhost/modelcar-example  latest      ae4aac72bb2c  59 minutes ago  1.02 GB$ podman push localhost/modelcar-example quay.io/your-registry/modelcar-example:latest

在 OpenShift AI 使用模型镜像

部署模型

  1. 按下图创建一个使用镜像作为源的 connection。
    在这里插入图片描述
  2. 使用以上 connection 部署模型。将 Deployment mode 设为 Advanced,即使用 Serverless 运行模型;Number of model server replicas to deploy 设为 0,即初始运行副本数为零。
    在这里插入图片描述

扩展速度对比

结合《OpenShift AI - 在 OpenShift 和 OpenShift AI 上运行 LLM》中基于 S3 的模型部署模式,在同一环境中对 ModelCar 和 S3 方式运行的 ibm-granite/granite-3.2-2b-instruct 模型进行同时扩展。测试结果:

  • ModelCar 模式的扩展时间:1分12秒,明显快。
  • S3 模式的扩展时间:2分22秒。

参考

https://developers.redhat.com/articles/2025/01/30/build-and-deploy-modelcar-container-openshift-ai#modelcar_containers_pros_and_cons
https://github.com/redhat-ai-services/modelcar-catalog
https://opendatahub.io/docs/serving-models/
https://github.com/redhat-ai-services/modelcar-catalog/tree/main/modelcar-images/qwen2.5-0.5b-instruc

http://www.xdnf.cn/news/6498.html

相关文章:

  • 冲刺软考:做减法,走出备考迷茫,高效提分!
  • 学习C++的好书:C++编程之禅
  • Spring类
  • 基于WinCC flexible 2008、STEP_7和博途之间的项目移植
  • rsync入门笔记
  • 【Redis】压缩列表
  • 打破传统束缚:Captiks 无线惯性动捕与步态分析系统如何重新定义运动测量?
  • 【内含文档PPT】基于SSM框架的智能交通信息管理系统
  • day21-线性表(链表III)
  • 网络爬虫学习之httpx的使用
  • 函数专题1
  • 【大模型面试每日一题】Day 19:如何设计自动化评估框架验证大模型的多步推理能力(如数学解题)?
  • 使用Python与正则表达式高效提取Excel中的票号数据
  • 2.Klipper开发篇:Klipper上位机源码分析
  • 时源芯微|TSFE0806U-2L-900TF复合共模滤波器在USB端口保护
  • Python函数参数传递机制深度解析:值传递与引用传递的真相
  • 理解c++中关键字友元friend的作用
  • 盲盒:拆开未知的惊喜,收藏生活的仪式感
  • 现代生活中的创新健康养生之道
  • LLM笔记(二)LLM数据基础
  • 【C++】Module CPP:模块化编程 Demo
  • 【C#】Thread.Join()、异步等待和直接join
  • C++delete详解剖析
  • 工具类来生成蓝牙指令
  • Java 序列化(Serialization)
  • 奇妙协同效应,EtherNet IP与PROFINET网关优化半导体生产线
  • Git .gitattributes 文件用途详解
  • Baklib知识中台驱动智能服务新实践
  • ZCC6303x-60V/1.2MHz 高效率升压 LED 恒流驱动替代SY7301
  • 【图片识别工具】批量单据识别批量重命名,批量OCR识别图片文字并重命名,批量改名工具的使用步骤和注意事项