Tous les produits
Search
Centre de documentation

Platform For AI:Déployer un service avec une configuration JSON

Dernière mise à jour :Aug 09, 2026

Avec EAS, vous pouvez définir et déployer un service d'inférence en ligne à l'aide d'un fichier de configuration JSON.

Démarrage rapide

1. Préparer un fichier de configuration JSON

Pour déployer un service, créez un fichier JSON définissant les configurations requises. Si vous débutez, nous vous recommandons de naviguer vers Custom Model Deployment > Custom Deployment afin de configurer les paramètres. Le système génère automatiquement la configuration JSON correspondante, que vous pouvez utiliser comme modèle.

Le code ci-dessous présente un exemple de fichier service.json. Pour obtenir la liste complète des paramètres, consultez la section Annexe : Référence des paramètres 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. Déployer le service avec JSON

  1. Connectez-vous à la console PAI. Sélectionnez une région en haut de la page. Choisissez ensuite l'espace de travail souhaité et cliquez sur Elastic Algorithm Service (EAS).

  2. Dans l'onglet Inference Service, cliquez sur Deploy Service. Puis, dans la section Custom Model Deployment, sélectionnez JSON Deployment.

  3. Collez votre configuration JSON et cliquez sur Deploy. Un statut de service indiquant « Running » signifie que le déploiement a réussi.

Annexe : Paramètres JSON

Paramètre

Obligatoire

Description

metadata

Oui

Métadonnées du service. Pour plus d'informations, consultez la section paramètres metadata.

cloud

Non

Configurations des ressources de calcul et du VPC. Pour plus d'informations, consultez la section paramètres cloud.

containers

Non

Configuration de l'image. Pour plus d'informations, consultez la section paramètres containers.

dockerAuth

Non

Ce paramètre est requis pour accéder à un dépôt privé nécessitant une authentification. La valeur correspond à la chaîne encodée en Base64 de username:password.

networking

Non

Configuration de l'appel du service. Pour plus d'informations, consultez la section paramètres networking.

storage

Non

Monte les données provenant de services de stockage tels qu'OSS ou NAS dans le conteneur. Pour les détails de configuration, consultez la section montage de stockage.

token

Non

Jeton d'accès pour l'authentification du service. Si ce paramètre n'est pas spécifié, le système en génère un automatiquement.

aimaster

Non

Active la vérification de la puissance de calcul et la tolérance aux pannes pour les services d'inférence distribués multi-nœuds.

model_path

Oui

Requis lors du déploiement d'un service avec un processeur. Les paramètres model_path et processor_path indiquent respectivement les emplacements des sources de données d'entrée pour le modèle et le processeur. Les formats suivants sont pris en charge :

  • Chemin OSS : l'URL peut pointer vers un fichier spécifique ou un répertoire.

  • URL HTTP : l'URL doit pointer vers une archive compressée, telle qu'un fichier TAR.GZ, TAR, BZ2 ou ZIP.

  • chemin local : un chemin local peut être utilisé pour le débogage local avec la commande test.

oss_endpoint

Non

Point de terminaison OSS, par exemple oss-cn-beijing.aliyuncs.com. Pour connaître les autres valeurs valides, consultez la section Régions et points de terminaison.

Remarque

Par défaut, vous n'avez pas besoin de spécifier ce paramètre. Le service utilise le point de terminaison interne OSS de la région actuelle pour télécharger les fichiers de modèle ou de processeur. Vous devez indiquer ce paramètre lorsque vous accédez à OSS depuis une autre région. Par exemple, si vous déployez un service dans la région de Hangzhou et spécifiez une adresse OSS située dans la région de Pékin pour le paramètre model_path, vous devez utiliser ce paramètre pour spécifier le point de terminaison OSS public de la région de Pékin.

model_entry

Non

Fichier d'entrée du modèle, qui peut être n'importe quel fichier présent dans le package du modèle. S'il n'est pas spécifié, il prend par défaut le nom de fichier issu de model_path. Le chemin d'accès à ce fichier d'entrée est transmis à la fonction initialize() du processeur.

model_config

Non

Configuration du modèle, qui peut être n'importe quel texte. Cette valeur est transmise en tant que deuxième argument à la fonction initialize() du processeur.

processor

Non

  • Si vous utilisez un processeur prédéfini, indiquez son code. Pour consulter les codes des processeurs prédéfinis disponibles dans eascmd, reportez-vous à la section processeurs prédéfinis.

  • Si vous utilisez un processeur personnalisé, configurez plutôt les paramètres processor_path, processor_entry, processor_mainclass et processor_type.

processor_path

Non

Chemin d'accès au package du processeur. Pour connaître les formats de chemin pris en charge, consultez la description du paramètre model_path.

processor_entry

Non

Fichier d'entrée du processeur, tel que libprocessor.so ou app.py. Ce fichier doit implémenter les fonctions initialize() et process() requises pour l'inférence.

Ce paramètre est obligatoire si processor_type est défini sur cpp ou python.

processor_mainclass

Non

Classe principale du processeur dans le package JAR. Par exemple, com.aliyun.TestProcessor.

Ce paramètre est obligatoire si processor_type est défini sur java.

processor_type

Non

Langage d'implémentation du processor. Les valeurs valides sont les suivantes :

  • cpp

  • java

  • python

warm_up_data_path

Non

Chemin d'accès au fichier de requête utilisé pour l'échauffement du modèle. Pour plus d'informations sur cette fonctionnalité, consultez la section échauffement du modèle.

runtime.enable_crash_block

Non

Indique si une instance qui plante en raison d'une exception dans le code du processeur redémarre automatiquement. Valeurs valides :

  • true : l'instance ne redémarre pas automatiquement, ce qui permet de préserver l'environnement d'exécution pour le dépannage.

  • false (par défaut) : l'instance redémarre automatiquement.

autoscaler

Non

Configuration de la mise à l'échelle horizontale automatique. Pour une description détaillée des paramètres, consultez la section mise à l'échelle horizontale automatique.

labels

Non

Libellés à appliquer au service. Utilisez le format key:value.

unit.size

Non

Nombre de machines par instance dans une configuration d'inférence distribuée. La valeur par défaut est 2.

sinker

Non

Persiste toutes les requêtes et réponses du service vers MaxCompute ou Log Service (SLS). Pour une description détaillée des paramètres, consultez la section paramètres sinker.

confidential

Non

Configure Trustee pour garantir que les informations telles que les données, les modèles et le code restent chiffrées pendant le déploiement et l'appel du service. Cela permet de mettre en place un service d'inférence sécurisé et chiffré. Le format est le suivant :

Remarque

L'environnement de chiffrement sécurisé protège principalement les fichiers de stockage montés. Assurez-vous d'avoir monté ces fichiers avant d'activer cette fonctionnalité.

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

.

  • trustee_endpoint : URI de Trustee.

  • decryption_key : URI KBS de la clé de déchiffrement. Par exemple, kbs:///default/key/test-key.

Paramètres metadata

Paramètres généraux

Paramètre

Obligatoire

Description

name

Oui

Nom du service. Il doit être unique au sein d'une région.

instance

Oui

Nombre d'instances pour le service.

workspace_id

Non

ID de l'espace de travail PAI. S'il est spécifié, ce paramètre restreint le service à cet espace de travail. Exemple : 1405**.

cpu

Non

Nombre de cœurs CPU requis pour chaque instance.

memory

Non

Quantité de mémoire requise pour chaque instance, en Mo. La valeur doit être un entier. Par exemple, "memory": 4096 indique que chaque instance nécessite 4 Go de mémoire.

gpu

Non

Nombre de GPU requis pour chaque instance.

gpu_memory

Non

Active le découpage GPU, permettant à plusieurs instances de partager un seul GPU. Ce paramètre ne peut être configuré qu'avec des groupes de ressources dédiés ou des quotas de ressources.

gpu_core_percentage

qos

Non

Spécifie la qualité de service (QoS) pour l'instance. Valeurs valides : BestEffort ou omission. Lorsque qos est défini sur BestEffort, l'instance passe en mode de partage du CPU. Dans ce mode, la planification repose sur la mémoire GPU et la mémoire système, et ignore le nombre de cœurs CPU du nœud. Toutes les instances du nœud partagent les ressources CPU. Le paramètre cpu spécifie alors le quota maximal de CPU qu'une seule instance peut utiliser.

resource

Non

ID du groupe de ressources. La politique de déploiement est la suivante :

  • En cas de déploiement dans un groupe de ressources public, omettez ce paramètre. Le service est alors facturé selon le modèle de paiement à l'utilisation.

  • En cas de déploiement dans un groupe de ressources dédié, définissez ce paramètre sur l'ID du groupe de ressources. Exemple : eas-r-6dbzve8ip0xnzt****.

cuda

Non

Version CUDA requise par le service. Lors de l'exécution, la version CUDA spécifiée est automatiquement montée dans le répertoire /usr/local/cuda de l'instance.

Versions CUDA prises en charge : 8.0, 9.0, 10.0, 10.1, 10.2, 11.0, 11.1 et 11.2. Exemple : "cuda":"11.2".

rdma

Non

Indique s'il faut activer la mise en réseau RDMA pour l'inférence distribuée. Définissez la valeur sur 1 pour activer la mise en réseau RDMA. En cas d'omission, cette fonctionnalité est désactivée.

Remarque

Actuellement, la mise en réseau RDMA est disponible uniquement pour les services déployés à l'aide des ressources de calcul intelligent Lingjun.

enable_grpc

Non

Indique s'il faut activer les connexions gRPC pour la passerelle de service. Valeurs valides :

  • false (par défaut) : désactive les connexions gRPC. La passerelle prend en charge les requêtes HTTP par défaut.

  • true : active les connexions gRPC.

Remarque

Si vous déployez un service à l'aide d'une image personnalisée avec un serveur basé sur gRPC, vous devez définir ce paramètre pour basculer le protocole de la passerelle vers gRPC.

enable_webservice

Non

Indique s'il faut activer un serveur Web pour déployer le service en tant qu'application AI-Web.

  • false (par défaut) : le serveur Web n'est pas activé.

  • true : le serveur Web est activé.

type

Non

Définissez ce paramètre sur LLMGatewayService pour déployer un service de routeur intelligent LLM. Pour plus d'informations, consultez la section Déployer un routeur intelligent LLM.

Paramètres avancés

Important

Modifiez ces paramètres avancés avec précaution.

Paramètre

Obligatoire

Description

rpc

batching

Non

Active le regroupement côté serveur (batching) pour accélérer l'inférence des modèles GPU. Cette fonctionnalité est prise en charge uniquement en mode processeur prédéfini. Valeurs valides :

  • false (par défaut) : désactive le regroupement côté serveur.

  • true : active le regroupement côté serveur.

keepalive

Non

Durée maximale de traitement d'une seule requête, en millisecondes. Si le temps de traitement dépasse cette valeur, le serveur renvoie une erreur 408 Timeout et ferme la connexion. La valeur par défaut est 600000 pour les passerelles dédiées. Ce paramètre n'est pas pris en charge pour les passerelles dédiées basées sur Application Load Balancer (ALB).

io_threads

Non

Nombre de threads utilisés pour traiter les requêtes d'E/S réseau dans chaque instance. La valeur par défaut est 4.

max_batch_size

Non

Taille maximale de chaque lot. La valeur par défaut est 16. Ce paramètre prend effet uniquement lorsque rpc.batching est défini sur true. Cette fonctionnalité est prise en charge uniquement en mode processeur prédéfini.

max_batch_timeout

Non

Délai d'expiration maximal pour chaque lot, en millisecondes. La valeur par défaut est 50. Ce paramètre prend effet uniquement lorsque rpc.batching est défini sur true. Cette fonctionnalité est prise en charge uniquement en mode processeur prédéfini.

max_queue_size

Non

Longueur maximale de la file d'attente pour un service d'inférence asynchrone. La valeur par défaut est 64. Si la file d'attente est pleine, le serveur renvoie une erreur 450 et ferme la connexion. Cela permet au client de réessayer sur d'autres instances et d'éviter la surcharge du serveur. Pour les services ayant des temps de réponse (RT) longs, vous pouvez réduire la longueur de la file d'attente pour empêcher l'accumulation des requêtes et éviter les délais d'expiration.

worker_threads

Non

Nombre de threads dans chaque instance utilisés pour traiter simultanément les requêtes. La valeur par défaut est 5. Cette fonctionnalité est prise en charge uniquement en mode processeur prédéfini.

rate_limit

Non

Active la limitation du débit QPS et spécifie le QPS maximal qu'une instance peut traiter. La valeur par défaut est 0, ce qui indique que la limitation du débit QPS est désactivée.

Par exemple, si vous définissez ce paramètre sur 2000, les requêtes sont rejetées avec une erreur 429 (Too Many Requests) lorsque le QPS dépasse 2 000.

enable_sigterm

Non

Valeurs valides :

  • false (par défaut) : le système n'envoie pas de signal SIGTERM lorsqu'une instance entre dans l'état de terminaison.

  • true : lorsqu'une instance de service entre dans l'état de terminaison, le système envoie immédiatement un signal SIGTERM au processus principal. Le processus au sein du service doit gérer ce signal pour effectuer un arrêt gracieux personnalisé. Si le signal n'est pas géré, le processus principal peut se terminer immédiatement, empêchant ainsi un arrêt gracieux.

rolling_strategy

max_surge

Non

Nombre maximal d'instances supplémentaires créées au-delà du nombre souhaité lors d'une mise à jour progressive. La valeur peut être un entier positif indiquant le nombre d'instances, ou un pourcentage, tel que 2 %. La valeur par défaut est 2 %. Une valeur plus élevée accélère les mises à jour du service.

Par exemple, si le nombre d'instances du service est de 100 et que vous définissez ce paramètre sur 20, 20 nouvelles instances sont créées immédiatement après le début de la mise à jour du service.

max_unavailable

Non

Nombre maximal d'instances indisponibles lors d'une mise à jour progressive. Ce paramètre permet de libérer des ressources pour les nouvelles instances pendant une mise à jour et d'éviter que celle-ci ne soit bloquée en raison d'un manque de ressources. La valeur par défaut est 1 pour les groupes de ressources dédiés et 0 pour les groupes de ressources publics.

Par exemple, si vous définissez ce paramètre sur N, N instances sont arrêtées immédiatement après le début de la mise à jour du service.

Remarque

Si les ressources inactives sont suffisantes, vous pouvez définir ce paramètre sur 0. Une valeur élevée peut affecter la stabilité du service, car le nombre d'instances disponibles diminue pendant la mise à jour, ce qui augmente la charge de trafic sur une seule instance. Équilibrez la stabilité du service et la disponibilité des ressources lors de la configuration de ce paramètre.

eas.termination_grace_period

Non

Période d'arrêt gracieux d'une instance, en secondes. La valeur par défaut est 30.

Les services EAS utilisent une stratégie de mise à jour progressive. Une instance passe d'abord à l'état Terminating, et le service détourne le trafic de l'instance en cours de terminaison. L'instance attend ensuite 30 secondes pour traiter toutes les requêtes reçues avant de s'arrêter. Si le traitement des requêtes prend beaucoup de temps, vous pouvez augmenter cette valeur pour vous assurer que toutes les requêtes en cours sont terminées lors d'une mise à jour du service.

Important

Une valeur plus faible peut affecter la stabilité du service, tandis qu'une valeur plus élevée peut ralentir les mises à jour du service. Ne modifiez ce paramètre que si nécessaire.

scheduling

spread.policy

Non

Politique de répartition pour la planification des instances de service. Les politiques suivantes sont prises en charge :

  • host : répartit les instances sur différents nœuds.

  • zone : répartit les instances sur différentes zones de disponibilité.

  • default : planifie les instances selon la politique par défaut en utilisant la stratégie de placement par défaut du système.

Exemple de configuration :

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

resource_rebalancing

Non

Valeurs valides :

  • false (par défaut) : cette fonctionnalité est désactivée.

  • true : EAS crée périodiquement des instances de sondage sur des ressources prioritaires. Si une instance de sondage est planifiée avec succès, le système crée davantage d'instances de sondage de manière exponentielle jusqu'à ce que la planification échoue. Lorsqu'une instance de sondage planifiée avec succès termine son initialisation et devient prête, elle remplace une instance s'exécutant sur une ressource de priorité inférieure.

Cette fonctionnalité permet de résoudre les problèmes suivants :

  • Empêche la planification temporaire de nouvelles instances dans un groupe de ressources public lors d'une mise à jour progressive. Cela peut se produire lorsque les instances en cours de terminaison dans un groupe de ressources dédié n'ont pas encore libéré leurs ressources.

  • Lorsque vous utilisez à la fois des instances spot et des instances régulières, le système vérifie périodiquement la disponibilité des instances spot et migre les instances régulières vers celles-ci.

resource_burstable

Non

Active la fonctionnalité de pool de ressources élastiques pour un service EAS déployé dans un groupe de ressources dédié.

  • true : active la fonctionnalité.

  • false : désactive la fonctionnalité.

shm_size

Non

Taille de la mémoire partagée pour chaque instance, en Go. La mémoire partagée permet des opérations de lecture et d'écriture directes, éliminant ainsi le besoin de copier ou de transférer des données.

Paramètres cloud

Paramètre

Obligatoire

Description

computing

instances

Non

Spécifie une liste de types d'instance à utiliser lors du déploiement du service dans un groupe de ressources public. Si une enchère pour une instance spot échoue ou si un type d'instance est en rupture de stock, le système crée le service en utilisant le prochain type d'instance de la liste.

  • type : type d'instance.

  • spot_price_limit : facultatif.

    • Si vous spécifiez ce paramètre, le type d'instance devient une instance spot de paiement à l'utilisation, et cette valeur représente son prix maximal en USD.

    • Si vous omettez ce paramètre, une instance régulière de paiement à l'utilisation est créée.

  • capacity : nombre maximal d'instances de ce type à créer. Vous pouvez spécifier un nombre, tel que « 500 », ou un pourcentage sous forme de chaîne, tel que « 20 % ». Une fois la limite de capacité atteinte, le système cesse de créer des instances de ce type, même si des ressources sont disponibles.

    Par exemple, si le nombre total d'instances pour un service est de 200 et que vous définissez la capacity d'un type d'instance sur 20%, le système lance au maximum 40 instances de ce type. Les instances restantes sont lancées en utilisant d'autres types d'instance spécifiés.

disable_spot_protection_period

Non

Indique s'il faut désactiver la période de protection pour une instance spot. Ce paramètre s'applique uniquement aux instances spot. Valeurs valides :

  • false (par défaut) : l'instance spot bénéficie d'une période de protection d'une heure après sa création. Pendant cette période, le système ne récupère pas l'instance, même si le prix du marché dépasse votre enchère.

  • true : désactive la période de protection. Les instances sans période de protection coûtent généralement environ 10 % de moins que celles avec une période de protection.

networking

vpc_id

Non

ID du VPC.

vswitch_id

Non

ID du vSwitch.

security_group_id

Non

ID du groupe de sécurité.

destination_cidrs

Non

Si le bloc CIDR du vSwitch configuré entre en conflit avec les blocs CIDR de gestion EAS (10.224.0.0/16 ou 10.240.0.0/12), vous devez explicitement définir ce paramètre sur le bloc CIDR de votre vSwitch.
Exemple :

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

Remplacez 10.241.28.0/22 par le bloc CIDR réel de votre vSwitch.

Exemple :

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

Paramètres container

Pour déployer un service à l'aide d'une image personnalisée, consultez la section Images personnalisées.

Paramètre

Obligatoire

Description

image

Oui

Adresse de l'image pour le service de modèle. Requis lors du déploiement avec une image.

env

name

Non

Nom de la variable d'environnement.

value

Non

Valeur de la variable d'environnement.

command

Vous devez spécifier command ou script.

Commande de point d'entrée pour l'image. Ce paramètre ne prend en charge qu'une seule commande. Pour les scripts complexes, tels que cd xxx && python app.py, utilisez le paramètre script. Utilisez le paramètre command si l'image ne dispose pas de la commande /bin/sh.

script

Script de point d'entrée pour l'image. Vous pouvez spécifier des scripts complexes sur plusieurs lignes. Séparez les commandes par \n ou un point-virgule (;).

port

Non

Port du conteneur.

Important
  • Le moteur EAS écoute sur les ports fixes 8080 et 9090. Pour éviter les conflits de ports, assurez-vous que le port du conteneur n'est ni 8080 ni 9090.

  • Ce port doit correspondre au port configuré dans le fichier xxx.py spécifié par command.

prepare

pythonRequirements

Non

Liste des dépendances Python à installer avant le démarrage de l'instance. L'image doit disposer des commandes python et pip disponibles dans le PATH système. Exemple :

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

pythonRequirementsPath

Non

Chemin d'accès à un fichier requirements.txt pour l'installation des packages Python avant le démarrage de l'instance. L'image doit disposer des commandes python et pip disponibles dans le PATH système. Ce fichier peut être inclus dans l'image ou monté depuis un stockage externe. Exemple :

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

Paramètres networking

Paramètre

Obligatoire

Description

gateway

Non

Spécifie la passerelle dédiée pour le service EAS.

gateway_policy

Non

  • rate_limit : définit le nombre maximal de requêtes par seconde (QPS) pour la limitation globale du débit.

    • enable : définissez sur true pour activer la limitation du débit, ou sur false pour la désactiver.

    • limit : QPS maximal.

      Remarque

      Les services sur une passerelle partagée ont par défaut 1 000 QPS par service et 10 000 QPS par groupe de serveurs. Les passerelles dédiées n'ont aucune valeur par défaut.

  • concurrency_limit : définit le nombre maximal de requêtes simultanées pour le contrôle global de la concurrence. Ce paramètre n'est pas pris en charge pour les passerelles dédiées basées sur ALB.

    • enable : définissez sur true pour activer le contrôle de la concurrence, ou sur false pour le désactiver.

    • limit : nombre maximal de requêtes simultanées.

Exemple de configuration :

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

Paramètres sinker

Paramètre

Obligatoire

Description

type

Non

Spécifie le service de stockage de destination. Valeurs prises en charge :

  • maxcompute : MaxCompute.

  • sls : Log Service (SLS).

config

maxcompute.project

Non

Nom du projet MaxCompute.

maxcompute.table

Non

Nom de la table MaxCompute.

sls.project

Non

Nom du projet Log Service (SLS).

sls.logstore

Non

Nom du Logstore.

Exemples de configurations :

Sink to MaxCompute

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

Sink to SLS

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

Exemple de configuration JSON

Voici un exemple de configuration 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*******"
}