cuda-convnet అంతర్భాగం: AlexNet ద్వంద్వ-GPU పొరలు మరియు ImageNet యుగం

2012లో AlexNet సాధించిన మైలురాయి తక్కువ-స్థాయి GPU ఇంజినీరింగ్ (cuda-convnet), విభజిత ద్వంద్వ-GPU నిర్మాణంపై ఆధారపడింది. మరింత లోతైన, సమర్థవంతమైన కంప్యూటర్ విజన్ మోడళ్ల దిశగా వేగవంతమైన పోటీకి ఇది నేరుగా నాంది పలికింది.
1. cuda-convnet అంతర్గతంగా ఎలా పనిచేసింది
NVIDIA cuDNNను రూపొందించడానికి ముందు, తొలి Fermi-ఆర్కిటెక్చర్ GPUల (GTX 580) నుంచి గరిష్ఠ వేగం పొందడానికి Alex Krizhevsky నేరుగా CUDA C++లో cuda-convnet రాశారు. ఆధునిక లైబ్రరీలు సాధారణంగా కన్వల్యూషన్లను భారీ మ్యాట్రిక్స్ గుణకాలుగా (im2col) విస్తరిస్తాయి; ఇది విపరీతమైన మెమరీని వినియోగిస్తుంది. ప్రతి GTX 580లో కేవలం 3 GB VRAM మాత్రమే ఉండటంతో, Krizhevsky నేరుగా పనిచేసే, మెమరీని ఆదా చేసే GPU రొటీన్లను రూపొందించారు.
- బ్యాచ్-ఫస్ట్ మెమరీ అమరిక (CHWN). ఆధునిక ఫ్రేమ్వర్క్లు డిఫాల్ట్గా NCHW (బ్యాచ్, ఛానళ్లు, ఎత్తు, వెడల్పు)ను వాడతాయి. ఇందులో ఒక చిత్రంలోని పిక్సెల్లన్నీ మెమరీలో పక్కపక్కన ఉంటాయి. Krizhevsky టెన్సర్లను CHWN క్రమంలో నిల్వ చేసి, బ్యాచ్ పరిమాణాన్ని (N) చివర ఉంచారు. ఒక వార్ప్లోని 32 GPU థ్రెడ్లు 32 వేర్వేరు చిత్రాల్లో సరిగ్గా ఒకే పిక్సెల్ స్థానాన్ని ప్రాసెస్ చేసినప్పుడు, వాటి మెమరీ రీడ్లు పూర్తిగా వరుసగా (కోలెస్డ్గా) ఉండి, VRAM బ్యాండ్విడ్త్ను గరిష్ఠంగా వినియోగించాయి.
- షేర్డ్ మెమరీ టైలింగ్. గ్లోబల్ VRAM నుంచి చదవడానికి వందల క్లాక్ సైకిళ్లు పడతాయి; చిప్పైనే ఉండే షేర్డ్ మెమరీకి (GTX 580లో ప్రతి Streaming Multiprocessorకు కేవలం 48 KB) కొన్ని సైకిళ్లు మాత్రమే పడతాయి. థ్రెడ్ బ్లాక్లు చిత్ర పిక్సెల్లు, ఫిల్టర్ వెయిట్ల చిన్న 2D ప్యాచ్లను షేర్డ్ మెమరీలోకి లోడ్ చేసి, తుది ఫలితాలను తిరిగి VRAMలో రాసే ముందు డజన్ల కొద్దీ డాట్ ప్రొడక్ట్లను లెక్కించాయి.
- వార్ప్-స్థాయి రిజిస్టర్ పునర్వినియోగం. అనేక ఫిల్టర్లలో ఒకేసారి అవుట్పుట్ పిక్సెల్ల టైల్ను లెక్కించే బాధ్యతను Krizhevsky ప్రతి థ్రెడ్ బ్లాక్కు అప్పగించారు. ఫిల్టర్ వెయిట్లను వేగవంతమైన GPU రిజిస్టర్లలో ఉంచడం వల్ల, షేర్డ్ మెమరీ నుంచి లోడ్ చేసిన ఒకే చిత్ర ప్యాచ్ను అనేక ఫిల్టర్లకు ఒకేసారి తిరిగి వాడారు. దీంతో మెమరీ ట్రాఫిక్ బాగా తగ్గింది.
2. AlexNetలోని నిర్దిష్ట పొరలు మరియు ద్వంద్వ-GPU విభజన
AlexNetలో మొత్తం సుమారు 60 మిలియన్ పారామీటర్లతో 8 నేర్చుకునే పొరలు (5 కన్వల్యూషనల్, 3 ఫుల్లీ కనెక్టెడ్) ఉన్నాయి. యాక్టివేషన్లు, వెయిట్లు, గ్రేడియంట్లకు అవసరమైన 3 GB+ VRAM ఒకే GTX 580లో లేకపోవడంతో, Krizhevsky నెట్వర్క్ను నిలువుగా రెండు సమాంతర ప్రవాహాలుగా విభజించారు.
| పొర | రకం | మొత్తం ఫిల్టర్లు / న్యూరాన్లు | ప్రతి GPUకి విభజన | GPUల మధ్య కమ్యూనికేషన్ |
|---|---|---|---|---|
| ఇన్పుట్ | RGB చిత్రం | 224 × 224 × 3 | రెండు GPUలకు కాపీ చేయబడింది | లేదు |
| Conv 1 | 11×11 Conv (స్ట్రైడ్ 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, ఫుల్లీ కనెక్టెడ్ పొరలకే పరిమితం చేయడం ద్వారా, డేటా బదిలీల కోసం ఆగకుండా GPUలు పూర్తి వేగంతో లెక్కలు చేసేలా Krizhevsky చేశారు.
3. ImageNet యుగంలో ఆ తర్వాత ఏం జరిగింది
AlexNet విజయం ImageNet పోటీలో వార్షిక పందేనికి నాంది పలికింది. కేవలం మూడేళ్లలోనే నెట్వర్క్లు 8 పొరల నుంచి 150కి పైగా పొరలకు పెరిగాయి.
- 2013 - ZFNet (దృశ్యీకరణ & ట్యూనింగ్). దాగిన పొరలలో AlexNet నిజంగా ఏం చూస్తోందో చూపడానికి Matthew Zeiler, Rob Fergus డీకన్వల్యూషన్ పద్ధతులను ప్రవేశపెట్టారు. AlexNet తొలి పొర ఫిల్టర్ పరిమాణాన్ని 11×11 నుంచి 7×7కు తగ్గించి, స్ట్రైడ్ను తగ్గించడం ద్వారా ZFNet, ImageNet టాప్-5 లోప రేటును 15.3% నుంచి 14.8%కు తగ్గించింది.
- 2014 - VGGNet (ఏకరీతి 3×3 ఫిల్టర్ల ద్వారా లోతు). ఒకే పెద్ద ఫిల్టర్ను (11×11 లేదా 5×5 వంటిది) వాడటం కంటే అనేక చిన్న 3×3 కన్వల్యూషన్లను (16 లేదా 19 పొరల వరకు) పేర్చడం మెరుగ్గా పనిచేస్తుందని Oxford పరిశోధకులు నిరూపించారు. పేర్చిన రెండు 3×3 పొరలు తక్కువ పారామీటర్లు, అదనపు నాన్-లీనియర్ ReLU యాక్టివేషన్లతో అదే 5×5 వీక్షణ ప్రాంతాన్ని కవర్ చేస్తాయి. దీంతో లోప రేట్లు 7.3%కు తగ్గాయి.
- 2014 - GoogLeNet / Inception (బహుళ-స్థాయి సామర్థ్యం). ఒకే పొరలో 1×1, 3×3, 5×5 కన్వల్యూషన్లను సమాంతరంగా నడిపి, అవుట్పుట్లను కలిపే Inception మాడ్యూల్ను Google ప్రవేశపెట్టింది. ఖరీదైన గణనకు ముందు తక్కువ వ్యయపు 1×1 కన్వల్యూషన్లతో ఛానల్ లోతును కుదించడం ద్వారా, AlexNet కంటే 12 రెట్లు తక్కువ పారామీటర్లను వాడుతూ GoogLeNet 22 పొరలు, 6.7% లోప రేటును సాధించింది.
- 2015 - ResNet (స్కిప్ కనెక్షన్లు & 152 పొరలు). మరిన్ని పొరలను పేర్చుకుంటూ పోవడం వల్ల, బ్యాక్ప్రొపగేషన్ సమయంలో గ్రేడియంట్లు మాయమై చివరికి శిక్షణ ఖచ్చితత్వం తగ్గింది. ప్రత్యక్ష ఐడెంటిటీ షార్ట్కట్ల ద్వారా డేటా పొరలను దాటివెళ్లేలా చేసే రెసిడ్యువల్ కనెక్షన్లతో (స్కిప్ కనెక్షన్లు) Microsoft Research దీన్ని పరిష్కరించింది. దీనితో 152-పొరల నెట్వర్క్లు సాధ్యమై, 3.57% టాప్-5 లోప రేటును సాధించాయి. మొదటిసారి మానవ-స్థాయి బెంచ్మార్క్ పనితీరును (~5%) అధిగమించాయి.