KubeGems教学系列 - 快速体验 Model X

2022-11-11 16:50:42 浏览数 (1)

什么是 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 模型仓库
代码语言:javascript复制
$ 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

添加算法仓库
  • 添加和登录仓库
代码语言:javascript复制
#添加仓库
$ modelx repo add modelx http://modelx.kubegems.io

#登录仓库
$ modelx login modelx         #modelx registry没有配置 OIDC 时,暂时无需 token 认证,在此处按回车跳过即可
Token:
Login successful for modelx
  • 参看仓库列表
代码语言:javascript复制
$ modelx list repo
 --------- ---------------------------- 
| NAME    | URL                        |
 --------- ---------------------------- 
| modelx  | http://modelx.kubegems.io  |
 --------- ---------------------------- 
本地初始化和推送算法模型
  • 本地初始化一个模型目录
代码语言:javascript复制
# 初始化模型目录
$ modelx init class

Modelx model initialized in class

# 模型目录结构
$ tree class
class
├── modelx.yaml    # 模型描述信息
└── README.md      # 模型 ReadMe 信息
  • 添加测试文件
代码语言:javascript复制
$ echo "some script" > scripy.sh
$ echo -n "some binary" > binary.dat
  • 推送模型到仓库, 资源路径结构 <仓库名>/<项目名>/<模型名>@<模型版本>
代码语言:javascript复制
# 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仓库

拉取和查看算法模型
  • 查看模型版本列表
代码语言:javascript复制
$ 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类型,里面定义了一些通用的数据,比如模型的基本描述、运行框架、维护者和模型的输入、输出等信息

代码语言:javascript复制
config:
  inputs: {}
  outputs: {}
description: This is a modelx model
framework: <some framework>
maintainers:
  - maintainer
modelFiles: []
tags:
  - modelx
  - <other>
task: ""

总结

本文主要介绍了如何快速运行和使用 Model X 来管理模型,Model X 项目还非常的年轻,仍有很多功能需继续完善,我们非常欢迎有想法的同学参与交流和贡献!

0 人点赞