Un groupe de mise à l'échelle provisionne automatiquement des instances à la demande pour l'affinage de grands modèles et garantit la continuité de l'entraînement en créant une nouvelle instance et en reprenant l'exécution depuis le dernier point de contrôle lorsqu'une instance à la demande fait l'objet d'une interruption et récupération.
Présentation de la solution
Cette solution applique une stratégie privilégiant les instances à la demande via un groupe de mise à l'échelle et utilise Object Storage Service (OSS) pour persister les points de contrôle. Pendant le processus d'entraînement :
Priorité aux instances à la demande : Le groupe de mise à l'échelle privilégie les instances à la demande pour les tâches d'entraînement et utilise OSS pour stocker les fichiers de point de contrôle.
En cas d'interruption et de récupération d'une instance à la demande : Le groupe de mise à l'échelle tente d'abord de provisionner une instance à la demande à partir de l'inventaire disponible dans d'autres zones de disponibilité. Si l'inventaire d'instances à la demande est insuffisant, il provisionne automatiquement une instance au paiement à l'utilisation et reprend l'entraînement depuis le dernier point de contrôle.
Après la restauration de l'inventaire d'instances à la demande : Le groupe de mise à l'échelle remplace automatiquement l'instance au paiement à l'utilisation par une instance à la demande et reprend l'entraînement depuis le dernier point de contrôle.

Si vous êtes sensible aux coûts et pouvez tolérer des temps d'entraînement plus longs, vous pouvez configurer le groupe de mise à l'échelle pour utiliser uniquement des instances à la demande. Dans cette configuration, l'entraînement est mis en pause lorsque les instances à la demande ne sont pas disponibles et reprend automatiquement lorsque l'inventaire est restauré, maximisant ainsi vos économies de coûts. En savoir plus sur la combinaison de groupes de mise à l'échelle et d'instances à la demande.
Comparaison des coûts
La comparaison des coûts suivante est fournie à titre indicatif uniquement. Les économies réelles peuvent varier en fonction des conditions d'exécution.
Supposons un temps d'entraînement total de 12 heures, un prix d'instance à la demande de 3,5/h et un prix d'instance au paiement à l'utilisation de 10/h. La comparaison des coûts est la suivante.
|
Mode |
Instances à la demande uniquement |
Hybride (à la demande et paiement à l'utilisation) |
Paiement à l'utilisation uniquement |
|
Description |
Lorsqu'une instance à la demande est interrompue et récupérée, l'entraînement est mis en pause. Une nouvelle instance à la demande est lancée automatiquement pour poursuivre l'entraînement après la restauration de la capacité. |
Supposons que sur les 12 heures totales d'entraînement, 8 heures soient effectuées sur des instances à la demande et 4 heures sur des instances au paiement à l'utilisation en raison d'interruptions. |
Tout l'entraînement est effectué sur des instances au paiement à l'utilisation. |
|
Coût |
12h * 3,5/h = 42 |
8h 3,5/h + 4h 10/h = 68 |
12h * 10/h = 120 |
|
Économies par rapport au paiement à l'utilisation uniquement |
65 % |
43,33 % |
0 % |
Procédure
-
Créez une image personnalisée avec l'environnement d'entraînement de base.
Cette image sert d'image de lancement pour les instances du groupe de mise à l'échelle. Elle inclut un script de démarrage qui reprend automatiquement l'entraînement, garantissant que les nouvelles instances peuvent démarrer rapidement la tâche et s'exécuter sans intervention manuelle.
-
Créez et configurez un groupe de mise à l'échelle.
Le groupe de mise à l'échelle crée automatiquement de nouvelles instances à la demande ou au paiement à l'utilisation après une interruption, garantissant la poursuite de la tâche d'entraînement.
-
Démarrez la tâche d'entraînement.
L'activation du groupe de mise à l'échelle déclenche un événement de mise à l'échelle horizontale, créant une instance qui démarre automatiquement la tâche d'entraînement.
-
Simulez une interruption (vérification).
Libérez manuellement une instance pour simuler un scénario d'interruption ou de récupération. Vérifiez qu'une nouvelle instance est lancée et que la tâche d'entraînement reprend automatiquement afin de garantir la stabilité et la fiabilité.
1. Créez une image d'entraînement personnalisée
Cette rubrique explique comment effectuer un affinage par autocognition sur le modèle DeepSeek-R1-Distill-Qwen-7B en utilisant le framework d'entraînement Swift sur une configuration mono-machine et mono-GPU.
Commencez par créer une instance avec l'environnement d'entraînement et les dépendances requis, puis créez une image personnalisée à partir de celle-ci pour servir d'image de lancement du groupe de mise à l'échelle. L'image inclut un script d'entraînement automatique et un service de démarrage au boot pour automatiser le flux de travail. La figure suivante illustre l'architecture.

Les composants clés incluent :
Dépendances de l'environnement d'entraînement de base : Inclut le pilote GPU, CUDA et les dépendances Python pertinentes, qui varient selon le framework d'entraînement.
Script d'entraînement automatique : Ce script doit vérifier automatiquement s'il faut reprendre depuis le dernier point de contrôle et si l'entraînement est terminé.
Montage automatique du bucket au démarrage : Lorsque le script d'entraînement démarre, il lit les poids du modèle, les jeux de données et les fichiers de point de contrôle générés depuis le bucket OSS.
Service de démarrage au boot : Ce service garantit que le script d'entraînement s'exécute automatiquement après le démarrage de l'instance, en lisant les fichiers nécessaires depuis le bucket pour commencer ou poursuivre l'entraînement.
Suivez ces étapes pour créer l'image.
1,1 Créez une instance et configurez l'environnement
Cette instance sert de modèle pour créer une image personnalisée. Par la suite, le groupe de mise à l'échelle utilisera cette image pour créer automatiquement de nouvelles instances.
-
Accédez à la console ECS pour créer une instance GPU.
Commencez par créer une instance GPU au paiement à l'utilisation pour configurer l'environnement de base. Ce tutoriel utilise une instance
ecs.gn7i-c8g1.2xlargedans la zone de disponibilité J de la région Chine (Hangzhou). Configurez l'instance comme suit :1. Billing Method : Paiement à l'utilisation.
② :Region. Chine (Hangzhou).
③④ : Network and Zone. Sélectionnez un VPC et un vSwitch. S'ils n'existent pas, vous pouvez les créer en suivant les instructions à l'écran.
⑤⑥ : Sélectionnez le type d'instance. Sélectionnez
ecs.gn7i-c8g1,2xlarge.⑦⑧⑨ : Images : Ubuntu 22.04 64 bits.
⑩ : Installer automatiquement le pilote GPU. Sélectionnez les versions : CUDA version 12.4.1, Driver version 550.127.08 et CUDNN version 9.2.0.82.
⑪ : . 60 GiB.
⑫⑬⑭ : Attribuer une adresse IPv4 publique pour permettre à l'instance d'accéder à Internet et de télécharger les fichiers de modèle. Pour Bandwidth Billing Method, sélectionnez Pay-by-traffic. Pour Maximum Bandwidth, sélectionnez 100 Mbps.
⑮⑯⑰ : Créez un nouveau groupe de sécurité de base. Ouvrez au moins les ports SSH (TCP : 22) et ICMP (IPv4) pour autoriser les connexions à distance.
⑱⑲⑳ : Logon Credential. Ces identifiants sont utilisés pour se connecter à l'instance. Vous pouvez sélectionner une paire de clés ou un mot de passe. Suivez les invites à l'écran pour terminer la configuration.
21 :Instance Name. Spécifiez un nom pour l'instance afin de faciliter sa mémorisation et sa recherche. Cette rubrique utilise
ess-lora-deepseek7b-templateà titre d'exemple.Une fois la configuration terminée, cliquez sur Confirm Order et attendez la création de l'instance.
-
Une fois l'instance créée, connectez-vous-y et attendez l'installation du pilote GPU.
Accédez à Console ECS - Instances.
-
Recherchez l'instance que vous avez créée à l'étape précédente et cliquez sur Connect dans la colonne Actions. Connectez-vous à l'instance à l'aide de Workbench et connectez-vous comme indiqué.
Si vous ne trouvez pas l'instance, votre région actuelle peut ne pas correspondre à la région de l'instance. Vous pouvez changer de région dans le coin supérieur gauche.
Si l'instance est arrêtée, actualisez la page et attendez qu'elle démarre.
-
Après vous être connecté à l'instance, attendez la fin de l'installation du pilote GPU. Après l'installation, vous serez invité à vous reconnecter.
Si l'interface se fige, essayez d'actualiser la page et de vous reconnecter à l'instance.
Welcome to Alibaba Cloud Elastic Compute Service ! Last login: Tue Mar 18 21:12:39 2025 from xxx % Total % Received % Xferd Average Speed Time Time Current Dload Upload Total Spent Left Speed 100 21 100 21 0 0 875 0 --:--:-- --:--:-- --:--:-- 913 Driver-xxx installing, it takes 0 minutes. Remaining installation time 11 to 15 minutes! [cuda-12.4.1. Installing, it tasks 2 to 5 minutes. Remaining installation time 9 to 12 minutes!
-
Installez les dépendances Python.
Exécutez les commandes suivantes pour installer les dépendances requises pour l'entraînement.
L'image Ubuntu 22.04 64-bit utilisée dans ce tutoriel inclut déjà Python 3.10, donc aucune installation séparée de Python n'est nécessaire.
# The Ubuntu 22.04 image includes Python 3.10, so no extra installation is needed. python3 -m pip install --upgrade pip # Switch to the Alibaba Cloud internal PyPI mirror. pip config set global.index-url http://mirrors.cloud.aliyuncs.com/pypi/simple/ pip install modelscope==1.22.3 pip install openai==1.61.0 pip install tqdm==4.67.1 pip install "vllm>=0.5.1" -U pip install "lmdeploy>=0.5,<0.6.5" -U --no-deps pip install autoawq -U --no-deps pip install auto_gptq optimum bitsandbytes -U pip install ms-swift[all] pip install timm -U pip install deepspeed==0.14.* -U pip install qwen_vl_utils decord librosa pyav icecream -U
En attendant l'installation des dépendances, vous pouvez cliquer sur l'icônedans le coin supérieur droit pour ouvrir un terminal multiple et procéder simultanément à l'étape 1,2.
1,2 Créez et montez un bucket OSS
Créez un bucket dans OSS et montez-le sur l'instance ECS. Ce bucket stocke les fichiers de poids du modèle, les jeux de données et les points de contrôle générés pendant l'entraînement.
-
Accédez à la console OSS pour créer un bucket.
Voici les paramètres de configuration clés. Conservez les valeurs par défaut pour tous les paramètres non mentionnés.
2. Bucket. Vous utiliserez ce nom de bucket lors du montage ultérieur du bucket.
3. Region. Sélectionnez Spécifique à la région. La région doit être la même que celle de l'instance ECS. Dans cet exemple, la région est China (Hangzhou).
Les instances ECS peuvent accéder aux buckets OSS dans la même région via le réseau interne sans frais de trafic. Pour plus d'informations, consultez Accéder aux ressources OSS depuis une instance ECS via un réseau interne.
-
Créez et attachez un rôle RAM.
Un rôle RAM autorise l'instance ECS à accéder à votre bucket OSS. Pour créer et attacher un rôle RAM, suivez ces étapes :
-
Dans la console RAM
Dans la boîte de dialogue de confirmation Select Scaling Configuration, cliquez sur OK.
Dans la boîte de dialogue de confirmation Enable Scaling Group, cliquez sur OK pour activer le groupe de scaling.
-
3. Démarrer la tâche d'entraînement
Une fois le groupe de scaling configuré, ajustez le nombre attendu d'instances à 1.
|
Accédez à la page des détails du groupe de scaling et consultez la section Instance Scaling Overview. Les nombres d'instances actuels sont tous à 0. |
Cliquez sur Modify dans la section Instance Scaling Overview. Activez l'option Expected Number of Instances, définissez la valeur sur 1 et cliquez sur OK. Le groupe de scaling créera automatiquement une instance spot. |
Le groupe de scaling crée alors automatiquement une nouvelle instance et démarre la tâche d'entraînement.
Le groupe de scaling vérifie périodiquement si le nombre d'instances dans le groupe correspond au nombre attendu d'instances. Étant donné que le nombre actuel est de 0, un scale-out est automatiquement déclenché pour créer une nouvelle instance.
Après avoir ajusté le nombre attendu d'instances, il peut y avoir un délai avant la création de l'instance. Vous pouvez consulter les activités en cours dans l'onglet Scaling Activities.
Une fois l'instance créée et démarrée, vous trouverez un dossier
outputdans votre bucket OSS. Ce dossier stocke les fichiers de points de contrôle générés pendant l'entraînement.
4. Simuler une interruption (vérification)
Une fois que l'instance a commencé l'entraînement, vérifiez la présence d'un dossier tel que checkpoint-10 dans le répertoire output de votre bucket OSS. Dès qu'un point de contrôle existe, libérez manuellement l'instance d'entraînement pour simuler une interruption :
-
Libérer manuellement l'instance.
Tout d'abord, accédez à l'onglet Instances du groupe de scaling et cliquez sur l'Instance ID pour accéder à la page Instance Details correspondante.
Sur la page des détails de l'instance, cliquez sur dans le coin supérieur droit et suivez les instructions pour libérer l'instance.
-
Vérifier si l'entraînement reprend à partir du dernier point de contrôle.
Attendez que le groupe de scaling crée une nouvelle instance. Une fois l'instance créée, connectez-vous-y et consultez le journal de la tâche.
Accédez à l'onglet Instances du groupe de scaling et cliquez sur l'Instance ID pour accéder à la page Instance Details correspondante.
Cliquez sur Connect dans le coin supérieur droit et connectez-vous à l'instance comme indiqué.
-
Exécutez la commande suivante pour afficher le journal d'entraînement du modèle. Ce chemin de sortie de journal a été défini pour le service de démarrage automatique à l'étape 1,4.
cat /root/train-service-log/train.logComme vous pouvez le constater, la tâche d'entraînement reprend à partir du dernier point de contrôle.
root@ixxx:~# cat train-service-log/train.log Resume training from: /mnt/oss-data/output/checkpoint-10 run sh: /usr/bin/python3 /usr/local/lib/python3.10/dist-packages/xxx s-data/self-cognition#500 --torch_dtype bfloat16 --num_train_epochs xxx --eval_steps 50 --save_steps 10 --save_total_limit 5 --logging_steps xxx --num_workers 4 --model_author swift --model_name swift-robot --resume xxx
Étapes suivantes
Utiliser le modèle affiné pour l'inférence
Libérer les ressources
Recommandations pour les environnements de production
Adaptez cette solution à la production en fonction de vos besoins métier et des recommandations suivantes.
-
Intégrer CloudMonitor pour la gestion des interruptions
Intégrez CloudMonitor à votre code d'entraînement pour détecter et répondre aux événements d'interruption des instances spot. L'enregistrement d'un point de contrôle cinq minutes avant une interruption réduit la perte de progression lors de la reprise de l'entraînement. L'architecture améliorée est la suivante :

-
Mettre en place un mécanisme de récupération des tâches
Ce tutoriel reprend l'entraînement à partir du dernier point de contrôle sans le valider. En production, mettez en œuvre une détection d'anomalies pour identifier les points de contrôle invalides et reprendre automatiquement à partir du dernier point de contrôle valide.
-
Améliorer le processus de fin de tâche
Ajoutez une logique à votre code d'entraînement pour détecter la fin de la tâche. Une fois la tâche terminée, appelez l'API du groupe de scaling via la CLI ou le SDK pour définir le nombre attendu d'instances à 0. Le groupe de scaling libère alors automatiquement les instances excédentaires, évitant ainsi des coûts inutiles.
De plus, lorsque la tâche est terminée, vous pouvez signaler des événements personnalisés à CloudMonitor. Cela vous permet de recevoir des notifications sur les résultats de l'entraînement par e-mail, SMS ou via un chatbot DingTalk.
-
Utiliser un système de fichiers haute performance
Pour les modèles comportant un grand nombre de paramètres, OSS peut devenir un goulot d'étranglement. Utilisez plutôt un système de fichiers à haut débit et à faible latence tel que CPFS pour améliorer les performances d'E/S.
-
Configurer des vSwitches multi-AZ pour une meilleure disponibilité
Un vSwitch mono-zone limite la création d'instances à une seule zone, ce qui augmente le risque d'échec du scale-out en raison d'une capacité insuffisante. Configurez des vSwitches dans plusieurs zones de disponibilité afin que le système puisse créer des instances dans différentes zones lorsqu'une instance spot est récupérée.