手把手教你用ModelArts模型部署上线&在线推理(一)【我的华为云体验之旅】

苏道 发表于 2021/11/24 16:03:42 2021/11/24
【摘要】 本文的主要目的是带想用ModelArts的同学过遍ModelArts的基础功能并部署属于你自己的模型在云上,并且能够本地通过python代码调API的方式在线推理【本文以tensorflow 1.13为例】。

前言

ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。

本文的主要目的是带想用ModelArts的同学过遍ModelArts的基础功能并部署属于你自己的模型在云上,并且能够本地通过python代码调API的方式在线推理【本文以tensorflow 1.13为例】


模型部署阶段

1、模型格式要求

因为模型部署在云上需要在AI框架[tf/pytorch/mxnet]上再套一个serving框架,本文主要利用tensorflow框架,上层的serving框架会对tensorflow的saved model形式比较亲和[推理比较快],所以需要把模型先转成saved model格式的模型,可能的路线是pb--->saved model / ckpt --->saved model  /h5--->saved model,具体转法同学们可以参考网上的教程~

最终生成的saved model文件树如下:


savedmodel.PNG

variables目录里如下:

variables.PNG

值得注意的是,saved model.pb文件只包含了图,不包含权重,权重全部存在了variables目录下,如果同学们转换出来variables里面是空的,pb文件很大,是有问题的,应该是转换代码的问题。

2、配置文件编写

config.json:

如下是一个简单的config.json文件的内容,runtime 参数定义运行的ai引擎、和推理的环境,reques参数定义当通过request调用这个api时的格式,需要是form-data还是其他,传的是图片file还是string,response定义了推理完模型后返回给请求的格式,dependency是额外需要的一些依赖环境的配置。

具体的其他场景怎么编写可以参考官网文档:模型配置文件编写说明_AI开发平台ModelArts_推理部署_推理规范说明_模型包规范_华为云 (huaweicloud.com)

{
    "model_type": "TensorFlow",
    "model_algorithm": "test-resnet",
    "runtime":"tf1.13-python3.6-cpu",
    "apis": [{
        "protocol": "http",
	"url": "/",
	"method": "post",
	"request": {
            "Content-type": "multipart/form-data",
	    "data": {
                "type": "object",
		"properties": {
		    "sentence": {
		        "type": "string"
		    }
                 }
	    }
	},
	"response": {
            "Content-type": "applicaton/json",
	    "data": {
	        "type": "object",
		"properties": {
		}
            }
	}
    }]
        "dependencies": [{
	    "installer": "pip",
	    "packages": [{
                "restraint": "EXACT",
		"package_version": "1.1.5",
		"package_name": "pandas"
	    },


2、customize_service.py编写

这部分主要是定义模型的数据前处理、后处理和推理的接口,以及返回什么内容应该怎么写,下模板是一个无需前后处理,返回QPS和推理结果、时间的例子,更详细的说明可以参考官方文档:模型推理代码编写说明_AI开发平台ModelArts_推理部署_推理规范说明_模型包规范_华为云 (huaweicloud.com)

import logging
import threading
import numpy as np
import os
import pandas as pd
import tensorflow as tf  # 导入tensorflow
from PIL import Image
from model_service.tfserving_model_service import TfServingBaseService
from config import *
import time

logger = logging.getLogger()
logger.setLevel(logging.INFO)

class mnist_service(TfServingBaseService): 
    def __init__(self, model_name, model_path):
        self.ctx = None
        self.use_time = 0

    def _preprocess(self, data):
            return data

    def _inference(self, data):
        print('ready to infer')
        time_list = []
        start_time = time.time()
        predict_result = self.sess.run(self.model_outputs, feed_dict=self.model_inputs)
        time_list.append(time.time() - start_time)
        use_time = np.mean(time_list)
        result = {}


        result['output'] = predict_result.tolist()
        result['aver_use_time'] = use_time
        result['QPS'] = 1 / use_time

        return result

    def _postprocess(self, data):
        return data


3、打包上传OBS

将上述文件按如下图打包到一个文件夹里:


文件打包.PNG

上传OBS:



obs.PNG

4、模型部署

选择ModelArts里的模型管理---模型


moxing.PNG

然后在‘’我的模型‘’里选择‘’导入‘’,然后再模型创建界面中的‘元模型来源’选择从OBS导入,如下图,除了红框需要选择外,其他配置是读取config.json文件自动配置的,然后点击创建即可完成模型部署:


选择模型.PNG

然后等到模型创建成功:

dengdaimoxing.PNG





模型上线阶段

选择部署上线---在线服务---部署


zaixianfuwu.PNG

选择把模型在什么样的资源下上线[gpu/cpu],选择刚才部署上去的模型,和版本号(如果多次部署的话),即可创建成功



ziyuanchi.PNG



等待在线服务部署完成会出现,‘运行中’,便是成功上线了


yunxingzhong.PNG




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。