በApache MXNet እና Horovod የተሰራጨ ትምህርት

የጽሁፉ ትርጉም የተዘጋጀው በትምህርቱ መጀመሪያ ዋዜማ ላይ ነው። "የኢንዱስትሪ ኤምኤል በትልቅ መረጃ"

በበርካታ ከፍተኛ አፈፃፀም የኮምፒዩተር ምሳሌዎች ላይ የተሰራጨው ስልጠና የዘመናዊ ጥልቅ ነርቭ ኔትወርኮችን በከፍተኛ መጠን መረጃ ላይ ከሳምንታት እስከ ሰአታት አልፎ ተርፎም ደቂቃዎች የስልጠና ጊዜን ሊቀንስ ይችላል ፣ይህም የስልጠና ቴክኒክ በጥልቅ ትምህርት በተግባራዊ አተገባበር ላይ በስፋት እንዲሰራ ያደርገዋል። ተጠቃሚዎች ውሂብን በተለያዩ አጋጣሚዎች እንዴት ማጋራት እና ማመሳሰል እንደሚችሉ መረዳት አለባቸው፣ ይህ ደግሞ በምላሹ ቅልጥፍናን በማስፋት ላይ ትልቅ ተጽእኖ አለው። በተጨማሪም፣ ተጠቃሚዎች በአንድ ጊዜ የሚሠራ የሥልጠና ስክሪፕት ወደ ብዙ አጋጣሚዎች እንዴት ማሰማራት እንደሚችሉ ማወቅ አለባቸው።

በዚህ ጽሑፍ ውስጥ ስለ ክፍት ጥልቅ የመማሪያ ቤተ-መጽሐፍት Apache MXNet እና የሆሮቮድ የተከፋፈለ የትምህርት ማዕቀፍ በመጠቀም ትምህርትን ለማሰራጨት ፈጣን እና ቀላል መንገድ እንነጋገራለን ። በሆሮቮድ ማዕቀፍ ውስጥ ያለውን የአፈፃፀም ጥቅሞች በግልፅ እናሳያለን እና የ MXNet ስልጠና ስክሪፕት እንዴት እንደሚፃፍ እናሳያለን ይህም ከሆሮቮድ ጋር በተሰራጭ መንገድ ይሰራል.

Apache MXNet ምንድን ነው?

Apache MX Net ጥልቅ የነርቭ ኔትወርኮችን ለመፍጠር፣ ለማሰልጠን እና ለማሰማራት የሚያገለግል ክፍት ምንጭ ጥልቅ የትምህርት ማዕቀፍ ነው። MXNet የነርቭ ኔትወርኮችን ከመተግበሩ ጋር የተያያዙ ውስብስብ ነገሮችን ያጠቃልላል፣ ከፍተኛ አፈጻጸም ያለው እና ሊሰፋ የሚችል እና ኤፒአይዎችን ለታዋቂ የፕሮግራም አወጣጥ ቋንቋዎች ያቀርባል ለምሳሌ ዘንዶ, በ C ++, Clojure, ጃቫ, ጁሊያ, R, ስካላ እና ሌሎች.

በ MXNet ውስጥ ከፓራሜትር አገልጋይ ጋር የተሰራጨ ስልጠና

በ MXNet ውስጥ መደበኛ የተከፋፈለ የትምህርት ሞጁል። የመለኪያ አገልጋይ አቀራረብን ይጠቀማል። ከእያንዳንዱ ሰራተኛ ቅልመትን ለመሰብሰብ፣ ውህደቱን ለማከናወን እና ለቀጣዩ የማመቻቸት ድግምግሞሽ ወደ ሰራተኞች መልሰው ለመላክ የመለኪያ አገልጋዮችን ይጠቀማል። ትክክለኛውን የአገልጋይ እና የሰራተኞች ሬሾን መወሰን ውጤታማ ልኬትን ለማምጣት ቁልፍ ነው። አንድ ፓራሜትር አገልጋይ ብቻ ካለ፣ በስሌቶቹ ውስጥ ማነቆ ሊሆን ይችላል። በተቃራኒው፣ ብዙ ሰርቨሮች ጥቅም ላይ ከዋሉ፣ ከብዙ እስከ ብዙ ግንኙነቶች ሁሉንም የአውታረ መረብ ግንኙነቶችን ሊዘጉ ይችላሉ።

ሆሮቮድ ምንድን ነው?

ሆሮቮድ በኡበር የተገነባ ክፍት የተከፋፈለ ጥልቅ ትምህርት ማዕቀፍ ነው። በቮርኮች ላይ የሞዴል መለኪያዎችን ለማሰራጨት እና ለማዋሃድ እንደ NVIDIA Collective Communications Library (NCCL) እና Message Passing Interface (MPI) ያሉ ቀልጣፋ የጂፒዩ እና የመስቀለኛ መንገድ ቴክኖሎጂዎችን ይጠቀማል። ከጥልቅ ነርቭ አውታር ሞዴሎች ጋር ሲሰራ የኔትወርክ ባንድዊድዝ እና ሚዛኖችን መጠቀምን በጥሩ ሁኔታ ያመቻቻል። በአሁኑ ጊዜ በርካታ ታዋቂ የማሽን መማሪያ ማዕቀፎችን ይደግፋል, ማለትም MX Net, Tensorflow፣ Keras እና PyTorch።

MXNet እና Horovod ውህደት

MXNet በሆሮቮድ ውስጥ በተገለጹት የተከፋፈሉ የመማሪያ ኤፒአይዎች አማካኝነት ከሆሮቮድ ጋር ይዋሃዳል። የሆሮቮድ ግንኙነት ኤ.ፒ.አይ.ዎች horovod.ብሮድካስት(), horovod.allgather() и horovod.allreduce() የተግባር ግራፍ አካል ሆኖ የማይመሳሰል የ MXNet ሞተር መልሶ ጥሪዎችን በመጠቀም ተተግብሯል። በዚህ መንገድ በመገናኛ እና ስሌት መካከል ያሉ የውሂብ ጥገኞች በማመሳሰል ምክንያት የአፈፃፀም ኪሳራዎችን ለማስወገድ በኤምኤክስኔት ሞተር በቀላሉ ይያዛሉ። በሆሮቮድ ውስጥ የተገለጸ የተከፋፈለ አመቻች ነገር horovod.DistributedOptimizer ያሰፋል አመቻች በ MXNet ውስጥ ለተከፋፈለ የመለኪያ ማሻሻያ ተጓዳኝ የሆሮቮድ ኤፒአይዎችን ይጠራል። እነዚህ ሁሉ የትግበራ ዝርዝሮች ለዋና ተጠቃሚዎች ግልጽ ናቸው።

ፈጣን ጅምር

በማክቡክዎ ላይ MXNet እና Horovodን በመጠቀም አነስተኛ ኮንቮሉላር ነርቭ ኔትወርክን በMNIST ዳታ ስብስብ ላይ በፍጥነት ማሰልጠን መጀመር ይችላሉ።
በመጀመሪያ mxnet እና horovod ከ PyPI ይጫኑ፡-

pip install mxnet
pip install horovod

ማሳሰቢያ፡ በዚህ ጊዜ ስህተት ካጋጠመህ ፒፕ ጫን horovodምናልባት ተለዋዋጭ ማከል ያስፈልግዎታል MACOSX_DEPLOYMENT_TARGET=10.vvየት vv - ይህ የእርስዎ የ MacOS ስሪት ነው ፣ ለምሳሌ ፣ ለ MacOSX Sierra መፃፍ ያስፈልግዎታል MACOSX_DEPLOYMENT_TARGET=10.12 pip install 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 ሞዴልን በ ImageNet Dataset ላይ በ64 ጂፒዩዎች ከስምንት አጋጣሚዎች ጋር ሲያሰለጥኑ p3.16x ትልቅ EC2፣ እያንዳንዳቸው 8 NVIDIA Tesla V100 GPU ዎችን በAWS ደመና የያዙ፣ 45000 ምስሎች/ሰከንድ (ማለትም፣ የሰለጠኑ ናሙናዎች ብዛት በሰከንድ) የስልጠና መጠን አሳክተናል። ከ44 ዘመናት በኋላ በ90 ደቂቃ ውስጥ የተጠናቀቀው ስልጠና በ75.7 በመቶ ትክክለኛ ትክክለኛነት ነው።

ይህንን በ 8 ፣ 16 ፣ 32 እና 64 ጂፒዩዎች ላይ ፓራሜተር ሰርቨርን ከመጠቀም ከአንድ ፓራሜትር አገልጋይ እና አገልጋይ ከ 1 እስከ 1 እና 2 ለ 1 የሰራተኛ ጥምርታ ካለው የMXNet የተከፋፈለ የሥልጠና አካሄድ ጋር አወዳድረነዋል። ውጤቱን ከታች በስእል 1 ማየት ይችላሉ. በግራ በኩል ባለው የy-ዘንግ ላይ፣ አሞሌዎቹ በሰከንድ ለማሰልጠን የምስሎች ብዛት ይወክላሉ፣ መስመሮቹ የመለኪያ ቅልጥፍናን ያንፀባርቃሉ (ይህም ከትክክለኛው እና ከተገቢው የውጤት መጠን ጋር ያለው ሬሾ) በቀኝ በኩል ባለው y ዘንግ ላይ። እንደሚመለከቱት ፣ የአገልጋዮች ብዛት ምርጫ የመለኪያውን ውጤታማነት ይነካል ። አንድ ፓራሜትር አገልጋይ ብቻ ካለ፣ የመለኪያ ብቃቱ በ38 ጂፒዩዎች ላይ ወደ 64% ይቀንሳል። ከሆሮቮድ ጋር ተመሳሳይ የመለኪያ ቅልጥፍናን ለማግኘት ከሠራተኞች ብዛት አንጻር የአገልጋዮቹን ቁጥር በእጥፍ መጨመር ያስፈልግዎታል።

በApache MXNet እና Horovod የተሰራጨ ትምህርት
ምስል 1. MXNet ን ከሆሮቮድ እና ከፓራሜትር አገልጋይ ጋር በመጠቀም የተከፋፈለ ትምህርትን ማወዳደር

ከታች ባለው ሠንጠረዥ 1 ላይ በ64 ጂፒዩዎች ላይ ሙከራዎችን ስናካሂድ የመጨረሻውን ወጪ በአንድ ምሳሌ እናነፃፅራለን። MXNet ን ከሆሮቮድ ጋር መጠቀም በዝቅተኛው ወጪ ምርጡን ውጤት ያቀርባል።

በApache MXNet እና Horovod የተሰራጨ ትምህርት
ሠንጠረዥ 1. በሆሮቮድ እና በፓራሜትር አገልጋይ መካከል ያለው የዋጋ ንጽጽር ከአገልጋይ እና ከ 2 እስከ 1 ያለው ሬሾ።

ለመራባት እርምጃዎች

በሚቀጥሉት ደረጃዎች, MXNet እና Horovod በመጠቀም የተከፋፈለ ስልጠና ውጤቱን እንዴት ማባዛት እንደሚችሉ እናሳይዎታለን. በMXNet ማንበብ ስለተሰራጨ ትምህርት የበለጠ ለማወቅ ይህ ልጥፍ.

1 ደረጃ

የተከፋፈለ ትምህርት ለመጠቀም በMXNet ስሪት 1.4.0 ወይም ከዚያ በላይ እና በሆሮቮድ ስሪት 0.16.0 ወይም ከዚያ በላይ የሆነ ተመሳሳይ አጋጣሚዎችን ይፍጠሩ። እንዲሁም ለጂፒዩ ስልጠና ቤተ መፃህፍት መጫን ያስፈልግዎታል። ለአብነት፣ ኡቡንቱ 16.04 ሊኑክስን፣ ከጂፒዩ ሾፌር 396.44፣ CUDA 9.2፣ cuDNN 7.2.1 ቤተ መጻሕፍት፣ NCCL 2.2.13 ኮሙዩኒኬተር እና OpenMPI 3.1.1 ጋር መርጠናል:: እንዲሁም መጠቀም ይችላሉ የአማዞን ጥልቅ ትምህርት ኤኤምአይእነዚህ ቤተ-መጻሕፍት አስቀድመው የተጫኑበት።

2 ደረጃ

ወደ MXNet የሥልጠና ስክሪፕትህ ከሆሮቮድ ኤፒአይ ጋር የመስራት ችሎታን ጨምር። በMXNet Gluon API ላይ የተመሰረተው ከታች ያለው ስክሪፕት እንደ ቀላል አብነት መጠቀም ይቻላል። ተጓዳኝ የሥልጠና ስክሪፕት ካለዎት በደማቅ ውስጥ ያሉት መስመሮች ያስፈልጋሉ። በሆሮቮድ ለመማር ጥቂት ወሳኝ ለውጦች እዚህ አሉ፡

  • ስልጠናው በትክክለኛው ግራፊክስ ኮር ላይ መደረጉን ለመረዳት በአካባቢው የሆሮቮድ ደረጃ (መስመር 8) መሰረት አውድ ያዘጋጁ።
  • ሁሉም ሰራተኞች በተመሳሳይ የመጀመሪያ መለኪያዎች እንዲጀምሩ ከአንድ ሰራተኛ ወደ ሁሉም (መስመር 18) የመጀመሪያ መለኪያዎችን ያስተላልፉ።
  • ሆሮቮድ ይፍጠሩ የተከፋፈለ አመቻች (መስመር 25) መለኪያዎችን በተከፋፈለ መልኩ ለማዘመን.

ሙሉውን ስክሪፕት ለማግኘት፣ እባክዎን የሆሮቮድ-ኤምኤክስኔት ምሳሌዎችን ይመልከቱ 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 ጂፒዩዎች እና በአጠቃላይ 16 ጂፒዩዎች በክላስተር ውስጥ ይሰራል። የስቶካስቲክ ግራዲየንት መውረድ (SGD) አመቻች ከሚከተሉት ልዕለ መለኪያዎች ጋር ጥቅም ላይ ይውላል።

  • አነስተኛ-ባች መጠን: 256
  • የመማሪያ መጠን: 0.1
  • ፍጥነት: 0.9
  • ክብደት መበስበስ: 0.0001

ከአንድ ጂፒዩ ወደ 64 ጂፒዩዎች ስናሳድግ፣ የሥልጠና መጠኑን እንደ ጂፒዩ ብዛት (ከ0,1 ለ 1 ጂፒዩ ወደ 6,4 ለ 64 ጂፒዩዎች) እና የሥልጠና መጠኑን በአንድ ጂፒዩ በ256 (ከቡድን) በማቆየት የሥልጠና መጠኑን በመስመር አመጣን። 256 ምስሎች ለ 1 ጂፒዩ እስከ 16 ለ 384 ጂፒዩዎች)። የጂፒዩዎች ቁጥር ሲጨምር የክብደት መበስበስ እና የፍጥነት መለኪያዎች ተለውጠዋል። በNVDIA Tesla ጂፒዩዎች የሚደገፉትን የfloat64 ስሌቶች ለማፋጠን ለቀጣይ ማለፊያ ከ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 ሞዴል የሰለጠነበት በ ImageNet Dataset ላይ ካለው የመለኪያ አገልጋይ አቀራረብ ጋር ሲነጻጸር የማሳያ ቅልጥፍናን እና ወጪ ቆጣቢነቱን አሳይተናል። እንዲሁም ሆሮቮድን በመጠቀም የባለብዙ ምሳሌ ስልጠናን ለማካሄድ ያለውን ስክሪፕት ለማሻሻል ሊጠቀሙባቸው የሚችሏቸውን ደረጃዎች አካትተናል።

ገና በ MXNet እየጀመርክ ​​ከሆነ እና ጥልቅ ትምህርት ወደ መጫኛ ገፅ ሂድ MXNeበመጀመሪያ MXNet ን ለመገንባት. ጽሑፉን እንዲያነቡ አጥብቀን እንመክራለን MXNet በ60 ደቂቃ ውስጥለመጀመር.

አስቀድመው ከ MXNet ጋር ከሰሩ እና በሆሮቮድ የተከፋፈለ ትምህርትን መሞከር ከፈለጉ ከዚያ ይመልከቱ የሆሮቮድ መጫኛ ገጽ፣ ከ MXNet ይገንቡት እና ምሳሌውን ይከተሉ MNIST ወይም ImageNet.

* ወጪ የሚሰላው በዚህ መሰረት ነው። የሰዓት ተመኖች AWS ለ EC2 ምሳሌዎች

ስለ ኮርሱ የበለጠ ይረዱ "የኢንዱስትሪ ኤምኤል በትልቅ መረጃ"

ምንጭ: hab.com

አስተያየት ያክሉ