什么是 Model X
Model X 是一个简单、高性能、 跨平台和可扩展的用于存储机器学习场景下的模型仓储服务。 它参考了 OCI、Git Lfs 和 对象存储的设计思想和在 Kubernetes 中运行算法服务的场景,为用户提供了一个便捷的、可版本化的模型管理解决方案。更多关于 ModelX 设计可参考文章《ModelX一款开源的机器学习模型管理仓库》 https://www.kubegems.io/blog/kubegems-modelx
目前 Model X包含了三个主要组件:
-
modelx (ModelX Cli)
Modelx 用户侧客户端,可用它来在本地初始化、推送、拉取和版本管理模型文件
-
modexd (ModelX Server)
Modelx 服务端, 它是一个服务 OCI 协议标准的API Server,它主要响应来至CLI的认证和模型管理的请求
-
modelxdl (ModelX Download Tools)
Modelx下载工具,它主要用于在 Kubernetes 中将模型从商店中下载到指定的挂载路径
Model X Registry
- 使用 Git 克隆代码仓库
https://github.com/kubegems/modelx.git
- 进入 modelx 目录,执行下列命令快速拉取一个带 Minio 服务的 Modelx 模型仓库
$ export ADVERTISED_IP=<Host_IP> ## 设置你的主机 IP
$ sed -i "s/__ADVERTISED_IP__/${ADVERTISED_IP}/g" docker-compose.yaml
$ docker compose up -d
# 查看服务运行状态
$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
modelx-minio-1 "/usr/bin/docker-ent…" minio running 0.0.0.0:9000->9000/tcp
modelx-minio-init-1 "mkdir -p /data/mode…" minio-init exited (0)
modelx-modelxd-1 "/app/modelxd-linux-…" modelxd running 0.0.0.0:8080->8080/tcp
此时本地监听的 8080 端口即为Model X的模型仓库地址。
Model X Registry服务更多的配置参数可参考 https://github.com/kubegems/modelx
Model X CLI
下载最新的 ModelX CLI二进制代码 https://github.com/kubegems/modelx/releases/latest
添加算法仓库
- 添加和登录仓库
#添加仓库
$ modelx repo add modelx http://modelx.kubegems.io
#登录仓库
$ modelx login modelx #modelx registry没有配置 OIDC 时,暂时无需 token 认证,在此处按回车跳过即可
Token:
Login successful for modelx
- 参看仓库列表
$ modelx list repo
+---------+----------------------+
| NAME | URL |
+---------+----------------------+
| modelx | http://modelx.kubegems.io |
+---------+----------------------+
本地初始化和推送算法模型
- 本地初始化一个模型目录
# 初始化模型目录
$ modelx init class
Modelx model initialized in class
# 模型目录结构
$ tree class
class
├── modelx.yaml # 模型描述信息
└── README.md # 模型 ReadMe 信息
- 添加测试文件
$ echo "some script" > scripy.sh
$ echo -n "some binary" > binary.dat
- 推送模型到仓库, 资源路径结构 <仓库名>/<项目名>/<模型名>@<模型版本>
# moldex push <仓库名>/<项目名>/<模型名>@<模型版本>
$ modelx push modelx/library/class@v1
Pushing to http://modelx.kubegems.io/library/class@v1
17e682f0 [++++++++++++++++++++++++++++++++++++++++] done
17e682f0 [++++++++++++++++++++++++++++++++++++++++] done
17e682f0 [++++++++++++++++++++++++++++++++++++++++] done
b6f9dd31 [++++++++++++++++++++++++++++++++++++++++] done
test.img [++++++++++++++++++++++++++++++++++++++++] done
4c513e54 [++++++++++++++++++++++++++++++++++++++++] done
Modelx 的版本永远按照当前目录下的文件为准,通过@<模型版本>推送到Registry仓库
拉取和查看算法模型
- 查看模型版本列表
$ modelx list modelx/library/class
+---------+----------------------------------------------------+--------+
| VERSION | URL | SIZE |
+---------+----------------------------------------------------+--------+
| v3 | https://modelx.kubegems.io/library/class@v3 | 4.29GB |
| v2 | https://modelx.kubegems.io/library/class@v2 | 4.29GB |
| v1 | https://modelx.kubegems.io/library/class@v1 | 4.29GB |
+---------+----------------------------------------------------+--------+
# 下载模型, 会在本地创建 class 的目录
$ modelx pull modelx/library/class@v1
模型元数据
模型目录下的 modelx.yaml
为算法的一些描述信息,它和 helm 中的chart.yaml
类型,里面定义了一些通用的数据,比如模型的基本描述、运行框架、维护者和模型的输入、输出等信息
config:
inputs: {}
outputs: {}
description: This is a modelx model
framework: <some framework>
maintainers:
- maintainer
modelFiles: []
tags:
- modelx
- <other>
task: ""
总结
本文主要介绍了如何快速运行和使用 Model X 来管理模型,Model X 项目还非常的年轻,仍有很多功能需继续完善,我们非常欢迎有想法的同学参与交流和贡献!💪🏻
接下来本系列会持续更新《KubeGems教学系列 - 利用 Model X 创建模型商店》敬请关注!