Terjemahan artikel disiapake ing wayah wengi wiwitan kursus
Latihan sing disebarake babagan macem-macem komputasi kanthi kinerja dhuwur bisa nyuda wektu latihan jaringan saraf jero modern babagan jumlah data sing akeh saka minggu nganti jam utawa malah menit, nggawe teknik latihan iki umum ing aplikasi praktis sinau jero. Pangguna kudu ngerti cara nuduhake lan nyinkronake data ing pirang-pirang kasus, sing uga duwe pengaruh gedhe kanggo efisiensi skala. Kajaba iku, pangguna uga kudu ngerti carane nyebarake skrip latihan sing mlaku ing siji conto nganti pirang-pirang kasus.
Ing artikel iki kita bakal ngomong babagan cara sing cepet lan gampang kanggo nyebarake sinau nggunakake perpustakaan open deep learning Apache MXNet lan kerangka pembelajaran sing disebarake Horovod. Kita bakal nduduhake kanthi jelas keuntungan kinerja kerangka Horovod lan nduduhake carane nulis skrip latihan MXNet supaya bisa digunakake kanthi cara sing disebarake karo Horovod.
Apa Apache MXNet
Latihan sing disebarake ing MXNet kanthi server parameter
Apa iku Horovod
Integrasi MXNet lan Horovod
MXNet Integrasi karo Horovod liwat Distributed Learning API ditetepake ing Horovod. API komunikasi Horovod horovod.broadcast(), horovod.allgather() и horovod.allreduce() dileksanakake nggunakake callback bedo saka mesin MXNet, minangka bagéan saka grafik tugas sawijining. Kanthi cara iki, dependensi data antarane komunikasi lan komputasi gampang ditangani dening mesin MXNet kanggo ngindhari mundhut kinerja amarga sinkronisasi. obyek optimizer mbagekke ditetepake ing Horovod horovod.DistributedOptimizer nggedhekake Optimizer ing MXNet supaya nelpon API Horovod cocog kanggo nganyari parameter mbagekke. Kabeh rincian implementasine iki transparan kanggo pangguna pungkasan.
wiwitan cepet
Sampeyan bisa kanthi cepet miwiti latihan jaringan saraf convolutional cilik ing dataset MNIST nggunakake MXNet lan Horovod ing MacBook.
Pisanan, instal mxnet lan horovod saka PyPI:
pip install mxnet
pip install horovod
Cathetan: Yen sampeyan nemoni kesalahan sajrone pip nginstal horovodMungkin sampeyan kudu nambah variabel MACOSX_DEPLOYMENT_TARGET=10.vvngendi vv - iki versi versi MacOS sampeyan, contone, kanggo MacOSX Sierra sampeyan kudu nulis MACOSX_DEPLOYMENT_TARGET=10.12 pip nginstal horovod
Banjur nginstal OpenMPI
Ing pungkasan, download script test mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Iki bakal mbukak latihan ing rong inti prosesor sampeyan. Output bakal kaya ing ngisor iki:
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
Demo kinerja
Nalika nglatih model ResNet50-v1 ing dataset ImageNet ing 64 GPU kanthi wolung conto p3.16x gedhe EC2, saben ngemot 8 NVIDIA Tesla V100 GPUs ing awan AWS, kita entuk throughput latihan 45000 gambar / detik (yaiku, jumlah sampel sing dilatih per detik). Latihan rampung ing 44 menit sawise 90 jaman kanthi akurasi paling apik 75.7%.
Kita mbandhingake iki karo pendekatan latihan sing disebarake MXNet nggunakake server parameter ing 8, 16, 32 lan 64 GPU kanthi server parameter siji lan rasio server kanggo buruh 1 kanggo 1 lan 2 kanggo 1. Sampeyan bisa ndeleng asil ing Figure 1 ngisor. Ing sumbu y ing sisih kiwa, bar makili jumlah gambar sing kudu dilatih saben detik, garis kasebut nggambarake efisiensi skala (yaiku rasio aktual kanggo throughput sing cocog) ing sumbu y ing sisih tengen. Kaya sing sampeyan ngerteni, pilihan saka jumlah server mengaruhi efisiensi skala. Yen mung ana siji parameter server, irungnya efficiency njongko kanggo 38% ing 64 GPUs. Kanggo entuk efisiensi skala sing padha karo Horovod, sampeyan kudu tikel kaping pindho jumlah server sing ana gandhengane karo jumlah karyawan.
Gambar 1. Perbandingan distributed learning nggunakake MXNet karo Horovod lan server parameter
Ing Tabel 1 ing ngisor iki, kita mbandhingake biaya pungkasan saben conto nalika nindakake eksperimen ing 64 GPU. Nggunakake MXNet karo Horovod nyedhiyakake throughput paling apik kanthi biaya paling murah.
Tabel 1. Perbandingan biaya antarane Horovod lan Server Parameter kanthi rasio server kanggo buruh 2 nganti 1.
Langkah kanggo reproduksi
Ing langkah sabanjure, kita bakal nuduhake sampeyan carane ngasilake asil latihan sing disebarake nggunakake MXNet lan Horovod. Kanggo mangerteni sing luwih lengkap babagan sinau disebarake karo MXNet maca
langkah 1
Nggawe kluster conto homogen karo MXNet versi 1.4.0 utawa luwih dhuwur lan Horovod versi 0.16.0 utawa luwih dhuwur kanggo nggunakake sinau sing disebarake. Sampeyan uga kudu nginstal perpustakaan kanggo latihan GPU. Kanggo conto, kita milih Ubuntu 16.04 Linux, karo GPU Driver 396.44, CUDA 9.2, perpustakaan cuDNN 7.2.1, NCCL 2.2.13 communicator lan OpenMPI 3.1.1. Sampeyan uga bisa nggunakake
langkah 2
Tambah kemampuan kanggo nggarap API Horovod menyang skrip latihan MXNet. Skrip ing ngisor iki adhedhasar MXNet Gluon API bisa digunakake minangka cithakan prasaja. Garis kanthi kandel dibutuhake yen sampeyan wis duwe skrip latihan sing cocog. Mangkene sawetara owah-owahan kritis sing kudu sampeyan lakoni kanggo sinau karo Horovod:
- Setel konteks miturut peringkat Horovod lokal (baris 8) kanggo mangerteni yen latihan ditindakake ing inti grafis sing bener.
- Pass paramèter dhisikan saka siji buruh kanggo kabeh (baris 18) kanggo mesthekake yen kabeh buruh miwiti karo paramèter dhisikan padha.
- Nggawe Horovod DistributedOptimizer (baris 25) kanggo nganyari paramèter kanthi cara sing disebarake.
Kanggo entuk skrip lengkap, deleng conto Horovod-MXNet
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 ...
langkah 3
Mlebu menyang salah sawijining buruh kanggo miwiti latihan sing disebarake nggunakake arahan MPI. Ing conto iki, latihan mbagekke ing papat kedadean karo 4 GPU saben, lan total 16 GPUs ing kluster. Pangoptimal Stochastic Gradient Descent (SGD) bakal digunakake kanthi hiperparameter ing ngisor iki:
- ukuran mini-batch: 256
- tingkat sinau: 0.1
- momentum: 0.9
- bosok bobot: 0.0001
Nalika kita skala saka siji GPU kanggo 64 GPU, kita linearly scaled tingkat latihan miturut nomer GPUs (saka 0,1 kanggo 1 GPU kanggo 6,4 kanggo 64 GPU), nalika tetep nomer gambar saben GPU ing 256 (saka kumpulan saka 256 gambar kanggo 1 GPU nganti 16 kanggo 384 GPU). Bosok bobot lan paramèter momentum diganti nalika jumlah GPU tambah. Kita nggunakake latihan presisi campuran kanthi jinis data float64 kanggo pass maju lan float16 kanggo gradien kanggo nyepetake petungan float32 sing didhukung dening 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
kesimpulan
Ing artikel iki, kita ndeleng pendekatan skalabel kanggo latihan model sing disebarake nggunakake Apache MXNet lan Horovod. Kita nuduhake efisiensi skala lan efektifitas biaya dibandhingake pendekatan server parameter ing dataset ImageNet sing model ResNet50-v1 dilatih. Kita uga wis kalebu langkah-langkah sing bisa digunakake kanggo ngowahi script ana kanggo mbukak latihan multi-kayata nggunakake Horovod.
Yen sampeyan lagi miwiti MXNet lan sinau jero, bukak kaca instalasi
Yen sampeyan wis nggarap MXNet lan pengin nyoba sinau sing disebarake karo Horovod, banjur deleng
* biaya diwilang adhedhasar
Sinau luwih lengkap babagan kursus kasebut
Source: www.habr.com