AISubHub/AI समाचार
डेवलपर

विस्तृत विश्लेषण · लगभग 8 मिनट पढ़ना

PyTorch MPS: डिकोडिंग, गणना की शुद्धता और ड्राइवर मेमोरी को अलग मापना जरूरी है

Hugging Face की PyTorch टीम 2.15 रिलीज़ कैंडिडेट के MPS बदलाव समझाती है; समूहित डिकोडिंग, FP8 भंडारण, पैडिंग और भविष्य के 2.16 कार्य के प्रमाण अलग हैं।

यहाँ प्रकाशित
स्रोत की तारीख
स्रोत जाँचा गया

Hugging Face के PyTorch योगदानकर्ताओं का 20 अक्टूबर का तकनीकी लेख समझाता है कि समर्पित Metal कर्नेल, Apple silicon पर MPS बैकएंड का काम कैसे बदलते हैं। इसमें PyTorch 2.15 रिलीज़ कैंडिडेट को स्थापित करने का रास्ता और 2.16 की अलग झलक दी गई है। इसका उपयोग विशिष्ट बाधाओं और मापों को समझने में है, किसी ऐसे एक त्वरण गुणक में नहीं जो हर Mac कार्यभार पर लागू हो।

समाचार सुनें

यह लेख सुनें या समाचार लगातार चलाएँ।

PyTorch MPS: डिकोडिंग, गणना की शुद्धता और ड्राइवर मेमोरी को अलग मापना जरूरी है

पढ़ने की तैयारी हो रही है…

डिवाइस की आवाज़

वाक् प्रक्रिया आपके ब्राउज़र या डिवाइस में होती है। AISubHub पाठ किसी ऑडियो API को नहीं भेजता। आवाज़ों और लॉक स्क्रीन पर चलने की सुविधा डिवाइस पर निर्भर है।

जारी करने पर छोटा वाक्यांश दोहराया जा सकता है।

मुख्य बातें

  • दस्तावेज़ में Apple silicon, macOS 15 या बाद का संस्करण और Python 3.11 या बाद का संस्करण आवश्यक हैं। लेख 2.15 को रिलीज़ कैंडिडेट बताता है और 2.16 के nightly संस्करणों या अभी समीक्षा में चल रहे काम को अलग रखता है।
  • समूहित मैट्रिक्स गुणन की डिकोडिंग के लिए विशेष पथ, M3 Ultra और torch.compile वाले दिखाए गए प्रयोगों में लगभग 1.3 गुना थ्रूपुट देता है। अलग softmax ग्राफ एक ऑपरेटर का समय माइक्रोसेकंड में मापता है, पूरे उत्तर की विलंबता नहीं।
  • Wan2.2 के एक 28-टाइल VAE डिकोड में रिपोर्ट की गई कुल ड्राइवर मेमोरी की चोटी 270.135 से 8.108 GiB होती है, जबकि आवंटक द्वारा आरक्षित मेमोरी की चोटी 8.070 GiB ही रहती है। ये अलग मेमोरी माप हैं।

1. पहले संस्करण और निष्पादन के बदले जा रहे हिस्से को पहचानें

लेखक अपना परिचय Hugging Face की PyTorch टीम के रूप में देते हैं, जो PyTorch के अनुरक्षकों और अन्य योगदानकर्ताओं के साथ मूल परियोजना में काम करती है। उनका स्पष्टीकरण चुने हुए MPSGraph पथों को समर्पित Metal कर्नेल से बदलने पर केंद्रित है। यह बैकएंड इंजीनियरिंग है: मॉडलों को लाभ मिल सकता है, लेकिन इससे नया मॉडल जारी नहीं हो जाता; तेज़ कर्नेल बेहतर मॉडल उत्तरों का प्रमाण भी नहीं है। बताए गए परिवेश के लिए Apple silicon वाला Mac, macOS 15 या बाद का संस्करण और Python 3.11 या बाद का संस्करण चाहिए।

लेख स्पष्ट रूप से 2.15 रिलीज़ कैंडिडेट को अलग परिवेश में आज़माने को कहता है। बाद के हिस्से 2.16 के बदलावों पर हैं, जो nightly संस्करणों में उपलब्ध हो सकते हैं या अभी समीक्षा में हैं। AISubHub ने बाद की स्थिर रिलीज़ की स्थिति अलग से नहीं जाँची। दोहराए जा सकने वाले तुलनात्मक परीक्षण के लिए इन हिस्सों के बीच जाते समय सटीक बिल्ड, उपकरण, dtype, कंपाइलर सेटिंग और कार्यभार दर्ज करें। अन्यथा भविष्य की किसी अनुकूलन विधि को परीक्षण किए गए संस्करण की सुविधा समझना आसान है।

2. डिकोडिंग का विशेष पथ छोटे, बार-बार होने वाले काम को बदलता है

प्रीफिल में मॉडल इनपुट का एक खंड संसाधित करता है; डिकोडिंग में अगले टोकन के लिए छोटा इनपुट बार-बार संसाधित होता है। लेख F.linear को मौजूदा मैट्रिक्स-वेक्टर कर्नेल और उपयुक्त बायस जोड़ को साथ निष्पादित करने वाले पथ से जोड़ता है। BF16 परतों के 96 आकारों में रिपोर्ट किया गया ज्यामितीय औसत त्वरण 1.23 गुना है। छोटे प्रोजेक्शन अधिक लाभ पाते हैं, जबकि पहले से बैंडविड्थ सीमा के करीब बड़ी परतें लगभग एक गुना पर रहती हैं। ये अलग-अलग परतों के माप हैं, पूरे मॉडल का औसत नहीं।

मिश्रित विशेषज्ञों वाले मॉडल के निष्पादन में मूल समूहित मैट्रिक्स गुणन, समूहों के ऑफसेट GPU पर पढ़ता है; उन्हें CPU पर कॉपी करके हर समूह पर लूप नहीं चलाता। डिकोडिंग विशेष पथ का दिखाया गया ग्राफ M3 Ultra और torch.compile उपयोग करता है: Qwen3.6-35B-A3B का थ्रूपुट 512 संदर्भ पर 38.7 से 51.7 टोकन प्रति सेकंड और 2048 संदर्भ पर 36.8 से 48.7 होता है। लेख अलग से 2.14 के मुकाबले पूरे संस्करणों के बड़े लाभ भी बताता है। वे तुलनाएँ, लगभग 1.3 गुना वाला कर्नेल तुलनात्मक माप और आगे के 2.16 माप अलग आधार रखते हैं; उन्हें जोड़ना या गुणा करना उचित नहीं है।

3. FP8 भंडारण और softmax का समय अलग सवालों के उत्तर हैं

FP8 की नई सुविधा torch.float8_e4m3fn टेंसर का समर्थन है: हर मान के लिए एक बाइट, जबकि FP16 या BF16 में दो बाइट होते हैं। F.scaled_mm पूरे टेंसर के स्तर और प्रत्येक पंक्ति के स्तर पर स्केलिंग देता है। इससे समर्थित टेंसरों का भंडारण घट सकता है, लेकिन पूरे अनुप्रयोग की मेमोरी आधी नहीं हो जाती: दूसरे टेंसर, कार्यशील बफर और रनटाइम आवंटन बने रहते हैं। उदाहरण की क्वांटाइज़ेशन और आउटपुट dtype भी संख्यात्मक व्यवहार को प्रभावित करती हैं। लेख मूल FP8 मैट्रिक्स गुणन को भविष्य के Metal शेडर कार्य की नींव बताता है; इसलिए मौजूदा भंडारण समर्थन को सार्वभौमिक हार्डवेयर त्वरण नहीं कहना चाहिए।

softmax ग्राफ अलग प्रयोग है। 128,256 आकार की शब्दावली वाली एक FP32 logits पंक्ति के लिए उसमें MPSGraph पर 57.4 माइक्रोसेकंड और Metal कर्नेल पर 7.1 दिखाए गए हैं;लेख के गद्य में इन्हें लगभग 57 और 7 किया गया है। लगभग आठ गुना तेज़ softmax, टोकन सैंपलिंग के एक चरण को छोटा कर सकता है, पर कुल जनरेशन समय दूसरे कामों पर भी निर्भर है। AISubHub का विश्लेषण: महंगे ऑपरेटर के साथ पूरा पथ भी मापें और इकाइयाँ सुरक्षित रखें, ताकि प्रति कॉल माइक्रोसेकंड को बिना प्रमाण प्रति उत्तर सेकंड के दावे में न बदल दिया जाए।

4. पैडिंग टेंसर आवंटक के बाहर की मेमोरी उजागर करती है

Wan2.2 का उदाहरण खास तौर पर Wan-AI/Wan2.2-TI2V-5B-Diffusers का है, जिसमें 28-टाइल VAE डिकोड के दौरान स्थिर पैडिंग की 8,764 कॉल होती हैं। पैडिंग को Metal पर ले जाने से रिपोर्ट की गई कुल ड्राइवर मेमोरी की चोटी 270.135 से 8.108 GiB होती है। लेकिन दोनों विन्यासों में आवंटक द्वारा आरक्षित चोटी 8.070 GiB है, और वर्तमान टेंसर आवंटन की चोटी केवल 4.422 से 4.095 GiB बदलती है। अकेले टेंसर आवंटक का माप इस विशेष समस्या का अधिकांश हिस्सा नहीं दिखाता। इसका अर्थ यह नहीं कि अब हर वीडियो मॉडल को केवल आठ GiB चाहिए।

शुद्धता अलग लाभ है। Qwen-Image-2.1 के VAE को एन्कोड करके फिर डिकोड करने वाले परीक्षण में, लेखक बताते हैं कि पैडिंग सुधार के बाद CPU संदर्भ से मिलान का PSNR 10.06 से 29.95 dB हुआ। यह जाँचे गए पुनर्निर्माण कार्यप्रवाह का माप है, सामान्य छवि-निर्माण गुणवत्ता स्कोर नहीं। दूसरे बदलावों में सम्मिश्र मानों वाला रैखिक बीजगणित, पिछली दिशा की गणना के पथ और अटेंशन ब्रॉडकास्टिंग शामिल हैं। इसलिए उपयोगी अपग्रेड जाँच में थ्रूपुट के साथ संख्यात्मक आउटपुट और ड्राइवर मेमोरी की चोटी भी होनी चाहिए, और मॉडल तथा ऑपरेशन के आकार समान रखने चाहिए।

5. भविष्य का काम और स्थानीय सत्यापन अलग दिखाई दें

2.16 की झलक में कमांड बफर जमा करने के बदलाव, पूरी तरह Metal पर चलने वाला अटेंशन और MPSGraph से अन्य स्थानांतरण शामिल हैं। लेखक चेताते हैं कि कुछ काम अभी समीक्षा में है। भविष्य के अटेंशन उदाहरण M5 Pro और खास हेड आयाम भी इस्तेमाल करते हैं, जो M3 Ultra वाले डिकोडिंग ग्राफ से अलग हैं। न उन आँकड़ों को और न किसी एक शामिल लाइब्रेरी के आकार घटने को, किसी भी Mac पर 2.15 कैंडिडेट स्थापित करने का मापा हुआ लाभ बताना चाहिए।

सार्वजनिक MPS स्ट्रीम और टेंसर की स्ट्रीम दर्ज करने का समर्थन Python कॉल करने वालों को शेड्यूलिंग पर अधिक नियंत्रण देता है, लेकिन उदाहरण में परिणाम पढ़ने से पहले अब भी सिंक्रोनाइज़ किया जाता है। लेख शेष ऑपरेशन सीमाएँ और कंपाइलेशन ग्राफ में रुकावटें हटाने का जारी काम भी बताता है। AISubHub की व्यावहारिक व्याख्या है कि अलग परिवेश में अनुप्रयोग के वास्तविक dtype, आकार, सिंक्रोनाइज़ेशन और आउटपुट सहनशीलता का परीक्षण करें। हमने पूरा लेख और तीनों ग्राफ पढ़े; PyTorch स्थापित नहीं किया, उदाहरण नहीं चलाए, लिंक किए गए pull request नहीं जाँचे और समय, गुणवत्ता या मेमोरी के नतीजे दोहराए नहीं।

यह क्यों अहम है

AISubHub का विश्लेषण: बैकएंड अपग्रेड का मूल्यांकन करते समय पूरे डिकोडिंग थ्रूपुट, ऑपरेटर समय, आउटपुट शुद्धता और ड्राइवर मेमोरी की चोटियों के अलग रिकॉर्ड रखें। इससे पता चलता है कि रिपोर्ट किया गया कौन-सा बदलाव वास्तविक अनुप्रयोग की बाधा से मेल खाता है, बिना किसी कर्नेल नतीजे को सभी मॉडलों पर लागू दावा बनाए।

सीमाएँ और उपलब्धता

सभी माप Hugging Face के PyTorch योगदानकर्ताओं और उनके बताए विन्यासों के हैं। लेख 2.15 रिलीज़ कैंडिडेट और 2.16 के काम में अंतर करता है; बाद की स्थिर उपलब्धता अलग से सत्यापित नहीं की गई। AISubHub ने सॉफ्टवेयर स्थापित या निष्पादित नहीं किया, बेंचमार्क दोहराए नहीं और लिंक किए कार्यान्वयन नहीं जाँचे। इससे सार्वभौमिक गति, मेमोरी में समा जाने या संख्यात्मक गुणवत्ता की कोई गारंटी नहीं मिलती।

स्रोत और प्रमाण

Hugging Face PyTorch team: MPS in PyTorch 2.15

स्रोत की तारीख: · स्रोत जाँचा गया:

AI की सहायता से लिखे लेखों को दिए गए प्राथमिक स्रोतों से जाँचा जाता है। प्रदाता के दावों का श्रेय स्पष्ट है; सूची में होना समर्थन नहीं है।