Məqalənin tərcüməsi kursun başlaması ərəfəsində hazırlanıb
Çoxsaylı yüksək performanslı hesablama nümunələri üzrə paylanmış təlim müasir dərin neyron şəbəkələrinin böyük həcmdə məlumat üzərində təlim vaxtını həftələrdən saatlara və hətta dəqiqələrə qədər azalda bilər və bu təlim texnikasını dərin öyrənmənin praktik tətbiqlərində üstünlük təşkil edir. İstifadəçilər məlumatların bir çox instansiyada necə paylaşılacağını və sinxronizasiya olunacağını başa düşməlidirlər ki, bu da öz növbəsində miqyaslaşdırmanın səmərəliliyinə böyük təsir göstərir. Bundan əlavə, istifadəçilər bir nüsxədə işləyən təlim skriptini birdən çox instansiyaya necə yerləşdirməyi də bilməlidirlər.
Bu yazıda açıq dərin öyrənmə kitabxanası Apache MXNet və Horovod paylanmış təlim çərçivəsindən istifadə edərək öyrənməni yaymağın sürətli və asan yolu haqqında danışacağıq. Biz Horovod çərçivəsinin performans üstünlüklərini aydın şəkildə nümayiş etdirəcəyik və MXNet təlim skriptini Horovod ilə paylanmış şəkildə işləməsi üçün necə yazmağı nümayiş etdirəcəyik.
Apache MXNet nədir
Parametr serveri ilə MXNet-də paylanmış təlim
Horovod nədir
MXNet və Horovod inteqrasiyası
MXNet Horovodda müəyyən edilmiş Paylanmış Öyrənmə API-ləri vasitəsilə Horovod ilə inteqrasiya edir. Horovod rabitə API-ləri horovod.broadcast(), horovod.allgather() и horovod.allreduce() tapşırıq qrafikinin bir hissəsi kimi MXNet mühərrikinin asinxron geri çağırışlarından istifadə etməklə həyata keçirilir. Bu şəkildə, sinxronizasiya nəticəsində performans itkilərinin qarşısını almaq üçün rabitə və hesablama arasındakı məlumat asılılığı MXNet mühərriki tərəfindən asanlıqla idarə olunur. Horovodda müəyyən edilmiş paylanmış optimallaşdırıcı obyekt horovod.DistributedOptimizer genişlənir Optimizator MXNet-də paylanmış parametr yeniləmələri üçün müvafiq Horovod API-lərini çağırır. Bütün bu icra təfərrüatları son istifadəçilər üçün şəffafdır.
Tez başlanğıc
Siz MacBook-unuzda MXNet və Horovod istifadə edərək MNIST verilənlər bazasında kiçik konvolyusiya neyron şəbəkəsini öyrətməyə tez başlaya bilərsiniz.
Əvvəlcə PyPI-dən mxnet və horovod quraşdırın:
pip install mxnet
pip install horovod
Qeyd: zamanı xəta ilə qarşılaşsanız pip quraşdırma horovodbəlkə bir dəyişən əlavə etməlisiniz MACOSX_DEPLOYMENT_TARGET=10.vvHara vv – bu sizin MacOS versiyanızın versiyasıdır, məsələn, MacOSX Sierra üçün siz yazmalısınız MACOSX_DEPLOYMENT_TARGET=10.12 pip quraşdırma horovod
Sonra OpenMPI quraşdırın
Sonda test skriptini yükləyin mxnet_mnist.py
mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py
Bu, prosessorunuzun iki nüvəsində təlim keçirəcək. Çıxış aşağıdakı olacaq:
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
Performans nümayişi
ResNet50-v1 modelini səkkiz nümunəsi olan 64 GPU-da ImageNet verilənlər bazasında öyrədərkən p3.16xlarge Hər birində AWS buludunda 2 NVIDIA Tesla V8 GPU olan EC100, biz 45000 şəkil/san təlim ötürmə qabiliyyətinə nail olduq (yəni, saniyədə öyrədilmiş nümunələrin sayı). Təlim ən yaxşı 44% dəqiqliklə 90 dövrdən sonra 75.7 dəqiqə ərzində tamamlandı.
Biz bunu MXNet-in 8, 16, 32 və 64 GPU-larda bir parametr serveri və müvafiq olaraq 1-dən 1-ə və 2-dən 1-ə qədər olan server-işçi nisbəti ilə parametr serverlərindən istifadə etmək üzrə paylanmış təlim yanaşması ilə müqayisə etdik. Nəticəni aşağıdakı Şəkil 1-də görə bilərsiniz. Soldakı y oxunda çubuqlar saniyədə məşq ediləcək şəkillərin sayını, xətlər sağdakı y oxunda miqyaslama səmərəliliyini (yəni faktiki və ideal ötürmə qabiliyyətinə nisbətini) əks etdirir. Gördüyünüz kimi, serverlərin sayının seçimi miqyaslaşdırmanın səmərəliliyinə təsir göstərir. Yalnız bir parametr serveri varsa, miqyaslama səmərəliliyi 38 GPU-da 64%-ə enir. Horovod ilə eyni miqyaslama səmərəliliyinə nail olmaq üçün işçilərin sayına nisbətən serverlərin sayını ikiqat artırmalısınız.
Şəkil 1. MXNet-dən istifadə edərək Horovod və parametr serveri ilə paylanmış öyrənmənin müqayisəsi
Aşağıdakı Cədvəl 1-də 64 GPU-da eksperimentlər həyata keçirərkən hər nüsxənin yekun dəyərini müqayisə edirik. MXNet-in Horovod ilə istifadəsi ən aşağı qiymətə ən yaxşı ötürmə qabiliyyətini təmin edir.
Cədvəl 1. 2-dən 1-ə qədər bir serverin işçi nisbəti ilə Horovod və Parametr Serveri arasında qiymət müqayisəsi.
Çoxalmaq üçün addımlar
Növbəti addımlarda biz sizə MXNet və Horovod istifadə edərək paylanmış təlimin nəticəsini necə bərpa edəcəyinizi göstərəcəyik. MXNet ilə paylanmış öyrənmə haqqında ətraflı öyrənmək üçün oxuyun
1 addım
Paylanmış öyrənmədən istifadə etmək üçün MXNet 1.4.0 və ya daha yüksək versiyası və Horovod versiyası 0.16.0 və ya daha yüksək olan homogen nümunələr toplusu yaradın. Siz həmçinin GPU təlimi üçün kitabxanalar quraşdırmalısınız. Nümunələrimiz üçün GPU Driver 16.04, CUDA 396.44, cuDNN 9.2 kitabxanası, NCCL 7.2.1 kommunikatoru və OpenMPI 2.2.13 ilə Ubuntu 3.1.1 Linux-u seçdik. Siz də istifadə edə bilərsiniz
2 addım
MXNet təlim skriptinizə Horovod API ilə işləmək bacarığını əlavə edin. MXNet Gluon API-yə əsaslanan aşağıdakı skript sadə şablon kimi istifadə edilə bilər. Əgər sizdə artıq müvafiq təlim skriptiniz varsa qalın hərflərlə yazılmış sətirlər lazımdır. Horovod ilə öyrənmək üçün etməli olduğunuz bir neçə kritik dəyişikliklər bunlardır:
- Təlimin düzgün qrafik nüvəsində həyata keçirildiyini başa düşmək üçün yerli Horovod dərəcəsinə (sətir 8) uyğun olaraq konteksti təyin edin.
- Bütün işçilərin eyni ilkin parametrlərlə başlamasını təmin etmək üçün ilkin parametrləri bir işçidən hamıya keçirin (sətir 18).
- Horovod yaradın Distributed Optimizer (sətir 25) paylanmış şəkildə parametrləri yeniləmək üçün.
Tam skripti əldə etmək üçün Horovod-MXNet nümunələrinə müraciət edin
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 addım
MPI direktivindən istifadə edərək paylanmış təlimə başlamaq üçün işçilərdən birinə daxil olun. Bu nümunədə paylanmış təlim hər birində 4 GPU və klasterdə cəmi 16 GPU olan dörd instansiyada işləyir. Stokastik Qradient Eniş (SGD) optimallaşdırıcısı aşağıdakı hiperparametrlərlə istifadə olunacaq:
- mini dəstə ölçüsü: 256
- öyrənmə dərəcəsi: 0.1
- impuls: 0.9
- çəki azalması: 0.0001
Bir GPU-dan 64 GPU-ya qədər miqyaslandırdıqca, GPU-ya düşən şəkillərin sayını 0,1-da (bir dəstədən) saxlamaqla, GPU-ların sayına (1 GPU üçün 6,4-dən 64 GPU-ya 256-ə) uyğun olaraq təlim dərəcəsini miqyaslandırdıq. 256 GPU üçün 1 şəkil - 16 GPU üçün 384). GPU-ların sayı artdıqca çəki azalması və impuls parametrləri dəyişdi. NVIDIA Tesla GPU-ları tərəfindən dəstəklənən float64 hesablamalarını sürətləndirmək üçün irəli keçid üçün float16 məlumat növü və gradientlər üçün float32 ilə qarışıq dəqiqlikli təlimdən istifadə etdik.
$ 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
Nəticə
Bu yazıda biz Apache MXNet və Horovod istifadə edərək paylanmış model təliminə genişlənə bilən yanaşmaya baxdıq. ResNet50-v1 modelinin öyrədildiyi ImageNet verilənlər bazasında parametr server yanaşması ilə müqayisədə miqyaslaşdırma səmərəliliyini və qənaətcilliyini nümayiş etdirdik. Biz həmçinin Horovod istifadə edərək çox instansiya təlimini həyata keçirmək üçün mövcud skripti dəyişdirmək üçün istifadə edə biləcəyiniz addımları daxil etdik.
MXNet və dərin öyrənməyə yenicə başlayırsınızsa, quraşdırma səhifəsinə keçin
Əgər siz artıq MXNet ilə işləmisinizsə və Horovod ilə paylanmış öyrənməyə cəhd etmək istəyirsinizsə, o zaman bura nəzər salın.
*qiymət əsasında hesablanır
Kurs haqqında ətraflı məlumat əldə edin
Mənbə: www.habr.com