Apache MXNet மற்றும் Horovod மூலம் பரவலான கற்றல்

இக்கட்டுரையின் மொழியாக்கம் பாடநெறி தொடங்கும் தினத்தன்று தயாரிக்கப்பட்டது "பிக் டேட்டாவில் தொழில்துறை எம்.எல்"

பல உயர்-செயல்திறன் கம்ப்யூட்டிங் நிகழ்வுகளில் விநியோகிக்கப்பட்ட பயிற்சி நவீன ஆழமான நரம்பியல் நெட்வொர்க்குகளின் பயிற்சி நேரத்தை வாரங்கள் முதல் மணிநேரம் அல்லது நிமிடங்கள் வரை பெரிய அளவிலான தரவுகளில் குறைக்கலாம், இந்த பயிற்சி நுட்பத்தை ஆழமான கற்றலின் நடைமுறை பயன்பாடுகளில் பரவலாக்குகிறது. பல நிகழ்வுகளில் தரவை எவ்வாறு பகிர்வது மற்றும் ஒத்திசைப்பது என்பதை பயனர்கள் புரிந்து கொள்ள வேண்டும், இது அளவிடுதல் செயல்திறனில் பெரும் தாக்கத்தை ஏற்படுத்துகிறது. கூடுதலாக, ஒரே நிகழ்வில் பல நிகழ்வுகளில் இயங்கும் பயிற்சி ஸ்கிரிப்டை எவ்வாறு பயன்படுத்துவது என்பதையும் பயனர்கள் அறிந்திருக்க வேண்டும்.

இந்த கட்டுரையில் திறந்த ஆழமான கற்றல் நூலகமான அப்பாச்சி எம்எக்ஸ்நெட் மற்றும் ஹோரோவோட் விநியோகிக்கப்பட்ட கற்றல் கட்டமைப்பைப் பயன்படுத்தி கற்றலை விநியோகிப்பதற்கான விரைவான மற்றும் எளிதான வழியைப் பற்றி பேசுவோம். Horovod கட்டமைப்பின் செயல்திறன் பலன்களை நாங்கள் தெளிவாகக் காண்பிப்போம் மற்றும் MXNet பயிற்சி ஸ்கிரிப்டை எவ்வாறு எழுதுவது என்பதை விளக்குவோம், இதனால் அது Horovod உடன் விநியோகிக்கப்பட்ட முறையில் செயல்படுகிறது.

அப்பாச்சி எம்எக்ஸ்நெட் என்றால் என்ன

அப்பாச்சி MXNet ஆழமான நரம்பியல் நெட்வொர்க்குகளை உருவாக்கவும், பயிற்சி செய்யவும் மற்றும் வரிசைப்படுத்தவும் பயன்படும் ஒரு திறந்த மூல ஆழமான கற்றல் கட்டமைப்பாகும். MXNet நரம்பியல் நெட்வொர்க்குகளை செயல்படுத்துவதில் தொடர்புடைய சிக்கல்களை சுருக்குகிறது, அதிக செயல்திறன் மற்றும் அளவிடக்கூடியது, மேலும் பிரபலமான நிரலாக்க மொழிகளுக்கு API களை வழங்குகிறது பைதான், சி ++, Clojure, ஜாவா, ஜூலியா, R, ஸ்காலா மற்றும் பிற.

அளவுரு சேவையகத்துடன் MXNet இல் விநியோகிக்கப்படும் பயிற்சி

MXNet இல் நிலையான விநியோகிக்கப்பட்ட கற்றல் தொகுதி ஒரு அளவுரு சேவையக அணுகுமுறையைப் பயன்படுத்துகிறது. ஒவ்வொரு தொழிலாளியிடமிருந்தும் சாய்வுகளைச் சேகரிக்கவும், திரட்டலைச் செய்யவும், மேலும் மேம்படுத்தப்பட்ட சாய்வுகளை அடுத்த மேம்படுத்தல் மறு செய்கைக்காக தொழிலாளர்களுக்கு அனுப்பவும் இது அளவுரு சேவையகங்களின் தொகுப்பைப் பயன்படுத்துகிறது. தொழிலாளர்களுக்கு சேவையகங்களின் சரியான விகிதத்தை தீர்மானிப்பது பயனுள்ள அளவிடுதலுக்கான திறவுகோலாகும். ஒரே ஒரு அளவுரு சேவையகம் இருந்தால், அது கணக்கீடுகளில் ஒரு தடையாக மாறும். மாறாக, பல சேவையகங்கள் பயன்படுத்தப்பட்டால், பல முதல் பல தொடர்புகள் அனைத்து பிணைய இணைப்புகளையும் அடைத்துவிடும்.

ஹொரோவோட் என்றால் என்ன

ஹோரோவோட் Uber இல் உருவாக்கப்பட்ட ஒரு திறந்த விநியோகிக்கப்பட்ட ஆழமான கற்றல் கட்டமைப்பாகும். இது NVIDIA Collective Communications Library (NCCL) மற்றும் Message Passing Interface (MPI) போன்ற திறமையான குறுக்கு-ஜிபியு மற்றும் குறுக்கு முனை தொழில்நுட்பங்களை வோரெக்ஸ் முழுவதும் மாதிரி அளவுருக்களை விநியோகிக்க மற்றும் ஒருங்கிணைக்கிறது. இது ஆழமான நரம்பியல் நெட்வொர்க் மாடல்களுடன் பணிபுரியும் போது நெட்வொர்க் அலைவரிசை மற்றும் அளவீடுகளின் பயன்பாட்டை மேம்படுத்துகிறது. இது தற்போது பல பிரபலமான இயந்திர கற்றல் கட்டமைப்புகளை ஆதரிக்கிறது, அதாவது MX Net, Tensorflow, Keras மற்றும் PyTorch.

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 போன்ற அதே அளவிடுதல் செயல்திறனை அடைய, நீங்கள் பணியாளர்களின் எண்ணிக்கையுடன் ஒப்பிடும்போது சேவையகங்களின் எண்ணிக்கையை இரட்டிப்பாக்க வேண்டும்.

Apache MXNet மற்றும் Horovod மூலம் பரவலான கற்றல்
படம் 1. ஹோரோவோட் மற்றும் அளவுரு சேவையகத்துடன் MXNet ஐப் பயன்படுத்தி விநியோகிக்கப்பட்ட கற்றலின் ஒப்பீடு

கீழே உள்ள அட்டவணை 1 இல், 64 GPUகளில் சோதனைகளை இயக்கும் போது ஒரு நிகழ்விற்கான இறுதி விலையை ஒப்பிடுகிறோம். Horovod உடன் MXNet ஐப் பயன்படுத்துவது குறைந்த செலவில் சிறந்த செயல்திறனை வழங்குகிறது.

Apache MXNet மற்றும் Horovod மூலம் பரவலான கற்றல்
அட்டவணை 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 ஐத் தேர்ந்தெடுத்தோம். மேலும் நீங்கள் பயன்படுத்தலாம் அமேசான் டீப் லேர்னிங் AMI, இந்த நூலகங்கள் ஏற்கனவே முன்பே நிறுவப்பட்டுள்ளன.

2 விலக

உங்கள் MXNet பயிற்சி ஸ்கிரிப்ட்டில் Horovod API உடன் பணிபுரியும் திறனைச் சேர்க்கவும். MXNet Gluon API அடிப்படையிலான கீழேயுள்ள ஸ்கிரிப்டை எளிய டெம்ப்ளேட்டாகப் பயன்படுத்தலாம். உங்களிடம் ஏற்கனவே தொடர்புடைய பயிற்சி ஸ்கிரிப்ட் இருந்தால் தடிமனான வரிகள் தேவைப்படும். Horovod உடன் கற்றுக்கொள்ள நீங்கள் செய்ய வேண்டிய சில முக்கியமான மாற்றங்கள் இங்கே:

  • சரியான கிராபிக்ஸ் மையத்தில் பயிற்சி செய்யப்படுகிறது என்பதைப் புரிந்துகொள்ள, உள்ளூர் Horovod ரேங்க் (வரி 8) படி சூழலை அமைக்கவும்.
  • அனைத்து தொழிலாளர்களும் ஒரே ஆரம்ப அளவுருக்களுடன் தொடங்குவதை உறுதிசெய்ய, ஒரு பணியாளரிடமிருந்து அனைவருக்கும் ஆரம்ப அளவுருக்களை அனுப்பவும் (வரி 18).
  • ஒரு Horovod உருவாக்கவும் விநியோகிக்கப்பட்ட ஆப்டிமைசர் (வரி 25) அளவுருக்களை விநியோகிக்கப்பட்ட முறையில் புதுப்பிக்க.

முழு ஸ்கிரிப்டைப் பெற, Horovod-MXNet எடுத்துக்காட்டுகளைப் பார்க்கவும் MNIST и இமேஜ்நெட்.

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 மற்றும் ஆழ்ந்த கற்றல் மூலம் தொடங்கினால், நிறுவல் பக்கத்திற்குச் செல்லவும் MXNeமுதலில் MXNet ஐ உருவாக்க வேண்டும். கட்டுரையைப் படிக்கவும் நாங்கள் கடுமையாக பரிந்துரைக்கிறோம் MXNet 60 நிமிடங்களில்தொடங்குவதற்கு.

நீங்கள் ஏற்கனவே MXNet உடன் பணிபுரிந்திருந்தால் மற்றும் Horovod மூலம் விநியோகிக்கப்பட்ட கற்றலை முயற்சிக்க விரும்பினால், பாருங்கள் Horovod நிறுவல் பக்கம், அதை MXNet இலிருந்து உருவாக்கி, உதாரணத்தைப் பின்பற்றவும் MNIST அல்லது இமேஜ்நெட்.

* செலவு கணக்கிடப்படுகிறது மணிநேர விகிதங்கள் EC2 நிகழ்வுகளுக்கான AWS

பாடத்திட்டத்தைப் பற்றி மேலும் அறிக "பிக் டேட்டாவில் தொழில்துறை எம்.எல்"

ஆதாரம்: www.habr.com

கருத்தைச் சேர்