Lorsque les images officielles fournies par EAS ne répondent pas à vos exigences métier ou environnementales, empaquetez un environnement d'exécution complet dans une image personnalisée pour déployer votre service de modèle de manière flexible et fiable.
Démarrage rapide : créer et déployer une image personnalisée
Créez une image de service web basée sur Gunicorn et Flask sur une instance ECS Alibaba Cloud, transférez-la vers un référentiel ACR via un réseau privé et déployez-la en tant que service EAS en ligne.
Étape 1 : Préparer l'environnement
Avant de commencer, assurez-vous que les ressources suivantes sont disponibles dans la même région (par exemple, Chine (Hangzhou)) :
1,1 VPC
Préparez un VPC, par exemple VPC_HZ. Pour en créer un, consultez la rubrique VPCs and vSwitches.
L'instance ECS et le service EAS utilisent ce VPC pour garantir la stabilité et la sécurité du transfert et de l'extraction des images.
1,2 Container Registry (ACR)
Créez une instance ACR Enterprise Edition pour stocker et gérer les images personnalisées. Pour plus d'informations sur les référentiels d'images, consultez la section Choose an image registry.
Voici les étapes clés. Pour plus de détails, consultez la rubrique Push and pull images :
Connectez-vous à la Container Registry console.
Créez une instance Enterprise Edition. Cette rubrique utilise la région Chine (Hangzhou) et l'édition Basic. Conservez les paramètres par défaut pour les autres options.
Créez un namespace, par exemple
pai-demo.Créez un référentiel d'images, par exemple
flask-app. Sélectionnez Local Repository comme source de code.-
Configurez le contrôle d'accès VPC.
Dans le volet de navigation de gauche de la page de gestion de l'instance Enterprise Edition, choisissez .
Sous l'onglet VPC, cliquez sur Add VPC . Sélectionnez
VPC_HZcomme VPC.
1,3 Environnement de développement (ECS)
Créez une instance ECS avec les spécifications suivantes pour construire l'image.
Type d'instance :
ecs.u1-c1m2.largeImage : Alibaba Cloud Linux 3.2104 LTS 64-bit
Extension : Docker Community Edition
Réseau : Sélectionnez
VPC_HZ(le VPC sélectionné doit être ajouté à la liste de contrôle d'accès de l'instance ACR Enterprise Edition ; sinon, vous ne pourrez pas transférer les images vers le référentiel ACR).
Vous pouvez également utiliser un environnement de développement local ou autre.
Environnement de développement local : Installez et exécutez Docker pour créer des images localement.
Environnement de développement DSW : Dans la liste des instances DSW, cliquez sur Create Image dans la colonne Actions. Le système construit une image Docker et l'enregistre dans ACR. Lors du déploiement du service, sélectionnez Custom Image pour choisir dans une liste déroulante. Pour plus de détails, consultez la rubrique Create a DSW instance image.
Étape 2 : Préparer les fichiers du projet
Connectez-vous à l'instance ECS, créez un dossier de projet, par exemple my-app, et ajoutez les trois fichiers suivants :
-
requirements.txt (dépendances de l'application)
flask gunicorn -
app.py (code de l'application web)
from flask import Flask app = Flask(__name__) @app.route('/hello/model') def hello_world(): # Integrate your model inference or other business logic here return 'Hello World from Gunicorn!' # Note: app.run() is not needed. Gunicorn starts the application. -
Dockerfile (instructions de construction de l'image)
# 1. Use the lightweight official Python image as the base FROM python:3.9-slim # 2. Set the working directory WORKDIR /app # 3. Copy the dependencies file and install. This layer is cached to speed up subsequent builds. COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 4. Copy the application code COPY app.py . # 5. Declare the service port EXPOSE 8000 # 6. Define the default container startup command (can be overridden by the Run Command in the EAS console) CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]
Étape 3 : Construire et transférer l'image
Ouvrez un terminal et accédez au dossier du projet (
my-app).-
Connectez-vous à votre instance ACR. Remplacez les espaces réservés dans la commande par vos valeurs réelles.
RemarqueSur la page des détails du référentiel ACR, vous trouverez des exemples de commandes de connexion, d'extraction et de transfert. Les exemples utilisent des endpoints publics. Remplacez-les par des endpoints privés.
# Example: docker login --username=your_user my-registry-vpc.cn-hangzhou.aliyuncs.com docker login --username=<username> <ACR private endpoint> -
Construisez l'image Docker et étiquetez-la avec le chemin complet du référentiel.
# Example: docker build -t my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1 . # The full image address is <ACR private endpoint>/<namespace>/<repository name>:<tag> docker build -t <ACR private endpoint>/<namespace>/<repository name>:<tag> . -
(Recommandé) Vérifiez l'image localement avant de la transférer. Exécutez la commande suivante pour vous assurer que l'image démarre correctement avant de la transférer vers le référentiel.
# Replace <port> with the EXPOSE port in your Dockerfile (8000 in this example) docker run -p <port>:<port> <ACR private endpoint>/<namespace>/<repository name>:<tag>Si l'application répond comme prévu, l'image est prête à être transférée.
-
Transférez l'image vers ACR.
# Example: docker push my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1 docker push <ACR endpoint>/<namespace>/<repository name>:<tag>
Étape 4 : Déployer le service
Connectez-vous à la PAI console. Sélectionnez une région en haut de la page. Ensuite, sélectionnez l'espace de travail souhaité et cliquez sur Enter Elastic Algorithm Service (EAS).
Cliquez sur Deploy Service et choisissez .
-
Configurez les paramètres clés suivants :
Deployment Method : Sélectionnez Image-based Deployment.
-
Image Configuration : Sélectionnez Image Address et saisissez l'adresse complète de l'image de l'étape précédente :
my-registry-vpc.cn-hangzhou.aliyuncs.com/pai-demo/flask-app:v1.Étant donné que cet exemple utilise ACR sous le même compte Alibaba Cloud, EAS peut extraire l'image sans identifiants. Aucun nom d'utilisateur ni mot de passe n'est requis.
-
Command to Run :
gunicorn -w 4 -b 0.0.0.0:8000 app:appLa commande
Run Commanddans la console EAS remplace l'instructionCMDdu Dockerfile. Saisissez ici la commande de démarrage pour faciliter le débogage et la modification ultérieure. Port Number : 8000.
Deployment : Cet exemple utilise des ressources CPU. Sélectionnez Public Resources et choisissez
ecs.c6.large.-
VPC : Sélectionnez un VPC (
VPC_HZ), un vSwitch et un groupe de sécurité.Assurez-vous que le VPC sélectionné ici a été ajouté à la liste de contrôle d'accès de l'instance ACR. Sinon, l'extraction de l'image échoue en raison de problèmes de connectivité réseau. Une erreur courante est
ImagePullBackOff.
Cliquez sur Deploy. Le déploiement réussit lorsque l'état du service passe à Running.
Mettre à jour l'adresse de l'image ou la configuration du service : La configuration JSON affichée sur la page des détails du service est en lecture seule et ne peut pas être modifiée directement. Pour la modifier, utilisez l'entrée Update dans la liste des services.
Étape 5 : Tester le service
Une fois le service déployé, obtain the endpoint and token et exécutez la commande suivante pour tester le service Flask :
# Replace <endpoint> and <token> with the actual service endpoint and token
curl <endpoint>/hello/model -H "Authorization: <token>"
Si Hello World from Gunicorn! est renvoyé, le service est déployé et accessible.
Pour plus d'informations sur l'appel de service, consultez la rubrique Service invocation methods.
Concepts clés et limitations
-
Réseau : Les services EAS accèdent aux ressources internes via des endpoints VPC et nécessitent généralement une configuration VPC. Pour accéder aux ressources sur Internet (par exemple, utiliser
pippour installer des dépendances à partir de sources publiques, appeler des API externes ou extraire des images via Internet), vous devez également configurer une passerelle NAT pour le VPC. Pour plus de détails, consultez la rubrique EAS access to public and private resources.Note sur les coûts : La passerelle NAT est un service payant et entraîne des frais supplémentaires.
-
Restrictions de port :
Le moteur de service EAS utilise les ports
8080et9090. Votre application ne doit pas écouter sur ces ports. Sinon, le service ne démarre pas en raison de conflits de ports.Lorsqu'un service comporte plusieurs conteneurs, chaque conteneur doit écouter sur un port différent. Par exemple, si le conteneur principal utilise le port
8000, le conteneur sidecar ne peut pas non plus utiliser le port8000. Sinon, le service ne démarre pas en raison de conflits de ports.
Version CUDA : La version CUDA d'un service en ligne est déterminée par le type d'instance et l'image de base sélectionnés, et ne peut pas être modifiée au moment de l'exécution. Pour changer de version CUDA, redéployez le service avec une image ou un type d'instance qui prend en charge la version CUDA cible.
Injection Sidecar : EAS injecte un conteneur proxy dans chaque instance de service en tant que sidecar pour l'authentification, l'autorisation et la surveillance. Le proxy est transparent mais utilise certaines ressources et transfère les requêtes externes vers votre port de service configuré.
Support des protocoles API : Le déploiement d'images prend en charge les protocoles HTTP, WebSocket et gRPC (HTTP/2) pour les services API au sein de l'image.
Choisir un registre d'images
Types de registres d'images
EAS extrait les images d'un registre d'images lors du déploiement des services. Nous recommandons Alibaba Cloud Container Registry (ACR) pour le stockage des images. Utilisez des endpoints VPC pour extraire les images afin d'améliorer les performances et la sécurité.
L'extraction d'images via Internet n'est pas sécurisée et est lente. N'utilisez pas d'endpoints publics en production.
Type de registre | Description |
ACR Personal Edition |
|
ACR Enterprise Edition |
|
Registre géré par l'utilisateur | Si vous utilisez un registre géré par l'utilisateur tel que Harbor au sein d'un VPC Alibaba Cloud, l'adresse du registre n'est accessible qu'au sein du VPC. Comme pour ACR Enterprise Edition, configurez un VPC pour le service EAS afin que le registre et le service EAS se trouvent dans le même VPC. |
Authentification du registre d'images
Pour les registres nécessitant une authentification, fournissez les identifiants lors du déploiement du service.
Spécifiez les identifiants dans le fichier de configuration JSON via le paramètre dockerAuth. La valeur est l'encodage Base64 de username:password.
Par exemple, pour encoder abcd:abcde12345, exécutez echo -n "abcd:abcde12345" | base64 pour obtenir YWJjZDphYmNkZTEy****. Utilisez cette valeur pour le paramètre dockerAuth.
{"dockerAuth": "YWJjZDphYmNkZTEy****"}
Lorsque vous utilisez un référentiel ACR dans la même région sous le même compte Alibaba Cloud, EAS peut extraire des images sans identifiants. Aucun nom d'utilisateur ni mot de passe n'est requis.
Recommandations pour la production
Séparer les images des modèles : Gardez toujours le code et les fichiers de modèle séparés. Empaquetez le code dans l'image et stockez les modèles dans OSS ou NAS. Utilisez la fonctionnalité Storage mounts pour monter les modèles dans le conteneur lors du déploiement EAS. Cela réduit le temps d'extraction de l'image lors des mises à jour et des montées en charge du service.
Extraire les images via le réseau privé : Pour la sécurité et les performances, configurez un VPC pour le service afin qu'il puisse extraire les images d'ACR via un endpoint VPC.
Préinstaller les dépendances pour optimiser le temps de démarrage : Si le service télécharge des packages Python ou de gros fichiers de modèle à chaque redémarrage, le temps de démarrage à froid augmente considérablement. Préinstallez l'environnement Python, les dépendances (telles que PyTorch et Transformers) et les fichiers de modèle dans l'image afin que le conteneur puisse traiter les requêtes immédiatement après le démarrage.
Enregistrer l'image en tant qu'actif IA : Si l'image personnalisée s'applique à plusieurs scénarios, utilisez la fonctionnalité d'image de PAI AI Assets pour la gérer en tant qu'actif IA réutilisable.
Configurer les contrôles d'intégrité : Mettez en place des contrôles d'intégrité pour le service. EAS redémarre automatiquement les instances dont l'état n'est pas sain pour maintenir la stabilité du service. Pour plus de détails, consultez la rubrique Health checks.
Activer la mise à l'échelle automatique : Lorsque votre charge de travail présente des fluctuations de trafic importantes, activez la Horizontal auto scaling pour gérer les changements de trafic de manière élastique et rentable.
FAQ
Q : L'extraction de l'image échoue (ImagePullBackOff)
Vérifiez les éléments suivants :
Adresse de l'image : Vérifiez que l'adresse de l'image, le namespace et le tag sont corrects, et que l'image a bien été transférée vers le référentiel.
Espace disque système : Si vous voyez l'erreur
no space left on device, expand the system disk.-
Connectivité réseau :
Utilisation d'un endpoint public : Assurez-vous qu'EAS est configuré avec un VPC ayant accès à Internet et enable public access for ACR. L'extraction inter-régions via Internet est lente et sujette à des échecs.
Utilisation d'un endpoint privé : Pour les scénarios inter-régions, seule ACR Enterprise Edition est prise en charge. Vous devez connecter les VPC. Pour plus de détails, consultez la rubrique Access an ACR Enterprise Edition instance across regions or from an on-premises data center.
Contrôle d'accès ACR : Selon le type d'adresse d'image que vous utilisez, vérifiez si le contrôle d'accès Internet Configure internet access control ou le contrôle d'accès VPC Configure VPC access control est configuré.
Authentification du registre : Si vous utilisez un registre privé nécessitant une authentification (autre qu'ACR sous votre compte), vérifiez que les identifiants dans Image Configuration sont corrects.
Q : Comment utiliser les images ACR entre différentes régions ?
Par défaut, EAS peut extraire des images des référentiels ACR dans la même région via des endpoints privés VPC. Si l'instance ACR et le service EAS se trouvent dans des régions différentes, l'accès direct au réseau privé n'est pas disponible. Utilisez l'une des méthodes suivantes :
Méthode 1 (recommandée) : Créez une instance ACR dans la même région que le service EAS, transférez l'image vers le référentiel local, puis déployez-la. Cela élimine entièrement les problèmes inter-régions.
Méthode 2 : Utilisez CEN (Cloud Enterprise Network) pour connecter les VPC entre les régions pour l'extraction d'images via le réseau privé. Pour plus de détails, consultez la rubrique Access an Enterprise Edition instance across regions or from a data center.
Méthode 3 (tests uniquement) : Extrayez les images via Internet. Activez l'accès public pour ACR et configurez une passerelle NAT avec accès Internet pour le service EAS. Cette méthode est lente et présente des risques de sécurité. Utilisez-la uniquement pour les tests.
Q : Le déploiement d'image personnalisée échoue avec « no match for platform in manifest »
Cette erreur signifie que l'architecture de l'image (par exemple, arm64) ne correspond pas à l'environnement d'exécution de l'instance EAS (généralement amd64/x86_64). EAS ne peut pas exécuter cette image sur le type d'instance sélectionné. Cela se produit souvent lorsque vous construisez une image sur un Mac série M (arm64) et la déployez sur une instance EAS (amd64). Pour résoudre ce problème :
Confirmez l'architecture CPU de l'instance EAS cible (la plupart des instances EAS utilisent
amd64).-
Reconstruisez l'image localement pour qu'elle corresponde à l'architecture de l'instance EAS :
# Build an amd64 image (compatible with most EAS instances) docker build --platform linux/amd64 -t <ACR endpoint>/<namespace>/<repository name>:<tag> . Transférez la nouvelle image vers ACR et redéployez le service.
Q : ACK peut-il se connecter au registre d'images dédié EAS (images officielles PAI) ?
Le registre d'images dédié EAS ne prend pas en charge les connexions ACK directes. ACK ne peut pas extraire d'images du registre d'images dédié EAS.
Pour d'autres questions, consultez la rubrique EAS FAQ.