Aller au contenu principal
Version: 2.0.2

API Reference - GPU

Cette référence détaille les APIs pour utiliser les GPU sur Hikube, que ce soit avec des machines virtuelles ou des clusters Kubernetes.


🖥️ GPU avec Machines Virtuelles

API VirtualMachine

apiVersion: apps.cozystack.io/v1alpha1
kind: VirtualMachine
metadata:
name: vm-gpu
spec:
running: true
instanceProfile: ubuntu
instanceType: u1.xlarge
gpus:
- name: "nvidia.com/AD102GL_L40S"

Paramètres GPU pour VM

ParamètreTypeDescriptionRequis
gpus[]GPUListe des GPUs à attacher
gpus[].namestringType de GPU NVIDIA

Types de GPU Disponibles

# GPU pour inférence et développement
gpus:
- name: "nvidia.com/AD102GL_L40S"

# GPU pour entraînement ML
gpus:
- name: "nvidia.com/GA100_A100_PCIE_80GB"

# GPU pour LLM et calcul exascale
gpus:
- name: "nvidia.com/H100_94GB"

Spécifications Hardware

GPUArchitectureMémoirePerformance
L40SAda Lovelace48 GB GDDR6362 TOPS (INT8)
A100Ampere80 GB HBM2e312 TOPS (INT8)
H100Hopper80 GB HBM31979 TOPS (INT8)

Exemple VM GPU Complet

apiVersion: apps.cozystack.io/v1alpha1
kind: VirtualMachine
metadata:
name: ai-workstation
spec:
running: true
instanceProfile: ubuntu
instanceType: u1.2xlarge # 8 vCPU, 32 GB RAM
gpus:
- name: "nvidia.com/GA100_A100_PCIE_80GB"
systemDisk:
size: 200Gi
storageClass: replicated
external: true
externalMethod: PortList
externalPorts:
- 22
- 8888 # Jupyter
cloudInit: |
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL

packages:
- python3-pip
- build-essential

runcmd:
# Pilotes NVIDIA
- wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
- dpkg -i cuda-keyring_1.0-1_all.deb
- apt-get update
- apt-get install -y cuda-toolkit nvidia-driver-535

# PyTorch avec CUDA
- pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu121

☸️ GPU avec Kubernetes

API Kubernetes avec GPU Workers

apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: cluster-gpu
spec:
controlPlane:
replicas: 1

nodeGroups:
gpu-workers:
minReplicas: 1
maxReplicas: 5
instanceType: "u1.xlarge"
ephemeralStorage: 100Gi
gpus:
- name: "nvidia.com/AD102GL_L40S"

Paramètres GPU pour NodeGroups

ParamètreTypeDescriptionRequis
nodeGroups.<name>.gpus[]GPUGPUs pour les workers
gpus[].namestringType de GPU NVIDIA

Configuration Multi-GPU

nodeGroups:
gpu-intensive:
minReplicas: 1
maxReplicas: 2
instanceType: "u1.4xlarge" # 16 vCPU, 64 GB RAM
gpus:
- name: "nvidia.com/GA100_A100_PCIE_80GB"
- name: "nvidia.com/GA100_A100_PCIE_80GB"
- name: "nvidia.com/GA100_A100_PCIE_80GB"
- name: "nvidia.com/GA100_A100_PCIE_80GB"

Utilisation dans les Pods

apiVersion: v1
kind: Pod
metadata:
name: ml-training
spec:
containers:
- name: trainer
image: pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
resources:
limits:
nvidia.com/gpu: 1
requests:
nvidia.com/gpu: 1
command:
- python
- train.py

Job Multi-GPU

apiVersion: batch/v1
kind: Job
metadata:
name: distributed-training
spec:
template:
spec:
containers:
- name: trainer
image: pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
resources:
limits:
nvidia.com/gpu: 4
requests:
nvidia.com/gpu: 4
env:
- name: CUDA_VISIBLE_DEVICES
value: "0,1,2,3"
restartPolicy: Never

📋 Comparaison des Approches

VM GPU vs Kubernetes GPU

AspectVM GPUKubernetes GPU
Allocation1 GPU = 1 VM (exclusif)1+ GPU par worker (partageable)
IsolationComplète au niveau VMNamespace/Pod
ScalingVertical (plus de GPUs)Horizontal + Vertical
GestionManuelle via YAMLOrchestrée par K8s
PartageNonOui (entre pods)
OverheadMinimalOverhead orchestration

Quand utiliser chaque approche

VM GPU recommandée pour :

  • Applications legacy non-containerisées
  • Besoin d'accès direct et complet au GPU
  • Développement et prototypage
  • Workloads monolithiques
  • Applications graphiques (rendu, CAO)

Kubernetes GPU recommandé pour :

  • Applications containerisées
  • Workloads nécessitant du scaling automatique
  • Jobs parallèles et distribués
  • Partage de ressources GPU
  • Pipelines ML/AI complexes

🔧 Configuration Avancée

Multi-GPU sur VM

apiVersion: apps.cozystack.io/v1alpha1
kind: VirtualMachine
metadata:
name: multi-gpu-vm
spec:
instanceType: u1.8xlarge # 32 vCPU, 128 GB RAM
gpus:
- name: "nvidia.com/H100_94GB"
- name: "nvidia.com/H100_94GB"
- name: "nvidia.com/H100_94GB"
- name: "nvidia.com/H100_94GB"

NodeGroup spécialisé GPU

nodeGroups:
gpu-inference:
minReplicas: 2
maxReplicas: 10
instanceType: "u1.large"
gpus:
- name: "nvidia.com/AD102GL_L40S"

gpu-training:
minReplicas: 1
maxReplicas: 3
instanceType: "u1.4xlarge"
gpus:
- name: "nvidia.com/GA100_A100_PCIE_80GB"
- name: "nvidia.com/GA100_A100_PCIE_80GB"

Pod avec GPU spécifique

apiVersion: v1
kind: Pod
metadata:
name: specific-gpu-pod
spec:
nodeSelector:
gpu-type: "L40S"
containers:
- name: app
image: nvidia/cuda:12.0-runtime-ubuntu20.04
resources:
limits:
nvidia.com/gpu: 1

✅ Vérification et Monitoring

Vérification VM GPU

# Accéder à la VM
virtctl ssh ubuntu@vm-gpu

# Vérifier les GPU
nvidia-smi

# Test CUDA
nvidia-smi --query-gpu=name,memory.total,utilization.gpu --format=csv

Vérification Kubernetes GPU

# Voir les ressources GPU sur les nodes
kubectl describe nodes

# Vérifier l'allocation GPU
kubectl get nodes -o custom-columns=NAME:.metadata.name,GPU:.status.allocatable.'nvidia\.com/gpu'

# Monitoring utilisation GPU
kubectl top nodes

Monitoring GPU dans un Pod

# Exec dans un pod avec GPU
kubectl exec -it <pod-name> -- nvidia-smi

# Voir les métriques GPU
kubectl exec -it <pod-name> -- nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv -l 5

💡 Bonnes Pratiques

Pour VM GPU :

  • Utilisez replicated storage class pour la production
  • Dimensionnez le CPU/RAM selon le GPU (ratio 8-16 vCPU par GPU)
  • Installez les pilotes NVIDIA via cloud-init
  • Arrêtez les VMs quand inutilisées pour optimiser les coûts

Pour Kubernetes GPU :

  • Configurez des resource limits appropriées
  • Utilisez nodeSelector ou nodeAffinity pour cibler des GPU spécifiques
  • Implémentez des PodDisruptionBudgets pour les workloads critiques
  • Surveillez l'utilisation GPU avec des métriques personnalisées

Générale :

  • L40S pour inférence/développement
  • A100 pour entraînement ML standard
  • H100 pour LLM et calcul exascale
  • Testez avec L40S avant de passer aux GPU plus coûteux