Apache MXNet жана Horovod менен бөлүштүрүлгөн окутуу

Макаланын котормосу курстун башталышынын алдында даярдалган "Чоң маалыматтар боюнча өнөр жай ML"

Бир нече жогорку өндүрүмдүүлүктөгү эсептөө инстанциялары боюнча бөлүштүрүлгөн окутуу заманбап терең нейрон тармактарынын чоң көлөмдөгү маалыматтар боюнча машыгуу убактысын жумалардан саатка же ал тургай минутага чейин кыскарта алат, бул окутуу ыкмасын терең үйрөнүүнүн практикалык колдонмолорунда кеңири жайылтат. Колдонуучулар бир нече инстанциялар боюнча маалыматтарды кантип бөлүшүүнү жана синхрондоштурууну түшүнүшү керек, бул өз кезегинде масштабдын натыйжалуулугуна чоң таасирин тийгизет. Мындан тышкары, колдонуучулар бир эле инстанцияда бир нече инстанцияларда иштеген окутуу скриптин кантип колдонууну билиши керек.

Бул макалада биз ачык терең үйрөнүү китепканасы Apache MXNet жана Horovod бөлүштүрүлгөн окутуу негизин колдонуу менен окутууну жайылтуунун тез жана оңой жолу жөнүндө сүйлөшөбүз. Биз Horovod рамкасынын аткаруу артыкчылыктарын ачык көрсөтөбүз жана MXNet окутуу сценарийин Horovod менен бөлүштүрүлгөн түрдө иштеши үчүн кантип жазууну көрсөтөбүз.

Apache MXNet деген эмне

Apache MX Net терең нейрон тармактарын түзүү, окутуу жана жайылтуу үчүн колдонулган ачык булактуу терең үйрөнүү негизи. MXNet нейрондук тармактарды ишке ашыруу менен байланышкан татаалдыктарды абстракциялайт, жогорку натыйжалуу жана масштабдуу жана популярдуу программалоо тилдери үчүн API сунуштайт, мисалы Python, C ++, Clojure, Java, Джулия, R, Ерболат жана башкалар.

Параметр сервери менен MXNetте бөлүштүрүлгөн окутуу

MXNet стандарттык бөлүштүрүлгөн окутуу модулу параметр сервер ыкмасын колдонот. Ал ар бир жумушчудан градиенттерди чогултуу, бириктирүү жана жаңыртылган градиенттерди кийинки оптималдаштыруу итерациясы үчүн жумушчуларга кайра жөнөтүү үчүн параметр серверлеринин топтомун колдонот. Серверлердин жумушчуларга туура катышын аныктоо эффективдүү масштабдаштыруунун ачкычы болуп саналат. Эгерде бир гана параметр сервери бар болсо, ал эсептөөлөрдөгү тоскоолдук болуп калышы мүмкүн. Тескерисинче, өтө көп серверлер колдонулса, көп-көп байланыш бардык тармак байланыштарын жаап коюшу мүмкүн.

Хоровод деген эмне

Хоровод Uberде иштелип чыккан ачык бөлүштүрүлгөн терең үйрөнүү негизи. Ал NVIDIA Жамааттык Байланыш Китепканасы (NCCL) жана Message Passing Interface (MPI) сыяктуу эффективдүү кайчылаш GPU жана кайчылаш түйүн технологияларын колдонот. Ал терең нейрон тармагынын моделдери менен иштөөдө тармак өткөрүү жөндөмдүүлүгүн жана масштабын колдонууну оптималдаштырат. Учурда ал бир нече популярдуу машина үйрөнүү алкактарын колдойт, атап айтканда MX Net, Tensorflow, Keras жана PyTorch.

MXNet жана Horovod интеграциясы

MXNet Horovod менен Horovodдо аныкталган Distributed Learning API'лери аркылуу интеграцияланат. Horovod байланыш API'лери horovod.broadcast(), horovod.allgather() и horovod.allreduce() MXNet кыймылдаткычынын асинхрондук кайра чалууларын колдонуу менен, анын тапшырма графигинин бир бөлүгү катары ишке ашырылат. Ушундай жол менен, байланыш жана эсептөө ортосундагы маалымат көз карандылыгы синхрондоштуруудан улам өндүрүмдүүлүгүн жоготууларды болтурбоо үчүн MXNet кыймылдаткычы тарабынан оңой чечилет. Хороводдо аныкталган бөлүштүрүлгөн оптимизатор объекти horovod.DistributedOptimizer бейм оптимизатору MXNet ичинде бөлүштүрүлгөн параметр жаңыртуулары үчүн тиешелүү Horovod API'лерин чакырышы үчүн. Бул ишке ашыруунун бардык чоо-жайы акыркы колдонуучулар үчүн ачык болуп саналат.

Тез баштоо

Сиз MacBook'уңузда 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 бул жерде жана жумушчу каталогдогу 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

Performance Demo

ResNet50-v1 моделин ImageNet берилиштер топтомун 64 GPUде сегиз инстанцияга үйрөтүүдө p3.16xlarge EC2, ар биринде AWS булутунда 8 NVIDIA Tesla V100 GPU камтылган, биз 45000 сүрөт/сек (б.а., секундасына үйрөтүлгөн үлгүлөрдүн саны) окутуу өткөрүү жөндөмдүүлүгүнө жетиштик. Тренинг 44% эң жакшы тактык менен 90 доордон кийин 75.7 мүнөттө аяктады.

Биз муну MXNetтин 8, 16, 32 жана 64 GPUларда параметр серверлерин колдонуу боюнча бөлүштүрүлгөн окутуу ыкмасы менен салыштырдык. Натыйжасын төмөндөгү 1-сүрөттөн көрө аласыз. Сол жактагы y огунда тилкелер секундасына үйрөтө турган сүрөттөрдүн санын, сызыктар оң жактагы у огунда масштабдаштыруунун эффективдүүлүгүн (башкача айтканда, чыныгы жана идеалдуу өткөрүү жөндөмдүүлүгүнүн катышын) чагылдырат. Көрүнүп тургандай, серверлердин санын тандоо масштабдаштыруунун натыйжалуулугуна таасир этет. Эгерде бир гана параметр сервери болсо, масштабдоо эффективдүүлүгү 1 GPUде 2% га чейин төмөндөйт. Horovod менен бирдей масштабдоо натыйжалуулугуна жетүү үчүн, жумушчулардын санына салыштырмалуу серверлердин санын эки эсеге көбөйтүү керек.

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, 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 негизиндеги төмөндөгү скрипт жөнөкөй шаблон катары колдонулушу мүмкүн. Кара шрифт менен жазылган саптар, эгер сизде буга чейин тиешелүү окуу сценарийи болсо керек. Бул жерде сиз Horovod менен үйрөнүү үчүн зарыл болгон бир нече маанилүү өзгөртүүлөр:

  • Тренинг туура графикалык өзөктө аткарыларын түшүнүү үчүн контекстти жергиликтүү Horovod даражасына (8-сап) ылайык коюңуз.
  • Бардык жумушчулар бирдей баштапкы параметрлер менен башталышын камсыз кылуу үчүн баштапкы параметрлерди бир жумушчудан баарына өткөрүңүз (18-сап).
  • Хоровод түзүү 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 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 саны көбөйгөн сайын салмактын бузулушу жана импульс параметрлери өзгөрдү. Биз NVIDIA Tesla GPU колдогон 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 берилиштер топтомундагы параметр серверинин ыкмасына салыштырмалуу масштабдоо натыйжалуулугун жана үнөмдүүлүгүн көрсөттүк. Биз ошондой эле Horovod аркылуу көп инстанциялуу тренингди өткөрүү үчүн учурдагы скриптти өзгөртүү үчүн колдоно ала турган кадамдарды камтыдык.

Эгер сиз MXNet жана терең үйрөнүүнү жаңыдан баштап жатсаңыз, орнотуу бетине өтүңүз MXNeбиринчи MXNet куруу үчүн. Биз ошондой эле макаланы окууну сунуштайбыз MXNet 60 мүнөттөбаштоо үчүн.

Эгер сиз буга чейин MXNet менен иштеген болсоңуз жана Horovod менен бөлүштүрүлгөн окутууну сынап көргүңүз келсе, анда Horovod орнотуу барагы, аны MXNetтен куруп, үлгүгө карманыңыз MNIST же IMAGEnet.

* наркынын негизинде эсептелет сааттык тарифтер EC2 инстанциялары үчүн AWS

Курс жөнүндө көбүрөөк билүү "Чоң маалыматтар боюнча өнөр жай ML"

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster