የጽሁፉ ትርጉም የተዘጋጀው በትምህርቱ መጀመሪያ ዋዜማ ላይ ነው።
በበርካታ ከፍተኛ አፈፃፀም የኮምፒዩተር ምሳሌዎች ላይ የተሰራጨው ስልጠና የዘመናዊ ጥልቅ ነርቭ ኔትወርኮችን በከፍተኛ መጠን መረጃ ላይ ከሳምንታት እስከ ሰአታት አልፎ ተርፎም ደቂቃዎች የስልጠና ጊዜን ሊቀንስ ይችላል ፣ይህም የስልጠና ቴክኒክ በጥልቅ ትምህርት በተግባራዊ አተገባበር ላይ በስፋት እንዲሰራ ያደርገዋል። ተጠቃሚዎች ውሂብን በተለያዩ አጋጣሚዎች እንዴት ማጋራት እና ማመሳሰል እንደሚችሉ መረዳት አለባቸው፣ ይህ ደግሞ በምላሹ ቅልጥፍናን በማስፋት ላይ ትልቅ ተጽእኖ አለው። በተጨማሪም፣ ተጠቃሚዎች በአንድ ጊዜ የሚሠራ የሥልጠና ስክሪፕት ወደ ብዙ አጋጣሚዎች እንዴት ማሰማራት እንደሚችሉ ማወቅ አለባቸው።
በዚህ ጽሑፍ ውስጥ ስለ ክፍት ጥልቅ የመማሪያ ቤተ-መጽሐፍት Apache MXNet እና የሆሮቮድ የተከፋፈለ የትምህርት ማዕቀፍ በመጠቀም ትምህርትን ለማሰራጨት ፈጣን እና ቀላል መንገድ እንነጋገራለን ። በሆሮቮድ ማዕቀፍ ውስጥ ያለውን የአፈፃፀም ጥቅሞች በግልፅ እናሳያለን እና የ MXNet ስልጠና ስክሪፕት እንዴት እንደሚፃፍ እናሳያለን ይህም ከሆሮቮድ ጋር በተሰራጭ መንገድ ይሰራል.
Apache MXNet ምንድን ነው?
በ MXNet ውስጥ ከፓራሜትር አገልጋይ ጋር የተሰራጨ ስልጠና
ሆሮቮድ ምንድን ነው?
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% ይቀንሳል። ከሆሮቮድ ጋር ተመሳሳይ የመለኪያ ቅልጥፍናን ለማግኘት ከሠራተኞች ብዛት አንጻር የአገልጋዮቹን ቁጥር በእጥፍ መጨመር ያስፈልግዎታል።
ምስል 1. MXNet ን ከሆሮቮድ እና ከፓራሜትር አገልጋይ ጋር በመጠቀም የተከፋፈለ ትምህርትን ማወዳደር
ከታች ባለው ሠንጠረዥ 1 ላይ በ64 ጂፒዩዎች ላይ ሙከራዎችን ስናካሂድ የመጨረሻውን ወጪ በአንድ ምሳሌ እናነፃፅራለን። MXNet ን ከሆሮቮድ ጋር መጠቀም በዝቅተኛው ወጪ ምርጡን ውጤት ያቀርባል።
ሠንጠረዥ 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) መለኪያዎችን በተከፋፈለ መልኩ ለማዘመን.
ሙሉውን ስክሪፕት ለማግኘት፣ እባክዎን የሆሮቮድ-ኤምኤክስኔት ምሳሌዎችን ይመልከቱ
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 እየጀመርክ ከሆነ እና ጥልቅ ትምህርት ወደ መጫኛ ገፅ ሂድ
አስቀድመው ከ MXNet ጋር ከሰሩ እና በሆሮቮድ የተከፋፈለ ትምህርትን መሞከር ከፈለጉ ከዚያ ይመልከቱ
* ወጪ የሚሰላው በዚህ መሰረት ነው።
ስለ ኮርሱ የበለጠ ይረዱ
ምንጭ: hab.com