GPU Neural Network Training

GPU पायथन प्रोग्रामिंग — इन्सटॉलेशन

GPU प्रोग्रामिंग द्वारा कम्प्यूटर की कम्प्यूटिंग स्पीड बहुत बढ़ायी जा सकती है ।
NVIDEA के सबसे सस्ते २ जीबी वाले जीपीयू के कोरों की संख्या ३८४ है । उसके बाद है GPU Geforce 1050 जिसमें ६४० कोर हैं । मँहगे जीपीयू और टीपीयू में हजारों कोर होते हैं और डेस्कटॉप में अनेक वैसे जीपीयू जोड़कर मल्टी−जीपीयू प्रोग्रामिंग भी की जाती है जिसके द्वारा कम्प्यूटर की गति लाखों गुणा आप बढ़ा सकते हैं — बिना किसी सुपरकम्प्यूटर के,अपने घर बैठे । किन्तु उसमें लाखों रूपये खर्च होंगे । मेरे लैपटॉप के CPU की औसत क्षमता लगभग ५५ गेगा−फ्लॉप प्रति सेकण्ड है,किन्तु इसी लैपटॉप के GPU की क्षमता ५२०० गेगा−फ्लॉप प्रति सेकण्ड है — यदि औसतन ६ फ्लोटिंग प्वॉइण्ट ऑपरेशन प्रति सेकण्ड हों । अतः CPU−प्रोग्रामिंग की तुलना में यदि GPU प्रोग्रामिंग करेंगे तो कम्प्यूटर की गति अत्यधिक बढ़ायी जा सकती है । परन्तु अधिकांश लोग डेडिकेटेड GPU खरीदते भी हैं तो उसका उपयोग केवल वीडियो गेम खेलने में करते हैं,प्रोग्रामिंग में उसका प्रयोग केवल वैज्ञानिकों द्वारा किया जाता है ।

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

NVIDEA के GPU टूलकिट और न्यूरल लायब्रेरी का इन्सटॉलेशन

Machine Learning Starter लेख में CPU−प्रोग्रामिंग मोड में पायथन न्यूरल नेटवर्क ट्रेनिंग हेतु समूचे एनवायरनमेण्ट का इन्सटॉलेशन और प्रोग्रामिंग का उदाहरण दिया गया था ।

अनाकोण्डा में उस “बेस” एनवायरनमेण्ट के इन्सटॉलेशन के बाद जीपीयू−एनवायरनमेण्ट का इन्सटॉलेशन अब इस लेख में दिखाया जा रहा है । आपके कम्प्यूटर में NVIDEA का GPU है तभी यह लेख काम देगा । नीचे जो उदाहरण है वह NVIDEA के GPU Geforce 1050 (ग्राफिक मेमोरी 4GB) तथा RTX-3090 (ग्राफिक मेमोरी 24GB) पर टेस्ट किया गया है । लैपटॉप में न्यूनतम ८ जीबी सामान्य रैम और NVIDEA का कोई भी जीपीयू हो तभी यह लेख आपके काम का होगा । सामान्य रैम यदि ८ जीबी है और जीपीयू नहीं है तो पिछले लेख के छोटे प्रोग्राम जैसे प्रोग्राम ही रन करने चाहिये ।

इन्सटॉलेशन की विधि

अनाकोण्डा के “बेस” (base) एनवायरनमेण्ट में कोई पैकेज इन्सटॉल मत करें,वैसा करना ही हो तो नया एनवायरनमेण्ट बनाकर उसमें जोड़तोड़ करें । “बेस” एनवायरनमेण्ट में भूलकर भी जीपीयू लाइब्रेरियों और पैकेजों को इन्सटॉल मत करें,वरना सामान्य CPU−प्रोग्रामिंग मोड गड़बड़ा जायगा । यदि आपका विण्डो यूजर−पथ का नाम एक अक्षर का नहीं है तो अनाकोण्डा को सिस्टम ड्राइव के किसी नये पथ में इन्सटॉल करें जिसका नाम एक अक्षर का हो,जैसे कि AnacondaMy

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

कुडा−टूलकिट

( CUDA = Compute Unified Device Architecture = डेडिकेटेड जीपीयू के सैकड़ों या हजारों कोरों को एकसाथ कम्प्यूटिंग हेतु प्रयुक्त करने का पैरेलल प्रोसेसिंग सॉफ्टवेयर)

अब इस वेबसाइट से NVIDEA का विशाल (CUDA) कुडा−टूलकिट इन्सटॉल कर लें,आपका विण्डो किस वर्सन का है इसे ध्यान में रखकर कुडा−टूलकिट का वर्सन चुनें । अपने कम्प्यूटर के जीपीयू के ड्राइवर का नाम न पता हो तो इस वेबसाइट पर सबसे अच्छे ड्राइवर वाला टूलकिट चुनें (२⋅३८ जीबी का ऐक्से फाइल है,डाउनलोड करने में समय लेगा) । मेरे लैपटॉप में विण्डो−11 है,अतः मुझे cuda_12.0 डाउनलोड करना पड़ा (१ मई २०२३ को नवीनतम Anaconda3-2023.03-1-Windows-x86_64.exe के लिए) । डाउनलोड के पश्चात इस फाइल को रन करें,इन्सटॉल हो जायगा :—

https://developer.nvidia.com/cuda-downloads

अब कुडा न्यूरल नेटवर्क cuDNN की लाइब्रेरी इस वेबसाइट से डाउनलोड करें —

https://developer.nvidia.com/rdp/cudnn-download

डाउनलोड के पश्चात उस जिप फाइल को अन−कम्प्रेस करके उस पूरे फोल्डर को के सारे फोल्डरों को निम्न पथ में पेस्ट कर दें,जो कि NVIDEA ग्राफिक कार्ड का डिफॉल्ट पथ है —

C:\Program Files\NVIDIA\CUDNN\v8.9\bin

अब विण्डो के स्टार्ट के बगल में सर्च बॉक्स में Edit environment variables for your account ढूँढकर खोलें । खुलने पर उसमें ऊपर ‘यूजर वेरिएबल्स⋅⋅⋅’ मिलेगा,उसके अन्दर Path को चुनकर एडिट बटन दबायें और जो नया इण्टरफेस−विण्डो खुलेगा उसमें न्यू को क्लिक करकें “C:\Program Files\NVIDIA\CUDNN\v8.3\bin” पेस्ट कर दें — अनाकोण्डा और विण्डो भी उसी C ड्राइव में होने चाहिये ।

आपके कम्प्यूटर में माइक्रोसॉफ्ट विजुअल स्टुडियो है तो उसमें भी उपरोक्त सारे टूल स्वतः इन्स्टॉल्ड हो जायेंगे । माइक्रोसॉफ्ट विजुअल स्टुडियो का कम्युनिटी एडिशन मुफ्त में है किन्तु विण्डो लायसेंस वर्सन वाला चाहिये ।

(कम्प्यूटर में यदि डेडिकेटेड GPU है तो निम्न मत पढ़ें और नीचे अगले अनुच्छेद KERAS-GPU पर जायें ।)

यदि भविष्य में कभी पायथन के किसी विशेष वर्सन वाले एनवायरनमेण्ट की आवश्यकता पड़े ,उदाहरणार्थ python 3.9.12,तो उसे बनाने के लिये बेस एनवायरनमेण्ट में निम्न कमाण्ड रन करें —

conda create -n py391 python=3.9.12
(check latest anaconda's compatible version at = https://repo.anaconda.com/pkgs/main/win-64/ )

Then,
conda activate py391

मैंने विण्डो स्टोर से विण्डो सिस्टम में नवीनतम पायथन−३⋅१० भी इन्सटॉल किया था किन्तु हटा दिया क्योंकि उसके लिये सभी लाइब्रेरियाँ नहीं बन सकीं हैं और बन भी जायें तो विण्डो सिस्टम में उन सबको इन्सटॉल करना खतरनाक होगा । माइक्रोसॉफ्ट के विजुअल स्टुडियों से भी मैंने पायथन को हटा दिया क्योंकि उसी कारण से माइक्रोसॉफ्ट अनाकोण्डा वाले मेरे प्रोग्रामों की चोरी कर रही थी । अपने यूजर पथ में पायथन⋅हिस्ट्री नाम के फाइल की नियमित रूप से खोज करते रहें और देखते ही डिलीट कर दें,यही वह हैकिंग टूल है जिसके द्वारा माइक्रोसॉफ्ट आपके सभी पायथन प्रोग्रामों की चोरी करती है ।

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

KERAS-GPU

अब अनाकोण्डा के एडमिनिस्ट्रेटिव प्रॉम्प्ट पर निम्न कमाण्ड टाइप करके नया एनवॉयरनमेण्ट बना लें (envgpu के बदले नये एनवॉयरनमेण्ट का कुछ भी नाम रख सकते हैं) —
(**१ मई २०२३ को नवीनतम Anaconda3-2023.03-1-Windows-x86_64.exe के लिए निम्न पैकेज सही है) । यदि आपके कम्प्यूटर में GPU नहीं है तो keras-gpu तथा tensorflow-gpu में “-gpu” हटाकर शेष निम्नवत इन्सटॉल करें । तब GPU−मोड के बदले CPU−मोड मोड में प्रोग्रामिंग करनी पड़ेगी जो बहुत धीमी होगी और बड़े प्रोग्राम तो कार्य ही नहीं करेंगे ।)
════════════════════════
conda create -n envgpu python=3.7.16 anaconda (१५ सित⋅ २०२३ को keras-gpu के लिए यही नवीनतम था ।)
conda activate envgpu
conda update conda
conda update - -all (double dash without space)
conda update pip

pip install daal

(कई बार किसी अन्य पैकेज के कारण daal इन्सटॉल न हो तो निम्न कमाण्ड कार्य करेगा=)
pip install - -ignore-installed daal (double dash without space)

किन्तु मुझे निम्न कमाण्ड भी रन करना पड़ा ताकि daal4py आपडेट हो जाय=
pip install - -ignore-installed daal4py==2023.2.1 (double dash without space)

conda install -c conda-forge easydict

conda install keras-gpu
conda install -c conda-forge imutils
pip install tensorlayer
conda update keras-gpu

pip3 install opencv-python==4.8.0.76 (१५ सित⋅ २०२३ को keras-gpu के लिए यही नवीनतम था ।)
(pip install - -upgrade opencv-python) (double dash without space)
pip install PyHamcrest==2.0.3
pip install twisted==22.4.0
pip install opencv-contrib-python
conda install -c conda-forge scikit-image
conda update scikit-image
pip install pypng
conda install -c conda-forge lime

conda update keras-gpu
conda update anaconda

AVOID conda install conda=23.10.0

पहले keras-gpu स्वतः कम्पैटिबल cudatoolkit और cudnn इन्सटॉल करता था,अब https://www.tensorflow.org/install/source#gpu वेबसाइट द्वारा पता लगाना पड़ता है कि आपके keras और tensorflow वर्सनों के लिए किस वर्सन के cudatoolkit और cudnn उचित हैं । मुझे निम्न करना पड़ा (वरना के साथ पुराना tensorflow 1.14.0 ही रहेगा)=

pip install tensorflow==2.10.0
conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1

(इसके पश्चात भूलकर भी यह न करें,वरना बाद वाले वर्सन आ जायेंगे=conda update —all)

ईमेज और वीडियो आदि की मशीन लर्निंग हेतु कम्प्यूटर विज़न CV2 अर्थात् OPEN-CV के लिए नया एनवायरनमेण्ट बनाने के बदले इसी केरस एनवायरनमेण्ट में उसके पैकेजों को इन्सटॉल कर लें क्योंकि केरस में OPEN-CV की प्रोग्रामिंग अब बेहतर हो गयी है ।
═══════════════════════════
पायथन प्रोग्राम को वितरित करने के लिए एक्से फाइल बनाने का pyinstaller पैकेज है=
conda install -c conda-forge pyinstaller
conda install scikit-learn-intelex
═══════════════════════════
उपरोक्त का क्लोन env_tuner नाम का नया एनवायरनमेण्ट बनाकर उसमें keras-tuner तथा autokeras को इन्सटॉल करें जो मॉडल की स्वतः ट्यूनिंग करने का प्रोग्राम है,किन्तु इसमें कई पैकेज पुराने हैं जिस कारण नया एनवायरनमेण्ट आवश्यक है वरना envgpu को बिगाड़ देगा । मॉडल ट्यूनिंग हो जाने पर उसका प्रयोग envgpu में करें ॥

जिस env का क्लोन बनाना हो उसमें क्लोन न बनायें,base में जाकर बनायें=

conda create —name env_tuner —clone envgpu

गूगल−सर्च करके पहले Git इन्सटॉल कर लें (https://git-scm.com/download/win),फिर Git का PATH “environment variable” में सेट करें,तब कम्प्यूटर रिस्टार्ट करके इस एनवायरनमेण्ट में keras-tuner इन्सटॉल करें=
pip install git+https://github.com/keras-team/keras-tuner.git

pip install autokeras

बिना gpu वाला tensorflow हो या gpu सहित tensorflow-gpu,टेन्सरफ्लो के 2.3.0 से पहले का वर्सन न रखें क्योंकि वर्सन 2.3.0 और उसके बाद वाले वर्सनों में ही ऑटो मशीन लर्निंग का केरस पैकेज कार्य करेगा जो नौसीखियों से लेकर विशेषज्ञों तक को सर्वोत्तम मॉडल ढूँढने में सहायता करता है ।
═══════════════════════════
“ conda list ” कमाण्ड द्वारा किसी एनवायरनमेण्ट में इन्सटॉल सभी पैकेजों की वर्सन संख्या जान सकते हैं । keras-gpu को दो बार अपडेट करना पड़ा वरना कई पैकेजों के बहुत पुराने वर्सन इन्सटॉल हो जायेंगे ।

भविष्य में इस केरस−जीपीयू एनवायरेनमेण्ट हेतु कोई अतिरिक्त कोण्डा पैकेज आवश्यक प्रतीत हो तो निम्न सूची में से चुन सकते हैं । कुल ८००० पैकेज हैं,उनको अनावश्यक इन्सटॉल न करें वरना आपस में लड़ेंगे ।
https://docs.anaconda.com/anaconda/packages/py3.7_win-64/

यदि विण्डो और पायथन का वर्सन कुछ अन्य है तो निम्न साइट से सूची चुन लें =
https://docs.anaconda.com/anaconda/packages/pkg-docs/

envgpu में अनावश्यक नये पैकेज इन्सटॉल तबतक न करें जबतक यह विश्वास न हो कि envgpu में पहले से इन्सटॉल्ड पैकेजों से उनका तालमेल है । सन्देह हो तो नये पैकेजों के लिये पृथक नया एनवायरनमेण्ट बना लें । tensorflow तथा keras के समस्त CPU एवं GPU वर्सन वाले प्रोग्रामों और OPEN-CV (cv2) के लिये उपरोक्त envgpu एनवायरनमेण्ट पर्याप्त है । PYTORCH के लिये पृथक एनवायरनमेण्ट उचित रहेगा ।

** import keras-gpu अथवा import tensorflow-gpu भी कभी न लिखें,आपके कम्प्यूटर में gpu होगा तो उसे टेन्सरफ्लो और केरस स्वयं पहचान लेंगे,वरना CPU मोड में कार्य करेंगे ।
════════════════════════════
MP4 वीडियो फाइल पायथन द्वारा बनाने के लिए https://github.com/cisco/openh264/releases वेबसाइट से
openh264-2.3.1-win64.dll** को डाउनलोड करके एक्सट्रैक्ट करें और इस पथ में कॉपी कर दें =
C:\Users\…\anaconda3\envs\env_gpu\DLLs
Or
C:\ProgramData\anaconda3\envs\envgpu\DLLs (जो अनाकोण्डा के लिए मेरा पथ है)

PYTORCH

यदि PYTORCH में कार्य करना हो तो उसे इन्सटॉल कर लें —

**conda create -n mytorch python=3.11.5 anaconda ** (double dash)

conda activate mytorch

conda install pytorch torchvision cudatoolkit cudnn -c pytorch

cudatoolkit-11.8.0 , cudnn-8.9.2.26 , torchvision-0.16.1 सहित pytorch-2.1.1 इन्सटॉल हो जायगा ।
pip install torchaudio
conda update —all (double dash)
════════════════════════════
pip install tensorrt it fails to work.
https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html
════════════════════════════════════════════════════════
किसी env1 नाम वाले एनवॉयरनमेण्ट को सदा के लिये हटाने
का यह कोड है —
conda remove —name env1 —all (double dash)

कोण्डा के एनवॉयरनमेण्टों का प्रबन्धन यहाँ सीख सकते हैं (अभी इस लेख के लिये आवश्यक नहीं है) —
https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

सभी अनाकोण्डा environments का नाम देखने के लिए base खोलकर टाइप करें=
conda env list

यदि विण्डो किसी env का नाम ही एप्प सूची में नहीं दिखा रहा है तो base खोलकर निम्न टाइप करें=
conda activate envName

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GPU में न्यूरल नेटवर्क ट्रेनिंग

किसी अन्य एनवॉयरनमेण्ट से निकलकर “बेस” में कार्य करना है तो उसे डि−एक्टिवेट करें —
conda deactivate

keras-gpu एनवॉयरनमेण्ट खोलकर उसमें एक प्रोग्राम बनाकर इसकी जाँच कर लें,जो नीचे है ।

जिस वेबसाइट पर पायथन में एक (OCR का) टेस्ट प्रोग्राम mnist_mlp.py था वहाँ से वह हटाया जा चुका है,अतः वह पूरा पायथन फाइल मैंने अपने इसी पन्ने के नीचे फाइल टैब के अन्तर्गत मूल नाम mnist_mlp.py से अपलोड कर दिया है (यह जीपीयू प्रोग्राम एण्टोनियो सेह्क नाम के व्यक्ति ने बनाया और डाटाबेस भी अमेजन−क्लाउड पर उसके अकाउण्ट वाला है । उक्त प्रोग्राम में क्लाउड प्रोग्रामिंग द्वारा डाटा डाउनलोड किया गया — मेरे लैपटॉप में ।) जिसके द्वारा आप उपरोक्त जीपीयू मोड की जाँच कर सकते हैं और इस प्रोग्राम की भाषा सीखकर वैसे ही नये जीपीयू मोड के प्रोग्राम भी बना सकते हैं ।
उसका इनपुट डैटासेट mnist वेबसाइट पर है जिसे mnist_mlp.py स्वतः डाउनलोड कर लेगा,यदि वह डैटासेट भी कभी अपने वेबसाइट से हटा दिया जाय तो मैंने नीचे फाइल अैब के अन्तर्गत mnist.npz नाम वाले उस डैटा फाइल को भी अपलोड कर दिया है ।

उस प्रोग्राम को कॉपी करके नोटपैड में पेस्ट करें और mnist_mlp.py नाम से किसी नये फोल्डर में सेव कर लें । अनाकोण्डा प्रॉम्प्ट पर निम्न पङ्क्ति लिखने पर ११ MB का विशाल डाटाबेस स्वतः प्रोग्राम में डाउनलोड होगा और फिर उसपर जीपीयू मोड की न्यूरल नेटवर्क प्रोग्रामिंग चलकर २० एपोक में ट्रेनिंग करेगी,हर एपोक में एक्यूरेसी बढ़ती जायगी जो अन्त में ९९⋅५% तक पँहुच जायगी,औसत एक्यूरेसी ९८⋅३१% होगी —

python mnist_mlp.py

किन्तु इसका पथ भी देना पड़ेगा;मेरे लैपटॉप में इस पायथप प्रोग्राम का पथ है —
Z:\PythonPrograms\kerasgpu\mnist_mlp.py

अतः इस जीपीयू−मोड वाले एनवॉयरनमेण्ट के भीतर पायथन के एग्जेक्यूटिव फाइल का पथ भी देना पड़ेगा,तभी कोई पायथन प्रोग्राम इस एनवॉयरनमेण्ट में अनाकोण्डा प्रॉम्प्ट में खुलेगा —
C:\Anaconda3\envs\env_gpu\python.exe Z:\PythonPrograms\kerasgpu\mnist_mlp.py

विकल्प यह है कि अनाकोण्डा प्रॉम्प्ट के kerasgpu एनवॉयरनमेण्ट में mnist_mlp.py फाइल के एक−एक लाइन को बारी−बारी से रन करें । इसके लिये नोटपैड में mnist_mlp.py फाइल खोलकर उसे पढ़ना पड़ेगा ।

केरस के अपने वेबसाइट पर यह डैटासेट है जिसमें 28x28 पिक्सेल के ग्रेस्केल वाले रोमन लिपि के दस अङ्कों के हस्तलिखित ६० हजार इमेज ट्रेनिेग के लिये और अतिरिक्त दस हजार इमेज ट्रेनिंग सम्पन्न होने के बाद ट्रेण्ड मॉडल की टेस्टिंग के लिये है । इस डैटासेट में 28x28 पिक्सेल “shape” सहित सारे ७० हजार इमेज array में x हैं,और दस अङ्कों के लेबल और उनके shape (num_samples) array में y हैं ।

प्रोग्राम के आरम्भ,मध्य और अन्त के तीन स्क्रीनशॉट संलग्न है जो दिखाते हैं कि मेरे लैपटॉप के GPU device name: GeForce GTX 1050 पर यह प्रोग्राम चला है । एक एपोक में २ सेकण्ड लगा,२० एपोक में ४० सेकण्ड लगे,जबकि डाटाबेस में ७०००० सैम्पल और 669,706 params हैं,डाटाबेस ११ MB का है : 11,490,434 bytes!

रिलायन्स इण्डस्टीज लिमिटेड के ४२७ KB फाइल के सौवें हिस्से अर्थात् ४ KB की न्यूरल नेटवर्क ट्रेनिंग में केवल एक एपोक ने सवा मिनट का समय लिया — CPU मोड में । GPU मोड में मेरे लैपटॉप की गति सैकड़ों गुणा बढ़ गयी । CPU मोड में तो यह mnist प्रोग्राम कार्य ही नहीं कर पाता,या तो लैपटॉप हैंग होकर बन्द हो जाता या कई घण्टे लगते!कम्प्यूटर में पर्याप्त जनरल रैम हो और गर्मी से सुरक्षा हो तो इतनी तीव्र गति के GPU मोड में भी कई सप्ताह न्यूरल ट्रेनिंग में लगने वाले प्रोग्राम वैज्ञानिकों को बनाने पड़ते हैं जिस कारण गति और भी बढ़ाने के प्रयास होते रहते हैं ।

संसार के सबसे अच्छे सुपरकम्प्यूटर की गति एक अच्छे लैपटॉप से लगभग एक करोड़ गुणा तेज होती है । लैपटॉप में जीपीयू−मोड की कम्प्यूटिंग भी कुछ हजार गुणा ही गति बढ़ायेगी । किन्तु क्लाउड में गूगल−टीपीयू द्वारा असली सुपरकम्प्यूटर की शक्ति का लाभ लैपटॉप में उठा सकते हैं,केवल संख्याओं की लम्बाई,अर्थात् शुद्धि,सुपरकम्प्यूटर से कम रहेगी,किन्तु गति संसार के सबसे तेज पाँच सुपरकम्प्यूटरों के समकक्ष होगी । उसका तरीका भी वही है जो प्रस्तुत लेख में है,केवल जीपीयू की मेमोरी और कोरों की संख्या अधिक होती है और अनेक जीपीयू होते हैं । साधारण डेस्कटॉप कम्प्यूटर में अनेक जीपीयू लगाकर एकसाथ उन सबका लाभ एक ही प्रोग्राम में उठा सकते हैं ।

इस प्रोग्राम के तीन स्क्रीनशॉट संलग्न है :—

1.jpg
2.jpg
3.jpg
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Noncommercial 2.5 License.