Пренос ГПУ меморије високих перформанси на AWS Sagemaker Hyperpod
Пут до 3200 Gbps
Модерна инфраструктура дубогг учења често захтева пренос великих количин података између ГПУ-а на различитим машинама. У компанији Perplexity сусрели смо се са јединственим техничким изазовом: ефикасним преносом неконтигуалних региона ГПУ меморије између машина максималном могућом брзином. Наша циљна платформа, AWS p5 инстанце, нуди импресивних 3200 Gbps мрежног пропусног опсега кроз 32 мрежне картице. Овај чланак дели наше путовање изградње прилагођеног мрежног решења високих перформанси које постиже 97,1% овог теоретског пропусног опсега.
Технички изазов
Наш случај употребе је поставио неколико кључних техничких захтева:
- Пренос високе пропусне моћи између удаљених ГПУ-а неконтигуалних меморијских делова
- Могућност динамичког додавања или уклањања чворова из Kubernetes распореда без ометања текућих операција
- Подршка за обрасце комуникације „од тачке до тачке” (peer-to-peer)
Иако је NVIDIA-ина библиотека NCCL де факто стандард за дистрибуирано дубоко учење, није била идеална за наш случај употребе:
- NCCL се истиче у колективној комуникацији али захтева успостављање статичног „света”, што захтева поновно покретање целог кластера приликом подешавања чворова који учествују.
- NCCL-ов синхрони комуникациони модел додаје сложеност за наше асинхроно радно оптерећење
- Желели смо директну контролу над обрасцима преноса меморије ради оптимизације
- Изградња сопственог решења пружила је драгоцене могућности учења
Модерне мреже високих перформанси
Да бисмо разумели наше решење, хајде прво да истражимо како се модерне мреже високих перформанси разликују од традиционалног умрежавања.
Већина мрежа које користимо свакодневно ослања се на TCP/IP протоколе, где апликације комуницирају са мрежном картицом преко језгра оперативног система користећи утичнице (сокете). Међутим, мреже високих перформанси користе RDMA (Remote Direct Memory Access) - потпуно другачији хардверски и софтверски сток који омогућава директан приступ меморији између машина без укључивања процесора (CPU).
AWS пружа Elastic Fabric Adapter (EFA), прилагођени мрежни интерфејс који имплементира Amazon-ов прилагођени протокол који се зове Scalable Reliable Datagram (SRD). За разлику од традиционалног TCP/IP умрежавања где се подаци морају копирати више пута између корисничког простора, простора језгра и мрежних бафера, EFA са RDMA омогућава директан пренос података између ГПУ меморије и мрежне картице, у потпуности заобилазећи CPU.
Филозофија дизајна мрежа високих перформанси
Изградња мрежних система високих перформанси захтева преиспитивање неколико фундаменталних претпоставки:
- Власништво над бафером: За разлику од традиционалних сокета где језгро управља мрежним баферима и захтева копирање између корисничког простора и простора језгра, RDMA захтева да апликације управљају сопственим баферима. Када апликација покрене мрежну операцију, она преноси власништво над бафером на мрежну картицу док се операција не заврши, чиме се елиминише потреба за копирањем података.
- Регистрација меморије: Апликације морају регистровати регионе меморије са језгром оперативног система. Језгро поставља мапирања виртуелних адреса која омогућавају CPU-у, ГПУ-овима и мрежним картицама да сви разумеју исте виртуелне адресе. Ова регистрација је једнократна операција која омогућава накнадне преносе података без копирања.
- Контролна раван наспрам равни података: Мреже високих перформанси деле операције у две категорије:
- Операције контролне равни (као што су подешавање конекције и регистрација меморије) пролазе кроз језгро ради осигурања сигурности
- Операције равни података (стварни пренос података) заобилазе језгро ради максималних перформанси
- Пријем пре преноса: Без бафера којима управља језгро, апликације морају унапред послати операције пријема, одређујући где пристигли подаци треба да буду смештени. Ова фундаментална промена у односу на модел сокета где апликације могу примати податке у било ком тренутку.
- Завршетак заснован на испитивању: Уместо чекања на нотификације језгра кроз механизме као што је
epoll, апликације директно испитују хардверске редове чекања за завршетак. Ово елиминише режим рада системских позива и омогућава тренутну реакцију на завршене операције. - Свест о хардверској топологији: Разумевање и оптимизација за хардверску топологију је кључна за постизање максималних перформанси.
Разумевање хардверске топологије
AWS p5 инстанце имају софистицирану интерну архитектуру. Као што је приказано испод, свака инстанца садржи два CPU подножја која формирају два NUMA чвора, при чему се сваки NUMA чвор повезује са четири PCIe прекидача:
Испод сваког PCIe прекидача налази се:
- Четири 100 Gbps EFA мрежне картице
- Један NVIDIA H100 ГПУ
- Један NVMe SSD
Путање података за TCP/IP и RDMA преносе демонстрирају фундаменталне разлике у њиховим приступима:
Са TCP/IP-ом (лева страна), подаци се морају копирати више пута:
- Из ГПУ меморије у бафер апликације у корисничком простору
- Из бафера корисничког простора у бафер језгра
- Из бафера језгра у мрежну картицу
- Обрнути процес се дешава на страни пријема
Свака операција копирања троши циклусе процесора и пропусни опсег меморије. Апликација такође мора да врши пребацивање контекста између корисничког простора и простора језгра за сваку мрежну операцију.
Супротно томе, RDMA (десна страна) обезбеђује прави пренос података без копирања (zero-copy):
- Мрежна картица чита директно из ГПУ меморије
- Подаци путују директно до удаљене мрежне картице
- Удаљена мрежна картица пише директно у одредишну ГПУ меморију
- Апликација треба само да провери ред чекања за завршетак (CQ) у корисничком простору како би знала када је пренос завршен
Са RDMA-ом и одговарајућим упаривањем хардвера, пренос података између два ГПУ-а захтева само пролазак кроз локални PCIe прекивач и мрежу:
Супротно томе, TCP/IP преноси морају копирати податке више пута кроз главну меморију, узрокујући значајну гужву на PCIe магистрали:
Изградња помоћу libfabric-а
Користили смо libfabric - оквир који пружа генерички интерфејс за мрежне услуге. Наша имплементација користи две врсте RDMA операција:
- Двострани RDMA (SEND/RECV) за контролне поруке које носе метаподатке о регионама меморије (нпр. помераје и величине).
- Једнострани RDMA WRITE за стварни пренос података, где свака WRITE операција обрађује један контигуални меморијски део.
Пут до врхунских перформанси
Наш развој је напредовао кроз неколико фаза:
- Имплементиран основни једносмерни пренос порука коришћењем SEND/RECV
- Проширено на двосмерну комуникацију
- Додат GPUDirect RDMA WRITE за директан ГПУ-ГПУ пренос
- Проширено за руковање вишеструким истовременим преносима
- Уведено чекање у реду операција ради стабилности
- Постигнуто је искоришћење пропусног опсега од 97,4% на једној мрежној картици
При скалирању на 32 мрежне картице, имплементирали смо неколико кључних оптимизација:
- Чекање операција у реду: Уместо директног слања операција мрежним картицама, одржавамо ред чекања на нивоу апликације. Ово пружа отпорност на мрежну загушеност и поједностављује програмски модел.
- Загревање мреже: Претходно успостављање конекција побољшало је перформансе покретања.
- Вишенитне операције: Наменски тредови за мрежне операције сваког ГПУ-а.
- Прикачивање језгра процесора: Везивање тредова за одређена CPU језгра како би се избегли NUMA ефекти и промашаји кеша.
- Шардирање стања: Смањење контенције између тредова.
- Груписање операција: Слање више операција заједно.
- Лијено слање операција: Операције се прво стављају у ред у апликацији. Након провјере завршног реда, покушавамо да пошаљемо оперативне задатке који чекају мрежној картици, чиме се обезбјеђује ефикасно коришћење мрежних ресурса.
- Алокација ресурса свесна NUMA архитектуре: Алоцирајте libfabric ресурсе попут редова чекања за завршетак на тачном NUMA чвору како бисте минимизирали кашњење приступу меморији.
Кроз ове оптимизације постигли смо коначне перформансе од 3.108 Gbps - 97,1% од теоретског максималног пропусног опсега.
Видео испод приказује наш програм из командне линије у акцији. Он преноси неконтигуалне делове ГПУ меморије на удаљени чвор, постижући брзину преноса од 3108,283 Gbps - демонстрирајући искоришћење пропусног опсега мрежне инфраструктуре блиско теоретском:
Закључак
Изградња мрежног система високих перформанси захтева разумевање и хардверске архитектуре и принципа дизајна система. Иако библиотеке попут NCCL пружају одлична решења за уобичајене обрасце, понекад су прилагођена решења неопходна за специфичне захтеве.
Наше путовање показује да је постизање перформанси мреже блиских теоретским могуће уз пажљиву посвећеност архитектури система, хардверској топологији и разним техникама оптимизације. Кључ није само разумевање појединачних компоненти, већ како оне међусобно делују да би чиниле комплетан систем.
Потпуна техничка анализа овог путовања, укључујући детаље имплементације и примере кода, доступна је у нашем репозиторијуму отвореног кода.
Цитирање
@online{perplexity2025HighPerformanceGpuMemoryTransferOnAwsSagemakerHyperpod,
author = {{Perplexity} and Lequn Chen and Phi Hoang},
title = {{High-performance GPU memory transfer on AWS Sagemaker Hyperpod}},
date = {2025-02-10},
url = {https://www.perplexity.ai/hub/blog/high-performance-gpu-memory-transfer-on-aws-sagemaker-hyperpod}
}