CUDA ගැඹුරු ඉගෙනීමට බලය දෙන ආකාරය

CUDA (Compute Unified Device Architecture) යනු ගැඹුරු ඉගෙනුම් රාමුවලට (frameworks) බරින් වැඩි ගණිතමය ගණනය කිරීම් GPU මත ක්රියාත්මක කිරීමට හැකියාව දෙන NVIDIA හි සමාන්තර පරිගණන වේදිකාව සහ ක්රමලේඛන ආකෘතියයි. ස්වාධීන මෙහෙයුම් මිලියන ගණනක් GPU හරයන් (cores) දහස් ගණනක් හරහා එකවර බෙදා හැරීමෙන්, CUDA මගින් ස්නායුක ජාල (neural network) පුහුණු කාලය සති ගණනකින් පැය කිහිපයකට අඩු කරයි. [1], [2], [3]
ගැඹුරු ඉගෙනීම CUDA මත රඳා පවතින්නේ ඇයි
- දැවැන්ත සමාන්තරතාව. ස්නායුක ජාල බොහෝ දුරට රඳා පවතින්නේ න්යාස ගුණ කිරීම්, convolutions සහ tensor පරිවර්තන මත ය. CPU සකස් කර ඇත්තේ අනුක්රමික කාර්යයන් සඳහා සංකීර්ණ හරයන් කිහිපයකින් වන අතර, GPU වල මෙම පුනරාවර්තන ගණිත මෙහෙයුම් එකවර ක්රියාත්මක කිරීමට නිර්මාණය කළ කුඩා හරයන් දහස් ගණනක් ඇත. [1], [2], [3]
- දෘඪාංග මට්ටමේ ප්රශස්තකරණය. CUDA මගින් Tensor Cores වැනි විශේෂිත NVIDIA දෘඪාංග අංග විවෘත කෙරේ; ඒවා ඉදිරි සහ පසු ප්රචාරණය (forward and backward propagation) යන දෙකේදීම මිශ්ර-නිරවද්යතා ගණිතය (FP16 සහ 4-bit quantization වැනි) වේගවත් කරයි. [1], [2], [3]
- මතක කාර්යක්ෂමතාව. CUDA මගින් සංවර්ධකයින්ට සහ පුස්තකාලවලට ඉහළ කලාප පළලක් සහිත GPU මතකය (VRAM) මත සෘජු පාලනයක් ලැබේ. kernel fusion වැනි ක්රමවේද මගින් අනුක්රමික මෙහෙයුම් කිහිපයක් GPU ක්රියාත්මක කිරීමේ එක් පියවරකට ඒකාබද්ධ කර, මන්දගාමී මතක කියවීම්/ලිවීම් ගමනාගමනය අඩු කරයි. [1], [2]
ගැඹුරු ඉගෙනුම් මෘදුකාංග තොගය
බොහෝ AI සංවර්ධකයින් දිනපතා අමු C++ CUDA කේතය ලියන්නේ නැත. ඒ වෙනුවට, CUDA ඉහළ මට්ටමේ මෙවලම්වල යටින් ඇති පදනම් එන්ජිම ලෙස ක්රියා කරයි:
- ගැඹුරු ඉගෙනුම් රාමු. PyTorch සහ TensorFlow වැනි ජනප්රිය Python පුස්තකාල GPU උපාංග කළමනාකරණය කිරීමට, tensor මතකය වෙන් කිරීමට සහ අසමමුහුර්ත (asynchronous) ප්රවාහ ක්රියාත්මක කිරීමට යටින් CUDA භාවිතා කරයි. [1], [2]
- cuDNN (CUDA Deep Neural Network library). CUDA මත සෘජුවම ගොඩනගා ඇති NVIDIA cuDNN මගින් සම්මත ගැඹුරු ඉගෙනුම් ගොඩනැගිලි කොටස් සඳහා කලින් සීරුමාරු කළ, ඉහළ කාර්යසාධනයක් සහිත මූලික ඒකක සපයයි. convolutions, අවධානය (attention) යාන්ත්රණ, pooling සහ normalization ස්ථර වේගවත් කිරීමට රාමු ස්වයංක්රීයව cuDNN කැඳවයි. [1], [2]
- අභිරුචි CUDA කර්නල්. අභිරුචි attention රටා හෝ විශේෂිත quantization වැනි, පෙර-සාදා ඇති පුස්තකාල සහාය නොමැති නව ආකෘති ගෘහනිර්මාණ පර්යේෂකයින් නිපදවන විට, කාර්යසාධන බාධාවලින් මිදීමට ඔවුන් අභිරුචි CUDA ශ්රිත (kernels ලෙස හැඳින්වේ) ලියයි. [1], [2]
ප්රායෝගිකව ක්රියාත්මක වීම සිදුවන ආකාරය
PyTorch වැනි රාමුවක ආකෘතියක් පුහුණු කරන විට, CUDA මගින් Host (CPU සහ පද්ධති RAM) සහ Device (GPU සහ VRAM) අතර මායිම කළමනාකරණය කෙරේ: [1]
1. උපාංග හඳුනාගැනීම. රාමුව අනුකූල NVIDIA දෘඪාංග සහ ධාවක (drivers) පරීක්ෂා කරයි (උදා: torch.cuda.is_available() හරහා).
2. දත්ත මාරු කිරීම. ආදාන කණ්ඩායම් (batches) සහ ආකෘති බර (weights) CPU මතකයේ ආරම්භ වන අතර ඒවා GPU හි VRAM වෙත පැහැදිලිව පිටපත් කළ යුතුය (.to("cuda") වැනි ක්රම භාවිතයෙන්).
3. කර්නල් ක්රියාත්මක කිරීම. CPU මගින් CUDA කර්නල් GPU නූල් (threads) ජාලයකට දියත් කරයි; එහිදී සෑම නූලක්ම ස්ථරයේ ප්රතිදානයෙන් කුඩා කොටසක් ගණනය කරයි.
4. සමමුහුර්ත කිරීම. පුහුණුව අතරතුර සක්රීයකරණ (activations) ඉදිරියට හෝ gradients පසුපසට යැවීමට පෙර race conditions වැළැක්වීමට නූල් ජාල ස්ථර අතර සමමුහුර්ත වේ. [1], [2], [3], [4]
ප්රධාන සීමාවන්
- වෙළෙන්දාට බැඳීම (Vendor Lock-In). CUDA යනු NVIDIA GPU වලට පමණක් ආවේණික වන අතර AMD, Intel හෝ Apple Silicon දෘඪාංග මත ස්වාභාවිකව ධාවනය කළ නොහැක.
- VRAM සීමාවන්. ගණනය කිරීමේදී දත්ත GPU මතකයේ තිබිය යුතු නිසා, විශාල ආකෘති බොහෝ විට මතක ඉක්මවීමේ (OOM) දෝෂවලට මුහුණ දෙන අතර ඒවාට batch-size සීරුමාරු කිරීම හෝ බහු-GPU බෙදාහැරීම අවශ්ය වේ.