Apache MXNet మరియు Horovodతో పంపిణీ చేయబడిన అభ్యాసం

వ్యాసం యొక్క అనువాదం కోర్సు ప్రారంభం సందర్భంగా తయారు చేయబడింది "బిగ్ డేటాపై పారిశ్రామిక ML"

బహుళ అధిక-పనితీరు గల కంప్యూటింగ్ ఉదంతాలపై పంపిణీ చేయబడిన శిక్షణ ఆధునిక డీప్ న్యూరల్ నెట్‌వర్క్‌ల యొక్క పెద్ద మొత్తంలో డేటాపై వారాల నుండి గంటలు లేదా నిమిషాల వరకు శిక్షణ సమయాన్ని తగ్గిస్తుంది, ఈ శిక్షణ పద్ధతిని లోతైన అభ్యాసం యొక్క ఆచరణాత్మక అనువర్తనాల్లో ప్రబలంగా చేస్తుంది. బహుళ సందర్భాలలో డేటాను ఎలా భాగస్వామ్యం చేయాలో మరియు సమకాలీకరించాలో వినియోగదారులు అర్థం చేసుకోవాలి, ఇది స్కేలింగ్ సామర్థ్యంపై ప్రధాన ప్రభావాన్ని చూపుతుంది. అదనంగా, వినియోగదారులు ఒకే సందర్భంలో అనేక సందర్భాల్లో అమలు చేసే శిక్షణ స్క్రిప్ట్‌ను ఎలా అమలు చేయాలో కూడా తెలుసుకోవాలి.

ఈ ఆర్టికల్‌లో ఓపెన్ డీప్ లెర్నింగ్ లైబ్రరీ Apache MXNet మరియు హోరోవోడ్ డిస్ట్రిబ్యూట్ లెర్నింగ్ ఫ్రేమ్‌వర్క్‌ని ఉపయోగించి నేర్చుకునే శీఘ్ర మరియు సులభమైన మార్గం గురించి మాట్లాడుతాము. మేము Horovod ఫ్రేమ్‌వర్క్ యొక్క పనితీరు ప్రయోజనాలను స్పష్టంగా ప్రదర్శిస్తాము మరియు MXNet శిక్షణ స్క్రిప్ట్‌ను ఎలా వ్రాయాలో ప్రదర్శిస్తాము, తద్వారా ఇది Horovodతో పంపిణీ చేయబడిన పద్ధతిలో పని చేస్తుంది.

Apache MXNet అంటే ఏమిటి

అపాచీ MXNet డీప్ న్యూరల్ నెట్‌వర్క్‌లను సృష్టించడానికి, శిక్షణ ఇవ్వడానికి మరియు అమలు చేయడానికి ఉపయోగించే ఓపెన్ సోర్స్ డీప్ లెర్నింగ్ ఫ్రేమ్‌వర్క్. MXNet నాడీ నెట్‌వర్క్‌లను అమలు చేయడంతో అనుబంధించబడిన సంక్లిష్టతలను దూరం చేస్తుంది, అత్యంత పనితీరు మరియు స్కేలబుల్, మరియు వంటి ప్రముఖ ప్రోగ్రామింగ్ భాషల కోసం APIలను అందిస్తుంది పైథాన్, C ++, క్లౌజ్యూర్, జావా, జూలియా, R, స్కాలా మరియు ఇతరులు.

పారామీటర్ సర్వర్‌తో MXNetలో పంపిణీ చేయబడిన శిక్షణ

MXNetలో ప్రామాణిక పంపిణీ లెర్నింగ్ మాడ్యూల్ పారామీటర్ సర్వర్ విధానాన్ని ఉపయోగిస్తుంది. ఇది ప్రతి వర్కర్ నుండి గ్రేడియంట్‌లను సేకరించడానికి, అగ్రిగేషన్ చేయడానికి మరియు తదుపరి ఆప్టిమైజేషన్ పునరావృతం కోసం కార్మికులకు నవీకరించబడిన గ్రేడియంట్‌లను తిరిగి పంపడానికి పారామీటర్ సర్వర్‌ల సమితిని ఉపయోగిస్తుంది. కార్మికులకు సర్వర్‌ల సరైన నిష్పత్తిని నిర్ణయించడం సమర్థవంతమైన స్కేలింగ్‌కు కీలకం. ఒక పారామీటర్ సర్వర్ మాత్రమే ఉంటే, అది గణనలలో అడ్డంకిగా మారవచ్చు. దీనికి విరుద్ధంగా, చాలా సర్వర్‌లు ఉపయోగించబడితే, అనేక నుండి అనేక కమ్యూనికేషన్ అన్ని నెట్‌వర్క్ కనెక్షన్‌లను అడ్డుకుంటుంది.

హోరోవోడ్ అంటే ఏమిటి

హోరోవోడ్ Uberలో అభివృద్ధి చేయబడిన ఓపెన్ డిస్ట్రిబ్యూట్ డీప్ లెర్నింగ్ ఫ్రేమ్‌వర్క్. ఇది వోరెక్స్‌లో మోడల్ పారామితులను పంపిణీ చేయడానికి మరియు సమగ్రపరచడానికి NVIDIA కలెక్టివ్ కమ్యూనికేషన్స్ లైబ్రరీ (NCCL) మరియు మెసేజ్ పాసింగ్ ఇంటర్‌ఫేస్ (MPI) వంటి సమర్థవంతమైన క్రాస్-GPU మరియు క్రాస్-నోడ్ సాంకేతికతలను ప్రభావితం చేస్తుంది. ఇది డీప్ న్యూరల్ నెట్‌వర్క్ మోడల్‌లతో పనిచేసేటప్పుడు నెట్‌వర్క్ బ్యాండ్‌విడ్త్ మరియు స్కేల్‌ల వినియోగాన్ని బాగా ఆప్టిమైజ్ చేస్తుంది. ఇది ప్రస్తుతం అనేక ప్రసిద్ధ యంత్ర అభ్యాస ఫ్రేమ్‌వర్క్‌లకు మద్దతు ఇస్తుంది, అవి MX నెట్, 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%కి పడిపోతుంది. హోరోవోడ్ వలె అదే స్కేలింగ్ సామర్థ్యాన్ని సాధించడానికి, మీరు కార్మికుల సంఖ్యకు సంబంధించి సర్వర్‌ల సంఖ్యను రెట్టింపు చేయాలి.

Apache MXNet మరియు Horovodతో పంపిణీ చేయబడిన అభ్యాసం
మూర్తి 1. హోరోవోడ్ మరియు పారామీటర్ సర్వర్‌తో MXNet ఉపయోగించి పంపిణీ చేయబడిన అభ్యాసం యొక్క పోలిక

దిగువ పట్టిక 1లో, మేము 64 GPUలలో ప్రయోగాలను అమలు చేస్తున్నప్పుడు ఒక్కో ఉదాహరణకి తుది ధరను పోల్చి చూస్తాము. హోరోవోడ్‌తో 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తో ఉబుంటు 3.1.1 Linuxని ఎంచుకున్నాము. మీరు కూడా ఉపయోగించవచ్చు అమెజాన్ డీప్ లెర్నింగ్ AMI, ఈ లైబ్రరీలు ఇప్పటికే ముందే ఇన్‌స్టాల్ చేయబడ్డాయి.

2 అడుగు

మీ MXNet శిక్షణ స్క్రిప్ట్‌కు Horovod APIతో పని చేసే సామర్థ్యాన్ని జోడించండి. MXNet Gluon API ఆధారంగా దిగువన ఉన్న స్క్రిప్ట్‌ని సాధారణ టెంప్లేట్‌గా ఉపయోగించవచ్చు. మీరు ఇప్పటికే సంబంధిత శిక్షణ స్క్రిప్ట్‌ని కలిగి ఉంటే బోల్డ్‌లో పంక్తులు అవసరం. హోరోవోడ్‌తో నేర్చుకోవడానికి మీరు చేయాల్సిన కొన్ని క్లిష్టమైన మార్పులు ఇక్కడ ఉన్నాయి:

  • సరైన గ్రాఫిక్స్ కోర్‌లో శిక్షణ నిర్వహించబడుతుందని అర్థం చేసుకోవడానికి స్థానిక హోరోవోడ్ ర్యాంక్ (లైన్ 8) ప్రకారం సందర్భాన్ని సెట్ చేయండి.
  • కార్మికులందరూ ఒకే ప్రారంభ పారామితులతో ప్రారంభించారని నిర్ధారించుకోవడానికి ఒక కార్మికుడి నుండి అందరికీ ప్రారంభ పారామితులను (లైన్ 18) పాస్ చేయండి.
  • హోరోవోడ్‌ను సృష్టించండి డిస్ట్రిబ్యూటెడ్ ఆప్టిమైజర్ (పంక్తి 25) పంపిణీ పద్ధతిలో పారామితులను నవీకరించడానికి.

పూర్తి స్క్రిప్ట్ పొందడానికి, దయచేసి Horovod-MXNet ఉదాహరణలను చూడండి MNIST и IMAGEnet.

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 మరియు లోతైన అభ్యాసంతో ప్రారంభించినట్లయితే, ఇన్‌స్టాలేషన్ పేజీకి వెళ్లండి MXNeముందుగా MXNet నిర్మించడానికి. మేము కథనాన్ని చదవమని కూడా గట్టిగా సిఫార్సు చేస్తున్నాము 60 నిమిషాల్లో MXNetప్రారంభించడానికి.

మీరు ఇప్పటికే MXNetతో పని చేసి, Horovodతో పంపిణీ చేయబడిన అభ్యాసాన్ని ప్రయత్నించాలనుకుంటే, ఒకసారి పరిశీలించండి హోరోవోడ్ ఇన్‌స్టాలేషన్ పేజీ, దీన్ని MXNet నుండి నిర్మించి, ఉదాహరణను అనుసరించండి MNIST లేదా IMAGEnet.

* ఖర్చు ఆధారంగా లెక్కించబడుతుంది గంట వారీ రేట్లు EC2 ఉదంతాల కోసం AWS

కోర్సు గురించి మరింత తెలుసుకోండి "బిగ్ డేటాపై పారిశ్రామిక ML"

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి