【DSW Gallery】使用EAS Python SDK完成模型部署

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 针对在线推理场景,PAI平台提供了在线预测服务PAI-EAS(Elastic Algorithm Service),支持基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。通过PAI-EAS,您可以将模型快速部署为RESTful API,再通过HTTP请求的方式调用该服务。您可以使用EAS提供的Python SDK,来管理PAI-EAS服务。

直接使用

请打开使用EAS Python SDK完成模型部署,并点击右上角 “ 在DSW中打开” 。

image.png


概述

针对在线推理场景,PAI平台提供了在线预测服务PAI-EAS(Elastic Algorithm Service),支持基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。通过PAI-EAS,您可以将模型快速部署为RESTful API,再通过HTTP请求的方式调用该服务。

同时,您可以使用EAS提供的命令工具和Python SDK来管理您的模型服务。本文为您介绍如何使用Python来创建服务、查看服务列表。以及,使用EAS的预测SDK,来用代码调用EAS服务。

前提条件

试用本文档介绍的内容前,请先确认您的账号满足以下条件:

  • 开通PAI-EAS(同时会拥有公共资源组),详情见:《开通及购买
  • 已获取阿里云账户的AccessKey ID和AccessKey Secret,详情请参见获取AccessKey
  • 当前使用的JupyterLab环境,安装了 eascmd,安装步骤可参考:下载并认证客户端(如果您使用PAI-DSW,初始镜像中已预置该CLI)
  • 因示例代码中用到了一些python库,请按需决定是否执行以下python包的安装命令

部署前准备工作

步骤一:安装示例需要的Python包

# !pip install tensorflow tensorflow_datasets
# !pip install opencv-python 
!pip install eas-prediction alibabacloud_eas20210701==1.1.2 --upgrade
!pip install tensorflow_datasets

步骤二:训练并产出一个模型

我们参考tensorflow的基础示例(https://www.tensorflow.org/datasets/keras_example ),来训练一个模型,以便演示EAS的使用流程。

import tensorflow as tf
import tensorflow_datasets as tfds
(ds_train, ds_test), ds_info = tfds.load(
    'mnist',
    split=['train', 'test'],
    data_dir='./cached_datasets',
    shuffle_files=True,
    as_supervised=True,
    with_info=True,
)
def normalize_img(image, label):
  """Normalizes images: `uint8` -> `float32`."""
  return tf.cast(image, tf.float32) / 255., label
ds_train = ds_train.map(
    normalize_img)
ds_train = ds_train.cache()
ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)
ds_train = ds_train.batch(128)
ds_train = ds_train.prefetch(10)
ds_test = ds_test.map(normalize_img)
ds_test = ds_test.batch(128)
ds_test = ds_test.cache()
ds_test = ds_test.prefetch(10)
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(10)
])
model.compile(
    optimizer=tf.keras.optimizers.Adam(0.001),
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=[tf.keras.metrics.SparseCategoricalAccuracy()],
)
model.fit(
    ds_train,
    epochs=6,
    validation_data=ds_test,
)
model.save('./eas_demo_output3')

至此,我们已经训练了一个简单的tensorflow模型,并输出到目录:./eas_demo_output3/

下一步,我们会将这个模型部署到EAS,并验证服务的正常。

部署模型到EAS(基于EAS Python SDK)

PAI-EAS提供了eascmd客户端管理工具,可以对服务进行创建、修改、切换、删除等操作,同时也提供了Python SDK供编程使用,当然它们的后端都是EAS的Open API。

步骤一:创建EAS的客户端对象

from alibabacloud_eas20210701.client import Client as eas20210701Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_eas20210701 import models as eas_20210701_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_eas20210701.models import (ListServicesRequest, CreateServiceRequest)
access_key_id = "*您的阿里云账户的Key ID*"
access_key_secret = "*您的阿里云装好的Key Secret*"
import os.path
config_path="/mnt/data/pai.config"
if os.path.isfile(config_path):
    with open(config_path) as f:
        access_key_id = f.readline().strip('\n')
        access_key_secret = f.readline().strip('\n')
config = open_api_models.Config(
            access_key_id=access_key_id,
            access_key_secret=access_key_secret
        )
# 访问的域名
region = "cn-beijing"
config.endpoint = f'pai-eas.{region}.aliyuncs.com'
eas_client = eas20210701Client(config)

步骤二:准备模型文件

EAS支持从您的OSS Bucket中读取模型文件,前提是完成对PAI EAS的授权。

# 按需要拷贝模型目录到OSS上
# !mkdir /mnt/data_oss/my_model_dir
# !cp -r ./eas_demo_output3/* /mnt/data_oss/my_model_dir/

步骤三:创建EAS服务

import json
resource_config = { "instance": 1,
                     "memory": 7000,
                     "cpu": 4}
model_path = "oss://dlcyolo/dlc_demo/dsw_demo_model/"                     
service_config = {"name": "service_from_dsw",
                 "model_path": model_path,
                 "processor": "tensorflow_cpu_2.4",
                 "metadata": resource_config}
print(json.dumps(service_config))
service1 = eas_client.create_service(CreateServiceRequest(body=json.dumps(service_config))).body
print(service1)

步骤四:查看EAS服务状态

service2 = eas_client.describe_service(cluster_id='cn-beijing', service_name=service1.service_name).body
print(service2.status)

调用EAS服务进行预测

步骤一:创建测试样本

# import tensorflow.compat.v2 as tf
import tensorflow_datasets as tfds
import matplotlib.pyplot as plt
import numpy as np
# Construct a tf.data.Dataset
ds = tfds.load('mnist', split='train', data_dir='./cached_datasets',  shuffle_files=False)
# Build your input pipeline
ds = ds.shuffle(1024).take(3)
target = []
for example in ds.take(1):
    image, label = example['image'], example['label']
    print(label)
    target = np.reshape(image, 784)
    plt.imshow(tf.squeeze(image))
    plt.show()
tf.Tensor(6, shape=(), dtype=int64)

35-1.png

步骤二:进行在线预测

使用eas_prediction,调用已部署的服务。详细信息请参考公网地址调用

查看所有服务:

res = eas_client.list_services(ListServicesRequest())
for s in res.body.services:
    print(s.service_name, s.status)
mnist_first Running
mnist_first2 Stopped
service_from_dsw Running

选取一个服务做预测:

service3 = eas_client.describe_service(cluster_id='cn-beijing', service_name='service_from_dsw').body
print(service3)

构造PredictClient对象来调用服务:

from eas_prediction import PredictClient, TFRequest
import urllib
client = PredictClient(urllib.parse.urlsplit(service3.internet_endpoint).hostname,
                       service3.service_name)
client.set_token(service3.access_token)
client.init()
req = TFRequest('serving_default') # signature_name 参数:serving_default
req.add_feed('flatten_1_input', [1, 28, 28], TFRequest.DT_FLOAT, target)
resp = client.predict(req)
print((resp.response.outputs).keys)
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
19天前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
39 18
|
10天前
|
Linux Python
linux之部署python环境&创建虚拟环境
linux之部署python环境&创建虚拟环境
|
2月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
59 1
|
2月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
2月前
|
网络安全 开发工具 Python
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
|
2月前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
2月前
|
Docker Python 容器
5 分钟,教你用 Docker 部署一个 Python 应用!
5 分钟,教你用 Docker 部署一个 Python 应用!
|
2月前
|
Kubernetes Cloud Native JavaScript
云原生入门:Kubernetes的简单部署与管理探索Python编程的魔法:从基础到进阶
【8月更文挑战第28天】随着云计算技术的蓬勃发展,云原生(Cloud Native)已经成为现代软件开发和运维的重要理念。本篇文章将引导读者了解云原生的基础概念,并以Kubernetes为例,展示如何在云平台上进行简单的部署和管理。通过实际操作,你将学会如何利用Kubernetes管理容器化应用,进而掌握云原生服务的核心技能。 【8月更文挑战第28天】在这篇文章中,我们将一起踏上一段激动人心的旅程,穿越Python编程的世界。无论你是初学者还是有一定经验的开发者,这篇文章都将为你揭示Python的奥秘和魅力。我们将从基础语法开始,逐步深入到面向对象编程、函数式编程技巧,以及如何利用Pytho
|
2月前
|
API Python
【Azure Compute Gallery】使用 Python 代码从 Azure Compute Gallery 复制 Image-Version
【Azure Compute Gallery】使用 Python 代码从 Azure Compute Gallery 复制 Image-Version
|
机器学习/深度学习 人工智能 分布式计算
Python搭建新冠肺炎预测模型全解读
新冠病毒疫后复工成为当务之急,然而病毒尚未消散,风险权衡面临不确定因素。传统机器学习模型虽然可以精确拟合历史数据,但由于脱离疾病传播机理,外推预测的可靠性低。与以往的疾病传播模型不同,南栖仙策的模型对病情的发展进行建模,能够更好的模拟潜伏期、无症状感染者。
Python搭建新冠肺炎预测模型全解读
下一篇
无影云桌面