இக்கட்டுரையின் மொழியாக்கம் பாடநெறி தொடங்கும் தினத்தன்று தயாரிக்கப்பட்டது
பல உயர்-செயல்திறன் கம்ப்யூட்டிங் நிகழ்வுகளில் விநியோகிக்கப்பட்ட பயிற்சி நவீன ஆழமான நரம்பியல் நெட்வொர்க்குகளின் பயிற்சி நேரத்தை வாரங்கள் முதல் மணிநேரம் அல்லது நிமிடங்கள் வரை பெரிய அளவிலான தரவுகளில் குறைக்கலாம், இந்த பயிற்சி நுட்பத்தை ஆழமான கற்றலின் நடைமுறை பயன்பாடுகளில் பரவலாக்குகிறது. பல நிகழ்வுகளில் தரவை எவ்வாறு பகிர்வது மற்றும் ஒத்திசைப்பது என்பதை பயனர்கள் புரிந்து கொள்ள வேண்டும், இது அளவிடுதல் செயல்திறனில் பெரும் தாக்கத்தை ஏற்படுத்துகிறது. கூடுதலாக, ஒரே நிகழ்வில் பல நிகழ்வுகளில் இயங்கும் பயிற்சி ஸ்கிரிப்டை எவ்வாறு பயன்படுத்துவது என்பதையும் பயனர்கள் அறிந்திருக்க வேண்டும்.
இந்த கட்டுரையில் திறந்த ஆழமான கற்றல் நூலகமான அப்பாச்சி எம்எக்ஸ்நெட் மற்றும் ஹோரோவோட் விநியோகிக்கப்பட்ட கற்றல் கட்டமைப்பைப் பயன்படுத்தி கற்றலை விநியோகிப்பதற்கான விரைவான மற்றும் எளிதான வழியைப் பற்றி பேசுவோம். Horovod கட்டமைப்பின் செயல்திறன் பலன்களை நாங்கள் தெளிவாகக் காண்பிப்போம் மற்றும் MXNet பயிற்சி ஸ்கிரிப்டை எவ்வாறு எழுதுவது என்பதை விளக்குவோம், இதனால் அது Horovod உடன் விநியோகிக்கப்பட்ட முறையில் செயல்படுகிறது.
அப்பாச்சி எம்எக்ஸ்நெட் என்றால் என்ன
அளவுரு சேவையகத்துடன் MXNet இல் விநியோகிக்கப்படும் பயிற்சி
ஹொரோவோட் என்றால் என்ன
MXNet மற்றும் Horovod ஒருங்கிணைப்பு
MXNet Horovod இல் வரையறுக்கப்பட்ட விநியோகிக்கப்பட்ட கற்றல் APIகள் மூலம் Horovod உடன் ஒருங்கிணைக்கிறது. Horovod தொடர்பு APIகள் horovod.broadcast(), horovod.allgather() и horovod.allreduce() அதன் பணி வரைபடத்தின் ஒரு பகுதியாக, MXNet இயந்திரத்தின் ஒத்திசைவற்ற கால்பேக்குகளைப் பயன்படுத்தி செயல்படுத்தப்பட்டது. இந்த வழியில், ஒத்திசைவு காரணமாக செயல்திறன் இழப்புகளைத் தவிர்க்க MXNet இயந்திரத்தால் தகவல் தொடர்பு மற்றும் கணக்கீடு ஆகியவற்றுக்கு இடையேயான தரவு சார்புகள் எளிதாகக் கையாளப்படுகின்றன. Horovod இல் வரையறுக்கப்பட்ட விநியோகிக்கப்பட்ட உகப்பாக்கி பொருள் horovod.DistributedOptimizer விரிவடைகிறது Optimizer என்பது MXNet இல் விநியோகிக்கப்பட்ட அளவுரு புதுப்பிப்புகளுக்கு தொடர்புடைய Horovod APIகளை அழைக்கிறது. இந்த செயல்படுத்தல் விவரங்கள் அனைத்தும் இறுதிப் பயனர்களுக்கு வெளிப்படையானவை.
வேகமான ஆரம்பம்
உங்கள் மேக்புக்கில் MXNet மற்றும் Horovod ஐப் பயன்படுத்தி MNIST தரவுத்தொகுப்பில் ஒரு சிறிய கன்வல்யூஷனல் நியூரல் நெட்வொர்க்கை விரைவாகப் பயிற்றுவிக்கலாம்.
முதலில், PyPI இலிருந்து mxnet மற்றும் horovod ஐ நிறுவவும்:
pip install mxnet
pip install horovod
குறிப்பு: இதன் போது பிழை ஏற்பட்டால் பிப் நிறுவ horovodஒருவேளை நீங்கள் ஒரு மாறியைச் சேர்க்க வேண்டும் MACOSX_DEPLOYMENT_TARGET=10.vvஅங்கு vv - இது உங்கள் MacOS பதிப்பின் பதிப்பு, எடுத்துக்காட்டாக, MacOSX Sierra க்கு நீங்கள் எழுத வேண்டும் MACOSX_DEPLOYMENT_TARGET=10.12 பிப் நிறுவல் horovod
பின்னர் OpenMPI ஐ நிறுவவும்
முடிவில், சோதனை ஸ்கிரிப்டைப் பதிவிறக்கவும் mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
இது உங்கள் செயலியின் இரண்டு கோர்களில் பயிற்சியை இயக்கும். வெளியீடு பின்வருமாறு இருக்கும்:
INFO:root:Epoch[0] Batch [0-50] Speed: 2248.71 samples/sec accuracy=0.583640
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.89 samples/sec accuracy=0.882812
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.39 samples/sec accuracy=0.870000
செயல்திறன் டெமோ
இமேஜ்நெட் தரவுத்தொகுப்பில் ResNet50-v1 மாதிரியை 64 GPUகளில் எட்டு நிகழ்வுகளுடன் பயிற்சி செய்யும் போது p3.16x பெரியது EC2, ஒவ்வொன்றும் AWS கிளவுட்டில் 8 NVIDIA Tesla V100 GPUகளைக் கொண்டுள்ளது, 45000 படங்கள்/வினாடிகள் (அதாவது ஒரு வினாடிக்கு பயிற்சியளிக்கப்பட்ட மாதிரிகளின் எண்ணிக்கை) பயிற்சித் திறனைப் பெற்றுள்ளோம். 44% சிறந்த துல்லியத்துடன் 90 சகாப்தங்களுக்குப் பிறகு 75.7 நிமிடங்களில் பயிற்சி முடிந்தது.
8, 16, 32 மற்றும் 64 GPUகளில் அளவுரு சேவையகங்களைப் பயன்படுத்தும் MXNet இன் விநியோகிக்கப்பட்ட பயிற்சி அணுகுமுறையுடன் இதை ஒப்பிட்டுப் பார்த்தோம். கீழே உள்ள படம் 1 இல் முடிவைக் காணலாம். இடதுபுறத்தில் உள்ள y அச்சில், பார்கள் ஒரு வினாடிக்கு பயிற்சி பெற வேண்டிய படங்களின் எண்ணிக்கையைக் குறிக்கின்றன, கோடுகள் வலதுபுறத்தில் உள்ள y- அச்சில் அளவிடுதல் திறனை (அதாவது, உண்மையான மற்றும் சிறந்த செயல்திறன் விகிதம்) பிரதிபலிக்கின்றன. நீங்கள் பார்க்க முடியும் என, சேவையகங்களின் எண்ணிக்கையின் தேர்வு அளவிடுதல் செயல்திறனை பாதிக்கிறது. ஒரே ஒரு அளவுரு சேவையகம் இருந்தால், 1 GPUகளில் அளவிடுதல் திறன் 2% ஆக குறையும். Horovod போன்ற அதே அளவிடுதல் செயல்திறனை அடைய, நீங்கள் பணியாளர்களின் எண்ணிக்கையுடன் ஒப்பிடும்போது சேவையகங்களின் எண்ணிக்கையை இரட்டிப்பாக்க வேண்டும்.
படம் 1. ஹோரோவோட் மற்றும் அளவுரு சேவையகத்துடன் MXNet ஐப் பயன்படுத்தி விநியோகிக்கப்பட்ட கற்றலின் ஒப்பீடு
கீழே உள்ள அட்டவணை 1 இல், 64 GPUகளில் சோதனைகளை இயக்கும் போது ஒரு நிகழ்விற்கான இறுதி விலையை ஒப்பிடுகிறோம். Horovod உடன் MXNet ஐப் பயன்படுத்துவது குறைந்த செலவில் சிறந்த செயல்திறனை வழங்குகிறது.
அட்டவணை 1. ஹோரோவோட் மற்றும் பாராமீட்டர் சர்வருக்கும் சர்வருக்கும் 2 முதல் 1 வரையிலான தொழிலாளர் விகிதத்திற்கும் இடையேயான செலவு ஒப்பீடு.
இனப்பெருக்கம் செய்வதற்கான படிகள்
அடுத்த படிகளில், MXNet மற்றும் Horovod ஐப் பயன்படுத்தி விநியோகிக்கப்பட்ட பயிற்சியின் முடிவை எவ்வாறு மீண்டும் உருவாக்குவது என்பதைக் காண்பிப்போம். MXNet ரீட் மூலம் விநியோகிக்கப்பட்ட கற்றல் பற்றி மேலும் அறிய
1 விலக
விநியோகிக்கப்பட்ட கற்றலைப் பயன்படுத்த MXNet பதிப்பு 1.4.0 அல்லது அதற்கும் அதிகமான மற்றும் Horovod பதிப்பு 0.16.0 அல்லது அதற்கு மேற்பட்டவற்றுடன் ஒரே மாதிரியான நிகழ்வுகளின் தொகுப்பை உருவாக்கவும். GPU பயிற்சிக்காக நீங்கள் நூலகங்களையும் நிறுவ வேண்டும். எங்கள் நிகழ்வுகளுக்கு, GPU டிரைவர் 16.04, CUDA 396.44, cuDNN 9.2 லைப்ரரி, NCCL 7.2.1 தொடர்பாளர் மற்றும் OpenMPI 2.2.13 உடன் Ubuntu 3.1.1 Linux ஐத் தேர்ந்தெடுத்தோம். மேலும் நீங்கள் பயன்படுத்தலாம்
2 விலக
உங்கள் MXNet பயிற்சி ஸ்கிரிப்ட்டில் Horovod API உடன் பணிபுரியும் திறனைச் சேர்க்கவும். MXNet Gluon API அடிப்படையிலான கீழேயுள்ள ஸ்கிரிப்டை எளிய டெம்ப்ளேட்டாகப் பயன்படுத்தலாம். உங்களிடம் ஏற்கனவே தொடர்புடைய பயிற்சி ஸ்கிரிப்ட் இருந்தால் தடிமனான வரிகள் தேவைப்படும். Horovod உடன் கற்றுக்கொள்ள நீங்கள் செய்ய வேண்டிய சில முக்கியமான மாற்றங்கள் இங்கே:
- சரியான கிராபிக்ஸ் மையத்தில் பயிற்சி செய்யப்படுகிறது என்பதைப் புரிந்துகொள்ள, உள்ளூர் Horovod ரேங்க் (வரி 8) படி சூழலை அமைக்கவும்.
- அனைத்து தொழிலாளர்களும் ஒரே ஆரம்ப அளவுருக்களுடன் தொடங்குவதை உறுதிசெய்ய, ஒரு பணியாளரிடமிருந்து அனைவருக்கும் ஆரம்ப அளவுருக்களை அனுப்பவும் (வரி 18).
- ஒரு Horovod உருவாக்கவும் விநியோகிக்கப்பட்ட ஆப்டிமைசர் (வரி 25) அளவுருக்களை விநியோகிக்கப்பட்ட முறையில் புதுப்பிக்க.
முழு ஸ்கிரிப்டைப் பெற, Horovod-MXNet எடுத்துக்காட்டுகளைப் பார்க்கவும்
1 import mxnet as mx
2 import horovod.mxnet as hvd
3
4 # Horovod: initialize Horovod
5 hvd.init()
6
7 # Horovod: pin a GPU to be used to local rank
8 context = mx.gpu(hvd.local_rank())
9
10 # Build model
11 model = ...
12
13 # Initialize parameters
14 model.initialize(initializer, ctx=context)
15 params = model.collect_params()
16
17 # Horovod: broadcast parameters
18 hvd.broadcast_parameters(params, root_rank=0)
19
20 # Create optimizer
21 optimizer_params = ...
22 opt = mx.optimizer.create('sgd', **optimizer_params)
23
24 # Horovod: wrap optimizer with DistributedOptimizer
25 opt = hvd.DistributedOptimizer(opt)
26
27 # Create trainer and loss function
28 trainer = mx.gluon.Trainer(params, opt, kvstore=None)
29 loss_fn = ...
30
31 # Train model
32 for epoch in range(num_epoch):
33 ...
3 விலக
MPI கட்டளையைப் பயன்படுத்தி விநியோகிக்கப்பட்ட பயிற்சியைத் தொடங்க, தொழிலாளர்களில் ஒருவரில் உள்நுழையவும். இந்த எடுத்துக்காட்டில், விநியோகிக்கப்பட்ட பயிற்சி நான்கு நிகழ்வுகளில் 4 GPUகளுடன் இயங்குகிறது, மேலும் கிளஸ்டரில் மொத்தம் 16 GPUகள் உள்ளன. ஸ்டோகாஸ்டிக் கிரேடியன்ட் டிசென்ட் (SGD) ஆப்டிமைசர் பின்வரும் ஹைபர்பாராமீட்டர்களுடன் பயன்படுத்தப்படும்:
- சிறு தொகுதி அளவு: 256
- கற்றல் விகிதம்: 0.1
- வேகம்: 0.9
- எடை சிதைவு: 0.0001
ஒரு GPU இலிருந்து 64 GPU களுக்கு அளவிடும்போது, GPUகளின் எண்ணிக்கைக்கு ஏற்ப பயிற்சி விகிதத்தை நேரியல் முறையில் அளந்தோம் (0,1 GPU க்கு 1 முதல் 6,4 GPU களுக்கு 64 வரை), அதே நேரத்தில் ஒரு GPU ஒன்றின் படங்களின் எண்ணிக்கையை 256 (ஒரு தொகுதியிலிருந்து 256 GPUக்கு 1 படங்கள் முதல் 16 GPUகளுக்கு 384 வரை). GPUகளின் எண்ணிக்கை அதிகரித்ததால் எடை சிதைவு மற்றும் வேக அளவுருக்கள் மாறின. என்விடியா டெஸ்லா ஜிபியுக்கள் ஆதரிக்கும் ஃப்ளோட்64 கணக்கீடுகளை விரைவுபடுத்த, ஃபார்வர்ட் பாஸுக்கு ஃப்ளோட்16 டேட்டா வகையையும், கிரேடியன்ட்களுக்கு ஃப்ளோட்32ஐயும் கலந்த துல்லியமான பயிற்சியைப் பயன்படுத்தினோம்.
$ mpirun -np 16
-H server1:4,server2:4,server3:4,server4:4
-bind-to none -map-by slot
-mca pml ob1 -mca btl ^openib
python mxnet_imagenet_resnet50.py
முடிவுக்கு
இந்தக் கட்டுரையில், Apache MXNet மற்றும் Horovod ஆகியவற்றைப் பயன்படுத்தி விநியோகிக்கப்பட்ட மாதிரி பயிற்சிக்கான அளவிடக்கூடிய அணுகுமுறையைப் பார்த்தோம். ResNet50-v1 மாதிரி பயிற்சியளிக்கப்பட்ட ImageNet தரவுத்தொகுப்பில் உள்ள அளவுரு சேவையக அணுகுமுறையுடன் ஒப்பிடும்போது அளவிடுதல் செயல்திறன் மற்றும் செலவு-செயல்திறனை நாங்கள் நிரூபித்தோம். Horovod ஐப் பயன்படுத்தி பல-நிகழ்வு பயிற்சியை இயக்க, ஏற்கனவே உள்ள ஸ்கிரிப்டை மாற்ற நீங்கள் பயன்படுத்தக்கூடிய படிகளையும் நாங்கள் சேர்த்துள்ளோம்.
நீங்கள் MXNet மற்றும் ஆழ்ந்த கற்றல் மூலம் தொடங்கினால், நிறுவல் பக்கத்திற்குச் செல்லவும்
நீங்கள் ஏற்கனவே MXNet உடன் பணிபுரிந்திருந்தால் மற்றும் Horovod மூலம் விநியோகிக்கப்பட்ட கற்றலை முயற்சிக்க விரும்பினால், பாருங்கள்
* செலவு கணக்கிடப்படுகிறது
பாடத்திட்டத்தைப் பற்றி மேலும் அறிக
ஆதாரம்: www.habr.com