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++ වලින් ලීවේය. නූතන පුස්තකාල සාමාන්යයෙන් convolution විශාල න්යාස ගුණ කිරීම් බවට (im2col) විහිදුවන අතර, එයින් මතකය විශාල ප්රමාණයක් වැය වේ. GTX 580 එකක VRAM තිබුණේ 3 GB ක් පමණක් නිසා, Krizhevsky සෘජු, මතකය ඉතිරි කරන GPU රුටින නිර්මාණය කළේය.
- Batch-First මතක පිරිසැලසුම (CHWN). නූතන රාමු පෙරනිමියෙන් NCHW (Batch, Channels, Height, Width) භාවිත කරන අතර, එහිදී එක් රූපයක සියලු පික්සල මතකයේ එකිනෙක ළඟ තබයි. Krizhevsky tensor CHWN පිළිවෙළට ගබඩා කළේය; එනම් batch මානය (N) අගට තැබුවේය. warp එකක GPU නූල් 32 ක් එකම පික්සල ස්ථානයේ වෙනස් රූප 32 ක් සැකසූ විට, ඒවායේ මතක කියවීම් සම්පූර්ණයෙන්ම සන්නිවේශිත (coalesced) වූ අතර, VRAM කලාප පළල උපරිම ලෙස භාවිත විය.
- Shared Memory Tiling. ගෝලීය VRAM වෙතින් කියවීමට ඔරලෝසු චක්ර සිය ගණනක් ගත වන අතර, චිපය මත ඇති Shared Memory (GTX 580 හි Streaming Multiprocessor එකකට 48 KB ක් පමණි) සඳහා ගත වන්නේ චක්ර කිහිපයක් පමණි. නූල් කුට්ටි රූප පික්සල සහ පෙරහන් බර වල කුඩා 2D කොටස් Shared Memory වෙත පූරණය කර, අවසාන ප්රතිඵල නැවත VRAM වෙත ලිවීමට පෙර ඩොට් ගුණිත දුසිම් ගණනක් ගණනය කළේය.
- Warp-Level Register Reuse. Krizhevsky සෑම නූල් කුට්ටියකටම එකවර පෙරහන් කිහිපයක් හරහා ප්රතිදාන පික්සල වල ටයිල් එකක් ගණනය කිරීමට පැවරුවේය. පෙරහන් බර වේගවත් GPU රෙජිස්ටර වල තබාගැනීමෙන්, Shared Memory වෙතින් පූරණය කළ එක් රූප කොටසක් එකවර බොහෝ පෙරහන් හරහා නැවත භාවිත වූ අතර, මතක ගමනාගමනය විශාල ලෙස අඩු විය.
2. AlexNet හි විශේෂිත ස්ථර සහ GPU දෙකකට බෙදීම
AlexNet හි ඉගෙනගත් ස්ථර 8 ක් (convolutional 5 ක් සහ සම්පූර්ණයෙන්ම සම්බන්ධිත 3 ක්) තිබූ අතර, සමස්ත පරාමිති ප්රමාණය ආසන්න වශයෙන් මිලියන 60 කි. activations, බර සහ gradients සඳහා අවශ්ය 3 GB+ VRAM තනි GTX 580 එකක නොතිබූ නිසා, Krizhevsky ජාලය සිරස් අතට සමාන්තර ධාරා දෙකකට බෙදීය.
| ස්ථරය | වර්ගය | මුළු පෙරහන් / නියුරෝන | GPU එකකට බෙදීම | GPU අතර සන්නිවේදනය |
|---|---|---|---|---|
| ආදානය | RGB රූපය | 224 × 224 × 3 | GPU දෙකටම පිටපත් කෙරේ | නැත |
| Conv 1 | 11×11 Conv (stride 4) + MaxPool | පෙරහන් 96 | GPU එකකට පෙරහන් 48 | හුදකලා (sync නැත) |
| Conv 2 | 5×5 Conv + MaxPool | පෙරහන් 256 | GPU එකකට පෙරහන් 128 | හුදකලා (කියවන්නේ තමන්ගේ GPU එකේ Conv 1 පමණි) |
| Conv 3 | 3×3 Conv | පෙරහන් 384 | GPU එකකට පෙරහන් 192 | සම්පූර්ණ Sync (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 | සම්පූර්ණ Sync (Conv 5 ප්රතිදාන සියල්ලට සම්බන්ධ වේ) |
| FC 7 | සම්පූර්ණයෙන් සම්බන්ධිත + Dropout | නියුරෝන 4,096 | GPU එකකට නියුරෝන 2,048 | සම්පූර්ණ Sync (FC 6 නියුරෝන සියල්ලට සම්බන්ධ වේ) |
| FC 8 | සම්පූර්ණයෙන් සම්බන්ධිත (Softmax) | පන්ති 1,000 | පන්ති 1,000 (ඒකාබද්ධ) | සම්පූර්ණ Sync (අවසන් 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 සැඟවුණු ස්ථර තුළ සැබැවින්ම දකින දේ දෘශ්යමාන කිරීමට deconvolution ක්රම හඳුන්වා දුන්හ. AlexNet හි පළමු ස්ථරයේ පෙරහන් ප්රමාණය 11×11 සිට 7×7 දක්වා කුඩා කර stride අඩු කිරීමෙන්, ZFNet විසින් ImageNet top-5 දෝෂ අනුපාතය 15.3% සිට 14.8% දක්වා අඩු කළේය.
- 2014 – VGGNet (ඒකාකාර 3×3 පෙරහන් හරහා ගැඹුර). Oxford පර්යේෂකයෝ කුඩා 3×3 convolution රාශියක් (ස්ථර 16 හෝ 19 දක්වා) ගොඩගැසීම තනි විශාල පෙරහන් (11×11 හෝ 5×5 වැනි) භාවිතයට වඩා හොඳින් ක්රියා කරන බව ඔප්පු කළහ. ගොඩගැසූ 3×3 ස්ථර දෙකක් අඩු පරාමිති සහ අමතර රේඛීය නොවන ReLU activations සමඟ එම 5×5 දැකීමේ ප්රදේශයම ආවරණය කරන අතර, දෝෂ අනුපාත 7.3% දක්වා පහත හෙලීය.
- 2014 – GoogLeNet / Inception (බහු-පරිමාණ කාර්යක්ෂමතාව). Google විසින් එකම ස්ථරය තුළ 1×1, 3×3 සහ 5×5 convolution සමාන්තරව ධාවනය කර ප්රතිදාන ඒකාබද්ධ කළ Inception මොඩියුලය හඳුන්වා දුන්නේය. මිල අධික ගණිතයට පෙර නාලිකා ගැඹුර සම්පීඩනය කිරීමට ලාභ 1×1 convolution භාවිත කිරීමෙන්, GoogLeNet ස්ථර 22 ක් සහ 6.7% දෝෂ අනුපාතයක් ලබාගත් අතර, AlexNet ට වඩා පරාමිති 12 ගුණයක් අඩුවෙන් භාවිත කළේය.
- 2015 – ResNet (Skip Connections සහ ස්ථර 152). හුදෙක් තවත් ස්ථර ගොඩගැසීම, backpropagation අතරතුර gradients අතුරුදහන් වීම නිසා අවසානයේ පුහුණු නිරවද්යතාව පිරිහීමට හේතු විය. Microsoft Research මෙය Residual Connections (skip connections) මගින් විසඳූ අතර, ඒවා සෘජු අනන්යතා කෙටිමං හරහා දත්තවලට ස්ථර මඟහැර යාමට ඉඩ දෙයි. මෙය ස්ථර 152 ක ජාල විවෘත කළ අතර, 3.57% top-5 දෝෂ අනුපාතයක් ලබා, පළමු වරට මානව මට්ටමේ මිණුම් ලකුණු කාර්ය සාධනය (~5%) අභිබවා ගියේය.