ormb 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
ormb 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
ormb 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
ormb 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
ormb 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

ormb(OCI-Based Registry for ML/DL Model Bundle)是基于镜像仓库的机器学习模型分发组件,旨在帮助企业像管理容器镜像一样管理机器学习模型。它不仅提供版本化的模型管理能力,还可利用符合 OCI 标准的容器镜像仓库存储和分发机器学习模型。通过 Harbor 2.0,它可以实现在多个镜像仓库间的同步,满足更多企业级需求。

基于这个项目,才云之后会继续开源基于 Harbor 实现的模型仓库,提供更多能力。其中包括但不限于模型的格式转换、模型自动压缩等高级特性。

端到端的示例

我们以图像识别作为示例,介绍一下如何利用 ormb 进行机器学习模型的分发。

在这一示例中,我们会在本地利用 Fashion MNIST 训练一个简单的 CNN 图像识别模型,并利用 ormb 将其推送到远端镜像仓库中。随后,在服务器上,我们同样利用 ormb 将模型拉取下来,利用第三方的模型服务器对外提供服务。最后,我们再利用 RESTful 的接口调用这一服务,查看结果。

下方是模型训练的代码,我们将训练好的模型保存为 SavedModel 格式,并将模型提供在 ormb 示例中:

# 建立模型,设定 Optimizer,进行训练
model = keras.Sequential([
  keras.layers.Conv2D(input_shape=(28,28,1), 
                      filters=8, 
                      kernel_size=3, 
                      strides=2, 
                      activation='relu', 
                      name='Conv1'),
  keras.layers.Flatten(),
  keras.layers.Dense(10, 
                     activation=tf.nn.softmax, 
                     name='Softmax')
])
model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=epochs)

test_loss, test_acc = model.evaluate(test_images, 
                                     test_labels)
import tempfile

# 保存模型到当前目录的 model 子目录下
MODEL_DIR = "./model"
version = 1
export_path = os.path.join(MODEL_DIR, str(version))
tf.keras.models.save_model(
    model,
    export_path,
    overwrite=True,
    include_optimizer=True,
    save_format=None,
    signatures=None,
    options=None
)

接下来,我们将在本地训练好的模型推送到远端镜像仓库中:

# 将模型保存在本地文件系统的缓存中
$ ormb save ./model gaocegege/fashion_model:v1
ref:       gaocegege/fashion_model:v1
digest:    6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
size:      162.1 KiB
format:    SavedModel
v1: saved
# 将保存在缓存中的模型推送到远端仓库中
$ ormb push gaocegege/fashion_model:v1
The push refers to repository [gaocegege/fashion_model]
ref:       gaocegege/fashion_model:v1
digest:    6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
size:      162.1 KiB
format:    SavedModel
v1: pushed to remote (1 layer, 162.1 KiB total)

以 Harbor 为例,在 Harbor 镜像仓库中,我们可以看到这一模型的元数据等信息:

随后,我们可以在服务器上将模型下载下来,模型下载过程与推送到镜像仓库的方法类似:

# 从远端仓库拉取到服务器的本地缓存
$ ormb pull gaocegege/fashion_model:v1
v1: Pulling from gaocegege/fashion_model
ref:     gaocegege/fashion_model:v1
digest:  6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
size:    162.1 KiB
Status: Downloaded newer model for gaocegege/fashion_model:v1
# 将本地缓存的模型导出到当前目录
$ ormb export gaocegege/fashion_model:v1
ref:     localhost/gaocegege/fashion_model:v1
digest:  6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
size:    162.1 KiB
$ tree ./model
model
└── 1
    ├── saved_model.pb
    └── variables
        ├── variables.data-00000-of-00001
        └── variables.index

2 directories, 3 files

接下来,我们就可以利用 TFServing 将模型部署为 RESTful 服务,并利用 Fashion MNIST 数据集的数据进行推理:

$ tensorflow_model_server --model_base_path=$(pwd)/model --model_name=fashion_model --rest_api_port=8501
2020-05-27 17:01:57.499303: I tensorflow_serving/model_servers/server.cc:358] Running gRPC ModelServer at 0.0.0.0:8500 ...
[evhttp_server.cc : 238] NET_LOG: Entering the event loop ...
2020-05-27 17:01:57.501354: I tensorflow_serving/model_servers/server.cc:378] Exporting HTTP/REST API at:localhost:8501 ...

 

或者,我们也可以使用 Seldon Core 将模型服务直接部署在 Kubernetes 集群上,具体可以参见我们提供的文档:

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: tfserving
spec:
  name: mnist
  protocol: tensorflow
  predictors:
  - graph:
      children: []
      implementation: TENSORFLOW_SERVER
      modelUri: demo.goharbor.io/tensorflow/fashion_model:v1
      serviceAccountName: ormb
      name: mnist-model
      parameters:
        - name: signature_name
          type: STRING
          value: predict_images
        - name: model_name
          type: STRING
          value: mnist-model
    name: default
    replicas: 1

算法工程师迭代新版本的模型时,可以打包新的版本,利用 ormb 拉取新的镜像后重新部署。ormb 可以配合任何符合 OCI Distribution Specification 的镜像仓库使用,这意味着 ormb 支持公有云上的镜像仓库和 Harbor 等开源镜像仓库项目。

我们也可以利用 Harbor 提供的 Webhook 功能,实现模型服务的持续部署。通过在 Harbor UI 中注册一个 Webhook,所有对 Harbor 的推送模型请求事件都会被转发到我们定义的 HTTP Endpoint 上。而我们可以在 Webhook 中实现对应的部署逻辑,比如根据新的模型来更新 Seldon 部署模型服务的版本,实现模型服务的持续部署等。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表于运维专区
2020/07/10 08:00

才云开源 ormb:像管理 Docker 容器镜像一样管理机器学习模型

才云开源的基于镜像仓库的机器学习模型分发组件 ormb(OCI-Based Registry for ML/DL Model Bundle)能帮助企业像管理容器镜像一样管理机器学习模型。它不仅提供版本化的模型管理能力,还可利用符合 OCI 标准的容器镜像仓库存储和分发机器学习模型。通过 Harbor 2.0,它可以实现在多个镜像仓库间的同步,满足更多企业级需求。 发布 | 才云 Caicloud 作者 | gaocegege 项目 | github.com/caicloud/ormb 以 Docker 为代表的容器虚...

0
0
发表于开源治理专区
2020/08/20 11:35

才云开源ORMB:像管理容器镜像一样管理机器学习模型

才云开源的基于镜像仓库的机器学习模型分发组件 ormb(OCI-Based Registry for ML/DL Model Bundle)能帮助企业像管理容器镜像一样管理机器学习模型。它不仅提供版本化的模型管理能力,还可利用符合 OCI 标准的容器镜像仓库存储和分发机器学习模型。通过 Harbor 2.0,它可以实现在多个镜像仓库间的同步,满足更多企业级需求。 发布 | 才云 Caicloud 作者 | gaocegege 项目 | github.com/caicloud/ormb 以 Docker 为代表的容器虚...

0
0
发表于云计算专区
2020/12/24 12:00

ormb开源工具:像管理 Docker 容器镜像一样管理机器学习模型

才云开源的基于镜像仓库的机器学习模型分发组件 ormb(OCI-Based Registry for ML/DL Model Bundle)能帮助企业像管理容器镜像一样管理机器学习模型。它不仅提供版本化的模型管理能力,还可利用符合 OCI 标准的容器镜像仓库存储和分发机器学习模型。通过 Harbor 2.0,它可以实现在多个镜像仓库间的同步,满足更多企业级需求。 发布 | 才云 Caicloud 作者 | gaocegege 来源:火山引擎云原生 / 原文链接 项目 | github.com/caicl...

0
0
发表了博客
2020/12/27 11:30

字节跳动开源云原生机器学习平台 Klever

字节跳动基础架构团队基于火山引擎机器学习平台 Clever 及其丰富的行业落地经验,推出开源项目 Klever,以工程化的方式降低智能技术落地门槛,助力企业快速打造智能业务。 近年来,智能技术不论是在学术界还是工业界都取得了突破性进展。机器学习、深度学习开始在各行各业扮演重要角色:业务上,帮助企业优化运营、提高效率、改善客户体验;管理上,参与后台自动化运营,完成数据处理和提取等任务。 然而,随着越来越多企业开始...

0
0
发表了博客
2020/08/25 16:51

像管理镜像一样管理机器学习模型

题图摄于北京国家会议中心 本文阐述了如何利用 Harbor 的 OCI Artifact 功能来存储、分发和管理机器学习的模型文件。读者可以学习到如何使用 Harbor 管理自定义类型的数据文件。Harbor项目维护者和才云的工程师合作,在即将发布的 Harbor 2.1 中增加了对 Artifact 的支持,欢迎了解和使用。 文后附招聘消息一则: 招聘机器学习和云原生开发工程师 才云开源的基于镜像仓库的机器学习模型分发组件 ormb(OCI-Based Registry for ...

0
0
发表于AI & 大数据专区
2020/12/28 10:57

字节跳动开源云原生机器学习平台 Klever

:10人将获赠CNCF士多$100礼券! 来参与2020年CNCF中国云原生调查 问卷链接(https://www.wjx.cn/jq/97146486.aspx) 字节跳动基础架构团队基于火山引擎机器学习平台 Clever 及其丰富的行业落地经验,推出开源项目 Klever,以工程化的方式降低智能技术落地门槛,助力企业快速打造智能业务。 发布 | 火山引擎云原生 作者 | 陈军(字节跳动) 项目 | https://github.com/kleveross 近年来,智能技术不论是在学术界还是工业界都取得...

0
0
发表于AI & 大数据专区
2020/12/28 17:48

字节跳动开源云原生机器学习平台 Klever

:10人将获赠CNCF士多$100礼券! 来参与2020年CNCF中国云原生调查 问卷链接(https://www.wjx.cn/jq/97146486.aspx) 字节跳动基础架构团队基于火山引擎机器学习平台 Clever 及其丰富的行业落地经验,推出开源项目 Klever,以工程化的方式降低智能技术落地门槛,助力企业快速打造智能业务。 发布 | 火山引擎云原生 作者 | 陈军(字节跳动) 项目 | https://github.com/kleveross 近年来,智能技术不论是在学术界还是工业界都取得...

0
0
发表了博客
2020/08/22 06:48

CNCF Weekly 20-34

云原生开发状态报告 报告发现,全球60%的后端开发人员现在都在使用容器。与2019年第二季度相比,容器的使用平均增加了10个百分点。容器编排工具的使用平均增加了约7个百分点,而云功能和无服务器架构的使用相对稳定。 CNCF宣布全球金融平台公司Intuit成为金牌会员 “像Intuit这样的最终用户对于开源生态系统来说是无价的。它们为项目开发带来了独特的视角,并为开发人员提供了必要的反馈,而这些反馈对于项目的成功至关重要。”...

0
0
发表了博客
2020/07/11 06:48

CNCF Weekly 20-28

【7月30日-8月1日首届线上峰会邀请】快和身边的小伙伴一起报名参会吧!(门票免费) 为了回馈这些热衷开源精英,更好的顺应中国开源界的需求及广大参会者的要求,经过开源社区志愿者的不断努力,首届线上峰会正式上线!本次大会报名通道现已开启,点击 官网注册窗口即可完成注册参会哦!快和身边的小伙伴一起报名参会吧! 深度聚焦 3 大技术领域,阿里云将重磅亮相首届线上 KubeCon 本次线上 KubeCon ,阿里巴巴共有 12 个含金量...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
3 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部