Apache MXNet және Horovod көмегімен бөлінген оқыту

Мақаланың аудармасы курстың басталу қарсаңында дайындалды «Үлкен деректердегі өнеркәсіптік ML»

Бірнеше жоғары өнімді есептеу даналары бойынша таратылған оқыту қазіргі заманғы терең нейрондық желілерді үлкен көлемдегі деректерге оқыту уақытын аптадан сағатқа немесе тіпті минутқа дейін қысқартуы мүмкін, бұл оқыту әдісін терең оқытудың практикалық қолдануларында басым етеді. Пайдаланушылар деректерді бірнеше даналар бойынша бөлісу және синхрондауды түсінуі керек, бұл өз кезегінде масштабтау тиімділігіне үлкен әсер етеді. Бұған қоса, пайдаланушылар бір данада бірнеше данаға жұмыс істейтін оқу сценарийін қолдану жолын білуі керек.

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

Apache MXNet дегеніміз не

Apache MX Net терең нейрондық желілерді құру, оқыту және орналастыру үшін пайдаланылатын ашық бастапқы терең оқыту жүйесі. MXNet нейрондық желілерді енгізумен байланысты күрделіліктерді қысқартады, жоғары өнімді және масштабталады және танымал бағдарламалау тілдері үшін API ұсынады. Python, C ++, Clojure, Java, Юлия, R, Scala және басқалар.

Параметр сервері бар MXNet-те таратылған оқыту

MXNet жүйесіндегі стандартты бөлінген оқыту модулі использует подход сервера параметров (parameter server). Он использует набор серверов параметров для сбора градиентов с каждого воркера, выполнения агрегации и отправки обновленных градиентов обратно ворекрам для следующей итерации оптимизации. Определение правильного соотношения серверов к воркерам – залог эффективного масштабирования. Если сервер параметров всего один, он может оказаться бутылочным горлышком в проведении вычислений. И наоборот, если используется слишком много серверов, то связь «многие-ко-многим» может забить все сетевые соединения.

Хоровод дегеніміз не

Хоровод Uber-те әзірленген ашық бөлінген терең оқыту жүйесі. Ол NVIDIA ұжымдық коммуникациялар кітапханасы (NCCL) және хабарламаларды жіберу интерфейсі (MPI) сияқты тиімді кросс-GPU және торапаралық технологияларды пайдаланады, бұл модель параметрлерін vorecs бойынша тарату және біріктіру үшін. Ол желінің өткізу қабілеттілігін пайдалануды оңтайландырады және терең нейрондық желі үлгілерімен жұмыс істегенде жақсы масштабтайды. Қазіргі уақытта ол бірнеше танымал машиналық оқыту негіздерін қолдайды, атап айтқанда MX Net, Tensorflow, Keras және PyTorch.

Интеграция MXNet и Horovod

MXNet Horovod-та анықталған Бөлінген оқыту API интерфейстері арқылы Horovod-пен интеграцияланады. Horovod байланыс API интерфейстері horovod.broadcast(), horovod.allgather() и horovod.allreduce() реализованы с помощью асинхронных коллбэков движка MXNet, как часть его графа задач. Таким образом, зависимости данных между коммуникацией и вычислениями с легкостью обрабатываются движком MXNet, чтобы избежать потерь производительности из-за синхронизации. Объект distributed optimizer, определенный в Horovod horovod.DistributedOptimizer ұзартады Оңтайландырушы MXNet жүйесінде таратылған параметр жаңартулары үшін сәйкес Horovod API интерфейстерін шақырады. Барлық осы іске асыру мәліметтері соңғы пайдаланушылар үшін ашық.

Жылдам бастау

MacBook компьютеріңізде MXNet және Horovod көмегімен 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 пип орнату 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 графикалық процессорында оқыту кезінде p3.16xlarge EC2, әрқайсысында AWS бұлтындағы 8 NVIDIA Tesla V100 GPU бар, біз 45000 44 кескін/сек (яғни, секундына оқытылатын үлгілердің саны) оқыту өткізу қабілетіне қол жеткіздік. Жаттығу 90 дәуірден кейін 75.7 минутта XNUMX% ең жақсы дәлдікпен аяқталды.

Мы сравнили это с распределенным обучением MXNet с подходом использования серверов параметров на 8, 16, 32 и 64 GPU с сервером с одним параметром и отношением серверов к воркерам 1 к 1 и 2 к 1 соответственно. Результат вы можете увидеть на Рисунке 1 ниже. По оси y слева столбцы отражают количество изображений для обучения в секунду, линии отражают эффективность масштабирования (то есть отношение фактической пропускной способности к идеальной) на оси y справа. Как видите выбор количества серверов оказывает влияние на эффективность масштабирования. Если сервер параметров один, эффективность масштабирования падает до 38% на 64 GPU. Для достижения такой же эффективности масштабирования как с Horovod нужно увеличить количество серверов в два раза по отношению к количеству воркеров.

Apache MXNet және Horovod көмегімен бөлінген оқыту
Сурет 1. MXNet көмегімен Horovod және параметр серверімен бөлінген оқытуды салыстыру

Төмендегі 1-кестеде 64 графикалық процессорында эксперименттерді іске қосу кезінде бір дананың соңғы құнын салыстырамыз. MXNet-ті Horovod-пен пайдалану ең төмен бағамен ең жақсы өткізу қабілеттілігін қамтамасыз етеді.

Apache MXNet және Horovod көмегімен бөлінген оқыту
1-кесте. 2-ден 1-ге дейінгі сервер мен жұмысшы қатынасы бар Horovod және Параметр сервері арасындағы шығындарды салыстыру.

Көбею қадамдары

В следующих шагах мы расскажем, как воспроизвести результат распределенного обучения с помощью MXNet и Horovod. Чтобы узнать больше о распределенном обучении с MXNet прочитайте осы пост.

қадам 1

Бөлінген оқытуды пайдалану үшін MXNet 1.4.0 немесе одан жоғары нұсқасы және Horovod 0.16.0 немесе одан жоғары нұсқасы бар біртекті даналардың кластерін жасаңыз. Сондай-ақ GPU оқыту үшін кітапханаларды орнату қажет болады. Біздің мысалдар үшін GPU драйвері 16.04, CUDA 396.44, cuDNN 9.2 кітапханасы, NCCL 7.2.1 коммуникаторы және OpenMPI 2.2.13 бар Ubuntu 3.1.1 Linux таңдадық. Сондай-ақ пайдалануға болады Amazon Deep Learning AMI, бұл кітапханалар алдын ала орнатылған.

қадам 2

MXNet оқу сценарийіне Horovod API интерфейсімен жұмыс істеу мүмкіндігін қосыңыз. MXNet Gluon API негізіндегі төмендегі сценарийді қарапайым үлгі ретінде пайдалануға болады. Егер сізде сәйкес оқу сценарийі бар болса, қалың қаріппен жазылған жолдар қажет. Міне, Хороводпен үйрену үшін сізге қажет бірнеше маңызды өзгерістер:

  • Жаттығу дұрыс графикалық ядрода орындалатынын түсіну үшін жергілікті Хоровод дәрежесіне сәйкес мәтінмәнді орнатыңыз (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 64 сурет). Салмақ ыдырауы мен импульс параметрлері GPU саны артқан сайын өзгерді. Біз NVIDIA Tesla графикалық процессорлары қолдайтын float16 есептеулерін жылдамдату үшін алға өту үшін float32 деректер түрімен және градиенттер үшін float16 арқылы аралас дәлдік жаттығуларын қолдандық.

$ 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 көмегімен бөлінген оқытуды қолданғыңыз келсе, мынаны қараңыз. Хоровод орнату беті, оны MXNet сайтынан құрастырыңыз және мысалды орындаңыз MNIST немесе IMAGEnet.

*құны негізінде есептеледі сағаттық тарифтер AWS для экземпляров EC2

Курс туралы көбірек біліңіз «Үлкен деректердегі өнеркәсіптік ML»

Ақпарат көзі: www.habr.com

пікір қалдыру