Мақаланың аудармасы курстың басталу қарсаңында дайындалды
Бірнеше жоғары өнімді есептеу даналары бойынша таратылған оқыту қазіргі заманғы терең нейрондық желілерді үлкен көлемдегі деректерге оқыту уақытын аптадан сағатқа немесе тіпті минутқа дейін қысқартуы мүмкін, бұл оқыту әдісін терең оқытудың практикалық қолдануларында басым етеді. Пайдаланушылар деректерді бірнеше даналар бойынша бөлісу және синхрондауды түсінуі керек, бұл өз кезегінде масштабтау тиімділігіне үлкен әсер етеді. Бұған қоса, пайдаланушылар бір данада бірнеше данаға жұмыс істейтін оқу сценарийін қолдану жолын білуі керек.
Бұл мақалада біз Apache MXNet терең оқытудың ашық кітапханасын және Horovod таратылған оқыту негізін пайдаланып оқуды таратудың жылдам және оңай жолы туралы айтатын боламыз. Біз Horovod құрылымының өнімділік артықшылықтарын нақты көрсетеміз және MXNet оқу сценарийін Horovod бағдарламасымен бөлінген түрде жұмыс істейтін етіп жазу жолын көрсетеміз.
Apache MXNet дегеніміз не
Параметр сервері бар MXNet-те таратылған оқыту
Хоровод дегеніміз не
Интеграция 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
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 нужно увеличить количество серверов в два раза по отношению к количеству воркеров.
Сурет 1. MXNet көмегімен Horovod және параметр серверімен бөлінген оқытуды салыстыру
Төмендегі 1-кестеде 64 графикалық процессорында эксперименттерді іске қосу кезінде бір дананың соңғы құнын салыстырамыз. 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 таңдадық. Сондай-ақ пайдалануға болады
қадам 2
MXNet оқу сценарийіне Horovod API интерфейсімен жұмыс істеу мүмкіндігін қосыңыз. MXNet Gluon API негізіндегі төмендегі сценарийді қарапайым үлгі ретінде пайдалануға болады. Егер сізде сәйкес оқу сценарийі бар болса, қалың қаріппен жазылған жолдар қажет. Міне, Хороводпен үйрену үшін сізге қажет бірнеше маңызды өзгерістер:
- Жаттығу дұрыс графикалық ядрода орындалатынын түсіну үшін жергілікті Хоровод дәрежесіне сәйкес мәтінмәнді орнатыңыз (8-жол).
- Барлық жұмысшылардың бірдей бастапқы параметрлерден басталуын қамтамасыз ету үшін бастапқы параметрлерді бір жұмысшыдан барлығына (18-жол) өткізіңіз.
- Хоровод жасаңыз DistributedOptimizer (25-жол) параметрлерді таратылған түрде жаңарту үшін.
Толық сценарийді алу үшін 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 ...
қадам 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 және терең үйренуді енді бастасаңыз, орнату бетіне өтіңіз
Егер сіз MXNet-те бұрыннан жұмыс істеген болсаңыз және Horovod көмегімен бөлінген оқытуды қолданғыңыз келсе, мынаны қараңыз.
*құны негізінде есептеледі
Курс туралы көбірек біліңіз
Ақпарат көзі: www.habr.com