Todos os produtos
Search
Central de documentação

Platform For AI:Deploy a service with JSON configuration

Última atualização: Sep 22, 2026

No EAS, você pode definir e implantar um service de inferência online usando um arquivo de configuração JSON.

Visualizar a configuração JSON de um service implantado

Caso já tenha implantado um service no console, inclusive via implantação com um clique no Model Gallery, você não precisa criar um arquivo de configuração JSON do zero. Todo service implantado pelo Model Gallery é um service do EAS e compartilha a mesma estrutura de configuração JSON das implantações via JSON. Assim, basta visualizar a configuração JSON completa do service implantado, copiá-la e utilizá-la como base para uma implantação personalizada.

Para visualizar a configuração JSON de um service implantado, siga as etapas abaixo:

  1. Acesse a guia Inference Service no console do EAS.

  2. Clique no nome do service de destino para acessar a página de detalhes do service.

  3. Clique na guia Service Configuration. A configuração JSON completa do service será exibida. Visualize e copie essa configuração.

Ajuste a configuração JSON copiada conforme descrito em Appendix: JSON parameters e utilize-a no procedimento de implantação com JSON na seção Início rápido.

Nota

A imagem de runtime, o comando de ponto de entrada (command ou script) e o tipo de instância do service em execução constam nesta configuração JSON e podem ser visualizados na guia Service Configuration. Essa guia exibe a configuração completa, sem campos ocultos adicionais, eliminando a necessidade de obter esses parâmetros separadamente. Utilize a configuração JSON exportada para migrar para uma implantação personalizada e gerencie o service de forma granular.

Início rápido

1. Preparar um arquivo de configuração JSON

Para implantar um service, é necessário um arquivo JSON que defina as configurações obrigatórias. Para usuários iniciantes, acesse Custom Model Deployment > Custom Deployment e configure os parâmetros. O sistema gera a configuração JSON automaticamente, a qual pode ser usada como modelo.

O código abaixo apresenta um exemplo de arquivo service.json. Para a lista completa de parâmetros, consulte Appendix: JSON Parameter Reference.

{
    "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. Implantar o service com JSON

  1. Faça login no PAI console. Selecione uma região na parte superior da página. Em seguida, selecione o workspace desejado e clique em Enter Elastic Algorithm Service (EAS).

  2. Na guia Inference Service, clique em Deploy Service. Depois, na seção Custom Model Deployment, selecione JSON Deployment.

  3. Cole a sua configuração JSON e clique em Deploy. Um status do service como Running indica que a implantação foi bem-sucedida.

Apêndice: parâmetros JSON

Parâmetro

Obrigatório

Descrição

metadata

Sim

Os metadados do service. Para mais informações, consulte metadata parameters.

cloud

Não

As configurações de recurso de computação e VPC. Para mais informações, consulte cloud parameters.

containers

Não

A configuração de imagem. Para mais informações, consulte containers parameters.

dockerAuth

Não

Este parâmetro é obrigatório para acessar um repositório privado que exige autenticação. O valor é a string codificada em Base64 de username:password.

networking

Não

A configuração de invocação do service. Para mais informações, consulte networking parameters.

storage

Não

Monta dados de services de armazenamento, como OSS ou NAS, no contêiner. Para detalhes de configuração, consulte storage mount.

token

Não

O token de acesso para autenticação do service. Se não for especificado, o sistema gera um automaticamente.

aimaster

Não

Ativa o computing power check and fault tolerance para services de inferência distribuída em vários nós.

model_path

Sim

Obrigatório ao implantar um service com um processador. Os parâmetros model_path e processor_path especificam os locais de source de dados de entrada para o modelo e o processador, respectivamente. Há suporte para os seguintes formatos:

  • Caminho do OSS: A URL pode apontar para um arquivo específico ou um diretório.

  • URL HTTP: A URL deve apontar para um arquivo compactado, como um arquivo TAR.GZ, TAR, BZ2 ou ZIP.

  • Caminho local: Um caminho local pode ser usado para depuração local com o comando test.

oss_endpoint

Não

O endpoint do OSS, por exemplo, oss-cn-beijing.aliyuncs.com. Para outros valores válidos, consulte Regions and endpoints.

Nota

Por padrão, você não precisa especificar este parâmetro. O service usa o endpoint interno do OSS da região atual para baixar arquivos de modelo ou arquivos do Processor. Você deve especificar este parâmetro ao acessar o OSS entre regiões. Por exemplo, se você implantar um service na região de Hangzhou e especificar um endereço do OSS na região de Beijing para model_path, deverá usar este parâmetro para especificar o endpoint público do OSS da região de Beijing.

model_entry

Não

O arquivo de entrada do modelo, que pode ser qualquer arquivo dentro do pacote do modelo. Se não for especificado, o padrão será o nome do arquivo de model_path. O caminho para este arquivo de entrada é passado para a função initialize() do processador.

model_config

Não

A configuração do modelo, que pode ser qualquer texto. Este valor é passado como o segundo argumento para a função initialize() do processador.

processor

Não

  • Se usar um processador pré-construído, especifique seu código. Para os códigos de processadores pré-construídos disponíveis no eascmd, consulte pre-built processors.

  • Se usar um processador personalizado, configure os parâmetros processor_path, processor_entry, processor_mainclass e processor_type.

processor_path

Não

O caminho para o pacote do processador. Para formatos de caminho suportados, consulte a descrição do parâmetro model_path.

processor_entry

Não

O arquivo de entrada do processador, como libprocessor.so ou app.py. Este arquivo deve implementar as funções initialize() e process() necessárias para a inferência.

Este parâmetro é obrigatório se processor_type estiver definido como cpp ou python.

processor_mainclass

Não

A classe principal do processador no pacote JAR. Por exemplo, com.aliyun.TestProcessor.

Este parâmetro é obrigatório se processor_type estiver definido como java.

processor_type

Não

A linguagem de implementação do processor. Os valores válidos são os seguintes:

  • cpp

  • java

  • python

warm_up_data_path

Não

O caminho para o arquivo de requisição usado para o aquecimento do modelo. Para mais informações sobre este recurso, consulte model warm-up.

runtime.enable_crash_block

Não

Especifica se uma instância que falha devido a uma exceção de código do processador é reiniciada automaticamente. Valores válidos:

  • true: A instância não é reiniciada automaticamente, o que preserva o ambiente de execução para solução de problemas.

  • false (Padrão): A instância é reiniciada automaticamente.

autoscaler

Não

A configuração para Auto Scaling horizontal. Para descrições detalhadas dos parâmetros, consulte horizontal auto scaling.

labels

Não

Os rótulos a serem aplicados ao service. Use o formato key:value.

unit.size

Não

O número de máquinas por instância em uma configuração de inferência distribuída. O valor padrão é 2.

sinker

Não

Persiste todas as requisições e respostas do service no MaxCompute ou Log Service (SLS). Para descrições detalhadas dos parâmetros, consulte sinker parameters.

confidential

Não

Configura o Trustee para garantir que informações como dados, modelos e código permaneçam criptografadas durante a implantação e a invocação do service. Isso permite um service de inferência seguro e criptografado. O formato é o seguinte:

Nota

O ambiente de criptografia segura protege principalmente os arquivos de armazenamento montados. Certifique-se de ter montado esses arquivos antes de ativar este recurso.

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

.

  • trustee_endpoint: O URI do Trustee.

  • decryption_key: O URI do KBS da chave de descriptografia. Por exemplo, kbs:///default/key/test-key.

Parâmetros de metadados

Parâmetros gerais

Parâmetro

Obrigatório

Descrição

name

Sim

O nome do service. Deve ser único dentro de uma região.

instance

Sim

O número de instâncias para o service.

workspace_id

Não

O ID do workspace do PAI. Se especificado, este parâmetro restringe o service ao workspace. Por exemplo: 1405**.

cpu

Não

O número de núcleos de CPU necessários para cada instância.

memory

Não

A quantidade de memória necessária para cada instância, em MB. O valor deve ser um número inteiro. Por exemplo, "memory": 4096 indica que cada instância requer 4 GB de memória.

gpu

Não

O número de GPUs necessárias para cada instância.

gpu_memory

Não

Ativa o gpu slicing, que permite que várias instâncias compartilhem uma única GPU. Este parâmetro só pode ser configurado com grupos de recursos dedicados ou cotas de recursos.

gpu_core_percentage

qos

Não

Especifica a Quality of Service (QoS) para a instância. Valores válidos: BestEffort ou omitido. Quando qos é definido como BestEffort, a instância entra no modo de compartilhamento de CPU. Neste modo, o agendamento é baseado na memória da GPU e na memória do sistema, e o agendamento ignora o número de núcleos de CPU no nó. Todas as instâncias no nó compartilham os recursos de CPU. O parâmetro cpu então especifica a cota máxima de CPU que uma única instância pode usar.

resource

Não

O ID do grupo de recursos. A política de implantação é a seguinte:

  • Se implantado em um grupo de recursos público, omita este parâmetro. O service será então faturado com base no pagamento conforme o uso.

  • Se implantado em um grupo de recursos dedicado, defina este parâmetro como o ID do grupo de recursos. Por exemplo: eas-r-6dbzve8ip0xnzt****.

cuda

Não

A versão do CUDA que o service requer. Em tempo de execução, a versão especificada do CUDA é montada automaticamente no diretório /usr/local/cuda da instância.

Versões suportadas do CUDA: 8.0, 9.0, 10.0, 10.1, 10.2, 11.0, 11.1 e 11.2. Por exemplo: "cuda":"11.2".

rdma

Não

Especifica se deve ativar a rede RDMA para inferência distribuída. Defina o valor como 1 para ativar a rede RDMA. Se omitido, este recurso fica desativado.

Nota

Atualmente, a rede RDMA está disponível apenas para services implantados usando recursos de computação inteligente Lingjun.

enable_grpc

Não

Especifica se deve ativar conexões gRPC para o gateway do service. Valores válidos:

  • false (Padrão): Desativa conexões gRPC. O gateway suporta requisições HTTP por padrão.

  • true: Ativa conexões gRPC.

Nota

Se você implantar um service usando uma imagem personalizada com um servidor baseado em gRPC, deverá definir este parâmetro para mudar o protocolo do gateway para gRPC.

enable_webservice

Não

Especifica se deve ativar um servidor web para implantar o service como uma aplicação AI-Web.

  • false (Padrão): O servidor web não é ativado.

  • true: O servidor web é ativado.

type

Não

Defina este parâmetro como LLMGatewayService para implantar um service de roteador inteligente LLM. Para mais informações, consulte Deploy an LLM intelligent router.

Parâmetros avançados

Importante

Modifique esses parâmetros avançados com cuidado.

Parâmetro

Obrigatório

Descrição

rpc

batching

Não

Ativa o agrupamento no lado do servidor para acelerar a inferência de modelos de GPU. Este recurso é suportado apenas no modo de processador pré-construído. Valores válidos:

  • false (Padrão): Desativa o agrupamento no lado do servidor.

  • true: Ativa o agrupamento no lado do servidor.

keepalive

Não

O tempo máximo de processamento para uma única requisição, em milissegundos. Se o tempo de processamento exceder este valor, o servidor retorna um erro 408 Timeout e fecha a conexão. O valor padrão é 600000 para gateways dedicados. Este parâmetro não é suportado para gateways dedicados baseados em Application Load Balancer (ALB).

io_threads

Não

O número de threads usadas para processar requisições de I/O de rede em cada instância. O valor padrão é 4.

max_batch_size

Não

O tamanho máximo de cada lote. O valor padrão é 16. Este parâmetro só entra em vigor quando rpc.batching é definido como true. Este recurso é suportado apenas no modo de processador pré-construído.

max_batch_timeout

Não

O tempo limite máximo para cada lote, em milissegundos. O valor padrão é 50. Este parâmetro só entra em vigor quando rpc.batching é definido como true. Este recurso é suportado apenas no modo de processador pré-construído.

max_queue_size

Não

O comprimento máximo da fila para um service de inferência assíncrona. O valor padrão é 64. Se a fila estiver cheia, o servidor retorna um erro 450 e fecha a conexão. Isso permite que o cliente tente novamente em outras instâncias e evite a sobrecarga do servidor. Para services com longos tempos de resposta (RTs), você pode reduzir o comprimento da fila para evitar que as requisições se acumulem e causem tempos limite.

worker_threads

Não

O número de threads em cada instância que são usadas para processar requisições simultaneamente. O valor padrão é 5. Este recurso é suportado apenas no modo de processador pré-construído.

rate_limit

Não

Ativa o limite de taxa de QPS e especifica o QPS máximo que uma instância pode processar. O valor padrão é 0, o que indica que o limite de taxa de QPS está desativado.

Por exemplo, se você definir este parâmetro como 2000, as requisições serão rejeitadas com um erro 429 (Too Many Requests) quando o QPS exceder 2.000.

enable_sigterm

Não

Valores válidos:

  • false (Padrão): O sistema não envia um sinal SIGTERM quando uma instância entra no estado de encerramento.

  • true: Quando uma instância de service entra no estado de encerramento, o sistema envia imediatamente um sinal SIGTERM para o processo principal. O processo dentro do service deve lidar com este sinal para realizar um encerramento gracioso personalizado. Se o sinal não for tratado, o processo principal pode ser encerrado imediatamente, impedindo um encerramento gracioso.

rolling_strategy

max_surge

Não

O número máximo de instâncias adicionais criadas além da contagem desejada durante uma atualização contínua. O valor pode ser um número inteiro positivo que indica o número de instâncias, ou uma porcentagem, como 2%. O valor padrão é 2%. Um valor maior acelera as atualizações do service.

Por exemplo, se a contagem de instâncias do service for 100 e você definir este parâmetro como 20, 20 novas instâncias serão criadas imediatamente após o início da atualização do service.

max_unavailable

Não

O número máximo de instâncias indisponíveis durante uma atualização contínua. Este parâmetro pode liberar recursos para novas instâncias durante uma atualização e evitar que a atualização pare devido a recursos insuficientes. O valor padrão é 1 para grupos de recursos dedicados e 0 para grupos de recursos públicos.

Por exemplo, se você definir este parâmetro como N, N instâncias serão interrompidas imediatamente após o início da atualização do service.

Nota

Se os recursos ociosos forem suficientes, você pode definir este parâmetro como 0. Um valor grande pode afetar a estabilidade do service porque o número de instâncias disponíveis diminui durante a atualização, o que aumenta a carga de tráfego em uma única instância. Equilibre a estabilidade do service com a disponibilidade de recursos ao configurar este parâmetro.

eas.termination_grace_period

Não

O período de encerramento gracioso de uma instância, em segundos. O valor padrão é 30.

Os services do EAS usam uma estratégia de atualização contínua. Uma instância primeiro entra no estado Terminating, e o service roteia o tráfego para longe da instância em encerramento. A instância então aguarda 30 segundos para processar quaisquer requisições recebidas antes de ser encerrada. Se as requisições demorarem muito para serem processadas, você pode aumentar este valor para garantir que todas as requisições em andamento sejam concluídas durante uma atualização do service.

Importante

Um valor menor pode afetar a estabilidade do service, enquanto um valor maior pode retardar as atualizações do service. Altere este parâmetro apenas se necessário.

scheduling

spread.policy

Não

A política de distribuição para agendar instâncias de service. Há suporte para as seguintes políticas:

  • host: Distribui instâncias em diferentes nós.

  • zone: Distribui instâncias em diferentes zonas de disponibilidade.

  • default: Agenda instâncias com base na política padrão usando a estratégia de posicionamento padrão do sistema.

Exemplo de configuração:

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

resource_rebalancing

Não

Valores válidos:

  • false (Padrão): Este recurso está desativado.

  • true: O EAS cria periodicamente instâncias de sondagem em recursos de alta prioridade. Se uma instância de sondagem for agendada com sucesso, ele criará mais instâncias de sondagem exponencialmente até que o agendamento falhe. Quando uma instância de sondagem agendada com sucesso conclui a inicialização e fica pronta, ela substitui uma instância em execução em um recurso de prioridade mais baixa.

Este recurso ajuda a resolver os seguintes problemas:

  • Evita que novas instâncias sejam agendadas temporariamente para um grupo de recursos públicos durante uma atualização contínua. Isso pode ocorrer quando as instâncias em encerramento em um grupo de recursos dedicados ainda não liberaram seus recursos.

  • Ao usar instâncias spot e regulares, o sistema verifica periodicamente se há instâncias spot disponíveis e migra as instâncias regulares para elas.

resource_burstable

Não

Ativa o recurso elastic resource pool para um service do EAS implantado em um grupo de recursos dedicado.

  • true: Ativa o recurso.

  • false: Desativa o recurso.

shm_size

Não

O tamanho da memória compartilhada para cada instância, em GB. A memória compartilhada permite operações diretas de leitura e gravação, eliminando a necessidade de cópia ou transferência de dados.

Parâmetros de cloud

Parâmetro

Obrigatório

Descrição

computing

instances

Não

Especifique uma lista de tipos de instância a serem usados na implantação do service em um grupo de recursos público. Caso a oferta por uma instância spot falhe ou o tipo de instância esteja indisponível, o sistema cria o service utilizando o próximo tipo de instância da lista.

  • type: O tipo de instância.

  • spot_price_limit: Opcional.

    • Se você especificar este parâmetro, o tipo de instância se torna uma instância spot com pagamento conforme o uso, e este valor representa seu preço máximo em USD.

    • Se você omitir este parâmetro, o sistema cria uma instância regular com pagamento conforme o uso.

  • capacity: O número máximo de instâncias deste tipo a serem criadas. Você pode especificar um número, como "500", ou uma porcentagem em string, como "20%". Após atingir o limite de capacidade, o sistema para de criar instâncias deste tipo, mesmo que haja recursos disponíveis.

    Por exemplo, se o número total de instâncias para um service for 200 e você definir o capacity de um tipo de instância como 20%, o sistema inicia no máximo 40 instâncias deste tipo. As instâncias restantes são iniciadas usando outros tipos de instância especificados.

disable_spot_protection_period

Não

Especifique se deseja desativar o período de proteção para uma instância spot. Este parâmetro se aplica apenas a instâncias spot. Valores válidos:

  • false (Padrão): A instância spot tem um período de proteção de 1 hora após a criação. Durante esse período, o sistema não recupera a instância mesmo que o preço de mercado exceda sua oferta.

  • true: Desativa o período de proteção. Instâncias sem período de proteção costumam ser cerca de 10% mais baratas que aquelas com período de proteção.

networking

vpc_id

Não

O ID da VPC.

vswitch_id

Não

O ID do vSwitch.

security_group_id

Não

O ID do grupo de segurança.

destination_cidrs

Não

Se o bloco CIDR do vSwitch configurado entrar em conflito com os blocos CIDR de gerenciamento do EAS (10.224.0.0/16 ou 10.240.0.0/12), defina explicitamente este parâmetro com o bloco CIDR do seu vSwitch.
Exemplo:

"cloud": {
    "networking": {
      "destination_cidrs": "10.241.28.0/22"
    }
  } 

Substitua 10.241.28.0/22 pelo bloco CIDR real do seu vSwitch.

Exemplo:

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

Parâmetros de contêiner

Para implantar um service usando uma imagem personalizada, consulte Custom Images.

Parâmetro

Obrigatório

Descrição

image

Sim

O endereço da imagem para o service de modelo. Obrigatório ao implantar usando uma imagem.

env

name

Não

O nome da variável de ambiente.

value

Não

O valor da variável de ambiente.

command

Especifique command ou script.

O comando de ponto de entrada para a imagem. Este parâmetro aceita apenas um único comando. Para scripts complexos, como cd xxx && python app.py, use o parâmetro script. Use o parâmetro command se a imagem não tiver o comando /bin/sh.

script

O script de ponto de entrada para a imagem. Você pode especificar scripts complexos com várias linhas. Separe os comandos com \n ou ponto e vírgula (;).

port

Não

A porta do contêiner.

Importante
  • O mecanismo do EAS escuta nas portas fixas 8080 e 9090. Para evitar conflitos de porta, certifique-se de que a porta do contêiner não seja 8080 ou 9090.

  • Esta porta deve corresponder à porta configurada no arquivo xxx.py especificado pelo command.

prepare

pythonRequirements

Não

Uma lista de requisitos do Python a serem instalados antes do início da instância. A imagem deve ter os comandos python e pip disponíveis no PATH do sistema. Por exemplo:

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

pythonRequirementsPath

Não

O caminho para um arquivo requirements.txt para instalar pacotes Python antes do início da instância. A imagem deve ter os comandos python e pip disponíveis no PATH do sistema. Este arquivo pode ser incluído na imagem ou montado a partir de um armazenamento externo. Por exemplo:

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

Parâmetros de rede

Parâmetro

Obrigatório

Descrição

gateway

Não

Especifique o dedicated gateway para o service do EAS.

gateway_policy

Não

  • rate_limit: Define o número máximo de solicitações por segundo (QPS) para limitação de taxa global.

    • enable: Ative a limitação de taxa definindo como true, ou desative-a definindo como false.

    • limit: O QPS máximo.

      Nota

      Os services em um gateway compartilhado têm o padrão de 1.000 QPS por service e 10.000 QPS por grupo de servidores. Gateways dedicados não possuem valor padrão.

  • concurrency_limit: Define o número máximo de solicitações simultâneas para controle de simultaneidade global. Esta configuração não é compatível com gateways dedicados baseados em ALB.

    • enable: Ative o controle de simultaneidade definindo como true, ou desative-o definindo como false.

    • limit: O número máximo de solicitações simultâneas.

Exemplo de configuração:

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

Parâmetros do Sinker

Parâmetro

Obrigatório

Descrição

type

Não

Especifique o service de armazenamento de destino. Valores suportados:

  • maxcompute: MaxCompute.

  • sls: Log Service (SLS).

config

maxcompute.project

Não

O nome do projeto MaxCompute.

maxcompute.table

Não

O nome da tabela MaxCompute.

sls.project

Não

O nome do projeto do Log Service (SLS).

sls.logstore

Não

O nome do Logstore.

Exemplos de configuração:

Enviar para o MaxCompute

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

Enviar para o SLS

"sinker": {
        "type": "sls",
        "config": {
            "sls": {
                "project": "k8s-log-****",
                "logstore": "d****"
            }
        }
    }

Exemplo de configuração JSON

O exemplo a seguir apresenta uma configuração 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,
    "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*******"
}