د Apache MXNet او Horovod سره د زده کړې ویشل

د مقالې ژباړه د کورس د پیل په ماښام چمتو شوې وه "په لویو معلوماتو کې صنعتي ML"

د ډیری لوړ فعالیت کمپیوټري مثالونو کې توزیع شوي روزنه کولی شي د عصري ژورو عصبي شبکو د روزنې وخت په ډیرو ډیټاونو کې له اونیو څخه تر ساعتونو یا حتی دقیقو پورې راټیټ کړي، دا د روزنې تخنیک د ژورې زده کړې په عملي غوښتنلیکونو کې رامینځته کوي. کاروونکي باید پوه شي چې څنګه په ډیری مواردو کې ډاټا شریک او همغږي کړي، کوم چې په پایله کې د اندازه کولو موثریت باندې لوی اغیزه لري. سربیره پردې ، کارونکي باید پدې هم پوه شي چې څنګه د روزنې سکریپټ ځای په ځای کړي چې په یو واحد مثال کې ډیری مواردو ته ځي.

په دې مقاله کې به موږ د پرانیستې ژورې زده کړې کتابتون اپاچی MXNet او د هورووود ویشل شوي زده کړې چوکاټ په کارولو سره د زده کړې ویشلو لپاره د چټکې او اسانه لارې په اړه وغږیږو. موږ به په واضح ډول د هورووود چوکاټ د فعالیت ګټې وښیو او وښیو چې څنګه د MXNet روزنې سکریپټ لیکلو لپاره دا د هورووود سره په توزیع شوي ډول کار کوي.

Apache MXNet څه شی دی؟

اپاچی MXNet د خلاصې سرچینې ژورې زده کړې چوکاټ دی چې د ژورو عصبي شبکو رامینځته کولو ، روزنې او پلي کولو لپاره کارول کیږي. MXNet د عصبي شبکو پلي کولو پورې اړوند پیچلتیاوې خلاصوي ، خورا فعال او د توزیع وړ دی ، او د مشهور پروګرامینګ ژبو لپاره APIs وړاندیز کوي لکه Python, C ++, کیلوج, جاوا, جولیا, R, Scala او نور.

د پیرامیټر سرور سره په MXNet کې توزیع شوي روزنه

په MXNet کې د معیاري توزیع شوي زده کړې ماډل د پیرامیټر سرور طریقه کاروي. دا د پیرامیټر سرورونو سیټ کاروي ترڅو د هر کارګر څخه تدریجي راټول کړي، ټولیز ترسره کړي، او تازه شوي درجې بیرته کارګرانو ته د راتلونکي اصلاح کولو تکرار لپاره واستوي. د کارګرانو لپاره د سرورونو سم تناسب ټاکل د مؤثره پیمانه کولو کلیدي ده. که چیرې یوازې یو پیرامیټر سرور شتون ولري ، نو دا ممکن په محاسبه کې خنډ وي. برعکس، که چیرې ډیری سرورونه وکارول شي، له ډیرو څخه تر ډیرو اړیکو کولی شي د شبکې ټولې اړیکې بندې کړي.

Horovod څه شی دی؟

هوروود یو خلاص توزیع شوی ژور زده کړې چوکاټ دی چې په اوبر کې رامینځته شوی. دا د موثره کراس-GPU او کراس نوډ ټیکنالوژیو څخه ګټه پورته کوي لکه د NVIDIA اجتماعي مخابراتو کتابتون (NCCL) او د پیغام لیږدونکي انٹرفیس (MPI) ترڅو د vorecs په اوږدو کې د ماډل پیرامیټرې توزیع او راټول کړي. دا د شبکې بینډ ویت کارول غوره کوي او ښه اندازه کوي کله چې د ژور عصبي شبکې ماډلونو سره کار کوي. دا اوس مهال د ماشین زده کړې ډیری مشهور چوکاټونو ملاتړ کوي، د بیلګې په توګه MX جال، Tensorflow، Keras، او PyTorch.

MXNet او Horovod ادغام

MXNet د Horovod سره د توزیع شوي زده کړې APIs له لارې مدغم کیږي چې په هوروود کې تعریف شوي. Horovod مخابراتي APIs horovod.broadcast(), horovod.allgather() и horovod.allreduce() د دې د کاري ګراف د یوې برخې په توګه د MXNet انجن د غیر متناسب کال بیکونو په کارولو سره پلي شوی. په دې توګه، د اړیکو او محاسبې ترمنځ د معلوماتو انحصار په اسانۍ سره د MXNet انجن لخوا اداره کیږي ترڅو د همغږۍ له امله د فعالیت له لاسه ورکولو څخه مخنیوی وشي. ویشل شوی اصلاح کوونکی څیز په هوروود کې تعریف شوی horovod.DistributedOptimizer پراخوي اصلاح کوونکی په MXNet کې د دې لپاره چې دا د توزیع شوي پیرامیټرو تازه معلوماتو لپاره اړونده هوروود APIs ته زنګ ووهي. د دې پلي کولو ټول توضیحات د پای کاروونکو لپاره شفاف دي.

چټک پیل

تاسو کولی شئ په چټکۍ سره د MNIST ډیټاسیټ کې د MXNet او Horovod په کارولو سره په خپل MacBook کې د کوچني عصبي عصبي شبکې روزنه پیل کړئ.
لومړی، د PyPI څخه mxnet او horovod نصب کړئ:

pip install mxnet
pip install horovod

یادونه: که تاسو په جریان کې د یوې تېروتنې سره مخ شئ pip نصب horovodشاید تاسو اړتیا لرئ یو متغیر اضافه کړئ MACOSX_DEPLOYMENT_TARGET=10.vvچیرته vv - دا ستاسو د MacOS نسخه نسخه ده، د مثال په توګه، د MacOSX سیرا لپاره تاسو به لیکلو ته اړتیا ولرئ MACOSX_DEPLOYMENT_TARGET=10.12 پایپ نصب horovod

بیا OpenMPI نصب کړئ له دې ځایه.

په پای کې، د ازموینې سکریپټ ډاونلوډ کړئ mxnet_mnist.py له دې ځایه او په کاري لارښود کې د MacBook ترمینل کې لاندې کمانډونه پرمخ وړئ:

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 GPUs کې په ImageNet ډیټاسیټ کې د ResNet1-v64 ماډل روزنه p3.16x لوی EC2، هر یو په AWS کلاوډ کې د 8 NVIDIA Tesla V100 GPUs لري، موږ د 45000 انځورونو/سیکنډ (د مثال په توګه، په هره ثانیه کې د روزل شویو نمونو شمیر) د روزنې له لارې ترلاسه کړ. روزنه په 44 دقیقو کې د 90 دورې وروسته د 75.7٪ غوره دقت سره بشپړه شوه.

موږ دا په 8، 16، 32 او 64 GPUs کې د پیرامیټر سرورونو کارولو لپاره د MXNet توزیع شوي روزنې طریقې سره په ترتیب سره د واحد پیرامیټر سرور او سرور څخه د کارګر تناسب 1 څخه 1 او 2 څخه 1 سره پرتله کوو. تاسو کولی شئ پایله په لاندې شکل 1 کې وګورئ. په چپ اړخ کې د y-محور کې، بارونه په هر ثانیه کې د روزنې لپاره د انځورونو شمیر استازیتوب کوي، کرښې په ښي خوا کې د y-محور په برخه کې د پیمانه کولو موثریت (دا د حقیقي څخه د مثالي تولید تناسب) منعکس کوي. لکه څنګه چې تاسو لیدلی شئ، د سرورونو شمیره انتخاب د اندازه کولو موثریت اغیزه کوي. که چیرې یوازې یو پیرامیټر سرور شتون ولري ، د اندازه کولو موثریت په 38 GPUs کې 64٪ ته راټیټیږي. د هوروود سره ورته اندازه کولو موثریت ترلاسه کولو لپاره ، تاسو اړتیا لرئ د کارګرانو شمیر په پرتله د سرورونو شمیر دوه چنده کړئ.

د Apache MXNet او Horovod سره د زده کړې ویشل
شکل 1. د توزیع شوي زده کړې پرتله کول د MXNet په کارولو سره د هوروود او پیرامیټر سرور سره

په لاندې جدول 1 کې، موږ په هر مثال کې وروستی لګښت پرتله کوو کله چې په 64 GPUs کې تجربې پرمخ وړي. د Horovod سره د MXNet کارول په ټیټه بیه غوره ټرپټ چمتو کوي.

د Apache MXNet او Horovod سره د زده کړې ویشل
جدول 1. د هروود او پیرامیټر سرور تر مینځ د لګښت پرتله کول د سرور او کارګر تناسب د 2 څخه 1 پورې.

د بیا تولید لپاره ګامونه

په راتلونکو ګامونو کې، موږ به تاسو ته وښیو چې څنګه د MXNet او Horovod په کارولو سره د توزیع شوي روزنې پایلې بیا تولید کړئ. د MXNet سره د توزیع شوي زده کړې په اړه د نورو معلوماتو لپاره ولولئ دا پوسټ.

1 ګام

د ویشل شوي روزنې کارولو لپاره د MXNet نسخه 1.4.0 یا لوړ او د Horovod نسخه 0.16.0 یا لوړ سره د همجنسي مثالونو کلستر جوړ کړئ. تاسو به د GPU روزنې لپاره کتابتونونه نصبولو ته هم اړتیا ولرئ. زموږ د مثالونو لپاره، موږ غوره کړه Ubuntu 16.04 Linux، د GPU ډرایور 396.44، CUDA 9.2، cuDNN کتابتون 7.2.1، NCCL مخابراتي 2.2.13 او OpenMPI 3.1.1 سره. تاسو هم کارولی شئ د ایمیزون ژورې زده کړې AMI، چیرې چې دا کتابتونونه دمخه نصب شوي دي.

2 ګام

ستاسو د MXNet روزنې سکریپټ ته د Horovod API سره د کار کولو وړتیا اضافه کړئ. لاندې سکریپټ د MXNet Gluon API پراساس د ساده ټیمپلیټ په توګه کارول کیدی شي. په بولډ کې لینونو ته اړتیا ده که تاسو دمخه د ورته روزنې سکریپټ لرئ. دلته یو څو مهم بدلونونه دي چې تاسو ورته اړتیا لرئ د هوروود سره زده کړه وکړئ:

  • شرایط د محلي هورووډ رتبې (کرښه 8) سره سم تنظیم کړئ ترڅو پوه شئ چې روزنه په سم ګرافیک اصلي کې ترسره کیږي.
  • د یو کارګر څخه ټولو (18 کرښه) ته لومړني پیرامیټرونه انتقال کړئ ترڅو ډاډ ترلاسه شي چې ټول کارګران د ورته لومړني پیرامیټونو سره پیل کوي.
  • یو Horovod جوړ کړئ DistributedOptimizer (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 GPUs سره هر یو، او په کلستر کې ټول 16 GPUs پرمخ ځي. د Stochastic Gradient Descent (SGD) اصلاح کوونکی به د لاندې هایپر پارامیټرونو سره وکارول شي:

  • د مینی بیچ اندازه: 256
  • د زده کړې کچه: 0.1
  • سرعت: 0.9
  • د وزن کمښت: 0.0001

لکه څنګه چې موږ له یو GPU څخه 64 GPUs ته اندازه کړل، موږ د روزنې کچه د GPUs شمیر سره سم په قطعي ډول اندازه کړه (له 0,1 څخه د 1 GPU لپاره 6,4 ته د 64 GPUs لپاره)، پداسې حال کې چې د هر GPU د عکسونو شمیر په 256 کې ساتل (د یوې بستې څخه) 256 انځورونه د 1 GPU لپاره 16 ته د 384 GPUs لپاره). د وزن کمیدل او د حرکت پیرامیټرونه د GPUs شمیر ډیریدو سره بدل شول. موږ د فارورډ پاس لپاره د float64 ډیټا ډول سره مخلوط دقیق روزنه کارولې او د ګریډینټ لپاره float16 د NVIDIA Tesla GPUs لخوا ملاتړ شوي د فلوټ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

پایلې

پدې مقاله کې، موږ د اپاچي MXNet او Horovod په کارولو سره د توزیع شوي ماډل روزنې لپاره د توزیع وړ طریقې ته کتنه وکړه. موږ په ImageNet ډیټاسیټ کې د پیرامیټر سرور طریقې په پرتله د اندازه کولو موثریت او لګښت اغیزمنتوب وښوده چې په کې د ResNet50-v1 ماډل روزل شوی و. موږ هغه مرحلې هم شاملې کړې چې تاسو کولی شئ د هوروود په کارولو سره د څو مثالونو روزنې چلولو لپاره د موجوده سکریپټ بدلولو لپاره وکاروئ.

که تاسو یوازې د MXNet او ژورې زده کړې سره پیل کوئ، د نصب کولو پاڼې ته لاړ شئ د ‏‎MXNeلومړی د MXNet جوړولو لپاره. موږ هم په کلکه د مقالې لوستلو وړاندیز کوو MXNet په 60 دقیقو کېد پیل کولو لپاره.

که تاسو دمخه د MXNet سره کار کړی او غواړئ چې د هورووود سره توزیع شوي زده کړې هڅه وکړئ ، نو بیا یو نظر وګورئ Horovod د نصبولو پاڼه، دا د MXNet څخه جوړ کړئ او مثال تعقیب کړئ MNIST او یا ImageNet.

* لګښت په اساس محاسبه کیږي د ساعت نرخونه AWS د EC2 مثالونو لپاره

د کورس په اړه نور معلومات ترلاسه کړئ "په لویو معلوماتو کې صنعتي ML"

سرچینه: www.habr.com

د DDoS محافظت ، VPS VDS سرورونو سره د سایټونو لپاره معتبر کوربه توب واخلئ 🔥 د DDoS محافظت، VPS VDS سرورونو سره د باور وړ ویب پاڼې کوربه توب واخلئ | ProHoster