模型存储-OCI
type
status
date
slug
summary
tags
category
icon
password
网址
"Modelcars"是一个专门解决这些挑战的KServe功能。它通过使用OCI镜像简化了模型获取过程,提供了以下几个优势:
- 减少启动时间:通过避免重复下载大型模型,显著减少启动延迟。
- 降低磁盘空间使用:该功能减少了对重复本地存储的需求,节省磁盘空间。
- 提升性能:Modelcars支持预取镜像和延迟加载等高级技术,提高效率。
- 兼容性和集成性:它可以与现有的KServe基础设施无缝集成,确保易于采用。
Modelcars代表了高效模型服务的一个进步,特别适用于处理大型模型和动态服务环境。
启用Modelcars
KServe中的Modelcars功能默认是未启用的。要使用这种新的模型服务方法,需要在KServe配置中激活它。按照以下步骤在您的环境中启用Modelcars。
可以通过修改
inferenceservice-config
ConfigMap中的storageInitializer
配置来启用Modelcars。这可以通过手动使用kubectl edit
来完成,或者执行下面提供的脚本,当前命名空间需要设置为安装kserve-controller-manager
的命名空间(取决于KServer的安装方式)。准备包含模型数据的OCI镜像
要使用Modelcars来服务模型,您需要准备一个包含模型数据的OCI(开放容器倡议)镜像。这个过程包括创建一个Dockerfile并构建一个在特定目录中存放模型的OCI镜像。以下是指导您完成此过程的步骤和示例。
- 创建Dockerfile:首先创建一个Dockerfile,使用包含必要命令(如用于创建符号链接的
ln
和用于保持容器运行的sleep
)的基础镜像。Dockerfile还应包括创建目录/model
用于存放模型数据,并将数据复制到该目录的步骤。以下是一个示例Dockerfile,其中data/
目录包含您的模型数据。这些数据随后将由运行时挂载到/mnt/models
:
- 构建并推送镜像到镜像仓库:一旦您的Dockerfile准备就绪,使用docker或podman构建镜像并将其推送到容器镜像仓库(如Docker Hub或quay.io)
完成这些步骤后,您就有了一个准备就绪的OCI镜像,其中包含模型数据,可以与KServe的Modelcars功能一起使用,实现高效的模型服务。
使用Modelcars
启用Modelcars并准备好包含模型数据的OCI镜像后,将此设置集成到您的
InferenceService
中非常简单。关键步骤是在InferenceService
配置中使用oci://
协议指定storageURI
来指向您的OCI镜像。以下是使用Modelcars功能时
InferenceService
配置的示例:为了充分利用Modelcars设置中OCI镜像的本地缓存功能,使用特定的模型镜像标签至关重要,而不是依赖默认的
latest
标签。例如,在提供的示例中使用了标签1.0
。这种方法确保modelcar镜像使用IfNotPresent
策略拉取,从而有效利用本地缓存。相反,使用latest
标签或完全省略标签会默认使用Always
拉取策略。这意味着每次Pod重启或扩展时都会重新下载镜像,从而失去本地缓存的优势,可能导致启动时间增加。示例
让我们通过使用OCI镜像部署入门示例来了解modecars的工作原理,并检查它与使用storage-initalizer初始化容器的启动有何不同。
假设您已经设置了启用KServe的命名空间
kserve-test
,创建一个使用oci://
存储URL的InferenceService
:在
InferenceService
成功部署后,您可以按照入门示例的步骤验证安装。最后,让我们简单了解一下这个功能的工作原理。首先检查运行时pod:
示例输出
如您所见,Pod现在有一个额外的容器。这个容器运行modelcar镜像并执行
ln -sf /proc/$$/root/models /mnt/
命令,在modelcar容器和服务运行时容器中挂载在/mnt
的共享空卷上创建符号链接。这里的魔法在于通过proc文件系统创建的符号链接,它在所有容器之间共享。在Kubernetes中,如果设置了字段.spec.shareProcessNamespace
为true
,Pod的容器之间就可以实现这一点,这适用于所有使用oci://
协议的storageUri。让我们进入运行时容器并检查挂载的
/mnt
文件系统:容器内会话示例
如您所见,运行时可以直接访问来自modelcar镜像的数据,无需预先将其复制到另一个卷中。
配置
通过推理服务的全局配置设置,可以对KServe中的Modelcars行为进行微调。这些设置位于
inferenceservice-config
ConfigMap中,该ConfigMap位于kserve
命名空间或KServe控制器运行的命名空间中。这个ConfigMap包含各种子配置,其中Modelcars配置位于storageInitializer
条目下。要查看当前配置,请使用以下命令:
示例输出
输出是表示配置的JSON字符串。对于Modelcars,可以自定义以下几个键:
键 | 描述 | 示例 |
enableModelcar | 启用使用"oci://"协议的源URL直接访问OCI容器镜像。 | true |
cpuModelcar | modelcar容器的CPU请求和限制。 | 10m |
memoryModelcar | modelcar容器的内存请求和限制。 | 15Mi |
uidModelcar | modelcar进程和主容器运行时使用的UID。如果需要root权限,设置为 0 。如果未设置,则使用容器的UID。 | 1042 |
参考资料
- Modelcar设计文档
- 原始GitHub问题(同时讨论了一些替代解决方案)
- 12分钟演示
- 代码演示展示了KServe中Modelcars的实现(用于背景信息)
上一篇
模型存储-S3
下一篇
模型存储-URI
Loading...