AWS Sagemaker Hyperpodలో అధిక-పనితీరు గల GPU మెమరీ బదిలీ
3200 Gbpsకి ప్రయాణం
ఆధునిక డీప్ లెర్నింగ్ ఇన్ఫ్రాస్ట్రక్చర్కు తరచుగా యంత్రాల మధ్య GPUల మధ్య పెద్ద మొత్తంలో డేటాను బదిలీ చేయడం అవసరం. Perplexity వద్ద, మేము ఒక ప్రత్యేకమైన సాంకేతిక సవాలును ఎదుర్కొన్నాము: సాధ్యమైనంత గరిష్ట వేగంతో యంత్రాల మధ్య వరుసగా లేని GPU మెమరీ ప్రాంతాలను సమర్థవంతంగా బదిలీ చేయడం. మా లక్ష్య ప్లాట్ఫారమ్, AWS p5 ఇన్స్టాన్సెస్, 32 నెట్వర్క్ కార్డ్ల ద్వారా 3200 Gbps నెట్వర్క్ బ్యాండ్విడ్త్ను అందిస్తుంది. ఈ వ్యాసం ఈ సైద్ధాంతిక బ్యాండ్విడ్త్లో 97.1% సాధించే అనుకూల అధిక-పనితీరు గల నెట్వర్కింగ్ పరిష్కారాన్ని రూపొందించడంలో మా ప్రయాణాన్ని పంచుకుంటుంది.
సాంకేతిక సవాలు
మా ఉపయోగం అనేక ముఖ్యమైన సాంకేతిక అవసరాలను అందించింది:
- పరస్పరం అనుసంధానించని మెమరీ భాగాలను రిమోట్ GPUల మధ్య హై-బ్యాండ్విడ్త్ బదిలీ
- కొనసాగుతున్న కార్యకలాపాలకు అంతరాయం కలిగించకుండా కుబెర్నెట్స్ డిప్లాయ్మెంట్ల నుండి నోడ్లను డైనమిక్గా జోడించే లేదా తొలగించే సామర్థ్యం
- పీర్-టు-పీర్ కమ్యూనికేషన్ నమూనాల కోసం మద్దతు
NVIDIA యొక్క NCCL లైబ్రరీ పంపిణీ చేయబడిన డీప్ లెర్నింగ్ కోసం డి ఫాక్టో ప్రమాణంగా ఉన్నప్పటికీ, ఇది మా వినియోగ కేసుకు ఆదర్శంగా లేదు:
- NCCL సమిష్టి కమ్యూనికేషన్లో రాణిస్తుంది కానీ స్టాటిక్ "ప్రపంచాన్ని" ఏర్పాటు చేయడం అవసరం, దీనికి పాల్గొనే నోడ్లను సర్దుబాటు చేసేటప్పుడు మొత్తం క్లస్టర్ను పునఃప్రారంభించడం అవసరం.
- NCCL యొక్క సింక్రోనస్ కమ్యూనికేషన్ మోడల్ మా అసਿੰక్రోనస్ వర్క్లోడ్ కోసం సంక్లిష్టతను జోడిస్తుంది
- అనుకూలత కోసం మా మెమరీ బదిలీ నమూనాలపై మాకు ప్రత్యక్ష నియంత్రణ కావాలి
- మా స్వంత పరిష్కారాన్ని నిర్మించడం విలువైన అభ్యాస అవకాశాలను అందించింది
ఆధునిక అధిక-పనితీరు గల నెట్వర్క్లు
మా పరిష్కారాన్ని అర్థం చేసుకోవడానికి, ఆధునిక అధిక-పనితీరు గల నెట్వర్క్లు సాంప్రదాయ నెట్వర్కింగ్ నుండి ఎలా భిన్నంగా ఉంటాయో ముందుగా పరిశీలిద్దాం.
మనం రోజూ ఉపయోగించే చాలా నెట్వర్క్లు TCP/IP ప్రోటోకాల్లపై ఆధారపడతాయి, ఇక్కడ అప్లికేషన్లు సాకెట్లను ఉపయోగించి ఆపరేటింగ్ సిస్టమ్ కెర్నల్ ద్వారా నెట్వర్క్ కార్డ్తో కమ్యూనికేట్ చేస్తాయి. అయితే, అధిక-పనితీరు గల నెట్వర్క్లు RDMA (రిమోట్ డైరెక్ట్ మెమరీ యాక్సెస్)ను ఉపయోగిస్తాయి - ఇది CPU ప్రమేయం లేకుండా యంత్రాల మధ్య ప్రత్యక్ష మెమరీ యాక్సెస్ను ప్రారంభించే పూర్తిగా భిన్నమైన హార్డ్వేర్ మరియు సాఫ్ట్వేర్ స్టాక్.
AWS Elastic Fabric Adapter (EFA)ను అందిస్తుంది, ఇది Amazon యొక్క కస్టమ్ ప్రోటోకాల్ అయిన Scalable Reliable Datagram (SRD)ను అమలు చేసే కస్టమ్ నెట్వర్క్ ఇంటర్ఫేస్. యూజర్ స్పేస్, కెర్నల్ స్పేస్ మరియు నెట్వర్క్ బఫర్ల మధ్య డేటా একাধিক సార్లు కాపీ చేయబడాల్సిన సాంప్రదాయ TCP/IP నెట్వర్కింగ్ వలె కాకుండా, RDMAతో కూడిన EFA CPUని పూర్తిగా బైపాస్ చేస్తూ GPU మెమరీ మరియు నెట్వర్క్ కార్డ్ మధ్య ప్రత్యక్ష డేటా బదిలీని అనుమతిస్తుంది.
అధిక-పనితీరు గల నెట్వర్క్ డిజైన్ తత్వశాస్త్రం
అధిక-పనితీరు గల నెట్వర్కింగ్ సిస్టమ్లను నిర్మించడానికి అనేక ప్రాథమిక అంచనాలను పునఃపరిశీలించడం అవసరం:
- బఫర్ యాజమాన్యం: కెర్నల్ నెట్వర్క్ బఫర్లను నిర్వహించే మరియు యూజర్ స్పేస్ మరియు కెర్నల్ స్పేస్ మధ్య కాపీ చేయడం అవసరమయ్యే సాంప్రదాయ సాకెట్ల వలె కాకుండా, RDMA అప్లికేషన్లు తమ సొంత బఫర్లను నిర్వహించవలసి ఉంటుంది. అప్లికేషన్ నెట్వర్క్ ఆపరేషన్ను ప్రారంభించినప్పుడు, ఆపరేషన్ పూర్తయ్యే వరకు ఇది నెట్వర్క్ కార్డ్కు బఫర్ యాజమాన్యాన్ని బదిలీ చేస్తుంది, డేటా కాపీ చేయవలసిన అవసరాన్ని తొలగిస్తుంది.
- మెమరీ రిజిస్ట్రేషన్: అప్లికేషన్లు ఆపరేటింగ్ సిస్టమ్ కెర్నల్తో మెమరీ ప్రాంతాలను నమోదు చేసుకోవాలి. కెర్నల్ వర్చువల్ అడ్రస్ మ్యాపింగ్లను సెటప్ చేస్తుంది, ఇది CPU, GPUలు మరియు నెట్వర్క్ కార్డ్లన్నింటికీ అదే వర్చువల్ అడ్రస్లను అర్థం చేసుకోవడానికి అనుమతిస్తుంది. ఈ రిజిస్ట్రేషన్ అనేది ఒకేసారి జరిగే ఆపరేషన్, ఇది తదుపరి జీరో-కాపీ డేటా బదిలీలను ప్రారంభిస్తుంది.
- కంట్రోల్ ప్లేన్ వర్సెస్ డేటా ప్లేన్: అధిక-పనితీరు గల నెట్వర్క్లు ఆపరేషన్లను రెండు వర్గాలుగా విభజిస్తాయి:
- భద్రతను నిర్ధారించడానికి కంట్రోల్ ప్లేన్ ఆపరేషన్లు (కనెక్షన్ సెటప్ మరియు మెమరీ రిజిస్ట్రేషన్ వంటివి) కెర్నల్ గుండా వెళతాయి
- గరిష్ట పనితీరు కోసం డేటా ప్లేన్ ఆపరేషన్లు (వాస్తవిక డేటా బదిలీ) కెర్నల్ను బైపాస్ చేస్తాయి
- ప్రసారానికి ముందు స్వీకరణ: కెర్నల్-నిర్వహించబడే బఫర్లు లేకుండా, అప్లికేషన్లు ఇన్కమింగ్ డేటా ఎక్కడ ఉంచాలో నిర్దేశిస్తూ రిసీవ్ ఆపరేషన్లను ముందుగా పోస్ట్ చేయాలి. అప్లికేషన్లు ఏ సమయంలోనైనా డేటాను స్వీకరించగల సాకెట్ మోడల్ నుండి ఇది ప్రాథమిక మార్పు.
- పోల్-బేస్డ్ కంప్లీషన్:
epollవంటి మెకానిజమ్ల ద్వారా కెర్నల్ నోటిఫికేషన్ల కోసం వేచి ఉండటానికి బదులుగా, అప్లికేషన్లు నేరుగా హార్డ్వేర్ కంప్లీషన్ క్యూలను పోల్ చేస్తాయి. ఇది సిస్టమ్ కాల్ ఓవర్హెడ్ను తొలగిస్తుంది మరియు పూర్తయిన ఆపరేషన్లకు తక్షణ ప్రతిచర్యను అనుమతిస్తుంది. - హార్డ్వేర్ టోపోలాజీ అవగాహన: గరిష్ట పనితీరును సాధించడానికి హార్డ్వేర్ టోపోలాజీని అర్థం చేసుకోవడం మరియు ఆప్టిమైజ్ చేయడం చాలా ముఖ్యం.
హార్డ్వేర్ టోపోలాజీని అర్థం చేసుకోవడం
AWS p5 ఇన్స్టాన్సెస్ అధునాతన అంతర్గత ఆర్కిటెక్చర్ను కలిగి ఉన్నాయి. క్రింద చూపిన విధంగా, ప్రతి ఇన్స్టాన్స్ రెండు NUMA నోడ్లను ఏర్పరుస్తున్న రెండు CPU సాకెట్లను కలిగి ఉంటుంది, ప్రతి NUMA నోడ్ నాలుగు PCIe స్విచ్లకు కనెక్ట్ చేయబడుతుంది:
ప్రతి PCIe స్విచ్ కింద, మేము కనుగొంటాము:
- నాలుగు 100 Gbps EFA నెట్వర్క్ కార్డ్లు
- ఒక NVIDIA H100 GPU
- ఒక NVMe SSD
TCP/IP మరియు RDMA బదిలీల కోసం డేటా మార్గాలు వాటి విధానాలలో ప్రాథమిక తేడాలను ప్రదర్శిస్తాయి:
TCP/IP (ఎడమ వైపు)తో, డేటా பல సార్లు కాపీ చేయబడాలి:
- GPU మెమరీ నుండి యూజర్ స్పేస్లోని అప్లికేషన్ బఫర్కి
- యూజర్ స్పేస్ బఫర్ నుండి కెర్నల్ బఫర్కి
- కెర్నల్ బఫర్ నుండి నెట్వర్క్ కార్డ్కి
- స్వీకరించే వైపు రివర్స్ ప్రక్రియ జరుగుతుంది
ప్రతి కాపీ ఆపరేషన్ CPU సైకిల్స్ మరియు మెమరీ బ్యాండ్విడ్త్ను వినియోగిస్తుంది. అప్లికేషన్ ప్రతి నెట్వర్క్ ఆపరేషన్ కోసం యూజర్ స్పేస్ మరియు కెర్నల్ స్పేస్ మధ్య కాంటెక్స్ట్ స్విచ్ చేయాలి.
దీనికి విరుద్ధంగా, RDMA (కుడి వైపు) నిజమైన జీరో-కాపీ డేటా బదిలీని అందిస్తుంది:
- నెట్వర్క్ కార్డ్ నేరుగా GPU మెమరీ నుండి చదువుతుంది
- డేటా నేరుగా రిమోట్ నెట్వర్క్ కార్డ్కి ప్రయాణిస్తుంది
- రిమోట్ నెట్వర్క్ కార్డ్ నేరుగా గమ్యస్థాన GPU మెమరీకి వ్రాస్తుంది
- బదిలీ ఎప్పుడు పూర్తయిందో తెలుసుకోవడానికి అప్లికేషన్ యూజర్ స్పేస్లోని కంప్లీషన్ క్యూ (CQ)ని మాత్రమే తనిఖీ చేయాలి
RDMA మరియు సరైన హార్డ్వేర్ జతతో, రెండు GPUల మధ్య డేటాను బదిలీ చేయడానికి స్థానిక PCIe స్విచ్ మరియు నెట్వర్క్ను మాత్రమే దాటాలి:
దీనికి విరుద్ధంగా, TCP/IP బదిలీలు ప్రధాన మెమరీ ద్వారా బహుళ సార్లు డేటాను కాపీ చేయాలి, ఇది గణనీయమైన PCIe బస్ రద్దీకి కారణమవుతుంది:
libfabric తో నిర్మించడం
మేము libfabricని ఉపయోగించాము - ఇది ఫ్యాబ్రిక్ సేవల కోసం సాధారణ ఇంటర్ఫేస్ను అందించే ఫ్రేమ్వర్క్. మా అమలు రెండు రకాల RDMA ఆపరేషన్లను ఉపయోగిస్తుంది:
- మెమరీ ప్రాంతాల గురించి మెటాడేటాను (ఉదా., ఆఫ్సెట్లు మరియు పరిమాణాలు) తీసుకువెళ్లే నియంత్రణ సందేశాల కోసం టూ-సైడెడ్ RDMA (SEND/RECV).
- నిజమైన డేటా బదిలీ కోసం ఒక-వైపు RDMA WRITE, ఇందులో ప్రతి WRITE ఆపరేషన్ ఒక నిరంతర మెమరీ భాగాన్ని నిర్వహిస్తుంది.
గరిష్ట పనితీరుకు ప్రయాణం
మా అభివృద్ధి అనేక దశల ద్వారా పురోగమించింది:
- SEND/RECV ఉపయోగించి ప్రాథమిక ఏకదిశాత్మక సందేశ బదిలీని అమలు చేయడం జరిగింది
- ద్విదిశాత్మక కమ్యూనికేషన్కు పొడిగించబడింది
- ప్రత్యక్ష GPU-GPU బదిలీ కోసం GPUDirect RDMA WRITE జోడించబడింది
- బహుళ ఏకకాల బదిలీలను నిర్వహించడానికి విస్తరించబడింది
- బలమైనత కోసం ఆపరేషన్ క్యూయింగ్ పరిచయం చేయబడింది
- ఒక నెట్వర్క్ కార్డ్పై 97.4% బ్యాండ్విడ్త్ వినియోగం సాధించబడింది
32 నెట్వర్క్ కార్డ్లకు స్కేలింగ్ చేసేటప్పుడు, మేము అనేక కీలక ఆప్టిమైజేషన్లను అమలు చేసాము:
- ఆపరేషన్ క్యూయింగ్: నేరుగా నెట్వర్క్ కార్డ్లకు ఆపరేషన్లను సమర్పించడానికి బదులుగా, మేము అప్లికేషన్-స్థాయి క్యూను నిర్వహిస్తాము. ఇది నెట్వర్క్ రద్దీకి వ్యతిరేకంగా బలమైనతను అందిస్తుంది మరియు ప్రోగ్రామింగ్ మోడల్ను సులభతరం చేస్తుంది.
- నెట్వర్క్ వార్మప్: కనెక్షన్లను ముందుగా ఏర్పాటు చేయడం ప్రారంభ పనితీరును మెరుగుపరిచింది.
- మల్టీ-థ్రెడింగ్: ప్రతి GPU యొక్క నెట్వర్క్ ఆపరేషన్ల కోసం అంకితమైన థ్రెడ్లు.
- CPU కోర్ పిన్నింగ్: NUMA ప్రభావాలు మరియు కాష్ మిస్లను నివారించడానికి నిర్దిష్ట CPU కోర్లకు థ్రెడ్లను బంధించడం.
- స్టేట్ షార్డింగ్: థ్రెడ్ల మధ్య వివాదాన్ని తగ్గించడం.
- ఆపరేషన్ బ్యాచింగ్: బహుళ ఆపరేషన్లను కలిపి సమర్పించడం.
- లేజీ ఆపరేషన్ పోస్టింగ్: ఆపరేషన్లు మొదట అప్లికేషన్లో క్యూలో ఉంచబడతాయి. కంప్లీషన్ క్యూను పోల్ చేసిన తర్వాత, నెట్వర్క్ వనరుల సమర్థవంతమైన వినియోగాన్ని నిర్ధారిస్తూ, పెండింగ్లో ఉన్న ఆపరేషన్లను నెట్వర్క్ కార్డ్కు సమర్పించడానికి మేము ప్రయత్నిస్తాము.
- NUMA-అవేర్ రిసోర్స్ అలొకేషన్: మెమరీ యాక్సెస్ లాటెన్సీని తగ్గించడానికి సరైన NUMA నోడ్లో కంప్లీషన్ క్యూల వంటి libfabric వనరులను కేటాయించండి.
ఈ ఆప్టిమైజేషన్ల ద్వారా, మేము 3,108 Gbps తుది పనితీరును సాధించాము - ఇది సైద్ధాంతిక గరిష్ట బ్యాండ్విడ్త్లో 97.1%.
క్రింది వీడియో మా కమాండ్-లైన్ ప్రోగ్రామ్ను పనిలో చూపుతుంది. ఇది GPU మెమరీ యొక్క వరుసగా లేని భాగాలను రిమోట్ నోడ్కు బదిలీ చేస్తుంది, 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}
}