Diajar Distribusi sareng Apache MXNet sareng Horovod

Tarjamahan tina artikel ieu disiapkeun dina wengi mimiti kursus "ML Industri on Big Data"

Pelatihan anu disebarkeun dina sababaraha instansi komputasi berkinerja tinggi tiasa ngirangan waktos latihan jaringan saraf jero modéren dina jumlah data anu ageung ti minggu ka jam atanapi bahkan menit, ngajantenkeun téknik latihan ieu umum dina aplikasi praktis pembelajaran jero. Pamaké kedah ngartos kumaha ngabagi sareng nyinkronkeun data dina sababaraha instansi, anu gilirannana gaduh dampak anu ageung kana efisiensi skala. Salaku tambahan, pangguna ogé kedah terang kumaha nyebarkeun skrip latihan anu dijalankeun dina hiji conto ka sababaraha instansi.

Dina artikel ieu kami baris ngobrol ngeunaan cara gancang jeung gampang pikeun ngadistribusikaeun learning ngagunakeun open deep learning library Apache MXNet jeung Horovod distributed learning framework. Kami jelas bakal nunjukkeun kauntungan kinerja kerangka Horovod sareng nunjukkeun cara nyerat naskah latihan MXNet supados tiasa dianggo dina cara anu disebarkeun sareng Horovod.

Naon Apache MXNet

Apache MX Net mangrupikeun kerangka pembelajaran jero open-source anu dianggo pikeun nyiptakeun, ngalatih, sareng nyebarkeun jaringan saraf jero. MXNet abstrak pajeulitna anu aya hubunganana sareng palaksanaan jaringan saraf, kinerja pisan sareng skalabel, sareng nawiskeun API pikeun basa program populér sapertos Python, C ++, Clojure, Jawa, Julia, R, Scala jeung anu sanésna.

Disebarkeun latihan di MXNet kalawan server parameter

Modul pangajaran disebarkeun standar dina MXNet ngagunakeun pendekatan server parameter. Éta ngagunakeun sakumpulan server parameter pikeun ngumpulkeun gradién tina unggal pagawé, ngalaksanakeun agrégasi, sareng ngirimkeun gradién anu diropéa deui ka pagawé pikeun édisi optimasi salajengna. Nangtukeun rasio server anu leres pikeun pagawé mangrupikeun konci pikeun skala anu efektif. Upami ngan ukur aya hiji server parameter, éta tiasa janten bottleneck dina itungan. Sabalikna, lamun loba teuing server dipaké, loba-ka-loba komunikasi bisa bakiak nepi sadaya sambungan jaringan.

Naon Horovod

Horovod mangrupikeun kerangka diajar jero anu disebarkeun kabuka anu dikembangkeun di Uber. Éta ngamangpaatkeun téknologi cross-GPU sareng cross-node anu efisien sapertos NVIDIA Collective Communications Library (NCCL) sareng Message Passing Interface (MPI) pikeun ngadistribusikaeun sareng ngahijikeun parameter modél dina vorecs. Éta ngaoptimalkeun panggunaan bandwidth jaringan sareng skala saé nalika damel sareng modél jaringan saraf jero. Ayeuna ngadukung sababaraha kerangka pembelajaran mesin anu populer, nyaéta MX Net, Tensorflow, Keras, sareng PyTorch.

MXNet sarta integrasi Horovod

MXNet ngahiji sareng Horovod ngaliwatan API Pembelajaran Distribusi anu ditetepkeun dina Horovod. API komunikasi Horovod horovod.broadcast(), horovod.allgather() и horovod.allreduce() dilaksanakeun ngagunakeun callbacks Asynchronous tina mesin MXNet, salaku bagian tina grafik tugas na. Ku cara kieu, katergantungan data antara komunikasi sareng komputasi gampang diurus ku mesin MXNet pikeun nyegah karugian kinerja kusabab sinkronisasi. Obyék pangoptimal anu disebarkeun didefinisikeun dina Horovod horovod.DistributedOptimizer ngalegaan Optimizer di MXNet meh nelepon ka API Horovod pakait pikeun apdet parameter disebarkeun. Sadaya rinci palaksanaan ieu transparan pikeun pangguna akhir.

Mimitian gancang

Anjeun tiasa gancang ngamimitian ngalatih jaringan saraf convolutional leutik dina set data MNIST nganggo MXNet sareng Horovod dina MacBook anjeun.
Mimiti, pasang mxnet sareng horovod ti PyPI:

pip install mxnet
pip install horovod

Catetan: Upami anjeun mendakan kasalahan nalika pip install horovodmeureun anjeun perlu nambahkeun variabel MACOSX_DEPLOYMENT_TARGET=10.vvdimana vv - ieu mangrupikeun versi versi MacOS anjeun, contona, pikeun MacOSX Sierra anjeun kedah nyerat MACOSX_DEPLOYMENT_TARGET=10.12 pip install horovod

Teras pasang OpenMPI di dieu.

Dina tungtungna, unduh naskah tés mxnet_mnist.py di dieu sareng ngajalankeun paréntah di handap ieu dina terminal MacBook dina diréktori kerja:

mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py

Ieu bakal ngajalankeun latihan dina dua cores processor Anjeun. Kaluaran bakal kieu:

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

Nalika ngalatih modél ResNet50-v1 dina set data ImageNet dina 64 GPU kalayan dalapan instansi p3.16x badag EC2, masing-masing ngandung 8 NVIDIA Tesla V100 GPUs dina awan AWS, kami ngahontal throughput latihan 45000 gambar / detik (nyaéta, jumlah sampel terlatih per detik). Latihan réngsé dina 44 menit sanggeus 90 epochs kalawan akurasi pangalusna 75.7%.

Urang dibandingkeun ieu pendekatan latihan disebarkeun MXNet urang ngagunakeun server parameter on 8, 16, 32 jeung 64 GPUs kalawan server parameter tunggal jeung server ka worker ratio mungguh 1 ka 1 jeung 2 ka 1. Anjeun tiasa ningali hasilna dina Gambar 1 di handap. Dina sumbu-y di kénca, bar ngagambarkeun jumlah gambar pikeun ngalatih per detik, garis ngagambarkeun efisiensi skala (nyaéta, babandingan sabenerna mun throughput idéal) dina sumbu-y katuhu. Sakumaha anjeun tiasa tingali, pilihan jumlah server mangaruhan efisiensi skala. Lamun aya ngan hiji server parameter, efisiensi skala turun ka 38% pa 64 GPUs. Pikeun ngahontal efisiensi skala sarua jeung Horovod, anjeun kudu ganda jumlah server relatif ka jumlah pagawe.

Diajar Distribusi sareng Apache MXNet sareng Horovod
Gambar 1. Babandingan pangajaran terdistribusi ngagunakeun MXNet kalawan Horovod sarta kalawan server parameter

Dina Tabel 1 di handap, urang ngabandingkeun biaya ahir per conto nalika ngajalankeun percobaan dina 64 GPUs. Ngagunakeun MXNet kalawan Horovod nyadiakeun throughput pangalusna di ongkos panghandapna.

Diajar Distribusi sareng Apache MXNet sareng Horovod
Tabél 1. Perbandingan biaya antara Horovod sareng Parameter Server kalayan rasio server ka pagawé 2 ka 1.

Léngkah baranahan

Dina léngkah-léngkah salajengna, kami bakal nunjukkeun anjeun kumaha cara baranahan hasil pelatihan anu disebarkeun nganggo MXNet sareng Horovod. Pikeun leuwih jéntré ngeunaan diajar disebarkeun kalawan MXNet baca pos ieu.

lengkah 1

Jieun klaster instansi homogen kalawan MXNet versi 1.4.0 atawa saluhureuna sarta Horovod versi 0.16.0 atawa saluhureuna ngagunakeun learning disebarkeun. Anjeun ogé kedah masang perpustakaan pikeun latihan GPU. Pikeun conto urang, kami milih Ubuntu 16.04 Linux, sareng GPU Supir 396.44, CUDA 9.2, perpustakaan cuDNN 7.2.1, komunikator NCCL 2.2.13 sareng OpenMPI 3.1.1. Anjeun oge bisa make Amazon Deep Learning AMI, dimana perpustakaan ieu tos dipasang.

lengkah 2

Tambihkeun kamampuan pikeun damel sareng API Horovod kana skrip latihan MXNet anjeun. Aksara handap dumasar kana MXNet Gluon API bisa dipaké salaku template basajan. Garis anu kandel diperyogikeun upami anjeun parantos gaduh naskah latihan anu cocog. Ieu sababaraha parobihan kritis anu anjeun kedah laksanakeun pikeun diajar sareng Horovod:

  • Nyetél kontéks nurutkeun rank Horovod lokal (garis 8) ngartos yen latihan anu dipigawé dina inti grafik bener.
  • Lulus parameter awal ti hiji pagawe ka sadaya (garis 18) pikeun mastikeun yén sakabéh pagawé mimitian ku parameter awal sarua.
  • Jieun Horovod a DistributedOptimizer (garis 25) pikeun ngapdet parameter dina cara disebarkeun.

Pikeun meunangkeun naskah lengkep, mangga tingal conto 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    ...

lengkah 3

Asup ka salah sahiji pagawe pikeun ngamimitian disebarkeun latihan ngagunakeun diréktif MPI. Dina conto ieu, latihan disebarkeun dijalankeun dina opat instansi kalawan 4 GPUs unggal, sarta total 16 GPUs dina kluster. Optimasi Stochastic Gradient Descent (SGD) bakal dianggo sareng hyperparameter ieu:

  • ukuran mini-batch: 256
  • laju diajar: 0.1
  • moméntum: 0.9
  • ruksakna beurat: 0.0001

Nalika urang diskalakeun tina hiji GPU ka 64 GPU, urang sacara linier skala tingkat latihan dumasar kana jumlah GPU (tina 0,1 pikeun 1 GPU ka 6,4 pikeun 64 GPU), bari ngajaga jumlah gambar per GPU dina 256 (tina angkatan 256 gambar pikeun 1 GPU ka 16 pikeun 384 GPU). The buruk beurat sarta parameter moméntum robah sakumaha jumlah GPUs ngaronjat. Kami nganggo latihan precision dicampur sareng tipe data float64 pikeun pass maju sareng float16 pikeun gradién pikeun nyepetkeun itungan float32 anu dirojong ku GPU NVIDIA Tesla.

$ 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

kacindekan

Dina artikel ieu, urang nempo pendekatan scalable kana latihan model disebarkeun maké Apache MXNet na Horovod. Kami nunjukkeun efisiensi skala sareng efektivitas biaya dibandingkeun sareng pendekatan server parameter dina dataset ImageNet dimana modél ResNet50-v1 dilatih. Kami ogé parantos ngalebetkeun léngkah-léngkah anu anjeun tiasa dianggo pikeun ngarobih naskah anu tos aya pikeun ngajalankeun latihan multi-instance nganggo Horovod.

Upami anjeun nembé ngamimitian MXNet sareng diajar jero, angkat ka halaman pamasangan MXNepikeun mimiti ngawangun MXNet. Kami ogé nyarankeun pisan maca tulisan MXNet dina 60 menitpikeun ngamimitian.

Upami anjeun parantos damel sareng MXNet sareng hoyong nyobian diajar disebarkeun sareng Horovod, teras tingali Kaca instalasi Horovod, ngawangun tina MXNet tur turutan conto MNIST atawa IMAGEnet.

* ongkos diitung dumasar kana ongkos hourly AWS pikeun instansi EC2

Diajar langkung seueur ngeunaan kursus "ML Industri on Big Data"

sumber: www.habr.com

Tambahkeun komentar