Elastic Algorithm Service (EAS) では、JSON 設定ファイルを使用してオンラインサービスを定義し、デプロイできます。
クイックスタート
1. 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
}
]
}2. サービスのデプロイ
-
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 | いいえ | システム信頼管理サービスを構成することで、安全で暗号化された推論サービスを有効にできます。これにより、データ、モデル、コードなどの情報が、サービスのデプロイおよび呼び出し中に安全に暗号化されることが保証されます。フォーマットは次のとおりです: 説明 この安全な暗号化機能は、マウントされたストレージ上のファイルに適用されます。この機能を有効にする前に、必要なストレージファイルをマウントしてください。 パラメーターは次のとおりです。
|
Metadata パラメーター
高度なパラメーター
Cloud パラメーター
パラメーター | 必須 | 説明 | |
computing | instances | いいえ | パブリックリソースグループにサービスをデプロイする際に使用するインスタンスタイプを指定します。スポットインスタンスの入札に失敗した場合や、インスタンスタイプの在庫が不足している場合、システムは構成された順序で次のインスタンスタイプを使用してサービスの作成を試みます。
|
disable_spot_protection_period | いいえ | このパラメーターはスポットインスタンスに適用されます。有効な値:
| |
networking | vpc_id | いいえ | VPC の ID。 |
vswitch_id | いいえ | VSwitch の ID。 | |
security_group_id | いいえ | セキュリティグループの ID。 | |
destination_cidrs | いいえ | 構成した VSwitch の CIDR ブロックが EAS 管理 CIDR ブロック (10.224.0.0/16 または 10.240.0.0/12) と競合する場合、このフィールドを VSwitch の CIDR ブロックに明示的に設定する必要があります。
| |
例:
{
"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 |
| コンテナのエントリポイントコマンド。単一のコマンドのみがサポートされます。 | |
script | コンテナ内で実行されるエントリポイントスクリプト。このパラメーターは複雑なスクリプトをサポートします。複数のコマンドを区切るには、 | ||
port | いいえ | コンテナポート。 重要
| |
prepare | pythonRequirements | いいえ | サービスインスタンスが開始する前にインストールする Python パッケージのリスト。 |
pythonRequirementsPath | いいえ |
| |
Networking パラメーター
パラメーター | 必須 | 説明 |
gateway | いいえ | EAS サービス用に構成された専用ゲートウェイ。 |
gateway_policy | いいえ |
設定例: |
Sinker パラメーター
パラメーター | 必須 | 説明 | |
type | いいえ | ストレージタイプ。サポートされているタイプは次のとおりです:
| |
config | maxcompute.project | いいえ | MaxCompute プロジェクト名。 |
maxcompute.table | いいえ | MaxCompute テーブル名。 | |
sls.project | いいえ | Log Service (SLS) プロジェクト名。 | |
sls.logstore | いいえ | Logstore 名。 | |
設定例:
MaxCompute
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
}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*******"
}