Dans EAS, vous pouvez définir et déployer un service d'inférence en ligne à l'aide d'un fichier de configuration JSON.
Afficher la configuration JSON d'un service déployé
Si vous avez déjà déployé un service dans la console, y compris via le déploiement en un clic depuis Model Gallery, il n'est pas nécessaire de rédiger un fichier de configuration JSON à partir de zéro. Un service déployé depuis Model Gallery est un service EAS qui utilise la même structure de configuration JSON qu'un déploiement JSON standard. Vous pouvez afficher la configuration JSON complète d'un service déployé, la copier et l'utiliser comme point de départ pour un déploiement personnalisé.
Pour afficher la configuration JSON d'un service déployé, procédez comme suit :
Accédez à l'onglet Inference Service dans la console EAS.
Cliquez sur le nom du service cible pour accéder à la page des détails du service.
Sélectionnez l'onglet Service Configuration. La configuration JSON complète du service s'affiche. Vous pouvez consulter et copier cette configuration.
Vous pouvez ajuster la configuration JSON copiée selon les indications fournies dans la section Annexe : Paramètres JSON, puis l'utiliser lors de la procédure de déploiement JSON décrite dans la section Démarrage rapide.
L'image d'exécution, la commande du point d'entrée (command ou script) ainsi que le type d'instance du service en cours d'exécution figurent tous dans cette configuration JSON et sont visibles sous l'onglet Service Configuration. Cet onglet affiche la configuration intégrale sans champs masqués supplémentaires ; il n'est donc pas nécessaire de récupérer ces paramètres séparément. Vous pouvez utiliser la configuration JSON exportée pour basculer vers un déploiement personnalisé et gérer le service avec une granularité fine.
Démarrage rapide
1. Préparer un fichier de configuration JSON
Le déploiement d'un service nécessite un fichier JSON définissant les configurations requises. Pour les nouveaux utilisateurs, nous 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, 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
Connectez-vous à la console PAI. Sélectionnez une région en haut de la page. Ensuite, choisissez l'espace de travail souhaité et cliquez sur Enter Elastic Algorithm Service (EAS).
Sous l'onglet Inference Service , cliquez sur Deploy Service. Dans la section Custom Model Deployment , sélectionnez ensuite JSON Deployment.
Collez votre configuration JSON et cliquez sur Deploy. Un état de service « Running » indique que le déploiement a réussi.
Annexe : Paramètres JSON
Paramètre | Obligatoire | Description |
metadata | Oui | Les métadonnées du service. Pour plus d'informations, consultez les paramètres metadata. |
cloud | Non | Les configurations des ressources de calcul et du VPC. Pour plus d'informations, consultez les paramètres cloud. |
containers | Non | La configuration de l'image. Pour plus d'informations, consultez les 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 |
networking | Non | La configuration d'appel du service. Pour plus d'informations, consultez les 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 le montage de stockage. |
token | Non | Le 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 automatiquement un. |
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 spécifient 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 :
|
oss_endpoint | Non | Le point de terminaison OSS, par exemple oss-cn-beijing.aliyuncs.com. Pour les autres valeurs valides, consultez les 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 OSS interne de la région actuelle pour télécharger les fichiers de modèle ou de processeur. Vous devez spécifier 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 dans la région de Pékin pour 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 | Le fichier d'entrée du modèle, qui peut être n'importe quel fichier contenu 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 | La configuration du modèle, qui peut être n'importe quel texte. Cette valeur est transmise comme deuxième argument à la fonction initialize() du processeur. |
processor | Non |
|
processor_path | Non | Le chemin d'accès au package du processeur. Pour les formats de chemin pris en charge, consultez la description du paramètre model_path. |
processor_entry | Non | Le fichier d'entrée du processeur, tel que libprocessor.so ou app.py. Ce fichier doit implémenter les fonctions Ce paramètre est obligatoire si processor_type est défini sur cpp ou python. |
processor_mainclass | Non | La 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 | Le langage d'implémentation du processor. Les valeurs valides sont les suivantes :
|
warm_up_data_path | Non | Le chemin d'accès au fichier de requête utilisé pour l'échauffement du modèle. Pour plus d'informations sur cette fonctionnalité, consultez l'é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 :
|
autoscaler | Non | La configuration de la mise à l'échelle automatique horizontale. Pour une description détaillée des paramètres, consultez la mise à l'échelle automatique horizontale. |
labels | Non | Les libellés à appliquer au service. Utilisez le format |
unit.size | Non | Le 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 dans MaxCompute ou Log Service (SLS). Pour une description détaillée des paramètres, consultez les paramètres sinker. |
confidential | Non | Configure Trustee afin de 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é. .
|
Paramètres de métadonnées
Paramètres généraux
Paramètres avancés
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 type d'instance suivant dans la liste.
|
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 :
| |
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. Remplacez | |
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 du conteneur
Pour déployer un service à l'aide d'une image personnalisée, consultez la rubrique Images personnalisées.
Paramètre | Obligatoire | Description | |
image | Oui | L'adresse de l'image pour le service de modèle. Ce paramètre est requis lors d'un déploiement par image. | |
env | name | Non | Le nom de la variable d'environnement. |
value | Non | La valeur de la variable d'environnement. | |
command | Vous devez spécifier soit command, soit script. | La 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 | |
script | Le script de point d'entrée pour l'image. Vous pouvez spécifier des scripts complexes sur plusieurs lignes. Séparez les commandes par | ||
port | Non | Le port du conteneur. Important
| |
prepare | pythonRequirements | Non | Une 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. Par exemple : |
pythonRequirementsPath | Non | Le 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. Par exemple : | |
Paramètres réseau
Paramètre | Obligatoire | Description |
gateway | Non | Spécifie la passerelle dédiée pour le service EAS. |
gateway_policy | Non |
Exemple de configuration : |
Paramètres Sinker
Paramètre | Obligatoire | Description | |
type | Non | Spécifie le service de stockage de destination. Valeurs prises en charge :
| |
config | maxcompute.project | Non | Le nom du projet MaxCompute. |
maxcompute.table | Non | Le nom de la table MaxCompute. | |
sls.project | Non | Le nom du projet Log Service (SLS). | |
sls.logstore | Non | Le 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*******"
}