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

使用EAS Python SDK部署模型

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

背景信息

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

前提條件

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

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

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

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

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

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

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

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

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

    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)的ERROR和WARNING信息可以忽略。

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

      pip list

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

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

    在Notebook中,參考TensorFlow的基礎(chǔ)示例,執(zhí)行以下代碼來訓(xùn)練一個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的客戶端對象。后續(xù)將使用該對象調(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ū)

    本文示例值為:cn-shanghai

    說明

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

    access_key_id

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

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

    access_key_secret

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

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

    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)建成功后,會在控制臺的PAI EAS模型在線服務(wù)頁面展示。

    參數(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時,表示服務(wù)創(chuàng)建成功。

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

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

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

    # 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é)果如下圖所示。您的測試樣本輸出結(jié)果以實際為準(zhǔn)。image

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

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

      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é)果以實際為準(zhǔn)。

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

      將步驟1中輸出的灰度圖像作為輸入數(shù)據(jù),使用步驟2中查詢的access_token、Endpoint等信息來調(diào)用服務(wù),并輸出預(yù)測結(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ù)測結(jié)果如下圖所示。您的模型服務(wù)預(yù)測結(jié)果以實際為準(zhǔn)。image

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

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