カスタマイズ可能なリソース、ネットワーク、およびコンテナパラメーターを指定した JSON 構成ファイルを使用して、Elastic Algorithm Service (EAS) のオンラインサービスを定義およびデプロイします。
クイックスタート
JSON 構成ファイルの準備
必須設定を含む JSON 構成ファイルを作成します。初めてご利用になる場合は、Custom Model Deployment > Custom Deployment ページでパラメーターを設定してください。システムが対応する JSON を自動生成し、その後、必要に応じて編集および拡張できます。
以下の例は、service.json ファイルです。各パラメーターの詳細については、「JSON パラメーター」をご参照ください。
{
"metadata": {
"name": "demo",
"instance": 1,
"workspace_id": "your-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
}
]
}
サービスのデプロイ
-
PAI コンソール にログインします。ページ上部から対象リージョンを選択し、目的のワークスペースを選択して、Elastic Algorithm Service (EAS) をクリックします。
-
Inference Service タブで、Deploy Service をクリックします。Custom Model Deployment セクションで、JSON Deployment を選択します。
-
JSON 構成ファイルの内容を貼り付け、Deploy をクリックします。サービスのステータスが 実行中 に変更された時点で、デプロイは完了です。
JSON パラメーター
|
パラメーター |
必須 |
説明 |
|
metadata |
はい |
サービスのメタデータです。各パラメーターの詳細については、「metadata パラメーターの説明」をご参照ください。 |
|
cloud |
いいえ |
コンピューティングリソースおよび VPC 構成です。詳細については、「cloud パラメーターの説明」をご参照ください。 |
|
containers |
いいえ |
コンテナイメージの構成です。詳細については、「containers パラメーターの説明」をご参照ください。 |
|
dockerAuth |
いいえ |
プライベートリポジトリへの認証情報です。値は、リポジトリの |
|
networking |
いいえ |
ネットワークおよび呼び出し構成です。各パラメーターの詳細については、「networking パラメーターの説明」をご参照ください。 |
|
storage |
いいえ |
OSS または NAS からコンテナへデータをマウントするストレージマウント構成です。構成の詳細については、「ストレージのマウント」をご参照ください。 |
|
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 |
いいえ |
システム信頼管理サービスを構成することで、安全かつ検証可能な推論サービスを有効化します。これにより、サービスデプロイおよび呼び出し時にデータ、モデル、コードが安全に暗号化されます。フォーマットは以下のとおりです: 説明
安全な暗号化環境は、主にマウントストレージ上のファイルを対象としています。この機能を有効化する前に、ストレージのマウントを実行してください。
以下に、各パラメーターについて説明します
|
メタデータパラメーター
高度なパラメーター
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*****"
}
}
}
コンテナパラメーター
カスタムイメージを使用してサービスをデプロイするには、「カスタムイメージによるサービスデプロイ」をご参照ください。
|
パラメーター |
必須 |
説明 |
|
|
image |
はい |
モデルサービスのコンテナイメージの URI です。 |
|
|
env |
name |
いいえ |
環境変数の名前です。 |
|
value |
いいえ |
環境変数の値です。 |
|
|
command |
command または script のいずれかが必須です。 |
コンテナのエントリーポイントコマンドです。単一コマンドのみサポートされます。複雑なスクリプト(例: |
|
|
script |
コンテナのエントリーポイントスクリプトです。 |
||
|
port |
いいえ |
コンテナのポートです。 重要
|
|
|
prepare |
pythonRequirements |
いいえ |
サービスインスタンスの起動前にインストールする Python パッケージのリストです。イメージには、システムパスに
|
|
pythonRequirementsPath |
いいえ |
|
|
ネットワークパラメーター
|
パラメーター |
必須 |
説明 |
|
gateway |
いいえ |
EAS サービス向けの専用ゲートウェイ を指定します。 |
|
gateway_policy |
いいえ |
構成例:
|
Sinker パラメーター
|
パラメーター |
必須 |
説明 |
|
|
type |
いいえ |
レコードを永続化するストレージタイプです。サポートされるタイプは以下のとおりです:
|
|
|
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
"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*******"
}