cuda-convnet च्या आत: AlexNet चे दुहेरी-GPU स्तर आणि ImageNet युग

2012 चा AlexNet टप्पा खालच्या स्तरावरील GPU अभियांत्रिकी (cuda-convnet) आणि विभागल्या गेलेल्या दुहेरी-GPU आर्किटेक्चरवर आधारित होता, आणि त्यामुळे अधिक खोल, अधिक कार्यक्षम संगणकीय दृष्टि मॉडेल्सकडे झपाट्याने स्पर्धा थेट सुरू झाली.
1. cuda-convnet आतून कसे काम करत होते
NVIDIA ने cuDNN तयार करण्यापूर्वी, Alex Krizhevsky ने सुरुवातीच्या Fermi-आर्किटेक्चर GPU (GTX 580) मधून कमाल वेग काढण्यासाठी cuda-convnet कच्च्या CUDA C++ मध्ये लिहिले होते. आधुनिक लायब्ररी सामान्यतः कन्व्होल्यूशनला प्रचंड मॅट्रिक्स गुणाकारात उलगडतात (im2col), ज्यामुळे प्रचंड मेमरी लागते. प्रत्येक GTX 580 कडे फक्त 3 GB VRAM होती, म्हणून Krizhevsky ने थेट, मेमरी वाचवणाऱ्या GPU रुटीन्स तयार केल्या.
- बॅच-फर्स्ट मेमरी लेआउट (CHWN). आधुनिक फ्रेमवर्क डीफॉल्टनुसार NCHW (Batch, Channels, Height, Width) वापरतात, जे एका प्रतिमेसे सर्व पिक्सेल मेमरीत एकमेकांजवळ ठेवते. Krizhevsky ने टेन्सर CHWN क्रमाने साठविले, म्हणजे बॅच डायमेन्शन (N) शेवटी. वार्पमधील 32 GPU थ्रेड्स नेमक्या त्याच पिक्सेल स्थानावर 32 वेगवेगळ्या प्रतिमांवर काम करत असताना, त्यांचे मेमरी रीड्स पूर्णपणे सलग (coalesced) होते, त्यामुळे VRAM बँडविड्थ कमालीचा वापरला जात होता.
- शेअर्ड मेमरी टायलिंग. ग्लोबल VRAM मधून वाचण्यास शेकडो क्लॉक सायकल लागतात, तर ऑन-चिप शेअर्ड मेमरीत (GTX 580 वर प्रत्येक Streaming Multiprocessor मागे फक्त 48 KB) फक्त काही सायकल लागतात. थ्रेड ब्लॉक्स प्रतिमेच्या पिक्सेल आणि फिल्टर वजनांचे छोटे 2D पॅच शेअर्ड मेमरीत लोड करत, आणि अंतिम निकाल VRAM मध्ये परत लिहिण्यापूर्वी डझनभर डॉट प्रोडक्ट मोजत.
- वार्प-स्तरीय रजिस्टर पुनर्वापर. Krizhevsky ने प्रत्येक थ्रेड ब्लॉकला एकाच वेळी अनेक फिल्टरवर आउटपुट पिक्सेलचा टाइल मोजण्याचे काम दिले. फिल्टर वजने जलद GPU रजिस्टरमध्ये ठेवल्यामुळे, शेअर्ड मेमरीतून लोड केलेला एकच प्रतिमा पॅच एकाच वेळी अनेक फिल्टरवर पुन्हा वापरता येत होता, त्यामुळे मेमरी ट्रॅफिक लक्षणीयरीत्या कमी झाला.
2. AlexNet चे विशिष्ट स्तर आणि दुहेरी-GPU विभागणी
AlexNet मध्ये 8 शिकल्या गेलेल्या स्तर होते (5 कन्व्होल्यूशनल आणि 3 पूर्णपणे जोडलेले), एकूण साधारण 60 दशलक्ष पॅरामीटर्स. ऍक्टिव्हेशन, वजने आणि ग्रेडियंटसाठी लागणारी 3 GB+ VRAM एका GTX 580 कडे नव्हती, म्हणून Krizhevsky ने नेटवर्क उभ्या दिशेने दोन समांतर प्रवाहांत विभागले.
| स्तर | प्रकार | एकूण फिल्टर / न्यूरॉन | प्रत्येक GPU मागे विभागणी | GPU मधला संवाद |
|---|---|---|---|---|
| इनपुट | RGB प्रतिमा | 224 × 224 × 3 | दोन्ही GPU वर नकल केलेले | काही नाही |
| Conv 1 | 11×11 Conv (stride 4) + MaxPool | 96 फिल्टर | प्रत्येक GPU मागे 48 फिल्टर | विभक्त (सिंक नाही) |
| Conv 2 | 5×5 Conv + MaxPool | 256 फिल्टर | प्रत्येक GPU मागे 128 फिल्टर | विभक्त (फक्त स्वतःच्या GPU चे Conv 1 वाचते) |
| Conv 3 | 3×3 Conv | 384 फिल्टर | प्रत्येक GPU मागे 192 फिल्टर | पूर्ण सिंक (दोन्ही GPU मधील सर्व 256 मॅप वाचते) |
| Conv 4 | 3×3 Conv | 384 फिल्टर | प्रत्येक GPU मागे 192 फिल्टर | विभक्त (फक्त स्वतःच्या GPU चे Conv 3 वाचते) |
| Conv 5 | 3×3 Conv + MaxPool | 256 फिल्टर | प्रत्येक GPU मागे 128 फिल्टर | विभक्त (फक्त स्वतःच्या GPU चे Conv 4 वाचते) |
| FC 6 | पूर्णपणे जोडलेले + Dropout | 4,096 न्यूरॉन | प्रत्येक GPU मागे 2,048 न्यूरॉन | पूर्ण सिंक (सर्व Conv 5 आउटपुटशी जोडते) |
| FC 7 | पूर्णपणे जोडलेले + Dropout | 4,096 न्यूरॉन | प्रत्येक GPU मागे 2,048 न्यूरॉन | पूर्ण सिंक (सर्व FC 6 न्यूरॉनशी जोडते) |
| FC 8 | पूर्णपणे जोडलेले (Softmax) | 1,000 वर्ग | 1,000 वर्ग (एकत्रित) | पूर्ण सिंक (अंतिम ImageNet अंदाज देते) |
- नैसर्गिक फीचर विशेषीकरण. मनोरंजक बाब म्हणजे, स्तर 1 आणि 2 GPU मध्ये कधीही संवाद साधत नव्हते, त्यामुळे दोन्ही कार्ड सातत्याने विशिष्ट भूमिका विकसित करत गेली. एका GPU ने रंग-तटस्थ कडा आणि टेक्स्चर डिटेक्टर (ग्रे-स्केल Gabor सारखे फिल्टर) शिकले, तर दुसरे GPU रंग-विशिष्ट ठिपके आणि रंगछटांमध्ये प्रभुत्व मिळवत गेले.
- PCIe अडथळा कमी करणे. मदरबोर्डच्या PCIe बसवरून डेटा पाठवणे संथ होते. GPU मधला संवाद काटेकोरपणे Conv 3 आणि पूर्णपणे जोडलेल्या स्तरांपुरताच मर्यादित ठेवून, Krizhevsky ने GPU डेटा ट्रान्सफरसाठी अडून न राहता पूर्ण वेगाने गणना करू दिली.
3. ImageNet युगात पुढे काय घडले
AlexNet च्या विजयाने ImageNet स्पर्धेत वार्षिक शर्यत पेटवली, ज्यामुळे नेटवर्क केवळ तीन वर्षांत 8 स्तरांवरून 150 हून अधिक स्तरांपर्यंत पोहोचली.
- 2013 – ZFNet (दृश्यमान करणे & सुधारणे). Matthew Zeiler आणि Rob Fergus यांनी AlexNet लपलेल्या स्तरांमध्ये खरोखर काय पाहत आहे हे दृश्यमान करण्यासाठी डीकन्व्होल्यूशन तंत्रे आणली. AlexNet च्या पहिल्या स्तराच्या फिल्टरचा आकार 11×11 वरून 7×7 करून आणि स्ट्राइड कमी करून, ZFNet ने ImageNet top-5 त्रुटी दर 15.3% वरून 14.8% वर आणला.
- 2014 – VGGNet (एकसारख्या 3×3 फिल्टरद्वारे खोल). Oxford च्या संशोधकांनी सिद्ध केले की अनेक छोटे 3×3 कन्व्होल्यूशन (16 किंवा 19 स्तरांपर्यंत) रचणे हे एकल मोठे फिल्टर (उदा. 11×11 किंवा 5×5) वापरण्यापेक्षा चांगले काम करते. दोन रचलेले 3×3 स्तर कमी पॅरामीटर्स आणि अतिरिक्त बिगर-रेषीय ReLU ऍक्टिव्हेशनसह तोच 5×5 दृश्य क्षेत्र व्यापतात, त्यामुळे त्रुटी दर 7.3% पर्यंत खाली आला.
- 2014 – GoogLeNet / Inception (बहु-स्केल कार्यक्षमता). Google ने Inception मॉड्यूल सादर केले, जे एकाच स्तरात 1×1, 3×3 आणि 5×5 कन्व्होल्यूशन समांतर चालवत होते आणि आउटपुट विलीन करत होते. महाग गणितापूर्वी चॅनेल खोल संकुचित करण्यासाठी स्वस्त 1×1 कन्व्होल्यूशन वापरून, GoogLeNet AlexNet पेक्षा 12 पट कमी पॅरामीटर्स वापरून 22 स्तर आणि 6.7% त्रुटी दर गाठले.
- 2015 – ResNet (स्किप कनेक्शन & 152 स्तर). अधिक स्तर रचल्यामुळे शेवटी प्रशिक्षण अचूकता बिघडू लागली कारण बॅकप्रॉपगेशनदरम्यान ग्रेडियंट अदृश्य होत होते. Microsoft Research ने यावर रेझिड्युअल कनेक्शन (स्किप कनेक्शन) द्वारे उपाय शोधला, ज्यामुळे डेटा थेट आयडेन्टिटी शॉर्टकटने स्तर वगळू शकतो. यामुळे 152-स्तरीय नेटवर्क शक्य झाली, 3.57% top-5 त्रुटी दर मिळवून — प्रथमच मानवी-स्तरीय बेंचमार्क (~5%) ला मागे टाकले.