华为云AI开发平台ModelArtsStep1 在Notebook中拷贝模型包_云淘科技

登录ModelArts控制台,在左侧导航栏中选择“开发环境 > Notebook”,进入“Notebook”管理页面。
单击右上角“创建”,进入“创建Notebook”页面,请参见如下说明填写参数。

填写Notebook基本信息,包含名称、描述、是否自动停止。
填写Notebook详细参数,如选择镜像、资源规格等,如图1所示。

“镜像”:选择统一镜像tensorflow_2.1-cuda_10.1-cudnn7-ubuntu_18.04(详见引擎版本一:tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64)或者pytorch1.8-cuda10.2-cudnn7-ubuntu18.04(详见引擎版本一:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64)。
“资源池”:选择公共资源池或专属资源池,此处以公共资源池为例。
“类型”:推荐选择GPU。
“规格”:推荐选择T4规格,若没有再选择其他规格。

图1 创建Notebook实例

图2 选择资源类型和规格

参数填写完成后,单击“立即创建”进行规格确认。参数确认无误后,单击“提交”,完成Notebook的创建操作。

进入Notebook列表,正在创建中的Notebook状态为“创建中”,创建过程需要几分钟,请耐心等待。当Notebook状态变为“运行中”时,表示Notebook已创建并启动完成。

打开运行中的Notebook实例。

图3 打开Notebook实例

通过功能,上传模型包文件到Notebook中,默认工作目录/home/ma-user/work/。模型包文件需要用户自己准备,样例内容参见模型包文件样例。

图4 上传模型包

打开Terminal终端,解压model.zip,解压后删除zip文件。

#解压命令
unzip model.zip

图5 在Terminal终端中解压model.zip

在Terminal运行界面,执行拷贝命令。查看镜像文件拷贝成功。

cp -rf model/*  /home/ma-user/infer/model/1

图6 查看镜像文件拷贝成功

模型包文件样例

模型包文件model.zip中需要用户自己准备模型文件,此处仅是举例示意说明,以一个手写数字识别模型为例。

Model目录下必须要包含推理脚本文件customize_service.py,目的是为开发者提供模型预处理和后处理的逻辑。

图7 推理模型model目录示意图(需要用户自己准备模型文件)

推理脚本customize_service.py的具体写法要求可以参考模型推理代码编写说明。

本案例中提供的customize_service.py文件具体内容如下:

import logging
import threading

import numpy as np
import tensorflow as tf
from PIL import Image

from model_service.tfserving_model_service import TfServingBaseService


class mnist_service(TfServingBaseService):

    def __init__(self, model_name, model_path):
        self.model_name = model_name
        self.model_path = model_path
        self.model = None
        self.predict = None

        # 非阻塞方式加载saved_model模型,防止阻塞超时
        thread = threading.Thread(target=self.load_model)
        thread.start()

    def load_model(self):
        # load saved_model 格式的模型
        self.model = tf.saved_model.load(self.model_path)

        signature_defs = self.model.signatures.keys()

        signature = []
        # only one signature allowed
        for signature_def in signature_defs:
            signature.append(signature_def)

        if len(signature) == 1:
            model_signature = signature[0]
        else:
            logging.warning("signatures more than one, use serving_default signature from %s", signature)
            model_signature = tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY

        self.predict = self.model.signatures[model_signature]

    def _preprocess(self, data):
        images = []
        for k, v in data.items():
            for file_name, file_content in v.items():
                image1 = Image.open(file_content)
                image1 = np.array(image1, dtype=np.float32)
                image1.resize((28, 28, 1))
                images.append(image1)

        images = tf.convert_to_tensor(images, dtype=tf.dtypes.float32)
        preprocessed_data = images

        return preprocessed_data

    def _inference(self, data):

        return self.predict(data)

    def _postprocess(self, data):

        return {
            "result": int(data["output"].numpy()[0].argmax())
        }

父主题: 无需构建直接在开发环境中调试并保存镜像用于推理

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家