15. jūlijā Cloud Native Computing Foundation tehniskā pārraudzības komiteja nobalsoja par HAMi pārcelšanu no smilškastes uz inkubācijas līmeni. HAMi ļauj Kubernetes klasterī sadalīt vienu fizisku GPU vairākos gabalos — pēc videoatmiņas megabaitiem un skaitļošanas procentiem — un katru podu ierobežot tā, lai tas redz un patērē tikai savu daļu. Lietojumprogrammas kods nav jāmaina.
Projekts CNCF smilškastē nonāca 2024. gada 21. augustā. Divdesmit divus mēnešus vēlāk tas ir vienā maturitātes līmenī ar tādiem projektiem kā Argo un Cilium, tas ir, ar pierādītu kodu un reālu ražošanas slodzi aiz muguras. Iemesls, kāpēc tas interesē platformas komandas: GPU ir dārgākais un visvairāk pieprasītais resurss AI infrastruktūrā, un līdz šim Kubernetes vienu karti atdeva veselu vienam podam arī tad, ja darbam pietiktu ar ceturto daļu atmiņas.
Problēma, ko HAMi risina
Kubernetes noklusētais GPU plānotājs strādā ar veselām ierīcēm. Ja podam vajag vienu nvidia.com/gpu, tas dabū pilnu karti, un pārējie podi to vairs neredz. Inferences serverim ar nelielu modeli var pietikt ar 2 GB videoatmiņas no 80 GB, bet atlikušie 78 GB stāv dīkā, kamēr blakus podi gaida rindā.
HAMi vietā sadala vienu GPU — vai arī NPU, DCU, MLU un citus paātrinātājus — pēc atmiņas, kodoliem vai ierīču skaita. NVIDIA kartes ir atbalstītas jau tagad; AMD Mi sērija un PPU vēl top. Sadalīšana notiek plānotāja līmenī, tāpēc esošie manifesti un konteineri paliek neskarti. Mainās tikai resursu pieprasījums poda specifikācijā.
Kā darbojas izolācija
Sadalīšanas serde ir HAMi-core — dinamiska bibliotēka libvgpu.so, ko HAMi ievieto konteinerā ierīces piešķiršanas brīdī. Bibliotēka pārraksta dlsym un pārtver visus izsaukumus, kas sākas ar cu un nvml. HAMi tādējādi iejaucas starp konteineru un draiveri, neprasot izmaiņas ne dzinī, ne CUDA, ne pašā lietojumprogrammā.
Atmiņas robežu HAMi-core uztur, pārtverot cuMemAlloc: pirms katras piešķiršanas tas pārbauda, vai poda esošais patēriņš plus jaunais pieprasījums nepārsniedz CUDA_DEVICE_MEMORY_LIMIT, un pārsnieguma gadījumā atdod CUDA_ERROR_OUT_OF_MEMORY. Vēl viena pārtverta funkcija ir nvmlDeviceGetMemoryInfo, tāpēc nvidia-smi konteinerā rāda tikai piešķirto kvotu, nevis visu kartes atmiņu. Skaitļošanas robežu uztur atsevišķs fona pavediens, kas pārtver cuLaunchKernel un ar globālu skaitītāju ierobežo kodolu palaišanu; pavediens periodiski nolasa reālo GPU noslodzi un piekoriģē tempu, lai patēriņš turētos ap norādīto procentu.
Kā to pieprasa podā
Sadalīšanu pieprasa ar trim resursu nosaukumiem poda specifikācijā:
nvidia.com/gpu: 1— viens loģiskais GPU slots;nvidia.com/gpumem: 1024— 1024 MiB videoatmiņas;nvidia.com/gpucores: 30— 30% skaitļošanas jaudas.
Ar šādu pieprasījumu uz vienas 80 GB kartes vienlaikus var strādāt desmitiem podu, katram savs cietais atmiņas griests. Plānotājs izvieto podus pēc trim politikām: binpack sablīvē slodzi uz pēc iespējas mazāk kartēm, spread to izklaidē, bet topoloģijas politika ņem vērā, kuras kartes savā starpā ir ātri savienotas.
Kāpēc ne MIG vai time-slicing
NVIDIA piedāvā savu sadalīšanu — Multi-Instance GPU jeb MIG. Tā sagriež karti līdz septiņām aparatūriski izolētām instancēm ar īstu atmiņas un joslas platuma nodalīšanu, taču strādā tikai uz datu centru kartēm, sākot ar A100 un H100, un profili ir fiksēta izmēra. Uz parastas darbstacijas kartes MIG nav pieejams.
Otra izplatītā pieeja ir time-slicing, ko sniedz NVIDIA ierīču spraudnis. Tas laiž podus pie kartes pēc kārtas, bet nedod nekādu atmiņas izolāciju: viens pods var aizņemt visu videoatmiņu un ar OOM kļūdu nogāzt blakus podus. HAMi vietā uzliek programmatūrisku, bet cietu atmiņas griestu un strādā arī uz vecākām un lētākām kartēm, kur MIG nav. Cena par to ir CUDA slāņa pārtveršana, kas pievieno nelielu izsaukuma virstēriņu.
Kas to jau lieto
HAMi GitHub repozitorijam ir ap 3500 zvaigžņu un vairāk nekā 2600 līdzautoru; projekts izlaidis 16 versijas, jaunākā stabilā ir v2.9.0. Lielākais publiski zināmais lietotājs ir DaoCloud, kas HAMi darbina uz vairāk nekā 10 000 GPU desmit un vairāk datu centros Ķīnā un Honkongā. Starp lietotājiem ir arī China Merchants Bank. Uzturētāju vidū ir cilvēki no dynamia.ai un NVIDIA, kā arī neatkarīgi līdzautori.
„HAMi atrisina reālu problēmu: paātrinātāju resursu plānošanu un koplietošanu Kubernetes vidē tā, lai tas strādā dažādu ražotāju dzelžiem,” saka Karena Angell, CNCF tehniskās pārraudzības komitejas sponsore.
Nākamais solis inkubācijas projektam ir CNCF absolventa statuss, ko līdz šim sasnieguši nedaudzi projekti, sākot ar Kubernetes. HAMi ceļam uz turieni vēl trūkst plašāka neatkarīga audita un lielāka ražotāju loka — AMD Mi sērijas un PPU atbalsts pagaidām ir izstrādes stadijā.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.