Todos os produtos
Search
Central de documentação

Platform For AI:Deploy a service with JSON configuration

Última atualização: Jun 27, 2026

No EAS, defina e implante um serviço de inferência online usando um arquivo de configuração JSON.

Início rápido

1. Preparar um arquivo de configuração JSON

A implantação de um serviço exige um arquivo JSON com as configurações obrigatórias. Para usuários iniciantes, recomendamos acessar Custom Model Deployment > Custom Deployment para configurar os parâmetros. O sistema gera automaticamente a configuração JSON, que serve como modelo.

O código a seguir é um exemplo de arquivo service.json. Para obter a lista completa de parâmetros, consulte Apêndice: Referência de parâmetros 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. Implantar o serviço 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 Elastic Algorithm Service (EAS).

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

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

Apêndice: Parâmetros JSON

Parâmetro

Obrigatório

Descrição

metadata

Sim

Metadados do serviço. Para mais informações, consulte parâmetros de metadata.

cloud

Não

Configurações de recursos de computação e VPC. Para mais informações, consulte parâmetros de cloud.

containers

Não

Configuração da imagem. Para mais informações, consulte parâmetros de containers.

dockerAuth

Não

Necessário para acessar um repositório privado que exige autenticação. O valor é a string codificada em Base64 de username:password.

networking

Não

Configuração de invocação do serviço. Para mais informações, consulte parâmetros de networking.

storage

Não

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

token

Não

Token de acesso para autenticação do serviço. Se não especificado, o sistema gera um automaticamente.

aimaster

Não

Ativa a verificação de poder de computação e tolerância a falhas para serviços de inferência distribuída multi-nó.

model_path

Sim

Obrigatório ao implantar um serviço com um processor. Os parâmetros model_path e processor_path especificam os locais de origem dos dados de entrada para o modelo e o processor, respectivamente. Formatos suportados:

  • 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 TAR.GZ, TAR, BZ2 ou ZIP.

  • Caminho local: Use para depuração local com o comando test.

oss_endpoint

Não

Endpoint do OSS, por exemplo, oss-cn-beijing.aliyuncs.com. Para outros valores válidos, consulte Regiões e endpoints.

Nota

Por padrão, não é necessário especificar este parâmetro. O serviço usa o endpoint interno do OSS da região atual para baixar arquivos de modelo ou do Processor. Especifique este parâmetro ao acessar o OSS entre regiões. Por exemplo, se você implantar um serviço na região de Hangzhou e especificar um endereço do OSS na região de Pequim para model_path, use este parâmetro para definir o endpoint público do OSS da região de Pequim.

model_entry

Não

Arquivo de entrada do modelo. Pode ser qualquer arquivo dentro do pacote do modelo. Se não especificado, o padrão é o nome do arquivo de model_path. O caminho para este arquivo de entrada é passado para a função initialize() do processor.

model_config

Não

Configuração do modelo. Pode ser qualquer texto. Este valor é passado como segundo argumento para a função initialize() do processor.

processor

Não

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

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

processor_path

Não

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

processor_entry

Não

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

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

processor_mainclass

Não

Classe principal do processor no pacote JAR. Por exemplo, com.aliyun.TestProcessor.

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

processor_type

Não

Linguagem de implementação do processor. Valores válidos:

  • cpp

  • java

  • python

warm_up_data_path

Não

Caminho para o arquivo de requisição usado no aquecimento do modelo. Para mais informações sobre este recurso, consulte aquecimento de modelo.

runtime.enable_crash_block

Não

Define se uma instância que falha devido a uma exceção no código do processor reinicia automaticamente. Valores válidos:

  • true: A instância não reinicia automaticamente, preservando o ambiente de execução para solução de problemas.

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

autoscaler

Não

Configuração para dimensionamento automático horizontal. Para descrições detalhadas dos parâmetros, consulte dimensionamento automático horizontal.

labels

Não

Rótulos a serem aplicados ao serviço. Use o formato key:value.

unit.size

Nã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 serviço no MaxCompute ou Log Service (SLS). Para descrições detalhadas dos parâmetros, consulte parâmetros de sinker.

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 invocação do serviço. Isso habilita um serviço de inferência seguro e criptografado. Formato:

Nota

O ambiente de criptografia segura protege principalmente 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: URI do Trustee.

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

Parâmetros de Metadata

Parâmetros gerais

Parâmetro

Obrigatório

Descrição

name

Sim

Nome do serviço. Deve ser único dentro de uma região.

instance

Sim

Número de instâncias para o serviço.

workspace_id

Não

ID do workspace do PAI. Se especificado, restringe o serviço ao workspace. Por exemplo: 1405**.

cpu

Não

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

memory

Não

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

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

gpu_memory

Não

Ativa o fatiamento de GPU, permitindo que várias instâncias compartilhem uma única GPU. Configure este parâmetro apenas com grupos de recursos dedicados ou cotas de recursos.

gpu_core_percentage

qos

Não

Especifica a Qualidade de Serviço (QoS) para a instância. Valores válidos: BestEffort ou omitido. Quando qos está definido como BestEffort, a instância entra no modo de compartilhamento de CPU. Nesse modo, o agendamento baseia-se na memória da GPU e na memória do sistema, ignorando 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 passa a especificar a cota máxima de CPU que uma única instância pode usar.

resource

Não

ID do grupo de recursos. Política de implantação:

  • Se implantado em um grupo de recursos público, omita este parâmetro. O serviço será 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

Versão do CUDA exigida pelo serviço. Durante a 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

Define se a rede RDMA deve ser ativada 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 serviços implantados usando recursos de computação inteligente Lingjun.

enable_grpc

Não

Define se as conexões gRPC devem ser ativadas para o gateway do serviço. 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 serviço usando uma imagem personalizada com um servidor baseado em gRPC, defina este parâmetro para alternar o protocolo do gateway para gRPC.

enable_webservice

Não

Define se um servidor web deve ser ativado para implantar o serviço 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 serviço de roteador inteligente LLM. Para mais informações, consulte Implantar um roteador inteligente LLM.

Parâmetros avançados

Importante

Modifique estes parâmetros avançados com cautela.

Parâmetro

Obrigatório

Descrição

rpc

batching

Não

Ativa o agrupamento no lado do servidor para acelerar a inferência de modelos GPU. Este recurso é suportado apenas no modo de processor 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

Tempo máximo de processamento para uma única requisição, em milissegundos. Se o tempo de processamento exceder esse 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

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

Tamanho máximo de cada lote. O valor padrão é 16. Este parâmetro só tem efeito quando rpc.batching está definido como true. Este recurso é suportado apenas no modo de processor pré-construído.

max_batch_timeout

Não

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

max_queue_size

Não

Comprimento máximo da fila para um serviço 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 evita sobrecarga do servidor. Para serviços com tempos de resposta (RTs) longos, reduza o comprimento da fila para evitar acúmulo de requisições e timeouts.

worker_threads

Não

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

rate_limit

Não

Ativa o limite de taxa QPS e especifica o QPS máximo que uma instância pode processar. O valor padrão é 0, indicando que o limite de taxa 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 serviço entra no estado de encerramento, o sistema envia imediatamente um sinal SIGTERM para o processo principal. O processo dentro do serviço deve lidar com este sinal para executar um encerramento gracioso personalizado. Se o sinal não for tratado, o processo principal poderá sair imediatamente, impedindo um encerramento gracioso.

rolling_strategy

max_surge

Nã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 indicando o número de instâncias ou uma porcentagem, como 2%. O valor padrão é 2%. Um valor maior acelera as atualizações do serviço.

Por exemplo, se a contagem de instâncias do serviço 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 serviço.

max_unavailable

Nã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 à falta de recursos. 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 serviço.

Nota

Se houver recursos ociosos suficientes, defina este parâmetro como 0. Um valor alto pode afetar a estabilidade do serviço, pois o número de instâncias disponíveis diminui durante a atualização, aumentando a carga de tráfego em uma única instância. Equilibre a estabilidade do serviço com a disponibilidade de recursos ao configurar este parâmetro.

eas.termination_grace_period

Não

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

Os serviços EAS usam uma estratégia de atualização contínua. Uma instância primeiro entra no estado Terminating, e o serviço redireciona 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 sair. Se as requisições demorarem muito para serem processadas, aumente este valor para garantir que todas as requisições em andamento sejam concluídas durante uma atualização do serviço.

Importante

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

scheduling

spread.policy

Não

Política de distribuição para agendamento de instâncias de serviço. Políticas suportadas:

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

  • zone: Distribui instâncias por 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 cria 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 temporariamente agendadas para um grupo de recursos públicos durante uma atualização contínua. Isso pode ocorrer quando instâncias em encerramento em um grupo de recursos dedicados ainda não liberaram seus recursos.

  • Ao usar instâncias spot e regulares simultaneamente, o sistema verifica periodicamente a disponibilidade de instâncias spot e migra instâncias regulares para elas.

resource_burstable

Não

Ativa o recurso de pool de recursos elásticos para um serviço EAS implantado em um grupo de recursos dedicado.

  • true: Ativa o recurso.

  • false: Desativa o recurso.

shm_size

Nã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

Especifica uma lista de tipos de instância a serem usados ao implantar o serviço em um grupo de recursos público. Se um lance para uma instância spot falhar ou se um tipo de instância estiver esgotado, o sistema cria o serviço usando o próximo tipo de instância na lista.

  • type: Tipo da instância.

  • spot_price_limit: Opcional.

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

    • Se você omitir este parâmetro, uma instância regular de pagamento conforme o uso será criada.

  • capacity: 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 serviço for 200 e você definir a capacity de um tipo de instância como 20%, o sistema lançará no máximo 40 instâncias deste tipo. As instâncias restantes serão lançadas usando outros tipos de instância especificados.

disable_spot_protection_period

Não

Define se o período de proteção para uma instância spot deve ser desativado. Este parâmetro aplica-se 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 ser criada. Durante o período de proteção, o sistema não recupera a instância mesmo que o preço de mercado exceda seu lance.

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

networking

vpc_id

Não

ID da VPC.

vswitch_id

Não

ID do vSwitch.

security_group_id

Nã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 como 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 Container

Para implantar um serviço usando uma imagem personalizada, consulte Imagens Personalizadas.

Parâmetro

Obrigatório

Descrição

image

Sim

Endereço da imagem para o serviço de modelo. Obrigatório ao implantar usando uma imagem.

env

name

Não

Nome da variável de ambiente.

value

Não

Valor da variável de ambiente.

command

Especifique command ou script.

Comando de ponto de entrada para a imagem. Este parâmetro suporta 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

Script de ponto de entrada para a imagem. É possível especificar scripts complexos com várias linhas. Separe comandos com \n ou ponto e vírgula (;).

port

Não

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

Lista de requisitos 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

Caminho para um arquivo requirements.txt para instalação de 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 armazenamento externo. Por exemplo:

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

Parâmetros de recursos

Parâmetro

Obrigatório

Descrição

eas.aliyun.com/extra-ephemeral-storage

Não

Tamanho do armazenamento efêmero adicional para o disco do sistema, em GB. Defina este parâmetro se o espaço livre em disco incluído for insuficiente para sua carga de trabalho. O valor deve ser um número inteiro de 0 a 2000.

eas.aliyun.com/gpu-driver-version

Não

Especifica a versão do driver para a GPU. Por exemplo, tesla=550.127.08.

Parâmetros de Networking

Parâmetro

Obrigatório

Descrição

gateway

Não

Especifica o gateway dedicado para o serviço EAS.

gateway_policy

Não

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

    • enable: Defina como true para ativar a limitação de taxa ou false para desativá-la.

    • limit: QPS máximo.

      Nota

      Serviços em um gateway compartilhado têm padrão de 1.000 QPS por serviço 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 requisições simultâneas para controle de concorrência global. Esta configuração não é suportada para gateways dedicados baseados em ALB.

    • enable: Defina como true para ativar o controle de concorrência ou false para desativá-lo.

    • limit: Número máximo de requisições simultâneas.

Exemplo de configuração:

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

Parâmetros de Sinker

Parâmetro

Obrigatório

Descrição

type

Não

Especifica o serviço de armazenamento de destino. Valores suportados:

  • maxcompute: MaxCompute.

  • sls: Log Service (SLS).

config

maxcompute.project

Não

Nome do projeto MaxCompute.

maxcompute.table

Não

Nome da tabela MaxCompute.

sls.project

Não

Nome do projeto Log Service (SLS).

sls.logstore

Não

Nome do Logstore.

Exemplos de configurações:

Enviar para MaxCompute

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

Enviar para SLS

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

Exemplo de configuração JSON

A seguir, um exemplo de 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*******"
}