日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用EAS Python SDK部署模型

更新時(shí)間:

本文為您介紹如何使用阿里云模型在線服務(wù)(EAS)的Python SDK代碼將訓(xùn)練獲得的模型部署為EAS在線服務(wù),再使用EAS的預(yù)測(cè)SDK代碼調(diào)用EAS服務(wù),實(shí)現(xiàn)模型在線推理。

背景信息

本文旨在介紹如何在Python環(huán)境中,通過SDK調(diào)用EAS接口來部署和調(diào)用基于MNIST數(shù)據(jù)集訓(xùn)練的手寫數(shù)字識(shí)別模型服務(wù)。MNIST數(shù)據(jù)集是手寫的數(shù)字0~9的數(shù)據(jù)集,本文會(huì)隨機(jī)選取一個(gè)手寫數(shù)字測(cè)試樣本并輸出其灰度圖像,以此作為輸入數(shù)據(jù)對(duì)模型進(jìn)行模擬預(yù)測(cè)。具體操作流程如下:

前提條件

  • 已創(chuàng)建OSS存儲(chǔ)空間(Bucket),用于存儲(chǔ)已獲得的模型文件和配置文件。關(guān)于如何創(chuàng)建存儲(chǔ)空間,詳情請(qǐng)參見創(chuàng)建存儲(chǔ)空間

  • 已準(zhǔn)備運(yùn)行Python SDK的環(huán)境,請(qǐng)選擇一種準(zhǔn)備即可。

    • (推薦)使用DSW實(shí)例的Notebook環(huán)境。建議創(chuàng)建DSW實(shí)例時(shí),鏡像選擇tensorflow:2.3-cpu-py36-ubuntu18.04,實(shí)例規(guī)格選擇ecs.c6.large,詳情請(qǐng)參見創(chuàng)建及管理DSW實(shí)例

    • 使用本地Python環(huán)境。建議Python 3.6或以上版本,編譯環(huán)境推薦使用JupyterLab。同時(shí)您需要在本地下載EASCMD客戶端并進(jìn)行身份認(rèn)證,詳情請(qǐng)參見下載并認(rèn)證客戶端

步驟一:準(zhǔn)備模型

  1. 安裝Python SDK。后續(xù)將使用SDK調(diào)用EAS接口來部署和預(yù)測(cè)模型服務(wù)。

    1. 進(jìn)入Notebook頁(yè)面。

      • 如果您使用的是DSW實(shí)例,首先需要單擊目標(biāo)實(shí)例操作列下的打開,打開DSW實(shí)例界面。在Notebook頁(yè)簽,單擊快速開始區(qū)域Notebook下的Python3,進(jìn)入Notebook編輯頁(yè)面,詳情請(qǐng)參見創(chuàng)建及管理DSW實(shí)例

      • 如果您使用的是本地Python環(huán)境,安裝PythonJupyterLab后,進(jìn)入JupyterLab編輯頁(yè)面。

    2. Notebook中,執(zhí)行以下代碼安裝Python SDK,安裝過程大約需要持續(xù)15分鐘。

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

      回顯信息中出現(xiàn)的ERRORWARNING信息可以忽略。

    3. 執(zhí)行以下命令驗(yàn)證是否安裝成功。

      pip list

      返回結(jié)果中,如果能看到tensorflowtensorflow_datasetsopencv-pythoneas-prediction,則表示Python包安裝成功。

  2. 訓(xùn)練并產(chǎn)出一個(gè)模型。

    Notebook中,參考TensorFlow的基礎(chǔ)示例,執(zhí)行以下代碼來訓(xùn)練一個(gè)TensorFlow模型,并將訓(xùn)練獲得的模型文件輸出到當(dāng)前目錄下的eas_demo_output3目錄。訓(xùn)練過程大約需要持續(xù)20分鐘。

    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')

    eas_demo_output3目錄下生成的模型文件如下圖所示。image.png

步驟二:部署模型到EAS

  1. Notebook中,執(zhí)行以下代碼創(chuàng)建EAS的客戶端對(duì)象。后續(xù)將使用該對(duì)象調(diào)用EAS客戶端命令來創(chuàng)建模型服務(wù)。

    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 = "<AccessKey>"
    access_key_secret = "<AccessKeySecret>"
    
    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-shanghai"
    config.endpoint = f'pai-eas.{region}.aliyuncs.com'
    eas_client = eas20210701Client(config)

    其中關(guān)鍵參數(shù)配置如下。

    參數(shù)

    描述

    region

    服務(wù)即將部署的地域ID,詳情請(qǐng)參見地域和可用區(qū)

    本文示例值為:cn-shanghai

    說明

    region需要與OSS Bucket所在地域一致。否則后續(xù)創(chuàng)建EAS服務(wù)時(shí)讀取模型文件失敗。

    access_key_id

    需要配置您自己的AccessKeyAccessKeySecret。您可以使用阿里云賬號(hào)或RAM用戶來創(chuàng)建EAS客戶端對(duì)象,如何獲取AccessKey,詳情請(qǐng)參見如何獲取AccessKey

    本文以阿里云賬號(hào)為例,如果您使用RAM用戶,需要為RAM用戶授予EAS的操作權(quán)限,具體操作,請(qǐng)參見云產(chǎn)品依賴與授權(quán):EAS

    access_key_secret

  2. 準(zhǔn)備模型文件。

    將已獲取的eas_demo_output3目錄下的所有文件按照下圖所示目錄結(jié)構(gòu)上傳到OSS Bucket中。如何上傳文件,詳情請(qǐng)參見控制臺(tái)上傳文件

    image.png
  3. Notebook中,執(zhí)行以下代碼創(chuàng)建EAS服務(wù)。

    import json
    resource_config = { "instance": 1,
                       	 "memory": 7000,
                         "cpu": 4}
    model_path = "oss://examplebucket/dsw/eas_demo_output3/"                     
    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)

    其中關(guān)鍵參數(shù)配置如下。服務(wù)創(chuàng)建過程大約需要持續(xù)5分鐘,服務(wù)創(chuàng)建成功后,會(huì)在控制臺(tái)的PAI EAS模型在線服務(wù)頁(yè)面展示。

    參數(shù)

    描述

    model_path

    替換為您的模型文件所在的OSS Bucket路徑。

    service_config.name

    您可以自定義模型服務(wù)名稱,命名格式為:

    • 只能包含數(shù)字、小寫字母以及下劃線,且必須以字母開頭。

    • 模型服務(wù)名稱需唯一,不能與同地域內(nèi)其他服務(wù)名稱重復(fù)。

    本文示例值為:service_from_dsw

  4. Notebook中,執(zhí)行以下代碼查看EAS服務(wù)狀態(tài)。

    說明

    cluster_id需要與上述步驟中配置的region保持一致。

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

    當(dāng)返回結(jié)果為Running時(shí),表示服務(wù)創(chuàng)建成功。

步驟三:模擬預(yù)測(cè)

  1. 創(chuàng)建測(cè)試樣本。

    Notebook中,執(zhí)行以下代碼從MNIST數(shù)據(jù)集中隨機(jī)選取一個(gè)手寫數(shù)字測(cè)試樣本,并輸出其灰度圖像。每次執(zhí)行代碼會(huì)生成一個(gè)不同的數(shù)字圖像,后續(xù)您可以根據(jù)圖像中的數(shù)字來評(píng)估預(yù)測(cè)結(jié)果是否準(zhǔn)確。您也可以創(chuàng)建自己的測(cè)試數(shù)據(jù),進(jìn)行模擬預(yù)測(cè)。

    # 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()

    系統(tǒng)返回結(jié)果如下圖所示。您的測(cè)試樣本輸出結(jié)果以實(shí)際為準(zhǔn)。image

  2. 使用eas_prediction調(diào)用已部署的服務(wù),進(jìn)行在線預(yù)測(cè),具體操作步驟如下。

    1. Notebook中,執(zhí)行以下代碼查詢模型服務(wù)的詳細(xì)信息,包括:AccessToken、Endpoint等,后續(xù)通過該調(diào)用信息來調(diào)用服務(wù)進(jìn)行模擬測(cè)試。

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

      其中關(guān)鍵參數(shù)配置如下。

      參數(shù)

      描述

      cluster_id

      服務(wù)所在的地域名稱。

      本文示例值為:cn-shanghai

      service_name

      替換為上述步驟中部署的模型服務(wù)名稱。

      本文示例值為:service_from_dsw

      系統(tǒng)輸出結(jié)果如下圖所示。您的輸出結(jié)果以實(shí)際為準(zhǔn)。

      image
    2. Notebook中,執(zhí)行以下代碼構(gòu)造PredictClient對(duì)象來調(diào)用服務(wù)。

      將步驟1中輸出的灰度圖像作為輸入數(shù)據(jù),使用步驟2中查詢的access_token、Endpoint等信息來調(diào)用服務(wù),并輸出預(yù)測(cè)結(jié)果。

      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 參數(shù):serving_default
      req.add_feed('flatten_input', [1, 28, 28], TFRequest.DT_FLOAT, target)
      
      resp = client.predict(req)
      print((resp.response.outputs).keys)

      預(yù)測(cè)結(jié)果如下圖所示。您的模型服務(wù)預(yù)測(cè)結(jié)果以實(shí)際為準(zhǔn)。image

      預(yù)測(cè)結(jié)果說明:

      float_val從上到下表示數(shù)字0~9,float_val最大值所在的行位置表示預(yù)測(cè)結(jié)果。例如:上圖示例中,第一行float_val的值最大,預(yù)測(cè)結(jié)果為數(shù)字0,與測(cè)試樣本圖像中的數(shù)字一致。