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
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).
Dans l'onglet Inference Service, cliquez sur Deploy Service. Puis, dans la section Custom Model Deployment, sélectionnez JSON Deployment.
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 |
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 :
|
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 |
|
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 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 :
|
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 :
|
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 |
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é. .
|
Paramètres metadata
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 prochain type d'instance de 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 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 | |
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 | ||
port | Non | Port du conteneur. Important
| |
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 : |
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 : | |
Paramètres networking
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 | 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*******"
}