డిస్అగ్రిగేటెడ్ ప్రీఫిల్ మరియు డికోడ్
డివైజ్లలో ప్రీఫిల్ మరియు డికోడ్లను వేరు చేయడం LLM ఇన్ఫెరెన్స్ను వేగవంతం చేస్తుంది మరియు పనితీరును మెరుగుపరుస్తుంది
ఇన్పుట్ ప్రాంప్ట్ నుండి అవుట్పుట్ టోకెన్లను రూపొందించడానికి, LLM ఇన్ఫెరెన్స్ రెండు దశలుగా విభజించబడింది: ప్రీఫిల్ మరియు డికోడ్. టోకెన్లను ఒకదాని తర్వాత ఒకటిగా జనరేట్ చేసే డికోడ్ దశలోకి ప్రవేశించే ముందు, ప్రీఫిల్ ఇన్పుట్ టోకెన్లపై రన్ అవుతుంది, KV క్యాచెలను జనాభా చేస్తుంది. సింగిల్ డికోడ్ దశ సాధారణంగా పదుల మిసెకన్ల పాటు రన్ అయితే, ప్రీఫిల్ గణనీయంగా ఎక్కువ సమయం పడుతుంది. ఒకే డివైజ్లపై రన్ చేస్తే, ప్రీఫిల్ను డికోడ్తో మిక్స్ చేయడం డికోడ్ పనితీరును తగ్గిస్తుంది. ఈ ఆర్టికల్లో మేము డిస్అగ్రిగేటెడ్ ప్రీఫిల్ మరియు డికోడ్ రూపంలో ఒక స్థిరమైన పరిష్కారాన్ని అన్వేషిస్తాము, ప్రీఫిల్ త్రూపుట్ మరియు డికోడ్ లేటెన్సీలను గరిష్టంగా పెంచడానికి వాటిని వేర్వేరు డివైజ్లపై రన్ చేస్తాము.
ప్రీఫిల్ వర్సెస్ డికోడ్ పనితీరు
ఒక సాధారణ LLM సర్వింగ్ ఇంజిన్లో, బాచ్ షెడ్యూలర్ మోడల్ యొక్క ప్రతి ఎగ్జిక్యూషన్ స్టెప్లో ప్రాసెస్ చేయడానికి అభ్యర్థనలను ఎంచుకుంటుంది. ఒకే డివైజ్ లేదా నోడ్లో రన్ అవుతున్నప్పుడు, ప్రీఫిల్ మరియు డికోడ్ రెండూ అభ్యర్థనలు ఒకే బాచ్గా చేయబడతాయి. సీక్వెన్స్ పొడవు వెంబడి సేకరించే అటెన్షన్ ఖర్చు, KV క్యాచెలోని ఎంట్రీల పొడవుకు అనులోమానుపాతంలో (kv_len), ప్రీఫిల్ మరియు డికోడ్ రెండింటికీ పెరుగుతుంది. డికోడ్ అభ్యర్థనలు సాధారణంగా ఒకే టోకెన్ను ఫార్వార్డ్ చేస్తాయి (qo_len=1), సీక్వెన్స్ యొక్క టోకెన్లపై స్వతంత్రంగా పనిచేసే ఇతర లేయర్ల ద్వారా అతి తక్కువ ఖర్చుతో కూడుకున్నది. ప్రీఫిల్ అభ్యర్థనలు వేలాది లేదా పదుల వేల టోకెన్లను డెన్స్ లేయర్ల ద్వారా గణనీయమైన ఖర్చుతో ఫార్వార్డ్ చేస్తాయి (పెద్ద qo_len).
ఫార్వార్డ్ పాస్ యొక్క లేటెన్సీ అనేది అటెన్షన్ సమయంలో KV క్యాచే నుండి తిరిగి పొందిన టోకెన్ల సంఖ్య (kv_len) కంటే డెన్స్ లేయర్ల గుండా వెళ్ళే స్వతంత్ర టోకెన్ల సంఖ్య (qo_len) ద్వారా మరింత బలంగా ప్రభావితమవుతుంది. అటెన్షన్ అనేది అభ్యర్థనల సంఖ్య మరియు సీక్వెన్స్ పొడవులకు అనులోమానుపాతంలో ఉండే kv_len రెండింటిలోనూ సమాంతరీకరించగలదు, తద్వారా మంచి వినియోగాన్ని సాధించవచ్చు. ప్రీఫిల్ అనేది కమ్యూట్ బౌండ్: qo_len ఎక్కువగా ఉండటం వలన, ఆధునిక GPUల కంప్యూట్ సామర్థ్యాలను పూర్తిగా ఉపయోగించుకోవడానికి GEMM కెర్నెల్లు M డైమెన్షన్ వెంబడి తగినన్ని బ్లాక్లను కేటాయించగలవు. డికోడ్ అనేది మెమరీ బౌండ్: సాధారణంగా తక్కువ బాచ్ పరిమాణాల కారణంగా, M వెంబడి ఇన్పుట్ల సంఖ్య సాధారణంగా చిన్నదిగా ఉంటుంది, కేవలం ఒక బ్లాక్కు మాత్రమే సరిపోతుంది. స్ప్లిట్-కె GEMM కెర్నెల్లు తక్కువ టోకెన్ బాచ్ పరిమాణాల కోసం SM వినియోగాన్ని మెరుగుపరచగలవు, అయితే క్యాచెస్ మరియు మ్యాట్రిక్స్ మల్టిప్లికేషన్ యూనిట్లు సాధారణంగా తక్కువ-ఉపయోగించబడతాయి.
కలిపి మిక్స్ చేసినప్పుడు, ప్రీఫిల్ కోసం అభ్యర్థనలను కలిగి ఉన్న బాచ్లు ఫార్వార్డ్ పాస్ ద్వారా ఎక్కువ లేటెన్సీలను కలిగి ఉంటాయి, ఇది మొత్తం ఇన్స్టెన్స్ యొక్క డికోడ్ త్రూపుట్ను ప్రతికూలంగా ప్రభావితం చేస్తుంది. ప్రీఫిల్ అభ్యర్థనలను డికోడ్ అభ్యర్థనలతో కలపడం లేదా చంక్డ్ ప్రీఫిల్ను ఉపయోగించడం వలన డికోడ్ పనితీరు కొద్దిగా మెరుగుపడినప్పటికీ, డికోడ్ త్రూపుట్ను గరిష్టంగా పెంచడానికి ఒక ఇన్స్టెన్స్పై తగినన్ని అభ్యర్థనలను ప్రాసెస్ చేయడానికి తగినంత ప్రీఫిల్ త్రూపుట్ను నిర్వహించడం కష్టం. పెద్ద మోడల్స్ విషయంలో, సాధారణ అవుట్పుట్ పొడవులతో, డికోడ్ కోసం పెద్ద బాచ్ పరిమాణాన్ని నిర్వహించడానికి, ప్రీఫిల్ తరచుగా నిర్వహించబడాలి, తద్వారా ఇది సగటు లేటెన్సీని గణనీయంగా తగ్గిస్తుంది మరియు అవుట్పుట్లో అంతరాయం కలిగిస్తుంది.
ప్రీఫిల్ మరియు డికోడ్లను నిర్వహించడానికి వేర్వేరు నోడ్ల సెట్ను ఉపయోగించడం ద్వారా ఈ సమస్యలను పరిష్కరించవచ్చు. ప్రీఫీలర్ నోడ్ను బహుళ డీకోడర్ నోడ్లతో అసోసియేట్ చేయడం ద్వారా, త్రూపుట్ను గరిష్టంగా పెంచడానికి మరియు డీకోడర్ నోడ్లపై తగినంత సంఖ్యలో ఏకకాలిక అభ్యర్థనలను నిర్వహించడానికి తగినన్ని అభ్యర్థనలను షెడ్యూల్ చేయవచ్చు. ప్రీఫీలర్ నోడ్స్ KV క్యాచెలను పాపులేట్ చేస్తాయి, ఇవి డీకోడర్ నోడ్లకు బదిలీ చేయబడతాయి. డీకోడర్లు ఇకపై ప్రీఫిల్ కోసం ఆపాల్సిన అవసరం లేనందున, యాక్టివ్ అభ్యర్థనల పెరుగుతున్న kv_len యొక్క మొత్తం ప్రభావం చాలా తక్కువగా ఉంటుంది కాబట్టి లేటెన్సీలు మరింత నిర్దిష్టంగా మారతాయి. నెట్వర్క్ ద్వారా KV క్యాచెలను బదిలీ చేయడానికి పదుల నుండి వందల మిలిసెకండ్లు పట్టవచ్చు కాబట్టి, టైమ్ టు ఫస్ట్ టోకెన్ (TTFT) పెరుగుదల రూపంలో దీనికి తగిన మూల్యం చెల్లించబడుతుంది.
KV మెసెంజర్
Perplexityలో, disaggregated prefill మరియు decode కోసం మా implementation ఒక KV messenger చుట్టూ నిర్మించబడింది; ఇది LLM engineతో పరస్పర చర్య చేసి, నెట్వర్క్ ద్వారా prefiller nodes నుంచి decoder nodesకు KV cache transfersను సమన్వయం చేస్తుంది. Prefiller వైపున, messenger decoder nodes నుంచి requestsను స్వీకరించి, వాటిని batch schedulerకు అప్పగిస్తుంది మరియు సాధ్యమైనంత తక్కువ latencyతో KV cachesను పంపించడానికి forward pass executionను ట్రాక్ చేస్తుంది. Decoder వైపున, un-evictable pages కేటాయించిన తర్వాత, KV cache మరియు decoder context transfers పూర్తయ్యాయని తెలియజేయబడే వరకు requestను decode కోసం schedule చేయకుండా messenger అడ్డుకుంటుంది.
ప్రీఫిల్ను డిస్అగ్రిగేట్ చేయడానికి హై త్రూపుట్, తక్కువ-లేటెన్సీ కనెక్షన్లు అవసరం, అందువల్ల మా ఇంప్లిమెంటేషన్ RDMA కోసం రూపొందించబడింది, ఇది EFA మరియు ConnectX నెట్వర్క్ ఇంటర్ఫేస్ కంట్రోలర్లు (NICలు) రెండింటికి మద్దతు ఇస్తుంది. KV మెసెంజర్ libfabric పై నిర్మించబడింది, రిమోట్ డైరెక్ట్ మెమరీ యాక్సెస్ (RDMA) ప్రిమిటివ్లపై ఉన్నత-స్థాయి తక్కువ-లేటెన్సీ అబ్స్ట్రాక్షన్లను అందించడానికి మా fabric-libర్యాపర్లను ఉపయోగిస్తుంది, తక్కువ-లేటెన్సీ సిగ్నలింగ్తో పాటు సమర్థవంతమైన పేజీ మరియు మెటాడేటా బదిలీలను అమలు చేస్తుంది. బ్యాక్గ్రౌండ్లో, ప్రీఫీలర్ నోడ్ నుండి డీకోడర్ నోడ్కు డేటాను కాపీ చేయడానికి fabric-lib ఒక GPU మరియు దాని నేరుగా కనెక్ట్ చేయబడిన NICలను సమన్వయం చేస్తుంది.
స్వీకరించిన వెంటనే, prefiller node సంబంధిత source KV pages సమితిని కేటాయించి, తన local engine ఉపయోగించి requestను prefill కోసం schedule చేస్తుంది. Latencyని తగ్గించడానికి, transfers forward pass పూర్తయ్యేవరకు ఆగవు: దాని బదులు, model ప్రతి layer కోసం KV cacheలో KV cache entries జోడించడం ముగించిన వెంటనే KV page copies ప్రారంభించబడతాయి. Prefill requests chunk చేయబడగలవు కాబట్టి, executionకు ముందు batch scheduler ప్రస్తుతం schedule చేసిన chunks గురించి KV messengerకు తెలియజేస్తుంది. Layersను track చేయగలుగుతూ CUDA graphsకు మద్దతివ్వడానికి, messenger attention యొక్క output projection తర్వాత increment అయ్యే counterను polling చేసే dedicated threadను ఉంచుతుంది. Sharded environmentలో counterను కేవలం lead nodeపైనే నిర్వహిస్తారు: append తరువాత మరియు attentionకు ముందు KV cache entries validగా ఉన్నప్పటికీ, output projection ranks across reduce చేయబడుతుంది, దీని ద్వారా అవి implicitly synchronize అవుతాయి. Counterలో మార్పు గుర్తించబడిన వెంటనే, messengerకు తెలియజేయబడుతుంది మరియు అది layer transferను ప్రారంభించడానికి fabric-libను పిలుస్తుంది.
చివరి chunk transfer పూర్తైన తర్వాత, ఏదైనా అదనపు metadata కూడా కాపీ చేయబడుతుంది: speculative decoding లేదా MTP కోసం logits మరియు hidden statesను decoderకు తరలించడం అవసరం. ఈ copies కూడా RDMA ద్వారా, ముందుగా కేటాయించిన buffersకు మరియు వాటి నుండి, నిర్వహించబడతాయి.
చివరి చంక్ యొక్క పెండింగ్లో ఉన్న అన్ని బదిలీలు పూర్తయిన తర్వాత, ప్రీఫీలర్ నోడ్ KV పేజీలను డీ-అలోకేట్ చేస్తుంది మరియు అభ్యర్థనను పూర్తి చేస్తుంది. డీకోడర్ నోడ్కు స్పష్టంగా తెలియజేయబడదు; బదులుగా, ఇది పూర్తయిన ఆపరేషన్ల సంఖ్యను ట్రాక్ చేయడానికి ఇమీడియేట్ కౌంటర్లను ఉపయోగిస్తుంది. ప్రీఫీలర్ వైపు RDMA ఆపరేషన్ల సంఖ్య బదిలీ చేయబడిన పేజీల సంఖ్యకు అనులోమానుపాతంలో ఉంటుంది. తెలిసిన సంఖ్యలో పేజీ మరియు కాంటెక్స్ట్ కాపీలు పూర్తయిన తర్వాత, అభ్యర్థన డీకోడింగ్కు సిద్ధంగా ఉందని సూచించడానికి fabric-lib KV మెసెంజర్ను కాల్ చేస్తుంది. మెసెంజర్ ఏదైనా కాంటెక్స్ట్ను డీ-అలోకేట్ చేస్తుంది మరియు అభ్యర్థనను LLM ఇంజిన్కు అందజేస్తుంది.
శార్డెడ్ KV క్యాచే బదిలీలు
ప్రీఫీలర్ మరియు డీకోడర్ టెన్సార్ పరలలిజం (TP) పై ఆధారపడి ఉంటే మరియు KV క్యాచెలను ఒకేలా శార్డ్ లేదా రెప్లికేట్ చేస్తే, అన్ని రెప్లికాల పేజీలను పంపడానికి మరియు స్వీకరించడానికి ఒకే బదిలీ ఇంజిన్ బహుళ డివైజ్లను సమన్వయం చేస్తుంది. మోడల్ యొక్క ఎగ్జిక్యూటర్ బహుళ డివైజ్లు మరియు ప్రాసెస్లలో రెప్లికేట్ చేయబడినప్పటికీ ఒకే మెసెంజర్ మరియు ట్రాన్స్ఫర్ ఇంజిన్ను ఉపయోగించగలిగేలా, KV క్యాచెలకు మద్దతు ఇచ్చే డివైజ్ మెమరీని కేటాయించడానికి మరియు దానిని ప్రధాన ప్రక్రియలోకి మ్యాప్ చేయడానికి cuMem మరియు cuMemImportFromShareableHandle ఉపయోగించబడతాయి. ప్రతి KV క్యాచే స్లైస్ల బదిలీల కోసం ఉపయోగించడానికి సమీపంలోని NUMA నోడ్లో NICలు మరియు CPUలను కనుగొనడానికి ట్రాన్స్ఫర్ ఇంజిన్ నోడ్ టోపాలజీని పరిశీలిస్తుంది.
సోర్స్ మరియు డెస్టినేషన్ ఒకేలా శార్డ్ అయితే, సోర్స్ మరియు డెస్టినేషన్ యొక్క డివైజ్లు మరియు పేజీల నుండి వన్-టు-వన్ మ్యాపింగ్ ఉన్నందున బదిలీలు సులభంగా ఉంటాయి. ఈ పరిస్థితిలో, శార్డింగ్ సూక్ష్మంగా బదిలీ లేటెన్సీలకు సహాయపడుతుంది: ఎక్కువ GPUలను ఉపయోగించడం ద్వారా, ఎక్కువ సంబంధిత NICలను ఉపయోగించవచ్చు, పూర్తి బ్యాండ్విడ్త్ వినియోగానికి దగ్గరగా చేరుకోవచ్చు. అయితే, అసమతుల్యత ఉంటే, సోర్స్ మరియు డెస్టినేషన్ స్లైస్ల మధ్య నిష్పత్తిని బట్టి ట్రాన్స్ఫర్ ఇంజిన్ పేజీలను విభజించాలి లేదా పునర్నిర్మించాలి.
prefiller KV cacheను మరిన్ని devices across విభజిస్తే, prefiller devices నుంచి సంబంధిత halvesను పంపడం ద్వారా decoderపై పూర్తి pages పునర్నిర్మించబడతాయి. decoderకు మరిన్ని shards ఉన్నట్లయితే, అది అనేక sources నుంచి pagesను స్వీకరిస్తుంది. తాను అందుకోవాల్సిన RDMA writes సంఖ్యను లెక్కించగలగడానికి decoderకు prefiller యొక్క sharding scheme గురించి తెలుసు ఉండాలి. Replication involved ఉంటే, prefiller devicesను replica setsగా సమూహీకరిస్తుంది, అవి తమలోనే పూర్తి KV cacheను replicate చేస్తాయి. Destination replica sets అందుబాటులో ఉన్న అన్ని devicesను ఉపయోగించి RDMA writesను ప్రారంభించడానికి source setsలో ఒకదానికి యాదృచ్ఛికంగా కేటాయించబడతాయి.
శార్డెడ్ బదిలీలకు KV క్యాచెలకు చిన్న ట్వీట్ అవసరం. డిఫాల్ట్గా, FlashInfer NHD లేఅవుట్పై ఆధారపడుతుంది, ఇది హెడ్లలోని పేజీలోని టోకెన్లను ఆర్డర్ చేస్తుంది. క్యాచెస్ ఎక్కువగా అటెన్షన్ హెడ్ల సంఖ్య వెంబడి శార్డ్ చేయబడే అవకాశం ఉన్నందున, ఇది హెడ్ లోపల అసమానతను సృష్టిస్తుంది. RDMA బదిలీలు స్ట్రైడెడ్ రైట్లకు సూక్ష్మంగా మద్దతు ఇవ్వవు, బదిలీ చేయడానికి హెడ్కు ఒక ఆపరేషన్ అవసరం. బదులుగా, libfabric తో ఇంటరాక్షన్ల సంఖ్యను తగ్గించడానికి, మేము HND లేఅవుట్ని ఉపయోగించి KV క్యాచెలను నిర్వహిస్తాము, ఇది టోకెన్ల సంఖ్య కంటే ముందు హెడ్ డైమెన్షన్ను ఉంచుతుంది. ఇది నిరంతరతను నిర్ధారిస్తుంది, একক రైట్తో పేజీని కాపీ చేయడానికి అనుమతిస్తుంది.
స్పెక్యులేటివ్ డికోడింగ్
స్పెక్యులేటివ్ డికోడింగ్కు డిస్అగ్రిగేటెడ్ ప్రీఫిల్-డికోడ్లో చిన్న ట్వీట్లు అవసరం. మా ఇంప్లిమెంటేషన్లో, ప్రీఫీలర్ నోడ్లు టోకెన్లను శాంపిల్ చేయడానికి అనుమతించబడవు. Perplexity యొక్క సోనార్ మోడల్స్ స్ట్రక్చర్డ్ అవుట్పుట్కు మద్దతు ఇస్తున్నందున, ప్రీఫీలర్లు మరియు డీకోడర్లలో స్కీమా ప్రాసెసర్ ఇంప్లిమెంటేషన్లను సమకాలీకరించే సంక్లిష్టతను మేము ఎదుర్కోవాలనుకోవడం లేదు. MTP మరియు స్పెక్యులేటివ్ డికోడింగ్ మెకానిజమ్స్లో, చివరి టోకెన్ వరకు డ్రాఫ్ట్ మోడల్ను ప్రీఫిల్ చేయడం టార్గెట్ మోడల్ నుండి టోకెన్లను శాంపిల్ చేయడాన్ని కలిగి ఉంటుంది.
ఈ సమస్యలను పరిష్కరించడానికి, ప్రీఫిల్లో ఇన్పుట్ సీక్వెన్స్ యొక్క చివరి టోకెన్ ఉండదు. బదులుగా, చివరి టోకెన్కు ముందు ఉన్న ప్రీఫిల్ నుండి హిడెన్ స్టేట్స్ లేదా లాజిట్లు బదిలీ చేయబడతాయి మరియు డీకోడర్పై తదుపరి దశలో ఇది డికోడ్ టోకెన్గా పరిగణించబడుతుంది. మొదటి టోకెన్ను జారీ చేయడానికి ప్రీఫిల్ తర్వాత పూర్తి డికోడ్ దశ తప్పనిసరిగా నిర్వహించబడాలి కాబట్టి ఇది కొద్దిగా లేటెన్సీలను పెంచుతుంది, అయితే ఇంప్లిమెంటేషన్ యొక్క సంక్లిష్టత చాలా వరకు తగ్గించబడుతుంది.
డిస్అగ్రిగేటెడ్ డిప్లాయ్మెంట్లు
ప్రొడక్షన్ ట్రాఫిక్ లేదా ఇన్-హౌస్ ఎవాల్యుయేషన్ వర్క్లోడ్లకు మద్దతు ఇవ్వడానికి మేము వివిధ మోడళ్లతో బహుళ డిస్అగ్రిగేటెడ్ కాన్ఫిగరేషన్లను డిప్లాయ్ చేసాము లేదా ప్రయోగాలు చేసాము. మోడళ్ల పరిమాణం మరియు అటెన్షన్ మెకానిజమ్ ఆధారంగా, GPUలను ఉత్తమంగా ఉపయోగించుకోవడానికి మేము ప్రీఫీలర్ మరియు డీకోడర్ నోడ్ల కోసం తగిన శార్డింగ్ స్కీమ్లను ఎంచుకున్నాము.
DeepSeek-R1
DeepSeekతో, మేము టెన్సార్-పరలల్ (TP) మరియు డేటా-పరలల్ (DP) డిప్లాయ్మెంట్లు రెండింటినీ పరిగణించాము. మునుపటి బ్లాగ్ పోస్ట్లలో చర్చించినట్లుగా, TP డిప్లాయ్మెంట్లు మెరుగైన లేటెన్సీని అందిస్తాయి మరియు తక్కువ త్రూపుట్ ఖర్చుతో, హెవీ ట్రాఫిక్కు సేవ చేయడానికి మరిన్ని GPUలు అవసరమవుతాయి. DP డిప్లాయ్మెంట్లు లోడ్తో చాలా మెరుగ్గా స్కేల్ అవుతాయి, అయితే డివైజ్-టు-డివైజ్ లేదా నోడ్-టు-నోడ్ కమ్యూనికేషన్ ఖర్చు కారణంగా వాటి పీక్ త్రూపుట్ తక్కువగా ఉంటుంది.
DeepSeek మల్టీ-హెడ్ లేటెంట్ అటెన్షన్పై ఆధారపడుతుంది, KV క్యాచెలను కంప్రెస్ చేస్తుంది. అన్ని KV హెడ్లు ఒకే లేటెంట్ వెెక్టర్గా కుదించబడినందున, TP KV క్యాచెలను శార్డ్ చేయలేదు, ఎందుకంటే ఇది అన్ని రేంజ్లలో లేటెంట్ వెెక్టర్లను రెప్లికేట్ చేయాలి. ప్రతి రేంజ్ అదే లేటెంట్ రెప్రజెంటేషన్ నుండి వివిధ హెడ్లను ఎక్స్ట్రాక్ట్ చేయగలదు కాబట్టి డీకంప్రెషన్ తర్వాత శార్డింగ్ జరుగుతుంది. తదనంతరం, అన్ని KV క్యాచే శార్డ్లు ప్రీఫీలర్ మరియు డీకోడర్ శార్డ్లలో ఒకేలా ఉంటాయి.
ఇంట్రానోడ్ TP సెటప్తో, ప్రీఫీలర్లు మరియు డీకోడర్లు రెండూ ఒకేలా శార్డ్ చేయబడతాయి. అందుబాటులో ఉన్న అన్ని NICలను పూర్తిగా ఉపయోగించుకోవడానికి అన్ని రేంజ్ల నుండి బదిలీలు డిస్పాచ్ చేయబడతాయి. అయితే, DP డిప్లాయ్మెంట్తో, TP రేంజ్ పరిమాణం తక్కువగా ఉన్నప్పుడు లేదా ప్రతి DP రేంజ్ ఒకే GPUకి కేటాయించబడినప్పుడు, KV క్యాచే యొక్క రెప్లికేటెడ్ కాపీని కలిగి ఉన్న ఏదైనా ప్రీఫీలర్ డివైజ్ దానిని డిస్పాచ్ చేయగలదు. అందుబాటులో ఉన్న అన్ని NICలలో అభ్యర్థనలను బ్యాలెన్స్ చేయడానికి, మేము ప్రీఫీలర్ నుండి డీకోడర్కు KV క్యాచేను పంపడానికి యాదృచ్ఛికంగా ఒక GPU మరియు ఒక NICని ఎంచుకుంటాము.
మిక్స్డ్ ప్రీఫిల్-డికోడ్తో, వందల మిలిసెకండ్ల క్రమంలో తరచుగా ప్రీఫిల్ అంతరాయాలు ఏర్పడటం వల్ల మా R1 డిప్లాయ్మెంట్ స్థిరంగా 50 TPS దాటడానికి కష్టపడుతోంది. దీనికి విరుద్ధంగా, ప్రీఫిల్ను వేరు చేయడం ద్వారా, ప్రతి అభ్యర్థనకు TTFT కోసం సుమారు 100ms పెనాల్టీ ఏర్పడింది, అయితే ఒకే ప్రీఫీలర్ నోడ్ 3 డీకోడర్ నోడ్లపై స్థిరమైన బాచ్ పరిమాణాలను నిర్వహించగలదు, ప్రతి డీకోడర్ నోడ్కు సుమారు 1 QPS లోడ్ను హ్యాండిల్ చేస్తూ 90 TPS కంటే ఎక్కువ త్రూపుట్ను అందిస్తుంది. డేటా-పరలల్ డిప్లాయ్మెంట్లతో, TPS దాదాపు 50 వద్ద కొద్దిగా తక్కువగా ఉంది, అయితే ఇన్స్టెన్స్లు ప్రతి రేంజ్కు 1 QPS లోడ్ను హ్యాండిల్ చేయగలవు, ఒకే నోడ్కు 8 రేంజ్లు ఉంటాయి.
Qwen3-Coder
ఈ 480B మోడల్ గ్రూప్డ్-క్వెరీ అటెన్షన్ (GQA) ను ఉపయోగిస్తుంది, కాబట్టి అటెన్షన్ను సులభంగా శార్డ్ చేయవచ్చు మరియు KV క్యాచెలకు మెమరీని త్యాగం చేయకుండా టెన్సార్ పరలలిజం నుండి ప్రయోజనం పొందవచ్చు. ఫలితంగా, ప్రీఫిల్ మరియు డికోడ్ రెండింటి కోసం మేము మోడల్ను 8 GPUలలో శార్డ్ చేయవచ్చు, దాదాపు 3 డీకోడర్ నోడ్లను ఒకే ప్రీఫీలర్ నోడ్తో పెయిర్ చేయవచ్చు. అటెన్షన్ శార్డ్ చేయబడినందున, ప్రీఫీలర్ మరియు డీకోడర్ KV క్యాచెలను శార్డ్ చేయడానికి మేము HND KV క్యాచే లేఅవుట్పై ఆధారపడతాము, ప్రీఫీలర్ రేంజ్లను డీకోడర్ రేంజ్లతో పెయిర్ చేస్తాము మరియు సమాంతరంగా స్లైస్లను బదిలీ చేయడానికి అన్ని NICలను పూర్తిగా ఉపయోగిస్తాము.
ఉదాహరణ
@online{perplexity2025DisaggregatedPrefillAndDecode,
author = {{Perplexity} and Nandor Licker and Lequn Chen and Kevin Hu and Erin McKnight and Phi Hoang},
title = {{Disaggregated prefill and decode}},
date = {2025-08-01},
url = {https://perplexity.coolkeypoint.com/hub/blog/disaggregated-prefill-and-decode}
}