cuda-convnet-இன் உள்நோக்குப் பார்வை: AlexNet-இன் இரட்டை GPU பிரிவும் ImageNet சகாப்தமும்

Processor Die பகுதியின் விளக்கப் படம்; கட்டுரையில் குறிப்பிடப்படும் NVIDIA GPU அல்ல.
2012-ஆம் ஆண்டின் AlexNet மைல்கல் தாழ்மட்ட GPU பொறியியல் (cuda-convnet) மற்றும் பிரிக்கப்பட்ட இரட்டை GPU கட்டமைப்பைச் சார்ந்திருந்தது; மேலும் ஆழமான, மேலும் திறமையான computer vision மாதிரிகள் நோக்கிய வேகமான போட்டியையும் அது நேரடியாகத் தூண்டியது.
1. cuda-convnet உட்புறமாக எவ்வாறு வேலை செய்தது
NVIDIA cuDNN-ஐ உருவாக்குவதற்கு முன், Alex Krizhevsky ஆரம்பகால Fermi-கட்டமைப்பு GPU-களிலிருந்து (GTX 580) அதிகபட்ச வேகத்தைப் பெற cuda-convnet-ஐ மூல CUDA C++-இல் எழுதினார். நவீன நூலகங்கள் (libraries) வழக்கமாக convolution-களை பெரிய matrix multiplication-களாக (im2col) விரித்துச் செய்கின்றன; இது மிக அதிக அளவு நினைவகத்தைப் பயன்படுத்துகிறது. ஒவ்வொரு GTX 580-இலும் 3 GB VRAM மட்டுமே இருந்ததால், Krizhevsky நேரடியான, நினைவகத்தைச் சேமிக்கும் GPU நடைமுறைகளை (routines) வடிவமைத்தார்.
- Batch-First நினைவக அமைப்பு (CHWN). நவீன framework-கள் NCHW (Batch, Channels, Height, Width) வடிவத்தையே முன்னிருப்பாகக் கொண்டுள்ளன; அது ஒரே படத்தின் எல்லா pixel-களையும் நினைவகத்தில் அடுத்தடுத்து வைக்கிறது. Krizhevsky tensor-களை CHWN ஒழுங்கில், batch பரிமாணத்தை (N) கடைசியாக வைத்துச் சேமித்தார். ஒரு warp-இல் உள்ள 32 GPU thread-கள் 32 வெவ்வேறு படங்களில் சரியாக அதே pixel இடத்தைச் செயலாக்கியபோது, அவற்றின் நினைவக வாசிப்புகள் முற்றிலும் தொடர்ச்சியாக (coalesced) இருந்தன; இதனால் VRAM bandwidth அதிகபட்சமாகப் பயன்படுத்தப்பட்டது.
- Shared Memory Tiling. Global VRAM-இலிருந்து வாசிக்க நூற்றுக்கணக்கான clock cycle-கள் ஆகும்; அதேசமயம் சிலிக்கான் சில்லின் மீதுள்ள Shared Memory (GTX 580-இல் ஒவ்வொரு Streaming Multiprocessor-க்கும் வெறும் 48 KB மட்டுமே) சில cycle-களிலேயே கிடைக்கும். Thread block-கள் படத்தின் சிறிய 2D துண்டுகளையும் filter weight-களையும் Shared Memory-க்கு ஏற்றி, இறுதி முடிவுகளை மீண்டும் VRAM-இல் எழுதுவதற்கு முன் பல்டஜன் dot product-களைக் கணக்கிட்டன.
- Warp-மட்ட Register மறுபயன்பாடு. Krizhevsky ஒவ்வொரு thread block-ஐயும் ஒரே நேரத்தில் பல filter-களுக்கான output pixel-களின் ஒரு tile-ஐக் கணக்கிட ஒதுக்கினார். Filter weight-களை வேகமான GPU register-களில் வைத்திருந்ததால், Shared Memory-இலிருந்து ஏற்றப்பட்ட ஒரே படத் துண்டு ஒரே நேரத்தில் பல filter-களில் மீண்டும் பயன்படுத்தப்பட்டது; இது நினைவகப் போக்குவரத்தை (memory traffic) பெரிதும் குறைத்தது.
2. AlexNet-இன் குறிப்பிட்ட Layer-களும் இரட்டை GPU பிரிவும்
AlexNet-இல் 8 கற்றல் layer-கள் (5 convolutional, 3 fully connected) இருந்தன; மொத்தம் சுமார் 60 மில்லியன் parameter-கள். Activation-கள், weight-கள், gradient-கள் ஆகியவற்றுக்குத் தேவையான 3 GB+ VRAM ஒரே GTX 580-இல் இல்லாததால், Krizhevsky வலையமைப்பைச் செங்குத்தாக இரு இணையான கிளைகளாகப் பிரித்தார்.
| Layer | வகை | மொத்த Filter-கள் / Neuron-கள் | GPU தலா பிரிவு | GPU-களுக்கிடையிலான தொடர்பு |
|---|---|---|---|---|
| Input | RGB Image | 224 × 224 × 3 | இரு GPU-களுக்கும் நகல் | இல்லை |
| Conv 1 | 11×11 Conv (stride 4) + MaxPool | 96 filter-கள் | GPU தலா 48 filter-கள் | தனிமைப்படுத்தப்பட்டது (Sync இல்லை) |
| Conv 2 | 5×5 Conv + MaxPool | 256 filter-கள் | GPU தலா 128 filter-கள் | தனிமைப்படுத்தப்பட்டது (சொந்த GPU-இன் Conv 1-ஐ மட்டுமே வாசிக்கிறது) |
| Conv 3 | 3×3 Conv | 384 filter-கள் | GPU தலா 192 filter-கள் | முழு Sync (இரு GPU-களின் 256 map-களையும் வாசிக்கிறது) |
| Conv 4 | 3×3 Conv | 384 filter-கள் | GPU தலா 192 filter-கள் | தனிமைப்படுத்தப்பட்டது (சொந்த GPU-இன் Conv 3-ஐ மட்டுமே வாசிக்கிறது) |
| Conv 5 | 3×3 Conv + MaxPool | 256 filter-கள் | GPU தலா 128 filter-கள் | தனிமைப்படுத்தப்பட்டது (சொந்த GPU-இன் Conv 4-ஐ மட்டுமே வாசிக்கிறது) |
| FC 6 | Fully Connected + Dropout | 4,096 neuron-கள் | GPU தலா 2,048 neuron-கள் | முழு Sync (Conv 5-இன் எல்லா output-களுடனும் இணைக்கிறது) |
| FC 7 | Fully Connected + Dropout | 4,096 neuron-கள் | GPU தலா 2,048 neuron-கள் | முழு Sync (FC 6-இன் எல்லா neuron-களுடனும் இணைக்கிறது) |
| FC 8 | Fully Connected (Softmax) | 1,000 வகுப்புகள் | 1,000 வகுப்புகள் (ஒன்றிணைந்து) | முழு Sync (இறுதி ImageNet கணிப்புகளை வெளியிடுகிறது) |
- இயற்கையான அம்சச் சிறப்புமயமாதல் (Natural Feature Specialization). சுவாரஸ்யமாக, Layer 1 மற்றும் 2 GPU-களுக்கிடையில் ஒருபோதும் தொடர்பு கொள்ளாததால், இரு அட்டைகளும் தொடர்ந்து சிறப்புமயமான பணிகளை வளர்த்துக்கொண்டன. ஒரு GPU நிறம் சாராத விளிம்பு (edge) மற்றும் அமைப்பு (texture) கண்டறிவான்களை (grayscale Gabor போன்ற filter-கள்) கற்றது; மற்ற GPU நிறம் சார்ந்த திட்டுகள் (blob) மற்றும் நிறங்களில் (hue) சிறப்புப் பெற்றது.
- PCIe நெரிசலைக் (bottleneck) குறைத்தல். Motherboard-இன் PCIe bus வழியாக தரவு அனுப்புவது மெதுவாக இருந்தது. GPU-களுக்கிடையிலான தொடர்பைக் கண்டிப்பாக Conv 3 மற்றும் Fully Connected layer-களுக்கு மட்டுமே கட்டுப்படுத்தியதால், Krizhevsky தரவுப் பரிமாற்றத்தில் தாமதமின்றி GPU-களை முழு வேகத்தில் கணக்கிட்டுக்கொண்டிருக்கச் செய்தார்.
3. ImageNet சகாப்தத்தில் அடுத்து நடந்தது
AlexNet-இன் வெற்றி ImageNet போட்டியில் ஆண்டுதோறும் நடைபெற்ற போட்டியைத் தூண்டியது; வெறும் மூன்று ஆண்டுகளில் வலையமைப்புகள் 8 layer-களிலிருந்து 150-க்கும் மேற்பட்ட layer-கள் வரை தள்ளப்பட்டன.
- 2013 – ZFNet (காட்சிப்படுத்தலும் சீரமைப்பும்). Matthew Zeiler மற்றும் Rob Fergus, AlexNet மறைந்துள்ள layer-களுக்குள் உண்மையில் என்னவைப் பார்க்கிறது என்பதைக் காட்சிப்படுத்த deconvolution நுட்பங்களை அறிமுகப்படுத்தினர். AlexNet-இன் முதல் layer filter அளவை 11×11-இலிருந்து 7×7-ஆகச் சுருங்கச் செய்து, stride-ஐயும் குறைத்ததன் மூலம், ZFNet ImageNet top-5 பிழை விகிதத்தை 15.3%-இலிருந்து 14.8%-ஆகக் குறைத்தது.
- 2014 – VGGNet (ஒருசீர் 3×3 Filter-கள் மூலம் ஆழம்). Oxford-இன் ஆராய்ச்சியாளர்கள், பல சிறிய 3×3 convolution-களை (16 அல்லது 19 layer-கள் வரை) அடுக்குவது ஒற்றைப் பெரிய filter-களை (11×11 அல்லது 5×5 போன்றவை) பயன்படுத்துவதை விடச் சிறப்பாக வேலை செய்கிறது என்று நிரூபித்தனர். அடுக்கப்பட்ட இரு 3×3 layer-கள் அதே 5×5 பார்வைப் பரப்பைக் குறைந்த parameter-களுடனும் கூடுதல் non-linear ReLU activation-களுடனும் உள்ளடக்குகின்றன; இதனால் பிழை விகிதம் 7.3%-ஆகக் குறைந்தது.
- 2014 – GoogLeNet / Inception (பல்அளவுத் திறமை). Google, Inception module-ஐ அறிமுகப்படுத்தியது; அது ஒரே layer-க்குள் 1×1, 3×3, 5×5 convolution-களை இணையாக இயக்கி, output-களை ஒன்றிணைத்தது. விலையுயர்ந்த கணிதத்திற்கு முன் channel ஆழத்தைச் சுருக்க மலிவான 1×1 convolution-களைப் பயன்படுத்தியதால், GoogLeNet AlexNet-ஐ விட 12 மடங்கு குறைந்த parameter-களைப் பயன்படுத்தியே 22 layer-களையும் 6.7% பிழை விகிதத்தையும் எட்டியது.
- 2015 – ResNet (Skip Connection-களும் 152 Layer-களும்). வெறுமனே மேலும் layer-களை அடுக்குவது, backpropagation-இன் போது gradient-கள் மறைந்துபோவதால் (vanishing gradients), training துல்லியம் குலையக் காரணமாயிற்று. Microsoft Research இதை Residual Connection-கள் (skip connection-கள்) மூலம் தீர்த்தது; தரவு நேரடி identity குறுக்குவழிகள் வழியாக layer-களைத் தாண்டிச் செல்ல அனுமதித்தது. இது 152-layer வலையமைப்புகளைத் திறந்து, 3.57% top-5 பிழை விகிதத்தை அடைந்தது — முதன்முறையாக மனித மட்ட benchmark செயல்திறனை (~5%) மிஞ்சியது.