Ndani ya cuda-convnet: tabaka za AlexNet za GPU mbili na enzi ya ImageNet

Hatua muhimu ya AlexNet ya mwaka 2012 ilitegemea uhandisi wa GPU wa kiwango cha chini (cuda-convnet), usanifu uliogawanywa wa GPU mbili, na ilichochea moja kwa moja mbio za haraka kuelekea modeli za maono ya kompyuta zenye kina na ufanisi zaidi.
1. Jinsi cuda-convnet Ilivyofanya Kazi Ndani kwa Ndani
Kabla NVIDIA haijaunda cuDNN, Alex Krizhevsky aliandika cuda-convnet moja kwa moja kwa CUDA C++ ili kupata kasi ya juu kabisa kutoka kwa GPU za awali za usanifu wa Fermi (GTX 580). Maktaba za kisasa kwa kawaida hupanua mikunjo kuwa uzidishaji mkubwa wa matriki (im2col), jambo linalotumia kiasi kikubwa sana cha kumbukumbu. Kwa kuwa kila GTX 580 ilikuwa na GB 3 tu za VRAM, Krizhevsky alibuni taratibu za GPU za moja kwa moja zilizookoa kumbukumbu.
- Mpangilio wa Kumbukumbu Unaotanguliza Kundi (CHWN). Mifumo ya kisasa hutumia NCHW (Kundi, Chaneli, Urefu, Upana) kama chaguo-msingi, ambayo huweka pikseli zote za picha moja karibu katika kumbukumbu. Krizhevsky alihifadhi tensor kwa mpangilio wa CHWN, akiweka kipimo cha kundi (N) mwisho. Wakati nyuzi 32 za GPU katika warp zilipochakata picha 32 tofauti kwenye eneo lilelile la pikseli, usomaji wao wa kumbukumbu ulikuwa mfululizo kabisa (uliounganishwa), hivyo kuongeza upana wa bendi wa VRAM hadi kiwango cha juu.
- Ugawaji wa Kumbukumbu Shiriki katika Vigae. Kusoma kutoka VRAM ya jumla huchukua mamia ya mizunguko ya saa, ilhali Kumbukumbu Shiriki iliyo kwenye chipu (KB 48 tu kwa kila Streaming Multiprocessor kwenye GTX 580) huchukua mizunguko michache tu. Vikundi vya nyuzi vilipakia vipande vidogo vya 2D vya pikseli za picha na uzani wa vichujio kwenye Kumbukumbu Shiriki, vikikokotoa makumi ya zao la nukta kabla ya kuandika matokeo ya mwisho kurudi kwenye VRAM.
- Kutumia Tena Rejista katika Kiwango cha Warp. Krizhevsky alikabidhi kila kikundi cha nyuzi kukokotoa kigae cha pikseli za matokeo katika vichujio vingi kwa wakati mmoja. Kwa kushikilia uzani wa vichujio katika rejista za haraka za GPU, kipande kimoja cha picha kilichopakiwa kutoka Kumbukumbu Shiriki kilitumiwa tena katika vichujio vingi kwa wakati mmoja, na kupunguza sana uhamishaji wa data kwenye kumbukumbu.
2. Tabaka Mahususi za AlexNet na Mgawanyo wa GPU Mbili
AlexNet ilikuwa na tabaka 8 zinazojifunza (5 za mikunjo na 3 zilizounganishwa kikamilifu) zenye jumla ya takriban vigezo milioni 60. Kwa kuwa GTX 580 moja haikuwa na zaidi ya GB 3 za VRAM zilizohitajika kwa uamilishaji, uzani, na gradienti, Krizhevsky aligawanya mtandao kiwima katika mikondo miwili sambamba.
| Tabaka | Aina | Jumla ya Vichujio / Neuroni | Mgawanyo kwa Kila GPU | Mawasiliano Kati ya GPU |
|---|---|---|---|---|
| Ingizo | Picha ya RGB | 224 × 224 × 3 | Imenakiliwa kwenye GPU zote mbili | Hakuna |
| Conv 1 | 11×11 Conv (hatua 4) + MaxPool | Vichujio 96 | Vichujio 48 kwa kila GPU | Imetengwa (Hakuna usawazishaji) |
| Conv 2 | 5×5 Conv + MaxPool | Vichujio 256 | Vichujio 128 kwa kila GPU | Imetengwa (Husoma Conv 1 ya GPU yake pekee) |
| Conv 3 | 3×3 Conv | Vichujio 384 | Vichujio 192 kwa kila GPU | Usawazishaji Kamili (Husoma ramani zote 256 kutoka GPU zote mbili) |
| Conv 4 | 3×3 Conv | Vichujio 384 | Vichujio 192 kwa kila GPU | Imetengwa (Husoma Conv 3 ya GPU yake pekee) |
| Conv 5 | 3×3 Conv + MaxPool | Vichujio 256 | Vichujio 128 kwa kila GPU | Imetengwa (Husoma Conv 4 ya GPU yake pekee) |
| FC 6 | Imeunganishwa Kikamilifu + Dropout | Neuroni 4,096 | Neuroni 2,048 kwa kila GPU | Usawazishaji Kamili (Huunganishwa na matokeo yote ya Conv 5) |
| FC 7 | Imeunganishwa Kikamilifu + Dropout | Neuroni 4,096 | Neuroni 2,048 kwa kila GPU | Usawazishaji Kamili (Huunganishwa na neuroni zote za FC 6) |
| FC 8 | Imeunganishwa Kikamilifu (Softmax) | Madarasa 1,000 | Madarasa 1,000 (Yameunganishwa) | Usawazishaji Kamili (Hutoa utabiri wa mwisho wa ImageNet) |
- Utaalamu wa Kiasili wa Sifa. Cha kuvutia, kwa kuwa Tabaka 1 na 2 hazikuwahi kuwasiliana kati ya GPU, kadi hizo mbili ziliendeleza majukumu maalumu kila mara. GPU moja ilijifunza vitambuzi vya kingo na umbile visivyotegemea rangi (vichujio vya viwango vya kijivu vinavyofanana na Gabor), huku GPU nyingine ikibobea katika mabaka na vivuli mahususi vya rangi.
- Kupunguza Vikwazo vya PCIe. Kupitisha data kwenye basi ya PCIe ya ubao mkuu kulikuwa kwa polepole. Kwa kuzuia mawasiliano kati ya GPU yawe kwenye Conv 3 na tabaka Zilizounganishwa Kikamilifu tu, Krizhevsky alifanya GPU ziendelee kukokotoa kwa kasi kamili bila kusimama kusubiri uhamishaji wa data.
3. Kilichofuata Katika Enzi ya ImageNet
Ushindi wa AlexNet ulichochea mbio za kila mwaka katika shindano la ImageNet, na kusukuma mitandao kutoka tabaka 8 hadi zaidi ya tabaka 150 ndani ya miaka mitatu tu.
- 2013 - ZFNet (Kuonyesha kwa Picha & Kurekebisha). Matthew Zeiler na Rob Fergus walianzisha mbinu za mkunjo-geuzi ili kuonyesha kile ambacho AlexNet ilikuwa ikiona hasa ndani ya tabaka zilizofichwa. Kwa kupunguza ukubwa wa kichujio cha tabaka ya kwanza ya AlexNet kutoka 11×11 hadi 7×7 na kupunguza hatua, ZFNet ilishusha kiwango cha makosa cha top-5 cha ImageNet kutoka 15.3% hadi 14.8%.
- 2014 - VGGNet (Kina Kupitia Vichujio Sawa vya 3×3). Watafiti wa Oxford walithibitisha kuwa kupanga mikunjo mingi midogo ya 3×3 juu ya mingine (hadi tabaka 16 au 19) kulifanya kazi vizuri zaidi kuliko kutumia vichujio vikubwa kimojakimoja (kama 11×11 au 5×5). Tabaka mbili za 3×3 zilizopangwa juu ya nyingine hufunika eneo lilelile la mwonekano la 5×5 kwa vigezo vichache na uamilishaji wa ziada wa ReLU usio wa mstari, na kushusha viwango vya makosa hadi 7.3%.
- 2014 - GoogLeNet / Inception (Ufanisi wa Vipimo Vingi). Google ilianzisha moduli ya Inception, ambayo iliendesha mikunjo ya 1×1, 3×3, na 5×5 sambamba ndani ya tabaka ileile na kuunganisha matokeo. Kwa kutumia mikunjo ya 1×1 yenye gharama ndogo kubana kina cha chaneli kabla ya hesabu zenye gharama kubwa, GoogLeNet ilifikia tabaka 22 na kiwango cha makosa cha 6.7% ikitumia vigezo vichache mara 12 kuliko AlexNet.
- 2015 - ResNet (Miunganisho ya Kuruka & Tabaka 152). Kupanga tu tabaka zaidi juu ya nyingine hatimaye kulisababisha usahihi wa mafunzo kushuka kwa sababu gradienti zilitoweka wakati wa uenezaji wa nyuma. Microsoft Research ilitatua hili kwa Miunganisho ya Masalio (miunganisho ya kuruka), ikiruhusu data kupita kando ya tabaka kupitia njia za mkato za utambulisho za moja kwa moja. Hili liliwezesha mitandao ya tabaka 152, iliyofikia kiwango cha makosa cha top-5 cha 3.57%, na kuzidi utendaji wa kigezo cha kiwango cha binadamu (~5%) kwa mara ya kwanza.