您可以使用EASCMD工具創建EAS服務,創建服務前需要配置服務相關信息的JSON文件。本文為您介紹JSON文件內的參數說明信息。
如何使用EASCMD工具,詳情請參見下載并認證客戶端。
參數說明
JSON文件參數說明如下表所示。
參數 | 是否必選 | 描述 |
name | 是 | 服務名稱,必須在同一地域內唯一。 |
token | 否 | 表示訪問鑒權的Token字符串。如果未指定,則系統自動生成。 |
model_path | 是 | model_path和processor_path分別為模型和Processor的輸入數據源地址,均支持以下格式的地址:
|
oss_endpoint | 否 | OSS的Endpoint,例如oss-cn-beijing.aliyuncs.com。其他取值請參見OSS地域和訪問域名。 說明 默認無需指定該參數,會使用當前地域的內網OSS地址,來進行模型文件或Processor文件的下載。當跨地域訪問OSS時,需要指定該參數。例如:當您在杭州地域部署服務時,model_path中填寫了北京地域的OSS地址,則需要使用該參數來指定北京地域的OSS公網訪問地址。 |
model_entry | 否 | 表示模型的入口文件,可以包含任意文件。如果未指定,則使用model_path中的文件名。主文件路徑會傳遞給Processor中的initialize()函數。 |
model_config | 否 | 表示模型的配置,支持任意文本。該參數值會傳遞給Processor中Initialize()函數的第二個參數。 |
processor | 否 |
|
processor_path | 否 | Processor相關的文件包路徑,可以參見model_path參數的描述信息。 |
processor_entry | 否 | Processor的主文件。例如libprocessor.so或app.py,其中包含了預測所需的 當processor_type為cpp或python時,必須指定該參數。 |
processor_mainclass | 否 | Processor的主文件,JAR包中的mainclass。例如com.aliyun.TestProcessor。 當processor_type為java時,必須指定該參數。 |
processor_type | 否 | processor實現的語言,取值如下:
|
warm_up_data_path | 否 | 用于模型預熱的請求文件路徑。更多關于模型預熱功能的介紹,詳情請參見模型服務預熱。 |
runtime.enable_crash_block | 否 | 當服務實例因Processor代碼異常發生Crash后,服務實例是否會自動重啟。取值如下:
|
cloud | 否 | 使用公共資源組部署服務時,請務必使用cloud.computing.instance_type字段來指定實例使用的機型。
具體參數配置詳情,請參見公共資源組使用說明。 |
autoscaler | 否 | 表示模型服務自動水平擴縮容的配置信息。具體參數配置,詳情請參見水平自動擴縮容功能。 |
containers | 否 | 表示使用自定義鏡像部署服務時的容器信息。具體參數配置,詳情請參見服務部署:自定義鏡像。 |
storage | 否 | 表示服務存儲掛載等相關信息。 |
metadata | 是 | 表示服務的Meta信息。具體參數配置,詳情請參見表1.metadata參數說明。 |
features | 否 | 表示服務的特殊功能配置。具體參數配置,詳情請參見表2.features參數說明。 |
networking | 否 | 表示服務的調用配置。具體參數配置,詳情請參見表3.networking參數說明。 |
表1.metadata參數說明
參數 | 是否必選 | 描述 | |
一般參數 | instance | 是 | 服務啟動的實例數量。 |
workspace_id | 否 | 設置工作空間ID參數后,服務將只能在指定的PAI工作空間之內使用。例如: | |
cpu | 否 | 每個實例需要的CPU數量。 | |
memory | 否 | 每個實例需要的內存數量,取值為整型,單位為MB。例如, | |
gpu | 否 | 每個實例需要的GPU數量。 | |
gpu_memory | 否 | 每個實例所需的GPU顯存數量,取值為整型,單位為GB。 系統支持實例按顯存進行調度,實現單卡共享多實例功能。如果使用顯存調度,則需要將gpu字段配置為0。當gpu字段配置為1時,表示實例獨占整張GPU卡,此時gpu_memory 字段會被忽略。 重要 當前未開啟顯存的嚴格隔離,您需自行控制各實例的顯存使用量,不能超出申請量,避免出現顯存內存溢出。 | |
gpu_core_percentage | 否 | 每個實例所需的單個GPU算力比例,取值為1~100之間的整數,單位為百分比。例如填寫10,代表的是單個GPU的10%算力。 系統支持實例按算力進行調度,實現單卡共享多實例功能。另外指定該參數時,必須指定gpu_memory參數,否則該參數不生效。 | |
qos | 否 | 實例的服務質量,可選參數值為空或BestEffort。當qos指定為BestEffort時,表示進入CPU共享模式。使實例完全按照顯存和內存進行調度,不再受節點的CPU數量限制,節點上的所有實例共享CPU。此時cpu字段表示,按CPU共享模式時,單個實例能使用的最大配額。 | |
resource | 否 | 資源組ID,配置策略如下:
| |
cuda | 否 | 服務需要使用的cuda版本。服務運行時,會自動將指定版本的cuda掛載到實例的 目前支持的cuda版本為:8.0,9.0,10.0,10.1,10.2,11.0,11.1,11.2。使用示例為: | |
enable_grpc | 否 | 表示是否開啟服務網關的GRPC連接,取值如下:
說明 如果使用自定義鏡像部署服務時,鏡像中的服務端實現為GRPC,則需要通過該參數將網關的協議切換成GRPC。 | |
enable_webservice | 否 | 表示是否開啟webserver,從而部署為一個AI-Web應用:
| |
高級參數 重要 請您慎重調整。 | rpc.batching | 否 | 是否開啟Server端Batching,用于GPU模型加速,僅支持預置processor模式。取值如下:
|
rpc.keepalive | 否 | 單個請求的最長處理時間。如果請求處理時長超過該值,則服務端返回408超時并關閉連接。默認值為5000,單位為毫秒。 說明 當使用自定義Processor時,還需額外在代碼中配置allspark參數,詳情請參見使用Python開發自定義Processor。 | |
rpc.io_threads | 否 | 每個實例用于處理網絡IO的線程數量,默認值為4。 | |
rpc.max_batch_size | 否 | 每個Batch的最大Size,默認值為16,僅支持預置processor模式。僅rpc.batching取值為true時,該參數生效。 | |
rpc.max_batch_timeout | 否 | 每個Batch的最大Timeout,默認值為50毫秒,僅支持預置processor模式。僅rpc.batching取值為true時,該參數生效。 | |
rpc.max_queue_size | 否 | 隊列大小,默認值為64。隊列滿時,服務端返回450并關閉連接。為保證服務端不會壓力過載,隊列可以提前通知客戶端向其他實例進行重試。對于RT較長的服務隊列,可以適當減小隊列長度,以避免請求在隊列中堆積導致大量請求超時。 | |
rpc.worker_threads | 否 | 每個實例中用于并發處理請求的線程數,默認值為5,僅支持預置processor模式。 | |
rpc.rate_limit | 否 | 表示開啟QPS限流功能,并限制實例處理的最大QPS。默認為0,表示關閉QPS限流功能。 例如:該參數配置為2000,當QPS高于2000時,會拒絕請求并返回429(Too Many Requests)。 | |
rolling_strategy.max_surge | 否 | 服務滾動更新過程中,多于指定實例數,最多可以額外創建的實例個數。該參數可以為正整數,表示實例個數;也可以為百分比,例如2%。默認比例為2%。增大該參數可以提高服務更新速度。 例如:服務實例個數指定為100,該參數配置為20,則服務更新開始后會立即創建20個新實例。 | |
rolling_strategy.max_unavailable | 否 | 服務滾動更新過程中,最大不可用的實例個數。該參數可以在服務更新過程中,為新實例釋放資源,避免服務因空閑資源不足而更新卡住。目前在專有資源組中,該參數默認為1;在公共資源組中,該參數默認為0。 例如:該參數為N,則服務更新開始時會立即停止N個實例。 說明 如果空閑資源充足,可以將該參數配置為0。該參數配置過大可能會影響服務穩定性。因為在服務更新瞬間,可用實例個數會減少,則單實例承載的流量會變大。您需要權衡服務穩定性和資源情況來配置該參數。 | |
eas.termination_grace_period | 否 | 表示實例的優雅退出時間,單位為秒,默認為30秒。 EAS服務采用滾動更新的策略,實例會先進入Terminating狀態,服務會先將流量從要退出的實例上切走,實例等待30秒后將已收到的請求處理完成后退出。如果請求處理時間很長,為保證服務更新時,狀態為in progress的請求都能被處理完,您可以將該參數值適當調大。 重要 如果將該參數值調小則會影響服務穩定性,將該參數配置過大則會導致服務更新速度過慢,如果無特別需求請不要配置該參數。 | |
scheduling.spread.policy | 否 | 服務實例調度時的打散策略,支持以下幾種策略:
| |
rpc.enable_sigterm | 否 | 取值如下:
| |
resource_rebalancing | 否 | 取值如下:
該功能可以解決以下問題:
|
表2.features參數說明
參數 | 是否必選 | 描述 |
eas.aliyun.com/extra-ephemeral-storage | 否 | 當免費額度的系統盤容量不能滿足您的業務需求時,額外需要配置的系統盤內存大小。取值為正整數,單位為GB,取值范圍為0~2000 GB。 |
表3.networking參數說明
參數 | 是否必選 | 描述 |
disable_internet_endpoint | 否 | 默認為false,將該參數設置為true后,會禁用服務的公網調用方式。 |
表4.containers參數說明
參數 | 是否必選 | 描述 | |
image | 是 | 用于部署模型服務的鏡像地址。 | |
env | name | 是 | 鏡像執行時的環境變量名稱。 |
value | 是 | 鏡像執行時的環境變量取值。 | |
command | 二者必選其一 | 鏡像的入口命令,只支持單一命令形式,不支持復雜腳本,如:cd xxx && python app.py,這種形式請使用下面的script參數來指定,command字段適應于鏡像中無/bin/sh命令的場景。 | |
script | 鏡像的入口執行的腳本,可指定較為復雜的腳本形式,多行以\n或分號分隔。 | ||
port | 否 | 容器端口。 重要
| |
prepare | pythonRequirements | 否 | 實例啟動前安裝的python requirements列表,要求鏡像中在系統路徑中存在python和pip命令,list格式,如:
|
pythonRequirementsPath | 否 | 實例啟動前安裝的python requirements.txt文件地址,要求鏡像中在系統路徑中存在Python和pip命令,requirements.txt可直接打在鏡像中,也可以由外部存儲掛載的方式掛載到服務實例中,如:
|
使用示例
上述參數在JSON文件中的配置示例如下:
{
"name": "test_eascmd",
"token": "****M5Mjk0NDZhM2EwYzUzOGE0OGMx****",
"processor": "tensorflow_cpu_1.12",
"model_path": "oss://examplebucket/exampledir/",
"oss_endpoint": "oss-cn-beijing.aliyuncs.com",
"model_entry": "",
"model_config": "",
"processor": "",
"processor_path": "",
"processor_entry": "",
"processor_mainclass": "",
"processor_type": "",
"warm_up_data_path": "",
"runtime": {
"enable_crash_block": false
},
"cloud": {
"computing": {
"instance_type": "ecs.gn6i-c24g1.6xlarge"
}
},
"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/"
}
}
],
"metadata": {
"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,
"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
},
"features": {
"eas.aliyun.com/extra-ephemeral-storage": "100Gi"
},
"networking": {
"disable_internet_endpoint": false
},
"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
}
]
}