Vai al contenuto principale

Riferimento API - GPU

Questo riferimento dettaglia le API per utilizzare le GPU su Hikube, sia con macchine virtuali che con cluster Kubernetes.


๐Ÿ–ฅ๏ธ GPU con Macchine Virtualiโ€‹

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"

Parametri GPU per VMโ€‹

ParametroTipoDescrizioneRichiesto
gpus[]GPULista delle GPU da collegareโœ…
gpus[].namestringTipo di GPU NVIDIAโœ…

Tipi di GPU Disponibiliโ€‹

# GPU per inferenza e sviluppo
gpus:
- name: "nvidia.com/AD102GL_L40S"

# GPU per addestramento ML
gpus:
- name: "nvidia.com/GA100_A100_PCIE_80GB"

# GPU per LLM e calcolo exascale
gpus:
- name: "nvidia.com/H100_94GB"

Specifiche Hardwareโ€‹

GPUArchitetturaMemoriaPrestazioni
L40SAda Lovelace48 GB GDDR6362 TOPS (INT8)
A100Ampere80 GB HBM2e312 TOPS (INT8)
H100Hopper80 GB HBM31979 TOPS (INT8)

Esempio VM GPU Completoโ€‹

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:
# Driver 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 con CUDA
- pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu121

โ˜ธ๏ธ GPU con Kubernetesโ€‹

API Kubernetes con GPU Workerโ€‹

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"

Parametri GPU per NodeGroupโ€‹

ParametroTipoDescrizioneRichiesto
nodeGroups.<name>.gpus[]GPUGPU per i workerโŒ
gpus[].namestringTipo di GPU NVIDIAโœ…

Configurazione 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"

Utilizzo nei Podโ€‹

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

๐Ÿ“‹ Confronto degli Approcciโ€‹

VM GPU vs Kubernetes GPUโ€‹

AspettoVM GPUKubernetes GPU
Allocazione1 GPU = 1 VM (esclusivo)1+ GPU per worker (condivisibile)
IsolamentoCompleto a livello VMNamespace/Pod
ScalingVerticale (piรน GPU)Orizzontale + Verticale
GestioneManuale tramite YAMLOrchestrata da K8s
CondivisioneNoSi (tra pod)
OverheadMinimoOverhead orchestrazione

Quando utilizzare ciascun approccioโ€‹

VM GPU raccomandata per:โ€‹

  • Applicazioni legacy non containerizzate
  • Necessitร  di accesso diretto e completo alla GPU
  • Sviluppo e prototipazione
  • Workload monolitici
  • Applicazioni grafiche (rendering, CAD)

Kubernetes GPU raccomandato per:โ€‹

  • Applicazioni containerizzate
  • Workload che necessitano scaling automatico
  • Job paralleli e distribuiti
  • Condivisione delle risorse GPU
  • Pipeline ML/AI complesse

๐Ÿ”ง Configurazione Avanzataโ€‹

Multi-GPU su 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 specializzato 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 con GPU specificaโ€‹

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

โœ… Verifica e Monitoraggioโ€‹

Verifica VM GPUโ€‹

# Accedere alla VM
virtctl ssh ubuntu@vm-gpu

# Verificare le GPU
nvidia-smi

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

Verifica Kubernetes GPUโ€‹

# Vedere le risorse GPU sui nodi
kubectl describe nodes

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

# Monitoraggio utilizzo GPU
kubectl top nodes

Monitoraggio GPU in un Podโ€‹

# Exec in un pod con GPU
kubectl exec -it <pod-name> -- nvidia-smi

# Vedere le metriche GPU
kubectl exec -it <pod-name> -- nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv -l 5

๐Ÿ’ก Buone Praticheโ€‹

Per VM GPU:โ€‹

  • Utilizzate la storage class replicated per la produzione
  • Dimensionate CPU/RAM in base alla GPU (rapporto 8-16 vCPU per GPU)
  • Installate i driver NVIDIA tramite cloud-init
  • Fermate le VM quando inutilizzate per ottimizzare i costi

Per Kubernetes GPU:โ€‹

  • Configurate resource limits appropriati
  • Utilizzate nodeSelector o nodeAffinity per indirizzare GPU specifiche
  • Implementate PodDisruptionBudget per i workload critici
  • Monitorate l'utilizzo GPU con metriche personalizzate

Generale:โ€‹

  • L40S per inferenza/sviluppo
  • A100 per addestramento ML standard
  • H100 per LLM e calcolo exascale
  • Testate con L40S prima di passare a GPU piรน costose