Installez les composants d’IA/ML, surveillez les ressources GPU et gérez les quotas des équipes sur des clusters ACK Pro.
Trois tâches principales : installer la suite, consulter les tableaux de bord des ressources et gérer les utilisateurs et les quotas grâce à la planification de capacité.
Prérequis
Avant de commencer :
Un cluster ACK Pro exécutant Kubernetes 1.18 ou une version ultérieure
Le module complémentaire de surveillance et le service Simple Log Service activés sur la page Component Configurations lors de la création du cluster
Concepts clés
Périmètre de sécurité
Kubernetes est un orchestrateur mono-locataire : un seul plan de contrôle dessert tous les locataires d’un cluster. Le cluster constitue la seule frontière de sécurité stricte. Les arborescences de quotas, les groupes d’utilisateurs et les namespaces offrent des garde-fous organisationnels et une isolation logique, mais ne garantissent pas le même niveau de sécurité qu’une séparation au niveau du cluster. Concevez votre architecture multi-locataire en conséquence.
Fonctionnement de la planification de capacité
Chaque nœud de quota dans une arborescence de quotas dispose de deux paramètres :
Min : les ressources minimales garanties que le namespace peut toujours revendiquer, même lorsque le cluster est sous pression
Max : les ressources maximales que le namespace peut utiliser lorsque de la capacité inutilisée est disponible
Les autres namespaces peuvent emprunter la capacité inutilisée jusqu’à leur limite Max. Lorsque le namespace propriétaire a besoin de récupérer son minimum, le planificateur reprend les ressources en tenant compte de la priorité des charges de travail, de leur disponibilité et de leur heure de création.
Objets de ressource
| Objet | Rôle |
|---|---|
| Arborescence de quotas | Structure hiérarchique d’allocation des ressources |
| Nœud de quota | Un nœud dans l’arborescence ; chaque nœud feuille correspond à un ou plusieurs namespaces |
| Groupe d’utilisateurs | La plus petite unité d’allocation ; correspond à un nœud de quota feuille |
| Utilisateur | Détient un compte de service Kubernetes pour soumettre des jobs et accéder à la console |
| Namespace | Namespace Kubernetes lié à un nœud de quota feuille |
Rôles utilisateur
| Rôle | Autorisations |
|---|---|
| admin | Se connecter au tableau de bord IA, gérer les composants du cluster et disposer de toutes les autorisations des chercheurs |
| researcher | Soumettre des jobs, utiliser les ressources du cluster, se connecter à la console de développement IA |
Étape 1 : Installer la suite cloud-native pour l’IA
La suite comprend six catégories de composants — installez uniquement ceux dont vos charges de travail ont besoin. Arena est sélectionné par défaut et est requis.
| Catégorie de composant | Objectif | Installation séparée ? |
|---|---|---|
| Élasticité des tâches | Mettre à l’échelle dynamiquement les charges de travail IA | Non |
| Accélération des données | Accélérer l’accès aux jeux de données | Non |
| Planification des tâches IA | Planifier les charges de travail IA avec des politiques conscientes de la capacité | Non |
| Gestion du cycle de vie des tâches IA | Gérer les cycles de vie des jobs d’entraînement | Non |
| Tableau de bord IA | Surveiller les ressources GPU et les quotas | Oui (nécessite des autorisations RAM) |
| Console de développement IA | Soumettre et gérer des jobs IA | Oui (nécessite des autorisations RAM) |
Déployer la suite
Connectez-vous à la console ACK et cliquez sur Clusters dans le volet de navigation de gauche.
Cliquez sur le nom du cluster, puis choisissez Applications > Cloud-native AI Suite dans le volet de gauche.
Cliquez sur Deploy.
Sélectionnez les composants et cliquez sur Deploy Cloud-native AI Suite. Le système vérifie les dépendances avant le déploiement. Après l’installation, la liste Components vous permet de Deploy, Upgrade ou Uninstall des composants individuels.
-
Après avoir installé
ack-ai-dashboardetack-ai-dev-console, des liens vers AI Dashboard et AI Developer Console apparaissent sur la page Cloud-native AI Suite.
Configurer le tableau de bord IA
Depuis le 22 janvier 2025, la console IA (tableau de bord IA et console de développement IA) nécessite un accès via liste d’autorisation. Les déploiements effectués avant cette date ne sont pas concernés. Les utilisateurs non inclus dans la liste d’autorisation peuvent utiliser la console IA open source à la place.
Accorder des autorisations RAM au rôle worker
Avant que le tableau de bord IA puisse accéder aux données du cluster, associez une politique RAM personnalisée au rôle worker du cluster.
-
Créez une politique personnalisée.
Connectez-vous à la console RAM et choisissez Permissions > Policies dans le volet de navigation de gauche.
-
Cliquez sur Create Policy, sélectionnez l’onglet JSON et ajoutez la politique suivante :
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cs:*", "log:GetProject", "log:GetLogStore", "log:GetConfig", "log:GetMachineGroup", "log:GetAppliedMachineGroups", "log:GetAppliedConfigs", "log:GetIndex", "log:GetSavedSearch", "log:GetDashboard", "log:GetJob", "ecs:DescribeInstances", "ecs:DescribeSpotPriceHistory", "ecs:DescribePrice", "eci:DescribeContainerGroups", "eci:DescribeContainerGroupPrice", "log:GetLogStoreLogs", "ims:CreateApplication", "ims:UpdateApplication", "ims:GetApplication", "ims:ListApplications", "ims:DeleteApplication", "ims:CreateAppSecret", "ims:GetAppSecret", "ims:ListAppSecretIds", "ims:ListUsers" ], "Resource": "*" } ] } Nommez la politique
k8sWorkerRolePolicy-{ClusterID}et cliquez sur OK.
-
Associez la politique au rôle worker du cluster.
Dans la console RAM, choisissez Identities > Roles et recherchez
KubernetesWorkerRole-{ClusterID}.Cliquez sur Grant Permission.
Dans Select Policy, cliquez sur Custom Policy, recherchez
k8sWorkerRolePolicy-{ClusterID}, sélectionnez-la et cliquez sur OK.
Finaliser la configuration du tableau de bord IA
-
Sur la page Cloud-native AI Suite, sélectionnez Sample Console pour Interaction Mode. Une boîte de dialogue Note s’affiche.
Si Authorized s’affiche, passez à l’étape 3.
Si Unauthorized apparaît en rouge, complétez les autorisations RAM ci-dessus et cliquez sur Authorization Check. Après l’autorisation, Authorized s’affiche.

Définissez Console Data Storage : Pre-installed MySQL pour les tests ou ApsaraDB RDS pour la production. Consultez la section Installer et configurer le tableau de bord IA et la console de développement IA.
Cliquez sur Deploy Cloud-native AI Suite. Le tableau de bord IA est prêt lorsque son statut indique Ready.
(Facultatif) Créer et accélérer un jeu de données
Montez des jeux de données depuis Object Storage Service (OSS) en tant que volumes persistants (PV) et accélérez l’accès dans le tableau de bord IA.
Créer un PV et un PVC
-
Créez un namespace :
kubectl create ns demo-ns -
Créez un fichier nommé
fashion-mnist.yaml:Espace réservé Description Exemple fashion-mnistNom du bucket OSS my-dataset-bucket oss-cn-beijing.aliyuncs.comEndpoint OSS pour la région du bucket oss-cn-hangzhou.aliyuncs.com AKIDAccessKey ID LTAI5tXxx AKSECRETSecret AccessKey xXxXxXx apiVersion: v1 kind: PersistentVolume metadata: name: fashion-demo-pv spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: ossplugin.csi.alibabacloud.com volumeAttributes: bucket: fashion-mnist otherOpts: "-o max_stat_cache_size=0 -o allow_other" url: oss-cn-beijing.aliyuncs.com akId: "AKID" akSecret: "AKSECRET" volumeHandle: fashion-demo-pv persistentVolumeReclaimPolicy: Retain storageClassName: oss volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fashion-demo-pvc namespace: demo-ns spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi selector: matchLabels: alicloud-pvname: fashion-demo-pv storageClassName: oss volumeMode: Filesystem volumeName: fashion-demo-pvRemplacez ces espaces réservés :
-
Appliquez le manifeste :
kubectl create -f fashion-mnist.yaml -
Vérifiez que le PV et le PVC sont liés :
kubectl get pv fashion-demo-pv kubectl get pvc fashion-demo-pvc -n demo-nsSortie attendue pour le PV :
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGE fashion-demo-pv 10Gi RWX Retain Bound demo-ns/fashion-demo-pvc oss 8hSortie attendue pour le PVC :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fashion-demo-pvc Bound fashion-demo-pv 10Gi RWX oss 8h
Accelerate the dataset
Connectez-vous au tableau de bord IA en tant qu’administrateur.
Choisissez Dataset > Dataset List dans le volet de navigation de gauche.
-
Recherchez le jeu de données (
fashion-demo-pvc) et cliquez sur Accelerate dans la colonne Actions.
Étape 2 : Consulter les tableaux de bord des ressources
Le tableau de bord IA propose quatre vues, chacune couvrant un aspect différent de l’état des ressources GPU.
La restriction d’accès via liste d’autorisation de la console IA s’applique ici. Les utilisateurs non inclus dans la liste d’autorisation peuvent accéder aux tableaux de bord via la console IA open source.
Tableau de bord du cluster
Le tableau de bord IA ouvre par défaut le tableau de bord du cluster, affichant l’état global des GPU et leur allocation dans le cluster.
| Métrique | Ce qu’elle indique |
|---|---|
| GPU Summary Of Cluster | Total des nœuds GPU, nœuds GPU alloués, nœuds GPU défectueux |
| Total GPU Nodes | Nombre total de nœuds accélérés par GPU |
| Unhealthy GPU Nodes | Nœuds GPU présentant des problèmes détectés |
| GPU Memory (Used/Total) | Mémoire GPU utilisée / mémoire GPU totale |
| GPU Memory (Allocated/Total) | Mémoire GPU allouée / mémoire GPU totale |
| GPU Utilization | Utilisation moyenne des GPU à l’échelle du cluster |
| GPUs (Allocated/Total) | GPU alloués / GPU totaux |
| Training Job Summary Of Cluster | Jobs d’entraînement par statut : Running, Pending, Succeeded, Failed |
GPU Utilization indique si le GPU a exécuté une charge de travail pendant la fenêtre d’échantillonnage, et non son efficacité. Un nœud à 100 % peut exécuter des noyaux légers plutôt que des charges de travail parallèles intensives. Combinez cette métrique avec GPU Memory (Used/Total) pour obtenir une image plus complète.
Tableau de bord des nœuds
Cliquez sur Nodes dans le coin supérieur droit de la page Cluster pour afficher les métriques GPU par nœud et par dispositif GPU.
| Métrique | Ce qu’elle indique |
|---|---|
| GPU Node Details | Tableau par nœud : nom, IP, rôle, mode GPU (exclusif ou partagé), nombre de GPU, mémoire GPU totale, GPU alloués, mémoire GPU allouée, mémoire GPU utilisée, utilisation moyenne des GPU |
| GPU Duty Cycle | Utilisation par dispositif GPU et par nœud |
| GPU Memory Usage | Mémoire utilisée par dispositif GPU et par nœud |
| GPU Memory Usage Percentage | Pourcentage d’utilisation de la mémoire par GPU et par nœud |
| Allocated GPUs Per Node | GPU alloués par nœud |
| GPU Number Per Node | Nombre total de GPU par nœud |
| Total GPU Memory Per Node | Mémoire GPU totale par nœud |
Tableau de bord des jobs d’entraînement
Cliquez sur TrainingJobs dans le coin supérieur droit de la page Nodes pour afficher la consommation de ressources et l’efficacité des GPU par job.
| Métrique | Ce qu’elle indique |
|---|---|
| Training Jobs | Tableau par job : namespace, nom, type, statut, durée, GPU demandés, mémoire GPU demandée, mémoire GPU utilisée, utilisation moyenne des GPU |
| Job Instance Used GPU Memory | Mémoire GPU utilisée par instance de job |
| Job Instance Used GPU Memory Percentage | Pourcentage de mémoire GPU utilisée par instance de job |
| Job Instance GPU Duty Cycle | Utilisation des GPU par instance de job |
Tableau de bord des quotas de ressources
Cliquez sur Quota dans le coin supérieur droit de la page Training Jobs pour afficher la consommation de quotas par type de ressource (CPU, mémoire, nvidia.com/gpu, aliyun.com/gpu-mem, aliyun.com/gpu).
| Colonne | Ce qu’elle indique |
|---|---|
| Elastic Quota Name | Nom du groupe de quotas |
| Namespace | Namespace auquel le quota s’applique |
| Resource Name | Type de ressource |
| Max Quota | Ressources maximales disponibles |
| Min Quota | Minimum garanti, honoré sous pression du cluster |
| Used Quota | Ressources actuellement utilisées |
Étape 3 : Gérer les utilisateurs et les quotas
La suite cloud-native pour l’IA utilise une arborescence de quotas pour appliquer des limites hiérarchiques de ressources et partager les ressources entre les équipes.

La structure organisationnelle correspond à l’arborescence de quotas :

Chaque département ou équipe correspond à une branche de l’arborescence de quotas ; les nœuds feuilles sont liés aux namespaces. Définir Min et Max à chaque niveau permet aux équipes de partager les ressources inutilisées tout en garantissant des allocations minimales.
Les arborescences de quotas et les contrôles au niveau des namespaces offrent des garde-fous organisationnels, et non des frontières de sécurité strictes. Pour une isolation forte des locataires, utilisez des clusters distincts. Consultez la note sur le périmètre de sécurité dans Concepts clés .
Configurer une arborescence de quotas
-
Créez des namespaces pour chaque équipe. Les namespaces existants ne doivent contenir aucun pod en cours d’exécution avant d’être associés à un nœud de quota.
kubectl create ns namespace1 kubectl create ns namespace2 kubectl create ns namespace3 kubectl create ns namespace4 Dans le tableau de bord IA, créez des nœuds de quota et associez chaque nœud feuille à un namespace. Définissez Min et Max pour chaque nœud.
Créer des utilisateurs et des groupes d’utilisateurs
Un utilisateur peut appartenir à plusieurs groupes, et un groupe peut contenir plusieurs utilisateurs. Associez les utilisateurs aux groupes pour leur accorder l’accès aux ressources allouées.
Créez un utilisateur. Consultez la section Générer le fichier kubeconfig et le jeton de connexion pour un nouvel utilisateur.
Créez un groupe d’utilisateurs. Consultez la section Ajouter un groupe d’utilisateurs.
Exemple de planification de capacité
Cet exemple montre comment le planificateur partage et reprend les ressources CPU entre quatre namespaces. L’arborescence de quotas présente la structure suivante :

Configuration des quotas :
| Nœud de quota | Min (cœurs CPU) | Max (cœurs CPU) |
|---|---|---|
| root | 40 | 40 |
| root.a | 20 | 40 |
| root.b | 20 | 40 |
| root.a.1 | 10 | 20 |
| root.a.2 | 10 | 20 |
| root.b.1 | 10 | 20 |
| root.b.2 | 10 | 20 |
Parcours :
Sans quotas élastiques, chaque namespace feuille utilise uniquement son Min (10 cœurs = 2 pods à 5 cœurs/pod). Avec des quotas élastiques et 40 cœurs de cluster disponibles, les namespaces empruntent la capacité inutilisée jusqu’à leur Max.
Étape 1 : Déployez cinq pods dans namespace1, chacun demandant 5 cœurs CPU (25 cœurs au total).
Avec root.a.1 Max défini sur 20 cœurs, 4 pods s’exécutent (20 cœurs). Le cinquième pod reste en état Pending.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx1
namespace: namespace1
labels:
app: nginx1
spec:
replicas: 5
selector:
matchLabels:
app: nginx1
template:
metadata:
name: nginx1
labels:
app: nginx1
spec:
containers:
- name: nginx1
image: nginx
resources:
limits:
cpu: 5
requests:
cpu: 5
Étape 2 : Déployez cinq pods dans namespace2, chacun demandant 5 cœurs CPU.
Avec 20 cœurs restants (40 - 20 de namespace1), 4 pods s’exécutent. Le cinquième reste en état Pending. namespace1 et namespace2 consomment désormais tous les 40 cœurs racine.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx2
namespace: namespace2
labels:
app: nginx2
spec:
replicas: 5
selector:
matchLabels:
app: nginx2
template:
metadata:
name: nginx2
labels:
app: nginx2
spec:
containers:
- name: nginx2
image: nginx
resources:
limits:
cpu: 5
requests:
cpu: 5
Étape 3 : Déployez cinq pods dans namespace3, chacun demandant 5 cœurs CPU.
Aucune capacité inutilisée ne reste. Le planificateur reprend 10 cœurs de root.a pour garantir le minimum de root.b.1. Il reprend 5 cœurs de root.a.1 (réduisant namespace1 de 4 pods en cours d’exécution à 3) et 5 cœurs de root.a.2 (réduisant namespace2 de 4 pods en cours d’exécution à 3). Avec 10 cœurs récupérés, 2 pods s’exécutent dans namespace3.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx3
namespace: namespace3
labels:
app: nginx3
spec:
replicas: 5
selector:
matchLabels:
app: nginx3
template:
metadata:
name: nginx3
labels:
app: nginx3
spec:
containers:
- name: nginx3
image: nginx
resources:
limits:
cpu: 5
requests:
cpu: 5
Étape 4 : Déployez cinq pods dans namespace4, chacun demandant 5 cœurs CPU.
Le planificateur reprend 10 autres cœurs de root.a pour garantir le minimum de root.b.2 : 5 cœurs de root.a.1 et 5 de root.a.2. Après la reprise, namespace1 et namespace2 disposent chacun de 2 pods en cours d’exécution (10 cœurs), et namespace4 obtient 2 pods en cours d’exécution.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx4
namespace: namespace4
labels:
app: nginx4
spec:
replicas: 5
selector:
matchLabels:
app: nginx4
template:
metadata:
name: nginx4
labels:
app: nginx4
spec:
containers:
- name: nginx4
image: nginx
resources:
limits:
cpu: 5
requests:
cpu: 5
Résultat :
| Namespace | Nœud de quota | Pods en cours d’exécution | Cœurs CPU utilisés |
|---|---|---|---|
| namespace1 | root.a.1 | 2 | 10 |
| namespace2 | root.a.2 | 2 | 10 |
| namespace3 | root.b.1 | 2 | 10 |
| namespace4 | root.b.2 | 2 | 10 |
La garantie minimale de chaque équipe a été honorée. La capacité empruntée a été reprise lorsque les autres équipes ont eu besoin de récupérer leurs minimums.