全部產品
Search
文件中心

Platform For AI:使用JSON設定檔部署服務

更新時間:Nov 29, 2025

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檔案部署服務

控制台

  1. 登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS

  2. 推理服務頁簽,單擊部署服務。在部署服務頁面,選擇自訂模型部署 > JSON獨立部署

  3. 輸入準備好的JSON檔案,單擊部署。等待一段時間,當服務狀態變為運行中時,表明服務部署成功。

EASCMD

通過用戶端工具EASCMD,可以在自己伺服器上對模型服務進行管理,包括建立、查看、刪除及更新服務。具體操作步驟如下:

  1. 下載並認證用戶端

    如果您使用的是DSW開發環境並使用官方鏡像,則已預置EASCMD用戶端(路徑:/etc/dsw/eascmd64),否則請下載並認證用戶端

  2. 執行部署命令

    在JSON檔案所在目錄,執行以下命令部署服務。以Windows64版本為例。更多操作請參見命令使用說明

    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

服務的Meta資訊。具體參數配置,詳情請參見metadata參數說明

cloud

計算資源與專用網路配置,詳情請參見cloud參數說明

containers

鏡像配置,詳情參見containers參數說明

dockerAuth

當鏡像來源於私人倉庫時,需配置dockerAuth,值為鏡像倉庫的使用者名稱:密碼經Base64編碼後的字串。

networking

服務的調用配置。具體參數配置,詳情請參見networking參數說明

storage

表示服務儲存掛載等相關資訊。詳細配置說明,請參見儲存掛載

token

表示訪問鑒權的Token字串。如果未指定,則系統自動產生。

aimaster

為多機分布式推理服務開啟算力檢測與容錯

model_path

使用processor部署時必選。model_pathprocessor_path分別為模型和Processor的輸入資料來源地址,均支援以下格式的地址:

  • OSS地址:地址連結可以是具體檔案路徑或檔案夾路徑。

  • HTTP地址:所需檔案必須為TAR.GZTARBZ2ZIP等壓縮包。

  • 本地路徑:如果使用test命令進行本地調試,則可以使用本地路徑。

oss_endpoint

OSS的Endpoint,例如oss-cn-beijing.aliyuncs.com。其他取值請參見地區和Endpoint

說明

預設無需指定該參數,會使用當前地區的內網OSS地址,來進行模型檔案或Processor檔案的下載。當跨地區訪問OSS時,需要指定該參數。例如:當您在杭州地區部署服務時,model_path中填寫了北京地區的OSS地址,則需要使用該參數來指定北京地區的OSS公網訪問地址。

model_entry

表示模型的入口檔案,可以包含任意檔案。如果未指定,則使用model_path中的檔案名稱。主檔案路徑會傳遞給Processor中的initialize()函數。

model_config

表示模型的配置,支援任意文本。該參數值會傳遞給Processor中initialize()函數的第二個參數。

processor

  • 如果使用官方提供的預置Processor,則直接在此指定Processor Code即可。Processor在eascmd中使用的Code請參見預置Processor

  • 如果使用自訂Processor,則無需配置該參數,只需要配置processor_pathprocessor_entryprocessor_mainclassprocessor_type參數。

processor_path

Processor相關的檔案包路徑,可以參見model_path參數的描述資訊。

processor_entry

Processor的主檔案。例如libprocessor.soapp.py,其中包含了預測所需的initialize()函數和process()函數的實現。

processor_typecpppython時,必須指定該參數。

processor_mainclass

Processor的主檔案,JAR包中的mainclass。例如com.aliyun.TestProcessor

processor_typejava時,必須指定該參數。

processor_type

processor實現的語言,取值如下:

  • cpp

  • java

  • python

warm_up_data_path

用於模型預熱的請求檔案路徑。更多關於模型預熱功能的介紹,詳情請參見模型服務預熱

runtime.enable_crash_block

當服務執行個體因Processor代碼異常發生Crash後,服務執行個體是否會自動重啟。取值如下:

  • true:表示服務執行個體不自動重啟,以保留現場進行問題排查。

  • false:預設值,表示服務執行個體自動重啟。

autoscaler

表示模型服務自動水平擴縮容的配置資訊。具體參數配置,詳情請參見水平自動擴縮容

labels

為EAS服務配置標籤。格式為key:value

unit.size

表示分布式推理配置下單一實例部署的機器數。預設值為2。

sinker

支援將服務所有的請求和響應記錄持久化儲存到巨量資料MaxCompute或Log ServiceSLS中。具體參數配置,詳情請參見sinker參數說明

confidential

通過配置系統信任管理服務,保證服務部署和調用的過程中資料、模型和代碼等資訊可以安全加密,實現安全可驗證的推理服務。格式如下:

說明

安全加密環境主要針對您掛載的隱藏檔,請先完成隱藏檔的掛載再開啟該功能。

"confidential": {
        "trustee_endpoint": "xxxx",
        "decryption_key": "xxxx"
    }

參數配置說明如下。

  • trustee_endpoint:系統信任管理服務Trustee的URI。

  • decryption_key:解密密鑰的KBS URI。例如kbs:///default/key/test-key

metadata參數說明

一般參數

參數

是否必選

描述

name

服務名稱,必須在同一地區內唯一。

instance

服務啟動的執行個體數量。

workspace_id

設定工作空間ID參數後,服務將只能在指定的PAI工作空間之內使用。例如:1405**

cpu

每個執行個體需要的CPU數量。

memory

每個執行個體需要的記憶體數量,取值為整型,單位為MB。例如,"memory": 4096表示每個執行個體需要4 GB記憶體。

gpu

每個執行個體需要的GPU數量。

gpu_memory

使用EAS資源群組或資源配額時配置GPU切分功能,實現多執行個體共用單卡。

gpu_core_percentage

qos

執行個體的服務品質,選擇性參數值為空白或BestEffort。當qos指定為BestEffort時,表示進入CPU共用模式。使執行個體完全按照顯存和記憶體進行調度,不再受節點的CPU數量限制,節點上的所有執行個體共用CPU。此時cpu欄位表示,按CPU共用模式時,單個執行個體能使用的最大配額。

resource

資源群組ID,配置策略如下:

  • 如果服務部署在公用資源群組,則可以忽略該參數,此時服務進行隨用隨付。

  • 如果服務部署在專屬資源群組,則配置該參數為資源群組ID。例如eas-r-6dbzve8ip0xnzt****

cuda

服務需要使用的cuda版本。服務運行時,會自動將指定版本的cuda掛載到執行個體的/usr/local/cuda目錄中。

目前支援的cuda版本為:8.0,9.0,10.0,10.1,10.2,11.0,11.1,11.2。使用樣本為:"cuda":"11.2"

rdma

表示分布式推理配置下,是否開啟RDMA網路。設定為1表示開啟RDMA網路。若未配置rdma參數,則表示關閉RDMA網路。

說明

當前僅使用靈駿智算資源部署的服務可以使用RDMA網路。

enable_grpc

表示是否開啟服務網關的GRPC串連,取值如下:

  • false:預設值,表示網關不開啟GRPC串連,預設支援HTTP請求。

  • true:表示網關開啟GRPC串連。

說明

如果使用自訂鏡像部署服務時,鏡像中的服務端實現為GRPC,則需要通過該參數將網關的協議切換成GRPC。

enable_webservice

表示是否開啟webserver,從而部署為一個AI-Web應用:

  • false:預設值,表示不開啟webserver。

  • true:表示開啟webserver。

type

配置為LLMGatewayService,即可部署LLM智能路由服務。JSON檔案配置方法,請參見步驟一:部署LLM智能路由服務

進階參數

重要

請您謹慎調整進階參數。

參數

是否必選

描述

rpc

batching

是否開啟Server端Batching,用於GPU模型加速,僅支援預置processor模式。取值如下:

  • false:預設值,關閉Server端Batching。

  • true:開啟Server端Batching。

keepalive

設定單個請求的最長處理時間(單位:毫秒)。如果請求處理時間長度超過該值,服務端將返回408逾時並關閉串連。預設值:專屬網關600000。應用型專屬網關(ALB)不支援此項配置。

io_threads

每個執行個體用於處理網路IO的線程數量,預設值為4。

max_batch_size

每個Batch的最大Size,預設值為16,僅支援預置processor模式。僅rpc.batching取值為true時,該參數生效。

max_batch_timeout

每個Batch的最大Timeout,預設值為50毫秒,僅支援預置processor模式。僅rpc.batching取值為true時,該參數生效。

max_queue_size

建立非同步推理服務時,隊列最大長度,預設值為64。隊列滿時,服務端返回450並關閉串連。為保證服務端不會壓力過載,隊列可以提前通知用戶端向其他執行個體進行重試。對於RT較長的服務隊列,可以適當減小隊列長度,以避免請求在隊列中堆積導致大量請求逾時。

worker_threads

每個執行個體中用於並發處理請求的線程數,預設值為5,僅支援預置processor模式。

rate_limit

表示開啟QPS限流功能,並限制執行個體處理的最大QPS。預設為0,表示關閉QPS限流功能。

例如:該參數配置為2000,當QPS高於2000時,會拒絕請求並返回429(Too Many Requests)。

enable_sigterm

取值如下:

  • false(預設值):執行個體進入退出狀態時不會發送SIGTERM訊號。

  • true:在服務執行個體進入退出狀態時,系統會立即向主進程發送SIGTERM訊號,服務內進程收到該訊號後需要在訊號處理函數中進行自訂的優雅退出操作,若不處理該訊號可能導致主進程收到訊號後直接退出,從而使優雅退出失敗。

rolling_strategy

max_surge

服務變換過程中,多於指定執行個體數,最多可以額外建立的執行個體個數。該參數可以為正整數,表示執行個體個數;也可以為百分比,例如2%。預設比例為2%。增大該參數可以提高服務更新速度。

例如:服務執行個體個數指定為100,該參數配置為20,則服務更新開始後會立即建立20個新執行個體。

max_unavailable

服務變換過程中,最大停用執行個體個數。該參數可以在服務更新過程中,為新執行個體釋放資源,避免服務因空閑資源不足而更新卡住。目前在專有資源群組中,該參數預設為1;在公用資源群組中,該參數預設為0。

例如:該參數為N,則服務更新開始時會立即停止N個執行個體。

說明

如果空閑資源充足,可以將該參數配置為0。該參數配置過大可能會影響服務穩定性。因為在服務更新瞬間,可用執行個體個數會減少,則單一實例承載的流量會變大。您需要權衡服務穩定性和資源情況來配置該參數。

eas.termination_grace_period

表示執行個體的優雅退出時間,單位為秒,預設為30秒。

EAS服務採用變換的策略,執行個體會先進入Terminating狀態,服務會先將流量從要退出的執行個體上切走,執行個體等待30秒後將已收到的請求處理完成後退出。如果請求處理時間很長,為保證服務更新時,狀態為in progress的請求都能被處理完,您可以將該參數值適當調大。

重要

如果將該參數值調小則會影響服務穩定性,將該參數配置過大則會導致服務更新速度過慢,如果無特別需求請不要配置該參數。

scheduling

spread.policy

服務執行個體調度時的打散策略,支援以下幾種策略:

  • host:按照節點來打散,執行個體儘可能分散在不同的節點上。

  • zone:按照節點所在的可用性區域來打散,執行個體儘可能分散在不同的可用性區域。

  • default:按照預設策略進行調度,無主動打散的邏輯。

配置樣本:

{
  "metadata": {
    "scheduling": {
      "spread": {
        "policy": "host"
      }
    }
}

resource_rebalancing

取值如下:

  • false(預設值):不啟用該功能。

  • true:EAS會周期性地在高優先順序資源上建立探針執行個體。如果探針執行個體調度成功,則會以指數增長方式建立更多探針執行個體,直至調度失敗。同時,成功調度的探針執行個體完成初始化並且進入就緒狀態後,會替換低優先順序資源上的執行個體。

該功能可以解決以下問題:

  • 在服務變換過程中,正在終止的執行個體仍會佔用資源,導致新建立執行個體啟動在公用資源群組上,由於公用資源限制,後續新執行個體會重新調度回專屬資源群組上。

  • 當同時使用競價執行個體和常規執行個體時,系統會定期檢查競價執行個體是否可用,如果可用,則會將常規執行個體遷移至競價執行個體上。

workload_type

如果您希望將EAS服務部署成任務的形式來使用,可將該參數配置為elasticjob。更多關於彈性Job服務的使用介紹,請參見彈性Job服務

resource_burstable

支援為使用專屬資源群組部署的EAS服務啟用彈性資源集區功能:

  • true:表示開啟。

  • false:表示關閉。

shm_size

配置執行個體的共用記憶體,直接對記憶體進行讀寫操作,無需資料的複製或傳輸。單位為GB。

cloud參數說明

參數

是否必選

描述

computing

instances

使用公用資源群組部署服務時,需設定該參數,表示使用的資源規格列表。當執行個體規格競價失敗或庫存不足時,按照配置順序依次嘗試使用下一個執行個體規格建立服務。

  • type: 資源規格

  • spot_price_limit為選擇性參數:

    • 當配置該參數時:表示對應執行個體規格使用競價執行個體,並指明價格上限。單位為USD,支援隨用隨付。

    • 當不配置該參數時:表示對應執行個體規格為普通的隨用隨付執行個體。

  • capacity:配置使用該機型的執行個體數目上限。可以是數字,如“500”;也可以是字串,如“20%”。配置後,如果機型執行個體數目達到上限,即使該機型還有庫存資源也不會再使用。 

    例如:服務總的執行個體數為200,配置A機型的capacity為20%,即該服務最多隻會使用A機型拉起40個執行個體,其餘的執行個體將通過其他規格拉起。

disable_spot_protection_period

使用競價執行個體時,需設定該參數,取值如下:

  • false(預設值):表示在競價執行個體建立成功後,預設有1小時保護期。在保護期內即使市場價格超過了出價,執行個體也不會被釋放。

  • true:表示禁用保護期,無保護期執行個體會始終比有保護期執行個體優惠10%左右。

networking

vpc_id

分別表示為EAS服務綁定的Virtual Private Cloud、交換器和安全性群組。

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

容器連接埠。

重要
  • 由於EAS引擎監聽固定的8080/9090連接埠,因此容器連接埠需要避開8080/9090連接埠。

  • 該連接埠一定要和command中的xxx.py檔案配置的連接埠保持一致。

prepare

pythonRequirements

執行個體啟動前安裝的python requirements列表,要求鏡像中在系統路徑中存在python和pip命令,list格式,如:

"prepare": {
  "pythonRequirements": [
    "numpy==1.16.4",
    "absl-py==0.11.0"
  ]
}

pythonRequirementsPath

執行個體啟動前安裝的python requirements.txt檔案地址,要求鏡像中在系統路徑中存在Python和pip命令,requirements.txt可直接打在鏡像中,也可以由外部儲存掛載的方式掛載到服務執行個體中,如:

"prepare": {
  "pythonRequirementsPath": "/data_oss/requirements.txt"
}

networking參數說明

參數

是否必選

描述

gateway

為EAS服務配置的專屬網關

gateway_policy

  • rate_limit:服務的全域限流,即服務每秒接收的最大請求數。

    • enable:是否開啟限流。取值true表示開啟限流,false表示關閉限流。

    • limit:限流值。

      說明

      共用網關的服務會預設配置單服務為 1000qps,伺服器組為 10000qps。專屬網關無預設值。

  • concurrency_limit:服務的全域並發控制,即服務瞬時正在處理的最大請求數。應用型專屬網關(ALB)暫不支援該設定。

    • enable:是否開啟限流。取值true表示開啟限流,false表示關閉限流。

    • limit:限流值。

限流配置樣本:

{
    "networking": {
        "gateway_policy": {
            "rate_limit": {
                "enable": true,
                "limit": 100
            },
            "concurrency_limit": {
                "enable": true,
                "limit": 50
            }
        }
    }
}

sinker參數說明

參數

是否必選

描述

type

支援配置以下兩種儲存類型:

  • maxcompute:巨量資料MaxCompute。

  • sls:Log ServiceSLS。

config

maxcompute.project

MaxCompute專案名稱。

maxcompute.table

MaxCompute資料表。

sls.project

SLS專案名稱。

sls.logstore

SLS的Logstore。

配置樣本如下:

儲存到MaxCompute

"sinker": {
        "type": "maxcompute",
        "config": {
            "maxcompute": {
                "project": "cl****",
                "table": "te****"
            }
        }
    }

儲存到Log ServiceSLS

"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*******"
}