Elastic Algorithm Service (EAS) では、JSON 構成ファイルを使用してオンラインサービスを定義し、デプロイできます。JSON 構成ファイルを準備した後、EAS コンソール、EASCMD クライアント、またはソフトウェア開発キット (SDK) を使用してサービスをデプロイできます。
JSON 構成ファイルの準備
サービスをデプロイするには、必要なすべての構成を含む JSON ファイルを作成します。新規ユーザーの場合、コンソールのサービスデプロイページで基本設定を構成できます。システムは対応する JSON コンテンツを自動的に生成します。その後、このコンテンツを変更および拡張できます。
以下は service.json ファイルの例です。すべてのパラメーターの説明については、「付録:JSON パラメーターの説明」をご参照ください。
{
"metadata": {
"name": "demo",
"instance": 1,
"workspace_id": "****"
},
"cloud": {
"computing": {
"instances": [
{
"type": "ecs.c7a.large"
}
]
}
},
"containers": [
{
"image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/python-inference:py39-ubuntu2004",
"script": "python app.py",
"port": 8000
}
]
}JSON ファイルを使用したサービスのデプロイ
コンソール
PAI コンソールにログインします。ページの上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。
[推論サービス] タブで、[デプロイサービス] をクリックします。[デプロイサービス] ページで、 を選択します。
準備した JSON ファイルの内容を入力し、[デプロイ] をクリックします。サービスステータスが実行中に変更されるまで待ちます。これで、サービスがデプロイされたことになります。
EASCMD
EASCMD クライアントツールを使用して、モデルサービスを管理できます。これには、サービスの作成、表示、削除、更新が含まれます。手順は次のとおりです:
クライアントのダウンロードと認証
公式イメージを含む Distribution Switch (DSW) 開発環境を使用する場合、EASCMD クライアントは
/etc/dsw/eascmd64にプリインストール済みです。それ以外の場合は、「クライアントのダウンロードと認証」をご参照ください。デプロイコマンドの実行
JSON ファイルが配置されているディレクトリで、次のコマンドを実行してサービスをデプロイします。Windows 64 ビット版を例として使用します。操作の詳細については、「コマンドリファレンス」をご参照ください。
eascmdwin64.exe create <service.json><service.json> をご利用の JSON ファイル名に置き換えます。
説明DSW 開発環境を使用していて、JSON 構成ファイルをアップロードする必要がある場合は、「ファイルのアップロードとダウンロード」をご参照ください。
システムは次のような結果を返します。
[RequestId]: 1651567F-8F8D-4A2B-933D-F8D3E2DD**** +-------------------+----------------------------------------------------------------------------+ | Intranet Endpoint | http://166233998075****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/test_eascmd | | Token | YjhjOWQ2ZjNkYzdiYjEzMDZjOGEyNGY5MDIxMzczZWUzNGEyMzhi**** | +-------------------+--------------------------------------------------------------------------+ [OK] Creating api gateway [OK] Building image [registry-vpc.cn-shanghai.aliyuncs.com/eas/test_eascmd_cn-shanghai:v0.0.1-20221122114614] [OK] Pushing image [registry-vpc.cn-shanghai.aliyuncs.com/eas/test_eascmd_cn-shanghai:v0.0.1-20221122114614] [OK] Waiting [Total: 1, Pending: 1, Running: 0] [OK] Waiting [Total: 1, Pending: 1, Running: 0] [OK] Service is running
付録:JSON パラメーターの説明
パラメーター | 必須 | 説明 |
metadata | はい | サービスのメタデータ。パラメーター設定の詳細については、「metadata パラメーターの説明」をご参照ください。 |
cloud | いいえ | コンピューティングリソースと Virtual Private Cloud (VPC) の構成。詳細については、「cloud パラメーターの説明」をご参照ください。 |
containers | いいえ | イメージ構成。詳細については、「containers パラメーターの説明」をご参照ください。 |
dockerAuth | いいえ | イメージがプライベートリポジトリからのものである場合、dockerAuth を構成する必要があります。値は、イメージリポジトリの |
networking | いいえ | サービス呼び出しの構成。パラメーター設定の詳細については、「networking パラメーターの説明」をご参照ください。 |
storage | いいえ | サービスのストレージマウント情報。詳細な構成手順については、「ストレージのマウント」をご参照ください。 |
token | いいえ | アクセス認証用のトークン文字列。このパラメーターを指定しない場合、システムは自動的にトークンを生成します。 |
aimaster | いいえ | 複数マシンによる分散推論サービスのための計算能力検出とフォールトトレランスを有効にします。 |
model_path | はい | このパラメーターは、プロセッサーを使用してサービスをデプロイする場合に必要です。model_path と processor_path は、それぞれモデルとプロセッサーのソースデータアドレスを指定します。次のアドレス形式がサポートされています:
|
oss_endpoint | いいえ | OSS のエンドポイント。例:oss-cn-beijing.aliyuncs.com。その他の値については、「リージョンとエンドポイント」をご参照ください。 説明 デフォルトでは、このパラメーターを指定する必要はありません。システムは現在のリージョンの内部ネットワーク OSS アドレスを使用してモデルファイルまたはプロセッサーファイルをダウンロードします。リージョンをまたいで OSS にアクセスする場合は、このパラメーターを指定する必要があります。例えば、中国 (杭州) リージョンでサービスをデプロイし、model_path が中国 (北京) リージョンの OSS アドレスを指定している場合、このパラメーターを使用して中国 (北京) リージョンの OSS のパブリックネットワークアクセスアドレスを指定する必要があります。 |
model_entry | いいえ | モデルのエントリファイル。任意のファイルを含めることができます。このパラメーターを指定しない場合、model_path のファイル名が使用されます。メインファイルのパスは、プロセッサーの initialize() 関数に渡されます。 |
model_config | いいえ | モデル構成。任意のテキストをサポートします。このパラメーターの値は、プロセッサーの initialize() 関数の 2 番目の引数として渡されます。 |
processor | いいえ |
|
processor_path | いいえ | プロセッサーに関連するファイルパッケージのパス。詳細については、model_path パラメーターの説明をご参照ください。 |
processor_entry | いいえ | プロセッサーのメインファイル。例:libprocessor.so や app.py。予測に必要な processor_type が cpp または python に設定されている場合、このパラメーターは必須です。 |
processor_mainclass | いいえ | プロセッサーのメインファイル。JAR パッケージのメインクラスです。例:com.aliyun.TestProcessor。 processor_type が java に設定されている場合、このパラメーターは必須です。 |
processor_type | いいえ | processor が実装されている言語。有効な値:
|
warm_up_data_path | いいえ | モデルのプリフェッチに使用されるリクエストファイルのパス。モデルのプリフェッチ機能の詳細については、「モデルサービスのプリフェッチ」をご参照ください。 |
runtime.enable_crash_block | いいえ | プロセッサーコードの例外によりサービスインスタンスがクラッシュした後に自動的に再起動するかどうかを指定します。有効な値:
|
autoscaler | いいえ | モデルサービスの自動水平スケーリングの構成情報。パラメーター設定の詳細については、「自動水平スケーリング」をご参照ください。 |
labels | いいえ | EAS サービスのタグを構成します。フォーマットは |
unit.size | いいえ | 分散推論構成における単一インスタンスがデプロイされるマシン数。デフォルト値は 2 です。 |
sinker | いいえ | サービスのすべてのリクエストと応答のレコードを MaxCompute または Simple Log Service (SLS) に永続化します。パラメーター設定の詳細については、「sinker パラメーターの説明」をご参照ください。 |
confidential | いいえ | システム信頼管理サービスを構成することで、データ、モデル、コードなどの情報がサービスデプロイメントおよび呼び出し中に安全に暗号化されることを保証できます。これにより、安全で検証可能な推論サービスが実現します。フォーマットは次のとおりです: 説明 安全な暗号化環境は、主にマウントされたストレージファイル用です。この機能を有効にする前に、ストレージファイルをマウントしてください。 次の表にパラメーターを説明します。
|
metadata パラメーターの説明
高度なパラメーター
cloud パラメーターの説明
パラメーター | 必須 | 説明 | |
computing | instances | いいえ | パブリックリソースグループを使用してサービスをデプロイする場合、このパラメーターを設定する必要があります。使用するリソース仕様のリストを指定します。インスタンスタイプの入札に失敗した場合や在庫が不足している場合、システムは構成された順序で次のインスタンスタイプを使用してサービスの作成を試みます。
|
disable_spot_protection_period | いいえ | スポットインスタンスを使用する場合、このパラメーターを設定する必要があります。有効な値:
| |
networking | vpc_id | いいえ | EAS サービスにバインドする VPC、vSwitch、およびセキュリティグループ。 |
vswitch_id | いいえ | ||
security_group_id | いいえ | ||
例:
{
"cloud": {
"computing": {
"instances": [
{
"type": "ecs.c8i.2xlarge",
"spot_price_limit": 1
},
{
"type": "ecs.c8i.xlarge",
"capacity": "20%"
}
],
"disable_spot_protection_period": false
},
"networking": {
"vpc_id": "vpc-bp1oll7xawovg9*****",
"vswitch_id": "vsw-bp1jjgkw51nsca1e****",
"security_group_id": "sg-bp1ej061cnyfn0b*****"
}
}
}containers パラメーターの説明
カスタムイメージを使用してサービスをデプロイする場合は、「カスタムイメージ」をご参照ください。
パラメーター | 必須 | 説明 | |
image | はい | イメージを使用してデプロイする場合に必須です。モデルサービスのデプロイに使用されるイメージのアドレス。 | |
env | name | いいえ | イメージ実行用の環境変数の名前。 |
value | いいえ | イメージ実行用の環境変数の値。 | |
command | どちらか一方が必須 | イメージのエントリコマンド。単一のコマンドのみをサポートし、`cd xxx && python app.py` のような複雑なスクリプトはサポートしません。複雑なスクリプトの場合は、`script` パラメーターを使用します。`command` フィールドは、イメージに `/bin/sh` コマンドが含まれていないシナリオに適しています。 | |
script | イメージで実行するエントリスクリプト。複雑なスクリプトを指定できます。複数行を区切るには `\n` またはセミコロンを使用します。 | ||
port | いいえ | コンテナーポート。 重要
| |
prepare | pythonRequirements | いいえ | インスタンス起動前にインストールする Python 要件のリスト。イメージにはシステムパスに `python` と `pip` コマンドが必要です。フォーマットはリストです。例: |
pythonRequirementsPath | いいえ | インスタンス起動前にインストールする `requirements.txt` ファイルへのパス。イメージにはシステムパスに `python` と `pip` コマンドが必要です。`requirements.txt` ファイルは、イメージに直接含めるか、外部ストレージからサービスインスタンスにマウントできます。例: | |
networking パラメーターの説明
パラメーター | 必須 | 説明 |
gateway | いいえ | EAS サービス用に構成された専用ゲートウェイ。 |
gateway_policy | いいえ |
レート制限の構成例: |
sinker パラメーターの説明
パラメーター | 必須 | 説明 | |
type | いいえ | 次の 2 つのストレージクラスがサポートされています:
| |
config | maxcompute.project | いいえ | MaxCompute プロジェクト名。 |
maxcompute.table | いいえ | MaxCompute データテーブル。 | |
sls.project | いいえ | SLS プロジェクト名。 | |
sls.logstore | いいえ | SLS の Logstore。 | |
構成例:
MaxCompute への保存
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
}Simple Log Service (SLS) への保存
"sinker": {
"type": "sls",
"config": {
"sls": {
"project": "k8s-log-****",
"logstore": "d****"
}
}
}付録:JSON 構成例
次の例は、前述のパラメーターが JSON ファイルでどのように構成されるかを示しています:
{
"token": "****M5Mjk0NDZhM2EwYzUzOGE0OGMx****",
"processor": "tensorflow_cpu_1.12",
"model_path": "oss://examplebucket/exampledir/",
"oss_endpoint": "oss-cn-beijing.aliyuncs.com",
"model_entry": "",
"model_config": "",
"processor_path": "",
"processor_entry": "",
"processor_mainclass": "",
"processor_type": "",
"warm_up_data_path": "",
"runtime": {
"enable_crash_block": false
},
"unit": {
"size": 2
},
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
},
"cloud": {
"computing": {
"instances": [
{
"capacity": 800,
"type": "dedicated_resource"
},
{
"capacity": 200,
"type": "ecs.c7.4xlarge",
"spot_price_limit": 3.6
}
],
"disable_spot_protection_period": true
},
"networking": {
"vpc_id": "vpc-bp1oll7xawovg9t8****",
"vswitch_id": "vsw-bp1jjgkw51nsca1e****",
"security_group_id": "sg-bp1ej061cnyfn0b****"
}
},
"autoscaler": {
"min": 2,
"max": 5,
"strategies": {
"qps": 10
}
},
"storage": [
{
"mount_path": "/data_oss",
"oss": {
"endpoint": "oss-cn-shanghai-internal.aliyuncs.com",
"path": "oss://bucket/path/"
}
}
],
"confidential": {
"trustee_endpoint": "xx",
"decryption_key": "xx"
},
"metadata": {
"name": "test_eascmd",
"resource": "eas-r-9lkbl2jvdm0puv****",
"instance": 1,
"workspace_id": "1405**",
"gpu": 0,
"cpu": 1,
"memory": 2000,
"gpu_memory": 10,
"gpu_core_percentage": 10,
"qos": "",
"cuda": "11.2",
"enable_grpc": false,
"enable_webservice": false,
"rdma": 1,
"rpc": {
"batching": false,
"keepalive": 5000,
"io_threads": 4,
"max_batch_size": 16,
"max_batch_timeout": 50,
"max_queue_size": 64,
"worker_threads": 5,
"rate_limit": 0,
"enable_sigterm": false
},
"rolling_strategy": {
"max_surge": 1,
"max_unavailable": 1
},
"eas.termination_grace_period": 30,
"scheduling": {
"spread": {
"policy": "host"
}
},
"resource_rebalancing": false,
"workload_type": "elasticjob",
"shm_size": 100
},
"features": {
"eas.aliyun.com/extra-ephemeral-storage": "100Gi",
"eas.aliyun.com/gpu-driver-version": "tesla=550.127.08"
},
"networking": {
"gateway": "gw-m2vkzbpixm7mo****"
},
"containers": [
{
"image": "registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
"prepare": {
"pythonRequirements": [
"numpy==1.16.4",
"absl-py==0.11.0"
]
},
"command": "python app.py",
"port": 8000
}
],
"dockerAuth": "dGVzdGNhbzoxM*******"
}