【DSW Gallery】Use EAS Python SDK to complete model deployment
概要
オンライン推論シナリオ向けに、PAI プラットフォームはオンライン予測サービス PAI-EAS (Elastic Algorithm Service) を提供しています。ヘテロジニアスハードウェア (CPU および GPU) に基づくモデルロードと、データリクエストへのリアルタイム応答をサポートします。PAI-EAS では、モデルを RESTful API としてすばやくデプロイし、HTTP リクエストを通じてサービスを呼び出せます。
同時に、EAS が提供するコマンドツールや Python SDK を使用して、モデルサービスを管理できます。この記事では、Python を使用したサービスの作成方法とサービス一覧の確認方法、および EAS の予測 SDK を使用したコードからの EAS サービス呼び出しについて説明します。
前提条件
本文で紹介する内容を実践する前に、アカウントが以下の条件を満たしていることをご確認ください。
⢠PAI-EAS を有効化する (パブリックリソースグループも作成されます)。詳細は「有効化と購入」をご参照ください。
⢠Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret を取得していること。詳細は AccessKey の取得をご参照ください。
⢠現在の JupyterLab 環境に eascmd がインストールされていること。インストール手順については、クライアントのダウンロードと認証をご参照ください (PAI-DSW を使用する場合、CLI は初期イメージにプリセットされています)。
⢠サンプルコードで一部の Python ライブラリを使用するため、必要に応じて以下の Python パッケージインストールコマンドを実行してください。
デプロイ前の準備
Step 1: サンプルに必要な Python パッケージのインストール
# 。pip install tensorflow tensorflow_datasets
# 。pip install opencv-python
。pip install eas-prediction alibabacloud_eas20210701==1.1.2 --upgrade
。pip install tensorflow_datasets
Step 2: モデルのトレーニングと出力
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 です。
Step 1: 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 of your Alibaba Cloud account*"
access_key_secret = "*Your Alibaba Cloud installed Key Secret*"
import os.path
config_path="/mnt/data/pai.config
)
# The domain name to visit
region = "cn-beijing"
config.endpoint = f'pai-eas.{region}.aliyuncs.com'
eas_client = eas20210701Client(config)
Step 2: モデルファイルの準備
EAS は、PAI EAS への権限付与が完了していることを前提に、OSS バケットからモデルファイルを読み取ることができます。
# Copy the model directory to OSS as needed
# 。mkdir /mnt/data_oss/my_model_dir
# 。cp -r ./eas_demo_output3/* /mnt/data_oss/my_model_dir/
Step 3: 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)
Step 4: EAS サービスステータスの確認
service2 = eas_client.describe_service(cluster_id='cn-beijing', service_name=service1.service_name).body
print(service2. status)
EAS サービスを呼び出して予測を実行
Step 1: テストサンプルの作成
# 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)
Step 2: オンライン予測の実行
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
Impo
オンライン推論シナリオ向けに、PAI プラットフォームはオンライン予測サービス PAI-EAS (Elastic Algorithm Service) を提供しています。ヘテロジニアスハードウェア (CPU および GPU) に基づくモデルロードと、データリクエストへのリアルタイム応答をサポートします。PAI-EAS では、モデルを RESTful API としてすばやくデプロイし、HTTP リクエストを通じてサービスを呼び出せます。
同時に、EAS が提供するコマンドツールや Python SDK を使用して、モデルサービスを管理できます。この記事では、Python を使用したサービスの作成方法とサービス一覧の確認方法、および EAS の予測 SDK を使用したコードからの EAS サービス呼び出しについて説明します。
前提条件
本文で紹介する内容を実践する前に、アカウントが以下の条件を満たしていることをご確認ください。
⢠PAI-EAS を有効化する (パブリックリソースグループも作成されます)。詳細は「有効化と購入」をご参照ください。
⢠Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret を取得していること。詳細は AccessKey の取得をご参照ください。
⢠現在の JupyterLab 環境に eascmd がインストールされていること。インストール手順については、クライアントのダウンロードと認証をご参照ください (PAI-DSW を使用する場合、CLI は初期イメージにプリセットされています)。
⢠サンプルコードで一部の Python ライブラリを使用するため、必要に応じて以下の Python パッケージインストールコマンドを実行してください。
デプロイ前の準備
Step 1: サンプルに必要な Python パッケージのインストール
# 。pip install tensorflow tensorflow_datasets
# 。pip install opencv-python
。pip install eas-prediction alibabacloud_eas20210701==1.1.2 --upgrade
。pip install tensorflow_datasets
Step 2: モデルのトレーニングと出力
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 です。
Step 1: 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 of your Alibaba Cloud account*"
access_key_secret = "*Your Alibaba Cloud installed Key Secret*"
import os.path
config_path="/mnt/data/pai.config
)
# The domain name to visit
region = "cn-beijing"
config.endpoint = f'pai-eas.{region}.aliyuncs.com'
eas_client = eas20210701Client(config)
Step 2: モデルファイルの準備
EAS は、PAI EAS への権限付与が完了していることを前提に、OSS バケットからモデルファイルを読み取ることができます。
# Copy the model directory to OSS as needed
# 。mkdir /mnt/data_oss/my_model_dir
# 。cp -r ./eas_demo_output3/* /mnt/data_oss/my_model_dir/
Step 3: 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)
Step 4: EAS サービスステータスの確認
service2 = eas_client.describe_service(cluster_id='cn-beijing', service_name=service1.service_name).body
print(service2. status)
EAS サービスを呼び出して予測を実行
Step 1: テストサンプルの作成
# 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)
Step 2: オンライン予測の実行
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
Impo
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
