ఆపిల్ సిలికాన్ కోసం ఆన్-డివైస్ ఇన్ఫరెన్స్ను ఆప్టిమైజ్ చేస్తోంది
ప్రీఫిల్ మరియు డీకోడ్ త్రూపుట్ను మెరుగుపరిచే కస్టమ్ స్థానిక ఇంజిన్.
యాపిల్ సిలికాన్పై హైబ్రిడ్ గణన క్లౌడ్లోని సరిహద్దు ఇంటెలిజెన్స్ మరియు Macలోని స్థానిక మోడల్ మధ్య ఒక టాస్క్ను ఆర్కెస్ట్రేట్ చేస్తుంది. క్లౌడ్ మోడల్స్ పరిశోధన మరియు తార్కికతను నిర్వహిస్తాయి, అయితే స్థానిక మోడల్ Macలోని ప్రైవేట్ ఫైల్లు మరియు యాప్లతో పనిచేస్తుంది.
ఈ శ్రమ విభజన సజావుగా అనిపించాలంటే, స్థానిక ఇన్ఫరెన్స్ టాస్క్లోని మిగిలిన వాటితో పాటు వేగాన్ని కొనసాగించాలి. దానికి ప్రాంప్ట్లను త్వరగా ప్రాసెస్ చేయగల మరియు అధిక టోకెన్-ఉత్పత్తి రేటును నిర్వహించగల ఇంజిన్ అవసరం.
లిల్లీ, మా తేలికపాటి స్థానిక ఇన్ఫరెన్స్ ఇంజిన్, ప్రత్యేకంగా ఆపిల్ సిలికాన్ మరియు Qwen3.6-35B-A3B కోసం నిర్మించబడింది, ఇది ప్రీఫిల్ మరియు డికోడ్ కోసం ప్రత్యేక ఆప్టిమైజేషన్లతో ఉంది. ఒక స్టాండ్అలోన్ డెమో GitHubలో బహిరంగంగా అందుబాటులో ఉంది.
పరిచయం
Macలో LLMలను అమలు చేయడానికి ఒక సాధారణ మార్కం MLXని ఉపయోగించడం, ఇది యాపిల్ సిలికాన్ కోసం యాపిల్ యొక్క ఓపెన్-సోర్స్ మెషిన్ లెర్నింగ్ ఫ్రేమ్వర్క్. దీని సహచర లైబ్రరీ, MLX-LM, విస్తృత శ్రేణి భాషా మోడళ్లతో టోకెన్లను లోడ్ చేయడానికి మరియు రూపొందించడానికి అవసరమైన భాగాలను జోడిస్తుంది. కలిసి, MLX మరియు MLX-LM స్థానిక LLM ఇన్ఫరెన్స్ కోసం ఆఫ్-ది-షెల్ఫ్, జనరల్-పర్పస్ స్టాక్ను అందిస్తాయి.
Qwen3.6-35B-A3B అనేది ఒక స్పార్స్, హైబ్రిడ్ మోడల్: ఇది మిక్చర్-ఆఫ్-ఎక్స్పర్ట్స్ (MoE) రూటింగ్ను ఉపయోగిస్తుంది మరియు పూర్తి అటెన్షన్తో స్థిర-పరిమాణ పునరావృత స్థితులను (recurrent states) మిళితం చేస్తుంది. ఈ ఆర్కిటెక్చరల్ ఎంపికలు అవసరమైన గణన మొత్తాన్ని తగ్గిస్తాయి, కానీ అవి క్రమరహిత పనిభారాన్ని కూడా సృష్టిస్తాయి. టోకెన్లు వేర్వేరు ఎక్స్పర్ట్ వెయిట్లకు రూట్ చేయబడతాయి, మరియు పునరావృత స్థితులు స్వభావసిద్ధంగా సీక్వెన్షియల్గా ఉంటాయి.
MLX-LM ఇన్ఫరెన్స్ దశల కోసం మరియు సాధారణ వర్క్లోడ్ ఆకారాల కోసం ఇప్పటికే ఆప్టిమైజ్ చేయబడిన కర్నెల్స్ను ఎంచుకుంటుంది, కానీ దాని పునర్వినియోగ ఆపరేషన్లు అనేక మోడల్ ఆర్కిటెక్చర్లకు మద్దతు ఇవ్వాలి. క్యూవెన్కు అంకితమైన ఇంజిన్ మోడల్ మరియు రన్టైమ్ స్థాయిలో ప్రత్యేకతను సంతరించుకోగలదు, మోడల్ యొక్క స్థిరమైన నిర్మాణం చుట్టూ కర్నెల్స్, డేటా కదలిక మరియు షెడ్యూలింగ్ను సమన్వయం చేస్తుంది.
లిల్లీ ఈ ప్రత్యేకతను ఒకే ప్రక్రియలో ఎండ్-టూ-ఎండ్ అమలు చేస్తుంది. రస్ట్ రన్టైమ్ మోడల్ చెక్పాయింట్ను లోడ్ చేస్తుంది మరియు సెషన్ స్థితి మరియు జనరేషన్ లూప్ను నిర్వహిస్తుంది, OpenAI-అనుకూలమైన చాట్-కంప్లీషన్స్ API అభ్యర్థనలను అంగీకరిస్తుంది మరియు టోకెన్లను స్ట్రీమ్ చేస్తుంది, మరియు కస్టమ్ మెటల్ కర్నెల్స్ క్యూవెన్-నిర్దిష్ట ఆపరేషన్లను అమలు చేస్తాయి. PyTorch లేదా MLX ఏదీ ఎగ్జిక్యూషన్ మార్గంలో లేదు.
మేము ప్రీఫిల్ మరియు డీకోడ్ పనితీరును విడివిడిగా కొలుస్తాము. ప్రీఫిల్ త్రూపుట్ ఇంజిన్ ప్రాంప్ట్ను ఎంత త్వరగా ప్రాసెస్ చేస్తుందో క్యాప్చర్ చేస్తుంది; డీకోడ్ త్రూపుట్ అది అవుట్పుట్ టోకెన్లను ఎంత త్వరగా ఉత్పత్తి చేస్తుందో క్యాప్చర్ చేస్తుంది.
మేము M5 Maxతో శక్తినిచ్చే 40-కోర్ GPU మరియు 128 GB యూనిఫైడ్ మెమరీ కలిగిన ఒకే MacBook Proపై Qwen3.6-35B-A3Bను బెంచ్మార్క్ చేస్తాము. ప్రీఫిల్ కోసం పది ప్రాంప్ట్ పొడవులు మరియు డీకోడ్ కోసం పది కాంటెక్స్ట్ పొడవులు, 256 నుండి 128K టోకెన్లు వరకు (K = 1,024) మొత్తం మీద, ఈ ఇంజిన్ MLX-LM యొక్క ప్రీఫిల్ థ్రూపుట్కు సగటున 1.22× మరియు దాని డీకోడ్ థ్రూపుట్కు 1.32× పనితీరును ఇస్తుంది. 4K-టోకెన్ ప్రాంప్ట్ మరియు 4K-టోకెన్ డీకోడ్ కాంటెక్స్ట్ వద్ద, కస్టమ్ ఇంజిన్ సెకనుకు 5,749.9 ప్రీఫిల్ టోకెన్లు మరియు సెకనుకు 186.6 డీకోడ్ టోకెన్లను చేరుకుంటుంది, ఇది MLX-LM కోసం 4,737.5 మరియు 140.9తో పోలిస్తే. బహు-మలుపుల సెషన్ అంతటా, ప్రతి అదనపు మోడల్ కాల్తో ఈ సమయ పొదుపులు కూడుకుంటాయి.
తరువాత, క్యూవెన్ ఆర్కిటెక్చర్ యాపిల్ సిలికాన్పై మోడల్-నిర్దిష్ట ఆప్టిమైజేషన్ అవకాశాలను ఎలా సృష్టిస్తుందో మేము వివరిస్తాము. ఆ తర్వాత ఫలితంగా వచ్చే ప్రీఫిల్ మరియు డీకోడ్ మార్పులను మేము పరిశీలిస్తాము. MLX-LM తో ఎండ్-టూ-ఎండ్ పోలికతో ముగించడానికి ముందు అదనపు ఆప్టిమైజేషన్ ఎక్కడ లాభం ఇవ్వడం ఆగిపోతుందో కూడా మేము కవర్ చేస్తాము.
యాపిల్ సిలికాన్ పై క్యూవెన్-ప్రత్యేక ఆప్టిమైజేషన్ అవకాశాలు
క్యూవెన్ మూడు విభిన్న వర్క్లోడ్ ఆకారాలను సృష్టిస్తుంది
Qwen3.6-35B-A3B 35 బిలియన్ల పరామితులను కలిగి ఉంది కానీ ప్రతి టోకెన్ కోసం సుమారు 3 బిలియన్లను మాత్రమే సక్రియం చేస్తుంది. రూటర్ 256 ఎక్స్పర్ట్ సబ్నెట్వర్క్లను స్కోర్ చేస్తుంది మరియు ఎనిమిదింటిని ఎంచుకుంటుంది, ప్రతి టోకెన్ను ప్రాసెస్ చేసే ఒక షేర్డ్ ఎక్స్పర్ట్తో పాటు. ఈ స్పార్స్ MoE డిజైన్ గణనను తగ్గిస్తుంది కానీ అసమాన పనిని ఉత్పత్తి చేస్తుంది: ఎక్స్పర్ట్లు వేర్వేరు సంఖ్యల టోకెన్లను పొందుతాయి, మరియు ప్రతి టోకెన్కు ఎక్స్పర్ట్ల వేర్వేరు కలయిక నుండి వెయిట్లు అవసరమవుతాయి.
క్యూవెన్ 10 పూర్తి-అటెన్షన్ లేయర్లను 30 Gated DeltaNet లేయర్లతో మిళితం చేస్తుంది. ఈ రెండు లేయర్ రకాలు మునుపటి సమాచారాన్ని వేర్వేరు మార్గాల్లో నిలుపుకుంటాయి.
అటెన్షన్ లేయర్లు గ్రూప్డ్-క్వరీ అటెన్షన్ (GQA)ని ఉపయోగిస్తాయి. క్యూవెన్ 16 క్వరీ హెడ్లను మరియు రెండు కీ–వాల్యూ (KV) హెడ్లను కలిగి ఉంది, ఎనిమిది క్వరీ హెడ్లు ప్రతి KV హెడ్ను షేర్ చేస్తాయి. షేరింగ్ KV కాష్ను చిన్నదిగా చేస్తుంది మరియు కాష్ చేయబడిన డేటాను క్వరీ హెడ్ల అంతటా మళ్లీ ఉపయోగించడానికి అనుమతిస్తుంది. కాష్ ఇప్పటికీ ప్రతి టోకెన్ కోసం కొత్త కీలు మరియు విలువలను నిల్వ చేస్తుంది, కాబట్టి కాంటెక్స్ట్ పెరిగేకొద్దీ ప్రతి డీకోడ్ దశ ఎక్కువ డేటాను చదువుతుంది.
బదులుగా గేటెడ్ డెల్టానెట్ మునుపటి సమాచారాన్ని స్థిర-పరిమాణ పునరావృత స్థితిలోకి కుదిస్తుంది. ఇప్పటికే ఉన్న స్థితిలో ఎంత నిలుపుకోవాలో నేర్చుకున్న గేట్ నియంత్రిస్తుంది, అయితే డెల్టా అప్డేట్ ప్రస్తుత టోకెన్ నుండి సమాచారాన్ని కలుపుకుంటుంది. మోడల్ ఈ నవీకరణలను పునరావృతంగా నిర్వచిస్తుంది, కాబట్టి ప్రతి టోకెన్ మునుపటి టోకెన్ ఉత్పత్తి చేసిన స్థితిపై ఆధారపడి ఉంటుంది. ఏదేమైనప్పటికీ, ప్రీఫిల్ సమయంలో, ఇంజిన్ అదే గణనను రెండు మార్గాల్లో మూల్యాంకనం చేయగలదు. ఇది స్థితిని ముందుకు తీసుకువెళ్తున్నప్పుడు నేరుగా టోకెన్ల ద్వారా స్కాన్ చేయవచ్చు, లేదా మరిన్ని మ్యా్రిక్స్ ఆపరేషన్లను మరియు టోకెన్-స్థాయి సమాంతరతను బహిర్గతం చేసే బ్లాక్లుగా నవీకరణలను పునర్వ్యవస్థీకరించవచ్చు. ఏ విధానం వేగంగా ఉంటుందో మోడల్ డైమెన్షన్లు, వర్క్లోడ్ మరియు హార్డ్వేర్పై ఆధారపడి ఉంటుంది.
ఈ నిర్మాణాలు అన్నీ కలిసి మూడు గణన నమూనాలను సృష్టిస్తాయి: అసమాన నిపుణుల సమూహాలు, పెరుగుతున్న కాంటెక్స్ట్ పై దృష్టి (అటెన్షన్), మరియు నేరుగా లేదా బ్లాక్లలో మూల్యాంకనం చేయగల స్థిర-పరిమాణ పునరావృతం.
యాపిల్ సిలికాన్ వివిధ వర్క్లోడ్ల కోసం వివిధ మార్గాలను అందిస్తుంది
ప్రీఫిల్ ఒకేసారి అనేక ప్రాంప్ట్ టోకెన్ యాక్టివేషన్ వరుసలను ప్రాసెస్ చేస్తుంది. ఇక్కడ పరిగణించబడే స్థానిక వర్క్లోడ్ సాధారణంగా ఒక సమయంలో ఒక అభ్యర్థనను డీకోడ్ చేస్తుంది (బ్యాచ్ 1) మరియు దశకు ఒక కొత్త వరుసను ప్రాసెస్ చేస్తుంది. ఈ వ్యత్యాసం ఒకే మోడల్ వెయిట్లు ఎలా ఉపయోగించబడతాయో మారుస్తుంది. ప్రీఫిల్ వందలాది లేదా వేలాది వరుసలలో ప్రతి వెయిట్ల బ్లాక్ను మళ్లీ ఉపయోగించగలదు. డీకోడ్ చాలా వరకు చేయలేదు, ఎందుకంటే ప్రతి కొత్త టోకెన్కు వెయిట్ల ద్వారా మరొక పాస్ అవసరం.
Apple silicon CPU మరియు GPUను unified memory వెనుక ఉంచుతుంది, ఇది రెండింటికీ అందుబాటులో ఉండే ఒకే physical memory pool. ఇది modelను separate GPU copy నిర్వహించకుండా residentగా ఉండేలా చేస్తుంది, కానీ data movementను ఉచితం చేయదు. Weights మరియు intermediate valuesను చదవడం ఇప్పటికీ memory bandwidthను వినియోగిస్తుంది, కాగా registers మరియు ఇతర on-chip storage వేగవంతమైనవి కానీ చాలా చిన్నవి.
M5 GPU కూడా వేర్వేరు compute pathsను అందిస్తుంది. Prefill యొక్క linear layers general matrix–matrix multiplication (GEMM)ను ఉపయోగిస్తాయి, ఒక weight matrixను ఒకేసారి అనేక rowsపై apply చేస్తాయి. Compatible GEMMs ప్రతి GPU coreలోని Neural Acceleratorను Metal 4 tensor operations ద్వారా ఉపయోగించగలవు. Batch-1 decode అయితే general matrix–vector multiplication (GEMV)ను ఉపయోగిస్తుంది, అదే weightsను ఒకే rowకు apply చేస్తుంది. Weight reuse తక్కువగా ఉండడంతో, GEMV ప్రధానంగా memory bandwidth ద్వారా పరిమితం అవుతుంది మరియు ఎక్కువ data reuse ఉన్న matrix operations కోసం రూపొందించిన Neural Accelerators కంటే GPU యొక్క vector arithmetic logic units (ALUs)కు మరింత అనుకూలంగా ఉంటుంది.
ఈ ఎగ్జిక్యూషన్ మార్గాలు లిల్లీకి మాత్రమే ప్రత్యేకమైనవి కావు. MLX అదే యూనిఫైడ్ మెమరీపై పనిచేస్తుంది మరియు వర్క్లోడ్ ఆకారం ప్రకారం ఆప్టిమైజ్ చేయబడిన మ్యా్రిక్స్ మరియు వెక్టర్ కర్నెల్స్ను ఎంచుకుంటుంది. MLX-LM యొక్క క్యూవెన్ అమలు ఇప్పటికే ఎక్స్పర్ట్ పనిని గ్రూప్ చేస్తుంది, ఫ్యూజ్డ్ రికరెంట్ మెటల్ కర్నెల్తో గేటెడ్ డెల్టానెట్ను మూల్యాంకనం చేస్తుంది, మరియు GQA-అవేర్ అటెన్షన్ను ఉపయోగిస్తుంది. ఈ సామర్థ్యాలు యాపిల్ సిలికాన్పై సమర్థవంతమైన క్యూవెన్ ఇన్ఫరెన్స్ కోసం షేర్ చేయబడిన ప్రారంభ బిందువు.
ఆప్టిమైజేషన్ వ్యూహం
లిల్లీ యొక్క ఇరుకైన పరిధి, క్యూవెన్ యొక్క ఖచ్చితమైన ఆర్కిటెక్చర్ మరియు డైమెన్షన్ల చుట్టూ ఈ షేర్ చేయబడిన ఎగ్జిక్యూషన్ మార్గాలను సమన్వయం చేయడానికి దానికి అనుమతిస్తుంది. ఇది ఫేజ్-నిర్దిష్ట GPU మార్గాలను ఉపయోగిస్తుంది, డేటా కదలికను తగ్గించడానికి క్యూవెన్ యొక్క ఎక్స్పర్ట్, పునరావృత మరియు అటెన్షన్ వర్క్లోడ్లను మ్యాప్ చేస్తుంది, మరియు కొలవబడిన వర్క్లోడ్ ఆకారం నుండి కర్నెల్స్ను మరియు లేఅవుట్లను ఎంచుకుంటుంది. ఈ వ్యూహం మూడు భాగాలను కలిగి ఉంది:
- ఇన్ఫరెన్స్ దశకు GPU మార్గాన్ని సరిపోల్చండి. ప్రీఫిల్ అనేక వరుసలలో వెయిట్లను మళ్లీ ఉపయోగించగలనప్పుడు మ్యా్రిక్స్-ఆధారిత ఎగ్జిక్యూషన్ను ఉపయోగించండి, మరియు బ్యాచ్-1 డీకోడ్ ఒక సమయంలో ఒక వరుసను ప్రాసెస్ చేసినప్పుడు వెక్టర్-ఆధారిత ఎగ్జిక్యూషన్ను ఉపయోగించండి.
- డేటా కదలికను తగ్గిస్తూ క్యూవెన్ నిర్మాణాన్ని GPU పై మ్యాప్ చేయండి. వెయిట్లను ఉపయోగించే వరకు కంప్రెస్ చేయబడి ఉంచండి, CPUకి తిరిగి వెళ్లకుండా రూట్ చేయబడిన ఎక్స్పర్ట్ పనిని నిర్వహించండి, దాని పునరావృత స్కాన్ ద్వారా గేటెడ్ డెల్టానెట్ స్థితిని చిప్పై నిలుపుకోండి, మరియు గ్రూప్డ్-క్వరీ అటెన్షన్ ద్వారా షేర్ చేయబడిన KV డేటాను మళ్లీ ఉపయోగించండి.
- వర్క్లోడ్ ఆకారానికి కర్నెల్స్ను అడాప్ట్ చేయండి. ప్రతి దశలో, అందుబాటులో ఉన్న వరుసల గణన, ఎక్స్పర్ట్ల అంతటా వరుసల పంపిణీ, ఆపరేషన్ యొక్క డైమెన్షన్లు మరియు ప్రస్తుత కాంటెక్స్ట్ పొడవు నుండి టైల్ పరిమాణాలు, ఎగ్జిక్యూషన్ లేఅవుట్లు మరియు అటెన్షన్ మార్గాలను ఎంచుకోండి.
కింది విభాగాలు ఈ ఎంపికలను వివరిస్తాయి. M5 Max పై సరిపోలిన అబ్లేషన్లలో మూల్యాంకనం చేయబడిన ఆప్టిమైజేషన్ల కోసం, అధ్యయనంలో ఉన్న ఆప్టిమైజేషన్లో మాత్రమే తేడా ఉండే ఒకేలాంటి ఇంజిన్ కాన్ఫిగరేషన్లను పోల్చడం ద్వారా మేము వాటి ప్రభావాలను అంచనా వేస్తాము. ఈ ప్రయోగాలు మా ఇంజిన్ యొక్క వెర్షన్లను దానితోనే పోల్చుతాయి కాబట్టి, అవి MLX-LM తో తుది ఫలితాలను విశ్లేషించడం కంటే మెకానిజమ్లను వివరిస్తాయి.
ప్రీఫిల్: వెయిట్లను మళ్లీ ఉపయోగించండి మరియు రూటింగ్ను GPU పై ఉంచండి
ప్రీఫిల్ ఒకేసారి అనేక టోకెన్ వరుసలను బహిర్గతం చేస్తుంది, కానీ క్యూవెన్ ఆ వరుసలను ఎక్స్పర్ట్ల అంతటా అసమానంగా రూట్ చేస్తుంది మరియు సీక్వెన్స్ ద్వారా పునరావృత స్థితిని నవీకరిస్తుంది. దీని ఆప్టిమైజేషన్లు మూడు సమూహాలుగా వస్తాయి: రూట్ చేయబడిన వరుసల చుట్టూ స్పార్స్ ఎక్స్పర్ట్ పనిని నిర్వహించండి, గేటెడ్ డెల్టానెట్ స్కాన్ను చిప్పై ఉంచండి, మరియు పొడవైన ప్రాంప్ట్లను బౌండెడ్ చంక్లుగా విభజించండి.
స్పార్స్ ఎక్స్పర్ట్ గణనను ఆప్టిమైజ్ చేయండి
మ్యా్రిక్స్ గుణకారం సమయంలో వెయిట్లను డిక్వాంటిైజ్ చేయండి
Qwen3.6-35B-A3B చెక్పాయింట్ గ్రూప్వైజ్ అఫైన్ 4-బిట్ క్వాంటిైజేషన్ను ఉపయోగిస్తుంది. ప్రతి వెయిట్ 4-బిట్ పూర్ణాంక కోడ్గా నిల్వ చేయబడుతుంది, అయితే ప్రతి 64 వెయిట్ల సమూహం దాని విలువలను పునర్నిర్మించడానికి ఉపయోగించే bfloat16 స్కేల్ మరియు బయాస్ను షేర్ చేస్తుంది. ఇది 35-బిలియన్ల-పరామితి మోడల్ను సుమారు 70 GB bfloat16 వెయిట్ల నుండి 19.4 GB చెక్పాయింట్గా తగ్గిస్తుంది, మోడల్ను Macలో నివసించేలా చేయడం ఆచరణాత్మకం చేస్తుంది.
మ్యా్రిక్స్ గుణకారం కోసం ఉపయోగించే మెటల్ 4 టెన్సర్ ఆపరేషన్ ప్యాక్ చేయబడిన 4-బిట్ ప్రాతినిధ్యానికి బదులుగా bfloat16 ఆపరెండ్లను వినియోగిస్తుంది. గుణకారానికి ముందు, GPU bfloat16లో వెయిట్లను పునర్నిర్మించాలి. లిల్లీలోని ఆప్టిమైజ్ చేయబడిన గ్రూప్డ్ GEMM ఈ మార్పిడిని ఒక చిన్న వెయిట్ టైల్కు ఒకసారి చేస్తుంది మరియు రూట్ చేయబడిన యాక్టివేషన్ వరుసలతో దానిని గుణించడానికి తగినంత సమయం మాత్రమే ఆన్-చిప్ థ్రెడ్గ్రూప్ మెమరీలో ఫలితాన్ని ఉంచుతుంది. అక్యుములేషన్ 32-బిట్ ఫ్లోటింగ్ పాయింట్ను ఉపయోగిస్తుంది, మరియు అవుట్పుట్ bfloat16లో వ్రాయబడుతుంది. పూర్తి విస్తరించిన వెయిట్ అర్రే యూనిఫైడ్ మెమరీలో ఎప్పటికీ సృష్టించబడదు.
అబ్లేషన్లో, డిక్వాంటిైజేషన్ ప్రత్యేక ఆపరేషన్గా రన్ అవుతుంది: ఇది 4-బిట్ వెయిట్లను యూనిఫైడ్ మెమరీలో bfloat16 అర్రేగా విస్తరిస్తుంది, ఆ తర్వాత మ్యా్రిక్స్ కర్నెల్ ఆ అర్రేను వెనక్కి చదువుతుంది. 512-టోకెన్ ప్రాంప్ట్ వద్ద, డిక్వాంటిైజేషన్ను గ్రూప్డ్ GEMMలోకి మార్చడం ద్వారా ఈ మధ్యంతర వ్రాయడం మరియు చదవడం తొలగించడం ద్వారా ఎండ్-టూ-ఎండ్ ప్రీఫిల్ త్రూపుట్ 77.4% పెరిగింది.
ఎక్స్పర్ట్ రూటింగ్ను GPU పై ఉంచండి
గ్రూప్డ్ GEMM ప్రతి ఎక్స్పర్ట్కు కేటాయించబడిన యాక్టివేషన్ వరుసలు కలిసి నిల్వ చేయబడాలని కోరుకుంటుంది. ప్రతి టోకెన్కు ఎనిమిది ఎక్స్పర్ట్లను ఎంచుకున్న తర్వాత, ఒక హిస్టోగ్రామ్ ప్రతి ఎక్స్పర్ట్కు ఎన్ని అసైన్మెంట్లు వెళ్ళాయో లెక్కిస్తుంది. ప్రిఫిక్స్ స్కాన్ ఆ గణనలను ప్రారంభ ఆఫ్సెట్లుగా మారుస్తుంది, స్క్యాటర్ దశ వరుసలను వాటి ఎక్స్పర్ట్ సమూహాలలో ఉంచుతుంది, మరియు బ్లాక్ మ్యాప్ గ్రూప్డ్ GEMM ప్రాసెస్ చేయాల్సిన స్థిర-పరిమాణ మ్యా్రిక్స్ బ్లాక్లను జాబితా చేస్తుంది.
ఆప్టిమైజ్ చేసిన మార్గం ప్రతి prompt chunk కోసం ఈ మొత్తం sequenceను ఒకే command bufferలో, అంటే GPU operations యొక్క ordered batchలో, ఉంచుతుంది. Ablation బదులుగా CPU routing intermediatesను inspect చేసి next operationను submit చేయడానికి pause చేస్తుంది. Histogram మరియు prefix scanను GPUపై ఉంచడం వల్ల రెండు kernels చేరతాయి కానీ ప్రతి MoE layerలోని CPU–GPU synchronizationను తొలగిస్తుంది.
512-టోకెన్ ప్రాంప్ట్ వద్ద, GPU-రెసిడెంట్ రూటింగ్ను ప్రారంభించడం ద్వారా ఎండ్-టూ-ఎండ్ ప్రీఫిల్ 89% పెరిగింది. కర్నెల్ గణన ఒక్కటే ఎలా తప్పుదారి పట్టించగలదో ఇది కూడా చూపుతుంది: వేగవంతమైన మార్గం ఎక్కువ కర్నెల్స్ను ప్రారంభిస్తుంది కానీ లేయర్ లోపల CPU కోసం ఎప్పటికీ వేచి ఉండదు.
టైల్ పరిమాణాన్ని ఎక్స్పర్ట్ లోడ్కు సరిపోల్చండి
2K-టోకెన్ ప్రాంప్ట్ వద్ద, ప్రతి టోకెన్ను 256 ఎక్స్పర్ట్లలో ఎనిమిది మందికి రూట్ చేయడం ద్వారా 16,384 టోకెన్–ఎక్స్పర్ట్ అసైన్మెంట్లు వస్తాయి, లేదా ఎక్స్పర్ట్కు సగటున 64 యాక్టివేషన్ వరుసలు వస్తాయి. వాస్తవ పంపిణీ అసమానంగా ఉంటుంది: కొన్ని ఎక్స్పర్ట్లు అనేక వరుసలను పొందుతాయి, మరికొన్ని కొద్దిగా మాత్రమే పొందుతాయి.
గ్రూప్డ్ GEMM ప్రతి ఎక్స్పర్ట్ అవుట్పుట్ను టైల్స్గా విభజిస్తుంది, ఇవి మ్యా్రిక్స్ గుణకారం యొక్క అవుట్పుట్ యొక్క చిన్న దీర్ఘచతురస్రాకార బ్లాక్లు. ప్రతి టైల్ ఒక GPU థ్రెడ్గ్రూప్కు కేటాయించబడుతుంది. యాపిల్ సిలికాన్ యొక్క GPUలలో, థ్రెడ్గ్రూప్ ఒకటి లేదా అంతకంటే ఎక్కువ సిమ్డ్గ్రూప్లను కలిగి ఉంటుంది, ప్రతి ఒక్కటి లాక్స్టెప్లో సూచనలను అమలు చేసే 32 థ్రెడ్లను కలిగి ఉంటుంది.
పెద్ద టైల్స్ సెటప్ ఖర్చును ఎక్కువ వరుసలపై విస్తరిస్తాయి మరియు మరింత సమాంతర పనిని బహిర్గతం చేస్తాయి, కానీ ఒక ఎక్స్పర్ట్ కేవలం కొన్ని వరుసలను మాత్రమే స్వీకరించినప్పుడు పెద్ద టైల్ లోని కొంత భాగం నిష్క్రియంగా ఉంటుంది. అందువల్ల టైల్ పరిమాణం మరియు సిమ్డ్గ్రూప్ గణన కలిసి ఉంటాయి.
ఒక అబ్లేషన్ టైల్ను 16 వరుసల వద్ద స్థిరపరుస్తుంది. ఆ నియంత్రణకు వ్యతిరేకంగా, నాలుగు సిమ్డ్గ్రూప్లతో 32-వరుస టైల్ను ప్రారంభించడం ద్వారా 2K టోకెన్ల వద్ద ఎండ్-టూ-ఎండ్ ప్రీఫిల్ 13.2% మెరుగుపడింది.
పునరావృత స్థితిని చిప్పై ఉంచండి
ప్రీఫిల్ సమయంలో, ప్రతి గేటెడ్ డెల్టానెట్ లేయర్ దాని పునరావృత స్థితిని ముందుకు తీసుకువెళ్తున్నప్పుడు క్రమంలో ప్రాంప్ట్ను స్కాన్ చేస్తుంది. రిజిస్టర్ రెసిడెన్సీ నిలిపివేయబడితే, అబ్లేషన్ బ్లాక్వైజ్ స్కాన్ను ఉపయోగిస్తుంది. 2K-టోకెన్ ప్రాంప్ట్ వద్ద, ఆ మార్గం లేయర్కు 256 MiB (మెబిబైట్లు) స్థితిని కదిలిస్తుంది మరియు బారియర్ల వద్ద సహకరించే థ్రెడ్లను రిపీట్గా ఆపివేస్తుంది, బారియర్లు అంటే పాల్గొనే అన్ని థ్రెడ్లు ఒకదానికొకటి వేచి ఉండాల్సిన సింక్రొనైజేషన్ పాయింట్లు.
పునరావృత స్థితి (recurrent state) ఒక మ్యా్రిక్స్. ఆప్టిమైజ్ చేయబడిన కర్నెల్ ప్రతి నిలువు వరుసను (column) ఒక సిమ్డ్గ్రూప్కు కేటాయిస్తుంది. సిమ్డ్గ్రూప్ నిలువు వరుసను దాని థ్రెడ్ల మధ్య విభజిస్తుంది, నిలువు వరుసను వాటి రిజిస్టర్లలోకి ఒకసారి లోడ్ చేస్తుంది, మరియు మొత్తం స్కాన్ అంతటా స్థితిని తీసుకువెళుతుంది. థ్రెడ్లు, థ్రెడ్గ్రూప్ మెమరీ (అంటే థ్రెడ్గ్రూప్ అంతటా షేర్ చేయబడిన ఆన్-చిప్ స్టోరేజ్) కాకుండా సిమ్డ్గ్రూప్ ఆపరేషన్ల ద్వారా మధ్యంతర ఫలితాలను పరస్పరం మార్చుకుంటాయి. పూర్తయిన స్థితి స్కాన్ తర్వాత మాత్రమే తిరిగి వ్రాయబడుతుంది.
చిన్న రౌండింగ్ లోపాలు క్రమబద్ధమైన నవీకరణల అంతటా కలిసిపోతాయి కాబట్టి స్థితి మరియు దాని గేట్ 32-బిట్ ఫ్లోటింగ్-పాయింట్ ఫార్మాట్ను ఉపయోగిస్తాయి. క్వరీ మరియు కీ యాక్టివేషన్లు bfloat16లోనే ఉంటాయి.
2K-టోకెన్ ప్రాంప్ట్ వద్ద, రిజిస్టర్-రెసిడెంట్ స్కాన్ను ప్రారంభించడం ద్వారా ఎండ్-టూ-ఎండ్ ప్రీఫిల్ 5.6% మెరుగుపడింది. ఎక్స్పర్ట్ GEMMలు ప్రీఫిల్ సమయంలో దాదాపు 90% ఉన్నాయి. సీక్వెన్షియల్ స్కాన్ న్యూరల్ యాక్సిలరేటర్ల నుండి ప్రయోజనం పొందేందుకు తగినంత పునర్వినియోగ మ్యా్రిక్స్ పనిని బహిర్గతం చేయదు.
ప్రాంప్ట్ చంకింగ్తో తాత్కాలిక మెమరీని బౌండ్ చేయండి
మెమరీలో ప్రతి ప్రాంప్ట్ టోకెన్ కోసం తాత్కాలిక డేటాను ఒకేసారి ఉంచడానికి బదులుగా రన్టైమ్ పొడవైన ప్రాంప్ట్ను బౌండెడ్ చంక్ల అనుక్రమంగా ప్రాసెస్ చేస్తుంది. మోడల్ వెయిట్లు యూనిఫైడ్ మెమరీలో నివసిస్తూనే ఉంటాయి, అయితే పునరావృత స్థితి మరియు KV కాష్ ఒక చంక్ నుండి తదుపరి చంక్కు సందర్భాన్ని తీసుకువెళతాయి. మునుపటి సందర్భం ఏదీ తొలగించబడదు.
Chunking లేకుండా, temporary activation arrays పూర్తి promptతో పెరుగుతూ unified memory కోసం model weights, recurrent state, మరియు KV cacheతో పోటీ పడతాయి. Chunking ఒకసారి ఒక్క segment యొక్క temporary values మాత్రమే liveగా ఉంచుతుంది, ఆపై తదుపరి segmentను process చేసే ముందు ఆ storageను విడుదల చేస్తుంది లేదా మళ్లీ ఉపయోగిస్తుంది. దీని వల్ల peak working memory పరిమితం అవుతుంది, మరియు model outputను మార్చకుండా engine మరింత పొడవైన promptsను process చేయగలుగుతుంది.
చంక్ చేసిన ప్రీఫిల్ అనేక ఇంజిన్లలో ప్రసిద్ధి చెందింది మరియు ఈ మెమరీ-కన్స్ట్రైండ్ వాతావరణాలలో పొడవైన బహుళ-మలుపు ట్రాజెటరీలకు సేవ చేయడానికి చాలా ముఖ్యం. అటెన్షన్ లేయర్ల కోసం మొత్తం ప్రీఫిల్ సమయం ప్రాంప్ట్ పొడవుపై క్వాడ్రాటిక్గా ఉంటుంది, మునుపటి చంక్ల పునరావృత KV లోడ్ల నుండి కొన్ని అదనపు ఓవర్హెడ్తో.
డీకోడ్: టోకెన్కు కదిలే బైట్లను తగ్గించండి
బ్యాచ్-1 డీకోడ్ ఒక సమయంలో ఒక కొత్త వరుసను ప్రాసెస్ చేస్తుంది. తక్కువ వెయిట్ పునర్వినియోగంతో, దాని త్రూపుట్ ప్రధానంగా ప్రతి టోకెన్ కోసం ఇంజిన్ ఎన్ని బైట్లను కదిలిస్తుంది అనే దానిపై ఆధారపడి ఉంటుంది. డీకోడ్ మార్పులు నాలుగు సమూహాలుగా వస్తాయి: ఒక-వరుస వెయిట్ మార్గాన్ని ఆప్టిమైజ్ చేయండి, ప్రతి దశను GPU పై ఉంచండి, మధ్యంతర మరియు రాష్ట్ర ట్రాఫిక్ను తగ్గించండి, మరియు అటెన్షన్ కాష్ను సమర్థవంతంగా చదవండి.
ఒక-వరుస వెయిట్ మార్గాన్ని ఆప్టిమైజ్ చేయండి
MLX ఇప్పటికే ప్రత్యేకమైన మ్యా్రిక్స్–వెక్టర్ కర్నెల్స్కు ఒకే-వరుస పనిని పంపిణీ చేస్తుంది. లిల్లీ MLXని ఉపయోగించనందున, కస్టమ్ రన్టైమ్ అదే ప్రాథమిక వ్యూహాన్ని అందించాలి. మా రో-పారలల్ GEMV ఒక యాక్టివేషన్ వరుస కోసం రూపొందించబడింది. వెయిట్ మ్యా్రిక్స్ యొక్క వివిధ భాగాలను సమాంతరంగా చదువుతున్నప్పుడు ఒక సిమ్డ్గ్రూప్ అవుట్పుట్పై సహకరిస్తుంది.
ప్రతి డీకోడ్ దశను GPU పై ఉంచండి
టోకెన్ హ్యాండ్ఆఫ్ను GPU పై ఉంచండి
ప్రతి డీకోడ్ దశ తదుపరి టోకెన్ను ఎంచుకోవడంతో ముగుస్తుంది; తదుపరి దశ ఆ టోకెన్ను ఇన్పుట్గా ప్రారంభమవుతుంది. ఎంపికను CPUకి మరియు ఆపై తిరిగి GPUకి పంపడం ప్రతి టోకెన్కు ఒక సింక్రొనైజేషన్ పాయింట్ను జోడిస్తుంది. బదులుగా మా రన్టైమ్ రెండు కమాండ్ బఫర్లు మరియు రెండు GPU-రెసిడెంట్ టోకెన్ స్లాట్ల మధ్య ప్రత్యామ్నాయంగా మారుతుంది. GPU అత్యధిక స్కోర్ సాధించిన టోకెన్ను ఎంచుకుంటుంది మరియు తదుపరి డీకోడ్ దశ కోసం ఇన్పుట్ స్లాట్లో దాని టోకెన్ IDని నేరుగా వస్తుంది, అయితే CPU తదుపరి పనిని సిద్ధం చేస్తుంది.
స్వతంత్ర GPU పనిని అతివ్యాప్తి చేయండి
ఒక రికార్డ్ చేయబడిన బ్యాచ్-1 డీకోడ్ దశలో, టోకెన్ను రూపొందించడం 795 GPU కర్నెల్స్ను ప్రారంభించింది. వాటి డిపెండెన్సీలు 555 సీక్వెన్షియల్ దశలను ఏర్పరచాయి, కొన్ని కర్నెల్స్ ఏకకాలంలో రన్ కావడానికి స్వేచ్ఛనిచ్చాయి. ఏదేమైనప్పటికీ మెటల్ సీరియల్ ఎగ్జిక్యూషన్ మోడ్ ప్రతి కర్నెల్ను క్రమంలో రన్ చేసింది.
ఆప్టిమైజ్ చేయబడిన డీకోడ్ మార్గం సమకాలీన మెటల్ పాస్లో వాస్తవ డేటా డిపెండెన్సీలను రికార్డ్ చేస్తుంది. GPU వనరులు అనుమతించినప్పుడు స్వతంత్ర కర్నెల్ లాంచ్లు ఒకే సమయంలో రన్ కావచ్చు. తదుపరి పనికి మునుపటి ఫలితం అవసరమైనప్పుడు మాత్రమే బారియర్ చొప్పించబడుతుంది.
మధ్యంతర మరియు రాష్ట్ర ట్రాఫిక్ను తగ్గించండి
Separate kernels తరచుగా ఒక intermediateను materialize చేస్తాయి: ఒక kernel తాత్కాలిక ఫలితాన్ని memoryలో రాస్తుంది, తదుపరి kernel ఆ ఫలితాన్ని తిరిగి చదువుతుంది. ఆప్టిమైజ్ చేసిన decode path నాలుగు chainsను fuse చేస్తుంది: రెండు expert input projectionsలను వాటి gated activationతో; expert output projectionను దాని routing score మరియు shared-expert resultతో; attention ముందు query మరియు key preparationను; మరియు recurrent updateను దాని normalizationతో. ప్రతి fused kernel తాత్కాలిక valuesను memory ద్వారా పంపకుండా registersలోనే ఉంచుతుంది.
ఫ్యూజన్ డిపెండెన్సీ గ్రాఫ్ను కూడా చిన్నదిగా చేస్తుంది: మధ్యంతర వ్రాయడం అదృశ్యమైనప్పుడు, దాని వినియోగదారుని రక్షించిన బారియర్ కూడా అదృశ్యమవుతుంది.
అటెన్షన్ కాష్ను సమర్థవంతంగా చదవండి
అటెన్షన్-కాష్ రీడ్లను కోలేస్ చేయండి
Attention ప్రతి decode step సమయంలో KV cache నుండి keys మరియు valuesను చదువుతుంది. Ablationలో, neighboring GPU threads ఎప్పుడూ neighboring bytesను request చేయవు, దీని వల్ల memory system మరింత separate transactionsను serve చేయాల్సి వస్తుంది. Coalesced loadsను enable చేయడం వల్ల adjacent threads adjacent bytesను request చేస్తాయి, తద్వారా hardware వాటి readsను combine చేయగలుగుతుంది.
bfloat16 కాన్ఫిగరేషన్పై, కోలేసింగ్ కీ బ్యాండ్విడ్త్ను 33.8 నుండి 47.9 GB/sకి పెంచింది, విలువ బ్యాండ్విడ్త్ను 42.0 నుండి 61.8 GB/sకి పెంచింది, మరియు 3,840-టోకెన్ కాంటెక్స్ట్ వద్ద ఎండ్-టూ-ఎండ్ డీకోడ్ను 2.1% మెరుగుపరిచింది.
KV వరుసలను మళ్లీ ఉపయోగించడానికి క్వరీ హెడ్లను ప్యాక్ చేయండి
గ్రూప్డ్-క్వరీ అటెన్షన్ ఎనిమిది క్వరీ హెడ్లను ఒక KV హెడ్ను షేర్ చేసుకోవడానికి అనుమతిస్తుంది. అబ్లేషన్లో, ప్రతి క్వరీ హెడ్ వేర్వేరు సిమ్డ్గ్రూప్లో రన్ అవుతుంది, కాబట్టి ఎనిమిది కూడా స్వతంత్రంగా ఒకే కాష్ చేయబడిన KV వరుసను అభ్యర్థిస్తాయి. ఆప్టిమైజ్ చేయబడిన కర్నెల్ నాలుగు క్వరీ హెడ్లను ఒక థ్రెడ్గ్రూప్లో ప్యాక్ చేస్తుంది, ఇది ప్రతి KV వరుసను ఒకసారి లోడ్ చేస్తుంది మరియు దానిని నాలుగు అటెన్షన్ గణనలలో మళ్లీ ఉపయోగిస్తుంది. రెండవ థ్రెడ్గ్రూప్ మిగిలిన నాలుగు హెడ్లను నిర్వహిస్తుంది.
సాధారణంగా GQA ప్యాకింగ్ అని పిలువబడే ఈ సాంకేతికత, ఎనిమిది స్వతంత్ర KV అభ్యర్థనలను రెండు షేర్ చేయబడిన లోడ్లుగా తగ్గిస్తూ అదే అరిథ్మెటిక్ను నిర్వహిస్తుంది మరియు సమానమైన అవుట్పుట్ బైట్లను ఉత్పత్తి చేస్తుంది. అన్ప్యాక్ చేయబడిన అబ్లేషన్తో పోలిస్తే, ఇది 32K-టోకెన్ కాంటెక్స్ట్ వద్ద ఎండ్-టూ-ఎండ్ డీకోడ్ త్రూపుట్ను 23.8% మెరుగుపరిచింది.
పొడవైన కాంటెక్స్ట్ల వద్ద అటెన్షన్ లేఅవుట్లను మార్చండి
పూర్తి-అటెన్షన్ లేయర్లోని ప్రతి డీకోడ్ దశ ఇప్పటికే ఉన్న KV కాష్ను స్కాన్ చేస్తుంది. స్థిర-బ్లాక్ లేఅవుట్ ఆ కాష్ను సమాన భాగాలుగా విభజిస్తుంది, వీటిని GPU సమాంతరంగా ప్రాసెస్ చేయగలదు. కాష్ చిన్నగా ఉన్నప్పుడు దాని అదనపు షెడ్యూలింగ్ అంతగా ఉపయోగపడదు, కానీ కాంటెక్స్ట్ పెరిగేకొద్దీ స్థిర-బ్లాక్ లేఅవుట్ పనిని మరింత సమానంగా సమతుల్యం చేస్తుంది.
ఈ మోడల్ కోసం, రన్టైమ్ సాధారణ అటెన్షన్ మార్గాన్ని 32K టోకెన్ల కంటే తక్కువగా ఉంచుతుంది మరియు 32K లేదా అంతకంటే ఎక్కువ వద్ద స్థిర-బ్లాక్ మార్గాన్ని ఉపయోగిస్తుంది. ప్రతి హెడ్ 256 విలువలను కలిగి ఉన్నప్పుడు మరియు ఎనిమిది క్వరీ హెడ్లు KV హెడ్ను షేర్ చేసినప్పుడు ఈ స్విచ్ వర్తిస్తుంది; ఇతర ఆకారాలు సాధారణ మార్గంలోనే ఉంటాయి. ఒక అబ్లేషన్ ఈ స్విచ్ను నిలిపివేస్తుంది మరియు ఎల్లప్పుడూ సాధారణ మార్గాన్ని ఉపయోగిస్తుంది. స్థిర-బ్లాక్ మార్గాన్ని ప్రారంభించడం వల్ల ఎండ్-టూ-ఎండ్ డీకోడ్ 32K వద్ద 7.7%, 64K వద్ద 27.4%, మరియు 128K వద్ద 40.2% మెరుగుపడింది.
మరిన్ని ఆప్టిమైజేషన్లకు గల పరిమితులు
కొన్ని మార్పులు ఒంటరి ఆపరేషన్ను మెరుగుపరిచాయి కానీ ఎండ్-టూ-ఎండ్ ఇన్ఫరెన్స్ను మెరుగుపరచలేదు.
స్పెక్యులేటివ్ డీకోడింగ్, ఇది పూర్తి మోడల్ ధృవీకరించడానికి టోకెన్లను ప్రతిపాదించడానికి చిన్న మోడల్ను ఉపయోగిస్తుంది, బ్యాచ్-1 డీకోడ్ను 18% నెమ్మదిగా చేసింది. ధృవీకరణ రెండు నుండి ఐదు వరుసల సమూహాలను ప్రాసెస్ చేసింది, ఇది ఈ హార్డ్వేర్ కోసం అసమర్థమైన ఆకారం, మరియు వరుసలు తరచుగా వేర్వేరు ఎక్స్పర్ట్లను ఎంచుకున్నాయి, చదవబడిన ఎక్స్పర్ట్-వెయిట్ డేటా మొత్తాన్ని పెంచాయి. డ్రాఫ్టర్ అవుట్పుట్ వొకాబ్యులరీని తగ్గించడం డ్రాఫ్టర్ త్రూపుట్ను 4.7–5.1% మెరుగుపరిచింది, కానీ పూర్తి స్పెక్యులేటివ్ లూప్ను వేగంగా చేయలేదు. ఈ ఫలితం వర్క్లోడ్-నిర్దిష్టమైనది: మా బాచ్డ్ బ్లాక్వెల్పై క్యూవెన్ డిప్లాయ్మెంట్ వేర్వేరు పరిస్థితులలో స్పెక్యులేటివ్ డీకోడింగ్ను ఉపయోగిస్తుంది.
ఇతర ప్రయోగాలలో GPU లాంచ్లను తగ్గించడం, మొత్తం దశలను అతివ్యాప్తి చేయడం, పెద్ద ప్రీఫిల్ టైల్స్ను ఉపయోగించడం, విస్తృత ఫ్యూజన్ను వర్తింపజేయడం, రూటర్ను వేగవంతం చేయడం మరియు అవుట్పుట్ ప్రొజెక్షన్ను టోకెన్ ఎంపికతో కలపడం వంటివి ఉన్నాయి. ఏదీ పూర్తి ఇన్ఫరెన్స్ లూప్ను మెరుగుపరచలేదు.
హార్డ్వేర్ పరిమితుల కొలతలు ప్రధాన prefill మరియు decode ఆపరేషన్లలో కూడా తక్కువ మిగిలిన headroom మాత్రమే ఉన్నట్లు చూపించాయి. MoE GEMMs మరియు GEMVs వాటి యాక్సెస్ నమూనాల కోసం అత్యంత వేగవంతమైన sustained weight-read రేట్లలో వరుసగా 97.9% మరియు 90.3% చేరాయి. sparse GEMV నుండి arithmeticను తొలగించినా throughput కేవలం 0.2% మాత్రమే మారింది, దీనివల్ల compute కంటే weight readsే పరిమిత వనరని నిర్ధారించబడింది. Prefill యొక్క matrix multiplication కూడా isolationలో theoretical matrix limitలో 93% మరియు tested modelsలో 80–86% చేరుకుంది.
ఎండ్-టూ-ఎండ్ పనితీరు
ఎండ్-టూ-ఎండ్ పోలిక రెండు ఇంజిన్లలో ఒకేలాంటి 4-బిట్ చెక్పాయింట్ బైట్లను లోడ్ చేస్తుంది మరియు ఒక 40-కోర్, 128 GB M5 Max పై ఒక సమయంలో ఒక అభ్యర్థనను రన్ చేస్తుంది. ప్రతి రౌండ్ లోపల, బ్యాక్గ్రౌండ్ లోడ్ మరియు చిప్ ఉష్ణోగ్రతలో మార్పుల నుండి బయాస్ను తగ్గించడానికి రెండు ఇంజిన్లు ప్రత్యామ్నాయ క్రమంలో రన్ అవుతాయి. మేము సర్వర్ కాకుండా MLX-LM యొక్క అత్యంత వేగవంతమైన ప్రత్యక్ష-తయారీ మార్గంతో పోల్చుతాము, కాబట్టి కొలత సర్వింగ్ ఓవర్హెడ్ కంటే మోడల్ ఎగ్జిక్యూషన్పై దృష్టి పెడుతుంది.
స్వీప్ ప్రీఫిల్ కోసం పది ప్రాంప్ట్ పొడవులు మరియు డీకోడ్ కోసం పది కాంటెక్స్ట్ పొడవులను కవర్ చేస్తుంది, 256 నుండి 128K టోకెన్ల వరకు. ఇంజిన్ స్థిర సెటప్ ఖర్చులను ఎక్కువ టోకెన్లపై విస్తరించినప్పుడు ప్రీఫిల్ త్రూపుట్ మొదట పెరుగుతుంది. ప్రీఫిల్ 4K-టోకెన్ ప్రాంప్ట్ చుట్టూ శిఖరాన్ని తాకుతుంది, ఆ తర్వాత ప్రాంప్ట్ పెరిగేకొద్దీ పది పూర్తి-అటెన్షన్ లేయర్లు ఎక్కువ పనిని చేసే కాబట్టి పడిపోతుంది. చిన్న కాంటెక్స్ట్ల వద్ద డీకోడ్ దాదాపు ఫ్లాట్గా ఉంటుంది మరియు పెరుగుతున్న KV కాష్ను చదవడం ముఖ్యమైనదిగా మారిన తర్వాత తగ్గిపోతుంది. కస్టమ్ ఇంజిన్ రికార్డ్ చేయబడిన ప్రతి పొడవు వద్ద వేగంగా ఉంటుంది.
Specialized execution floating-point operations క్రమాన్ని మార్చగలదని కారణంగా, మేము MLX-LMతో numerical consistencyను కూడా తనిఖీ చేశాము. Teacher-forced comparisonలో, రెండు engines కూడా 192 positionsలో ప్రతిదీ వద్ద అదే reference prefix నుండి next tokenను predict చేశాయి, అందువల్ల ముందరి తేడాలు తర్వాతి inputsను ప్రభావితం చేయలేదు. Lily యొక్క perplexity కేవలం 0.04% ఎక్కువగా ఉంది, మరియు అది tested positionsలో 96.35% వద్ద అదే top-ranked tokenను ఎంచుకుంది.
స్థానిక ప్లాట్ఫారమ్ కోసం నిర్మించబడింది
యాపిల్ సిలికాన్ చిన్న డేటాసెంటర్ GPU కాదు. ఇది దాని స్వంత హార్డ్వేర్ మరియు సాఫ్ట్వేర్ లక్షణాలను కలిగి ఉన్న పూర్తి స్థానిక ఇన్ఫరెన్స్ ప్లాట్ఫారమ్. యూనిఫైడ్ మెమరీ ఒకే నోడ్ ఎంత మోడల్ మరియు స్థితిని కలిగి ఉండగలదో దానిపై చాలా ఎక్కువ పరిమితిని ఇస్తుంది. M5 న్యూరల్ యాక్సిలరేటర్లు ప్రీఫిల్లో దట్టమైన మ్యా్రిక్స్ పనిని గ్రహిస్తాయి. వెక్టర్ ALUలు డీకోడ్లో బ్యాండ్విడ్త్-బౌండ్, తక్కువ-పునర్వినియోగ మిగిలిన వాటిని నిర్వహిస్తాయి.
క్యూవెన్ ప్రత్యేకత కోసం మరింత అవకాశాలను జోడిస్తుంది: ఎక్స్పర్ట్ రూటింగ్ మరియు పునరావృత స్థితిని GPU పై ఉంచండి, अनावश्यक మధ్యంతరాలను తొలగించండి, స్వతంత్ర పనిని అతివ్యాప్తి చేయండి, షేర్ చేయబడిన KV డేటాను మళ్లీ ఉపయోగించండి, మరియు వర్క్లోడ్ ఆకారానికి కర్నెల్స్ను అడాప్ట్ చేయండి.
మోడల్- మరియు ప్లాట్ఫారమ్-నిర్దిష్ట ఆప్టిమైజేషన్తో, ఒక Mac పెద్ద స్పార్స్ మోడల్ను సమర్థవంతంగా అమలు చేయగలదు. భవిష్యత్తు పని మోడళ్లు, చిప్స్ మరియు సర్వింగ్ వర్క్లోడ్ల అంతటా కవరేజీని విస్తరిస్తుంది మరియు ఒక కాన్ఫిగరేషన్పై ఇక్కడ ధృవీకరించబడిన మెకానిజమ్లను మరింత సాధారణ రన్టైమ్ పాలసీగా మారుస్తుంది.
మోడల్ ఆర్కిటెక్చర్ మరియు హార్డ్వేర్ యొక్క నిర్దిష్ట గణన మరియు మెమరీ మార్గాలు రెండింటికీ ఇంజిన్ను సరిపోల్చడం విస్తృత సూత్రం. సరిహద్దు ఓపెన్-వెయిట్ మోడళ్లు మరియు హార్డ్వేర్ అభివృద్ధి చెందుతున్న కొద్దీ, హై-పెర్ఫార్మెన్స్ స్థానిక ఇన్ఫరెన్స్ అనేది వాటి వ్యత్యాసాలను వియుక్తం చేసే వాటి కంటే రెండింటికి తగినట్లుగా రూపొందించబడిన ఇంజిన్లపై ఎక్కువగా ఆధారపడుతుంది.
ఉదాహరణ
@online{perplexity2026OptimizingOnDeviceInferenceForAppleSilicon,
author = {{Perplexity} and Yibo Wu and Lequn Chen and Kevin Hu and Phi Hoang and Claire Beamer and Jeremy Yang and Denis Yarats},
title = {{Optimizing on-device inference for Apple Silicon}},
date = {2026-09-01},
url = {https://www.perplexity.ai/hub/blog/optimizing-on-device-inference-for-apple-silicon}
}