Омӯзиши тақсимшуда бо Apache MXNet ва Horovod

Тарҷумаи мақола дар арафаи оғози курс омода шудааст "Индустриалии ML оид ба маълумоти калон"

Омӯзиши тақсимшуда оид ба якчанд мисолҳои ҳисоббарории баландсифат метавонад вақти омӯзиши шабакаҳои амиқи нейронии муосирро дар миқдори зиёди маълумот аз ҳафтаҳо то соатҳо ва ҳатто дақиқаҳо кам кунад ва ин усули таълимро дар татбиқи амалии омӯзиши амиқ паҳн кунад. Истифодабарандагон бояд фаҳманд, ки чӣ тавр мубодила ва ҳамоҳангсозии маълумот дар байни якчанд мисолҳо, ки дар навбати худ ба самаранокии миқёс таъсири калон мерасонад. Илова бар ин, корбарон инчунин бояд донанд, ки чӣ гуна скрипти омӯзишӣ ҷойгир карда шавад, ки дар як мисол ба якчанд мисолҳо кор мекунад.

Дар ин мақола мо дар бораи роҳи зуд ва осони паҳн кардани омӯзиш бо истифода аз китобхонаи кушодаи омӯзиши амиқи Apache MXNet ва чаҳорчӯбаи таълимии тақсимшудаи Horovod сӯҳбат хоҳем кард. Мо бартариҳои иҷрои чаҳорчӯбаи Ҳороводро ба таври возеҳ нишон медиҳем ва нишон медиҳем, ки скрипти омӯзишии MXNet чӣ гуна навишта шавад, то он бо Ҳоровод ба таври тақсимшуда кор кунад.

Apache MXNet чист

Apache MX Net чаҳорчӯбаи омӯзиши амиқи кушодаасос аст, ки барои эҷод, омӯзиш ва ҷойгиркунии шабакаҳои амиқи нейрон истифода мешавад. MXNet мураккабии марбут ба татбиқи шабакаҳои нейронро реферат мекунад, хеле иҷрошаванда ва миқёспазир аст ва APIҳоро барои забонҳои маъмули барномасозӣ пешниҳод мекунад, ба монанди Python, C ++, Clojure, Java, Ҷулия, R, Scala ва дигарон.

Омӯзиши тақсимшуда дар MXNet бо сервери параметр

Модули таълимии тақсимшудаи стандартӣ дар MXNet усули сервери параметриро истифода мебарад. Он маҷмӯи серверҳои параметрҳоро барои ҷамъоварии градиентҳо аз ҳар як коргар истифода мебарад, ҷамъоварӣ мекунад ва градиентҳои навшударо ба коргарон барои итератсияи навбатии оптимизатсия бармегардонад. Муайян кардани таносуби дурусти серверҳо ба коргарон калиди миқёси самаранок аст. Агар танҳо як сервери параметр мавҷуд бошад, он метавонад дар ҳисобҳо монеа шавад. Баръакс, агар серверҳои аз ҳад зиёд истифода шаванд, муоширати бисёр ба бисёр метавонад ҳамаи пайвастҳои шабакаро маҳкам кунад.

Хоровод чист

Хоровод чаҳорчӯбаи омӯзиши амиқи паҳншуда мебошад, ки дар Uber таҳия шудааст. Он аз технологияҳои муассир байни GPU ва байни гиреҳҳо, аз қабили NVIDIA Collective Communications Library (NCCL) ва Interface Passing Message (MPI) барои паҳн ва ҷамъ кардани параметрҳои модел дар vorecs истифода мебарад. Он ҳангоми кор бо моделҳои амиқи шабакаи нейронӣ истифодаи маҷрои шабака ва миқёси хубро оптимизатсия мекунад. Он дар айни замон якчанд чаҳорчӯбаи омӯзиши мошинро дастгирӣ мекунад, аз ҷумла MX Net, Tensorflow, Keras ва PyTorch.

Интегратсияи MXNet ва Horovod

MXNet бо Ҳоровод тавассути API-ҳои омӯзиши тақсимшуда, ки дар Ҳоровод муайян шудааст, ҳамгиро мешавад. API-ҳои алоқаи Horovod horovod.broadcast(), horovod.allgather() и horovod.allreduce() бо истифода аз зангҳои асинхронии муҳаррики MXNet ҳамчун як қисми графики вазифаҳои он амалӣ карда мешавад. Бо ин роҳ, вобастагии додаҳо байни иртибот ва ҳисобкунӣ аз ҷониби муҳаррики MXNet ба осонӣ идора карда мешавад, то аз талафоти кор аз сабаби ҳамоҳангсозӣ пешгирӣ карда шавад. Объекти оптимизатсияи тақсимшуда дар Ҳоровод муайян карда шудааст horovod.DistributedOptimizer васеъ мекунад Оптимизатор дар MXNet, то ки он API-ҳои мувофиқи Horovod-ро барои навсозии параметрҳои тақсимшуда даъват кунад. Ҳамаи ин тафсилоти татбиқ барои корбарони ниҳоӣ шаффофанд.

Оғози зуд

Шумо метавонед бо истифода аз MXNet ва Horovod дар MacBook-и худ ба омӯзиши шабакаи хурди нейронӣ дар маҷмӯаи маълумоти MNIST зуд оғоз кунед.
Аввалан, mxnet ва horovod-ро аз PyPI насб кунед:

pip install mxnet
pip install horovod

Эзоҳ: Агар шумо ҳангоми бо хатогӣ рӯ ба рӯ шавед pip насб horovodшояд шумо бояд тағирёбанда илова кунед MACOSX_DEPLOYMENT_TARGET=10.vvки дар vv - ин версияи версияи MacOS-и шумост, масалан, барои MacOSX Sierra шумо бояд нависед MACOSX_DEPLOYMENT_TARGET=10.12 pip насб 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

Намоиши иҷроиш

Ҳангоми омӯзиши модели ResNet50-v1 дар маҷмӯи додаҳои ImageNet дар 64 GPU бо ҳашт мисол саҳ3.16х калон EC2, ки ҳар яки он 8 GPU-и NVIDIA Tesla V100 дар абри AWS дорад, мо ба гузариши омӯзиши 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 бо Horovod ва сервери параметр

Дар ҷадвали 1 дар зер мо арзиши ниҳоии як мисолро ҳангоми гузаронидани таҷрибаҳо дар 64 GPU муқоиса мекунем. Истифодаи MXNet бо Horovod беҳтарин интиқолро бо арзиши камтарин таъмин мекунад.

Омӯзиши тақсимшуда бо Apache MXNet ва Horovod
Ҷадвали 1. Муқоисаи хароҷот байни Ҳоровод ва Параметр сервер бо таносуби сервер ба коргар аз 2 то 1.

Қадамҳо барои такрористеҳсолкунӣ

Дар қадамҳои оянда, мо ба шумо нишон медиҳем, ки чӣ гуна натиҷаи омӯзиши тақсимшударо бо истифода аз MXNet ва Horovod дубора тавлид кардан мумкин аст. Барои гирифтани маълумоти бештар дар бораи омӯзиши тақсимшуда бо MXNet хонед ин пост.

қадам 1

Барои истифодаи омӯзиши тақсимшуда кластери мисолҳои якхеларо бо версияи MXNet 1.4.0 ё навтар ва версияи Horovod 0.16.0 ё навтар эҷод кунед. Шумо инчунин бояд китобхонаҳоро барои омӯзиши GPU насб кунед. Барои мисолҳои мо, мо Ubuntu 16.04 Linux-ро бо Driver GPU 396.44, CUDA 9.2, китобхонаи cuDNN 7.2.1, коммуникатори NCCL 2.2.13 ва OpenMPI 3.1.1 интихоб кардем. Шумо инчунин метавонед истифода баред Amazon Deep Learning AMI, ки ин китобхонаҳо аллакай пешакӣ насб карда шудаанд.

қадам 2

Ба скрипти таълимии MXNet қобилияти кор бо Horovod API илова кунед. Скрипти зер дар асоси MXNet Gluon API метавонад ҳамчун қолаби оддӣ истифода шавад. Агар шумо аллакай скрипти таълимии мувофиқ дошта бошед, сатрҳои ғафс лозиманд. Инҳоянд чанд тағйироти муҳиме, ки шумо бояд барои омӯхтан бо Ҳоровод ворид кунед:

  • Контекстро мувофиқи рутбаи маҳаллии Хоровод (сатри 8) таъин кунед, то дарк кунед, ки омӯзиш дар асоси графикаи дуруст иҷро карда мешавад.
  • Параметрҳои ибтидоиро аз як коргар ба ҳама (сатри 18) гузаронед, то боварӣ ҳосил кунед, ки ҳамаи коргарон бо як параметрҳои ибтидоӣ оғоз мекунанд.
  • Хоровод бунёд кунед DistributedOptimizer (сатри 25) барои навсозии параметрҳо ба таври тақсимшуда.

Барои гирифтани скрипти пурра, лутфан ба мисолҳои Horovod-MXNet муроҷиат кунед МНИСТ и 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 дар кластер кор мекунад. Оптимизатори Stochastic Gradient Descent (SGD) бо гиперпараметрҳои зерин истифода мешавад:

  • Андозаи хурди партия: 256
  • Сатҳи омӯзиш: 0.1
  • импулс: 0.9
  • таназзули вазн: 0.0001

Вақте ки мо аз як GPU ба 64 GPU миқёс додем, мо суръати омӯзишро мувофиқи шумораи GPUҳо (аз 0,1 барои 1 GPU то 6,4 барои 64 GPU), дар ҳоле ки шумораи тасвирҳо барои як GPU дар 256 нигоҳ доштем (аз партияи GPU) 256 тасвир барои 1 GPU то 16 барои 384 GPU). Параметрҳои вазн ва импулс бо афзоиши шумораи GPUҳо тағир ёфтанд. Мо омӯзиши дақиқи омехтаро бо навъи маълумотҳои float64 барои гузариш ба пеш ва float16 барои градиентҳо барои суръат бахшидан ба ҳисобҳои float32, ки аз ҷониби NVIDIA Tesla GPU дастгирӣ мешавад, истифода бурдем.

$ 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 дида баромадем. Мо дар муқоиса бо равиши сервери параметрҳо дар маҷмӯи додаҳои ImageNet, ки модели ResNet50-v1 омӯзонида шудааст, мо самаранокии миқёс ва камхарҷро нишон додем. Мо инчунин қадамҳоеро дохил кардем, ки шумо метавонед онҳоро барои тағир додани скрипти мавҷуда барои гузаронидани омӯзиши бисёрҷазира бо истифода аз Horovod истифода баред.

Агар шумо танҳо бо MXNet ва омӯзиши амиқ оғоз карда бошед, ба саҳифаи насбкунӣ гузаред MXNeбарои аввал сохтани MXNet. Мо инчунин тавсия медиҳем, ки мақоларо хонед MXNet дар 60 дақиқабарои оғоз кардан.

Агар шумо аллакай бо MXNet кор карда бошед ва хоҳед, ки омӯзиши тақсимшударо бо Ҳоровод санҷед, пас аз назар гузаронед. Саҳифаи насби Ҳоровод, онро аз MXNet созед ва ба намуна пайравӣ кунед МНИСТ ё IMAGEnet.

*арзиш аз руи он хисоб карда мешавад нархҳои соатбайъ AWS барои мисолҳои EC2

Дар бораи курс маълумоти бештар гиред "Индустриалии ML оид ба маълумоти калон"

Манбаъ: will.com

Илова Эзоҳ