వ్యాసం యొక్క అనువాదం కోర్సు ప్రారంభం సందర్భంగా తయారు చేయబడింది
బహుళ అధిక-పనితీరు గల కంప్యూటింగ్ ఉదంతాలపై పంపిణీ చేయబడిన శిక్షణ ఆధునిక డీప్ న్యూరల్ నెట్వర్క్ల యొక్క పెద్ద మొత్తంలో డేటాపై వారాల నుండి గంటలు లేదా నిమిషాల వరకు శిక్షణ సమయాన్ని తగ్గిస్తుంది, ఈ శిక్షణ పద్ధతిని లోతైన అభ్యాసం యొక్క ఆచరణాత్మక అనువర్తనాల్లో ప్రబలంగా చేస్తుంది. బహుళ సందర్భాలలో డేటాను ఎలా భాగస్వామ్యం చేయాలో మరియు సమకాలీకరించాలో వినియోగదారులు అర్థం చేసుకోవాలి, ఇది స్కేలింగ్ సామర్థ్యంపై ప్రధాన ప్రభావాన్ని చూపుతుంది. అదనంగా, వినియోగదారులు ఒకే సందర్భంలో అనేక సందర్భాల్లో అమలు చేసే శిక్షణ స్క్రిప్ట్ను ఎలా అమలు చేయాలో కూడా తెలుసుకోవాలి.
ఈ ఆర్టికల్లో ఓపెన్ డీప్ లెర్నింగ్ లైబ్రరీ Apache MXNet మరియు హోరోవోడ్ డిస్ట్రిబ్యూట్ లెర్నింగ్ ఫ్రేమ్వర్క్ని ఉపయోగించి నేర్చుకునే శీఘ్ర మరియు సులభమైన మార్గం గురించి మాట్లాడుతాము. మేము Horovod ఫ్రేమ్వర్క్ యొక్క పనితీరు ప్రయోజనాలను స్పష్టంగా ప్రదర్శిస్తాము మరియు MXNet శిక్షణ స్క్రిప్ట్ను ఎలా వ్రాయాలో ప్రదర్శిస్తాము, తద్వారా ఇది Horovodతో పంపిణీ చేయబడిన పద్ధతిలో పని చేస్తుంది.
Apache MXNet అంటే ఏమిటి
డీప్ న్యూరల్ నెట్వర్క్లను సృష్టించడానికి, శిక్షణ ఇవ్వడానికి మరియు అమలు చేయడానికి ఉపయోగించే ఓపెన్ సోర్స్ డీప్ లెర్నింగ్ ఫ్రేమ్వర్క్. MXNet నాడీ నెట్వర్క్లను అమలు చేయడంతో అనుబంధించబడిన సంక్లిష్టతలను దూరం చేస్తుంది, అత్యంత పనితీరు మరియు స్కేలబుల్, మరియు వంటి ప్రముఖ ప్రోగ్రామింగ్ భాషల కోసం APIలను అందిస్తుంది , , , , , , మరియు ఇతరులు.
పారామీటర్ సర్వర్తో MXNetలో పంపిణీ చేయబడిన శిక్షణ
పారామీటర్ సర్వర్ విధానాన్ని ఉపయోగిస్తుంది. ఇది ప్రతి వర్కర్ నుండి గ్రేడియంట్లను సేకరించడానికి, అగ్రిగేషన్ చేయడానికి మరియు తదుపరి ఆప్టిమైజేషన్ పునరావృతం కోసం కార్మికులకు నవీకరించబడిన గ్రేడియంట్లను తిరిగి పంపడానికి పారామీటర్ సర్వర్ల సమితిని ఉపయోగిస్తుంది. కార్మికులకు సర్వర్ల సరైన నిష్పత్తిని నిర్ణయించడం సమర్థవంతమైన స్కేలింగ్కు కీలకం. ఒక పారామీటర్ సర్వర్ మాత్రమే ఉంటే, అది గణనలలో అడ్డంకిగా మారవచ్చు. దీనికి విరుద్ధంగా, చాలా సర్వర్లు ఉపయోగించబడితే, అనేక నుండి అనేక కమ్యూనికేషన్ అన్ని నెట్వర్క్ కనెక్షన్లను అడ్డుకుంటుంది.
హోరోవోడ్ అంటే ఏమిటి
Uberలో అభివృద్ధి చేయబడిన ఓపెన్ డిస్ట్రిబ్యూట్ డీప్ లెర్నింగ్ ఫ్రేమ్వర్క్. ఇది వోరెక్స్లో మోడల్ పారామితులను పంపిణీ చేయడానికి మరియు సమగ్రపరచడానికి NVIDIA కలెక్టివ్ కమ్యూనికేషన్స్ లైబ్రరీ (NCCL) మరియు మెసేజ్ పాసింగ్ ఇంటర్ఫేస్ (MPI) వంటి సమర్థవంతమైన క్రాస్-GPU మరియు క్రాస్-నోడ్ సాంకేతికతలను ప్రభావితం చేస్తుంది. ఇది డీప్ న్యూరల్ నెట్వర్క్ మోడల్లతో పనిచేసేటప్పుడు నెట్వర్క్ బ్యాండ్విడ్త్ మరియు స్కేల్ల వినియోగాన్ని బాగా ఆప్టిమైజ్ చేస్తుంది. ఇది ప్రస్తుతం అనేక ప్రసిద్ధ యంత్ర అభ్యాస ఫ్రేమ్వర్క్లకు మద్దతు ఇస్తుంది, అవి , Tensorflow, Keras మరియు PyTorch.
MXNet మరియు Horovod ఇంటిగ్రేషన్
MXNet Horovodలో నిర్వచించబడిన డిస్ట్రిబ్యూటెడ్ లెర్నింగ్ APIల ద్వారా Horovodతో కలిసిపోతుంది. Horovod కమ్యూనికేషన్ APIలు horovod.broadcast(), horovod.allgather() и horovod.allreduce() దాని టాస్క్ గ్రాఫ్లో భాగంగా MXNet ఇంజిన్ యొక్క అసమకాలిక కాల్బ్యాక్లను ఉపయోగించి అమలు చేయబడింది. ఈ విధంగా, సమకాలీకరణ కారణంగా పనితీరు నష్టాలను నివారించడానికి కమ్యూనికేషన్ మరియు గణన మధ్య డేటా డిపెండెన్సీలు MXNet ఇంజిన్ ద్వారా సులభంగా నిర్వహించబడతాయి. హోరోవోడ్లో నిర్వచించబడిన డిస్ట్రిబ్యూటెడ్ ఆప్టిమైజర్ ఆబ్జెక్ట్ horovod.DistributedOptimizer విస్తరిస్తుంది ఆప్టిమైజర్ MXNetలో పంపిణీ చేయబడిన పరామితి నవీకరణల కోసం సంబంధిత Horovod APIలను పిలుస్తుంది. ఈ అమలు వివరాలన్నీ తుది వినియోగదారులకు పారదర్శకంగా ఉంటాయి.
వేగవంతమైన ప్రారంభం
మీరు మీ మ్యాక్బుక్లో MXNet మరియు Horovod ఉపయోగించి MNIST డేటాసెట్లో చిన్న కన్వల్యూషనల్ న్యూరల్ నెట్వర్క్కు త్వరగా శిక్షణనివ్వవచ్చు.
ముందుగా, PyPI నుండి mxnet మరియు horovod ఇన్స్టాల్ చేయండి:
pip install mxnet
pip install horovodగమనిక: మీరు ఈ సమయంలో లోపాన్ని ఎదుర్కొంటే pip ఇన్స్టాల్ horovodబహుశా మీరు వేరియబుల్ని జోడించాల్సి ఉంటుంది MACOSX_DEPLOYMENT_TARGET=10.vvపేరు vv - ఇది మీ MacOS సంస్కరణ యొక్క సంస్కరణ, ఉదాహరణకు, MacOSX Sierra కోసం మీరు వ్రాయవలసి ఉంటుంది MACOSX_DEPLOYMENT_TARGET=10.12 పిప్ ఇన్స్టాల్ హోరోవోడ్
అప్పుడు 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ప్రదర్శన డెమో
ఎనిమిది ఉదంతాలతో 50 GPUలలో ImageNet డేటాసెట్లో ResNet1-v64 మోడల్కు శిక్షణ ఇస్తున్నప్పుడు p3.16x పెద్దది EC2, ప్రతి ఒక్కటి AWS క్లౌడ్లో 8 NVIDIA Tesla V100 GPUలను కలిగి ఉంది, మేము 45000 ఇమేజ్లు/సెకను (అంటే, సెకనుకు శిక్షణ పొందిన నమూనాల సంఖ్య) శిక్షణని సాధించాము. 44% అత్యుత్తమ ఖచ్చితత్వంతో 90 యుగాల తర్వాత 75.7 నిమిషాల్లో శిక్షణ పూర్తయింది.
మేము దీనిని MXNet పంపిణీ చేసిన శిక్షణా విధానంతో 8, 16, 32 మరియు 64 GPUలలో ఒకే పారామీటర్ సర్వర్ మరియు సర్వర్ నుండి వర్కర్ నిష్పత్తిని వరుసగా 1 నుండి 1 మరియు 2 నుండి 1 వరకు ఉపయోగించి పోల్చాము. మీరు దిగువ మూర్తి 1లో ఫలితాన్ని చూడవచ్చు. ఎడమ వైపున ఉన్న y-యాక్సిస్పై, బార్లు సెకనుకు శిక్షణ ఇవ్వాల్సిన చిత్రాల సంఖ్యను సూచిస్తాయి, పంక్తులు కుడి వైపున ఉన్న y-యాక్సిస్పై స్కేలింగ్ సామర్థ్యాన్ని (అంటే, వాస్తవ మరియు ఆదర్శ నిర్గమాంశ నిష్పత్తి) ప్రతిబింబిస్తాయి. మీరు చూడగలిగినట్లుగా, సర్వర్ల సంఖ్య ఎంపిక స్కేలింగ్ సామర్థ్యాన్ని ప్రభావితం చేస్తుంది. ఒక పారామీటర్ సర్వర్ మాత్రమే ఉన్నట్లయితే, 38 GPUలలో స్కేలింగ్ సామర్థ్యం 64%కి పడిపోతుంది. హోరోవోడ్ వలె అదే స్కేలింగ్ సామర్థ్యాన్ని సాధించడానికి, మీరు కార్మికుల సంఖ్యకు సంబంధించి సర్వర్ల సంఖ్యను రెట్టింపు చేయాలి.

మూర్తి 1. హోరోవోడ్ మరియు పారామీటర్ సర్వర్తో MXNet ఉపయోగించి పంపిణీ చేయబడిన అభ్యాసం యొక్క పోలిక
దిగువ పట్టిక 1లో, మేము 64 GPUలలో ప్రయోగాలను అమలు చేస్తున్నప్పుడు ఒక్కో ఉదాహరణకి తుది ధరను పోల్చి చూస్తాము. హోరోవోడ్తో MXNetని ఉపయోగించడం తక్కువ ధరలో ఉత్తమ నిర్గమాంశను అందిస్తుంది.

పట్టిక 1. హోరోవోడ్ మరియు పారామీటర్ సర్వర్ మధ్య ధర పోలిక, సర్వర్ నుండి వర్కర్ నిష్పత్తి 2 నుండి 1 వరకు ఉంటుంది.
పునరుత్పత్తికి దశలు
తదుపరి దశల్లో, MXNet మరియు Horovod ఉపయోగించి పంపిణీ చేయబడిన శిక్షణ ఫలితాన్ని ఎలా పునరుత్పత్తి చేయాలో మేము మీకు చూపుతాము. MXNet రీడ్తో పంపిణీ చేయబడిన అభ్యాసం గురించి మరింత తెలుసుకోవడానికి .
1 అడుగు
Создайте кластер однородных экземпляров с MXNet версии 1.4.0 или выше и Horovod версии 0.16.0 или выше, чтобы использовать распределенное обучение. Вам также нужно будет установить библиотеки для обучения на GPU. Для наших экземпляров мы выбрали Ubuntu 16.04 Linux, с GPU Driver 396.44, CUDA 9.2, библиотеку cuDNN 7.2.1, коммуникатор NCCL 2.2.13 и OpenMPI 3.1.1. Также вы можете использовать , ఈ లైబ్రరీలు ఇప్పటికే ముందే ఇన్స్టాల్ చేయబడ్డాయి.
2 అడుగు
మీ MXNet శిక్షణ స్క్రిప్ట్కు Horovod APIతో పని చేసే సామర్థ్యాన్ని జోడించండి. MXNet Gluon API ఆధారంగా దిగువన ఉన్న స్క్రిప్ట్ని సాధారణ టెంప్లేట్గా ఉపయోగించవచ్చు. మీరు ఇప్పటికే సంబంధిత శిక్షణ స్క్రిప్ట్ని కలిగి ఉంటే బోల్డ్లో పంక్తులు అవసరం. హోరోవోడ్తో నేర్చుకోవడానికి మీరు చేయాల్సిన కొన్ని క్లిష్టమైన మార్పులు ఇక్కడ ఉన్నాయి:
- సరైన గ్రాఫిక్స్ కోర్లో శిక్షణ నిర్వహించబడుతుందని అర్థం చేసుకోవడానికి స్థానిక హోరోవోడ్ ర్యాంక్ (లైన్ 8) ప్రకారం సందర్భాన్ని సెట్ చేయండి.
- కార్మికులందరూ ఒకే ప్రారంభ పారామితులతో ప్రారంభించారని నిర్ధారించుకోవడానికి ఒక కార్మికుడి నుండి అందరికీ ప్రారంభ పారామితులను (లైన్ 18) పాస్ చేయండి.
- హోరోవోడ్ను సృష్టించండి డిస్ట్రిబ్యూటెడ్ ఆప్టిమైజర్ (పంక్తి 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ల సంఖ్య పెరిగినందున బరువు క్షీణత మరియు మొమెంటం పారామితులు మారాయి. మేము ఫార్వర్డ్ పాస్ కోసం float64 డేటా రకంతో మిశ్రమ ఖచ్చితత్వ శిక్షణను మరియు NVIDIA Tesla GPUల ద్వారా మద్దతు ఇచ్చే float16 లెక్కలను వేగవంతం చేయడానికి గ్రేడియంట్ల కోసం float32ని ఉపయోగించాము.
$ 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 మోడల్పై శిక్షణ పొందిన ఇమేజ్నెట్ డేటాసెట్లోని పారామీటర్ సర్వర్ విధానంతో పోలిస్తే మేము స్కేలింగ్ సామర్థ్యం మరియు వ్యయ-ప్రభావాన్ని ప్రదర్శించాము. Horovodని ఉపయోగించి బహుళ-ఉదాహరణ శిక్షణను అమలు చేయడానికి ఇప్పటికే ఉన్న స్క్రిప్ట్ను సవరించడానికి మీరు ఉపయోగించే దశలను కూడా మేము చేర్చాము.
మీరు ఇప్పుడే MXNet మరియు లోతైన అభ్యాసంతో ప్రారంభించినట్లయితే, ఇన్స్టాలేషన్ పేజీకి వెళ్లండి ముందుగా MXNet నిర్మించడానికి. మేము కథనాన్ని చదవమని కూడా గట్టిగా సిఫార్సు చేస్తున్నాము ప్రారంభించడానికి.
మీరు ఇప్పటికే MXNetతో పని చేసి, Horovodతో పంపిణీ చేయబడిన అభ్యాసాన్ని ప్రయత్నించాలనుకుంటే, ఒకసారి పరిశీలించండి , దీన్ని MXNet నుండి నిర్మించి, ఉదాహరణను అనుసరించండి లేదా .
* ఖర్చు ఆధారంగా లెక్కించబడుతుంది EC2 ఉదంతాల కోసం AWS
కోర్సు గురించి మరింత తెలుసుకోండి
మూలం: www.habr.com
