د مقالې ژباړه د کورس د پیل په ماښام چمتو شوې وه
د ډیری لوړ فعالیت کمپیوټري مثالونو کې توزیع شوي روزنه کولی شي د عصري ژورو عصبي شبکو د روزنې وخت په ډیرو ډیټاونو کې له اونیو څخه تر ساعتونو یا حتی دقیقو پورې راټیټ کړي، دا د روزنې تخنیک د ژورې زده کړې په عملي غوښتنلیکونو کې رامینځته کوي. کاروونکي باید پوه شي چې څنګه په ډیری مواردو کې ډاټا شریک او همغږي کړي، کوم چې په پایله کې د اندازه کولو موثریت باندې لوی اغیزه لري. سربیره پردې ، کارونکي باید پدې هم پوه شي چې څنګه د روزنې سکریپټ ځای په ځای کړي چې په یو واحد مثال کې ډیری مواردو ته ځي.
په دې مقاله کې به موږ د پرانیستې ژورې زده کړې کتابتون اپاچی MXNet او د هورووود ویشل شوي زده کړې چوکاټ په کارولو سره د زده کړې ویشلو لپاره د چټکې او اسانه لارې په اړه وغږیږو. موږ به په واضح ډول د هورووود چوکاټ د فعالیت ګټې وښیو او وښیو چې څنګه د MXNet روزنې سکریپټ لیکلو لپاره دا د هورووود سره په توزیع شوي ډول کار کوي.
Apache MXNet څه شی دی؟
د پیرامیټر سرور سره په MXNet کې توزیع شوي روزنه
Что такое Horovod
MXNet او Horovod ادغام
MXNet د Horovod سره د توزیع شوي زده کړې APIs له لارې مدغم کیږي چې په هوروود کې تعریف شوي. Horovod مخابراتي APIs horovod.broadcast(), horovod.allgather() и horovod.allreduce() реализованы с помощью асинхронных коллбэков движка MXNet, как часть его графа задач. Таким образом, зависимости данных между коммуникацией и вычислениями с легкостью обрабатываются движком MXNet, чтобы избежать потерь производительности из-за синхронизации. Объект distributed optimizer, определенный в Horovod horovod.DistributedOptimizer پراخوي اصلاح کوونکی в MXNet таким образом, чтобы он вызывал соответствующие API Horovod для распределенного обновления параметров. Все эти детали реализации прозрачны для конечных пользователей.
چټک پیل
تاسو کولی شئ په چټکۍ سره د MNIST ډیټاسیټ کې د MXNet او Horovod په کارولو سره په خپل MacBook کې د کوچني عصبي عصبي شبکې روزنه پیل کړئ.
لومړی، د PyPI څخه mxnet او horovod نصب کړئ:
pip install mxnet
pip install horovod
Примечание: Если у вас возникает ошибка во время pip install horovodشاید تاسو اړتیا لرئ یو متغیر اضافه کړئ MACOSX_DEPLOYMENT_TARGET=10.vvچیرته vv - دا ستاسو د MacOS نسخه نسخه ده، د مثال په توګه، د MacOSX سیرا لپاره تاسو به لیکلو ته اړتیا ولرئ 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
د فعالیت ډیمو
کله چې د اتو مثالونو سره په 50 GPUs کې په ImageNet ډیټاسیټ کې د ResNet1-v64 ماډل روزنه p3.16x لوی EC2, каждый из которых содержит 8 GPU NVIDIA Tesla V100 на AWS cloud, мы достигли пропускной способности обучения 45000 изображений/сек (т.е. количество обученных сэмплов в секунду). Обучение завершалось за 44 минуты после 90 эпох с лучшей точностью в 75.7%.
موږ دا په 8، 16، 32 او 64 GPUs کې د پیرامیټر سرورونو کارولو لپاره د MXNet توزیع شوي روزنې طریقې سره په ترتیب سره د واحد پیرامیټر سرور او سرور څخه د کارګر تناسب 1 څخه 1 او 2 څخه 1 سره پرتله کوو. تاسو کولی شئ پایله په لاندې شکل 1 کې وګورئ. په چپ اړخ کې د y-محور کې، بارونه په هر ثانیه کې د روزنې لپاره د انځورونو شمیر استازیتوب کوي، کرښې په ښي خوا کې د y-محور په برخه کې د پیمانه کولو موثریت (دا د حقیقي څخه د مثالي تولید تناسب) منعکس کوي. لکه څنګه چې تاسو لیدلی شئ، د سرورونو شمیره انتخاب د اندازه کولو موثریت اغیزه کوي. که چیرې یوازې یو پیرامیټر سرور شتون ولري ، د اندازه کولو موثریت په 38 GPUs کې 64٪ ته راټیټیږي. د هوروود سره ورته اندازه کولو موثریت ترلاسه کولو لپاره ، تاسو اړتیا لرئ د کارګرانو شمیر په پرتله د سرورونو شمیر دوه چنده کړئ.
شکل 1. د توزیع شوي زده کړې پرتله کول د MXNet په کارولو سره د هوروود او پیرامیټر سرور سره
В Таблице 1 ниже мы сравнили итоговую стоимость экземпляра при выполнении экспериментов на 64 GPU. Использование MXNet вместе с Horovod обеспечивает наилучшую пропускную способность при наименьших затратах.
جدول 1. د هروود او پیرامیټر سرور تر مینځ د لګښت پرتله کول د سرور او کارګر تناسب د 2 څخه 1 پورې.
د بیا تولید لپاره ګامونه
په راتلونکو ګامونو کې، موږ به تاسو ته وښیو چې څنګه د MXNet او Horovod په کارولو سره د توزیع شوي روزنې پایلې بیا تولید کړئ. د MXNet سره د توزیع شوي زده کړې په اړه د نورو معلوماتو لپاره ولولئ
1 ګام
د ویشل شوي زده کړې کارولو لپاره د MXNet نسخه 1.4.0 یا لوړ او د هورووډ نسخه 0.16.0 یا لوړ سره د همجنس مثالونو کلستر جوړ کړئ. تاسو به د GPU روزنې لپاره کتابتونونو نصبولو ته هم اړتیا ولرئ. زموږ د مثالونو لپاره، موږ اوبنټو 16.04 لینکس غوره کړی، د GPU ډرایور 396.44، CUDA 9.2، cuDNN 7.2.1 کتابتون، NCCL 2.2.13 مخابراتي او OpenMPI 3.1.1 سره. تاسو هم کارولی شئ
2 ګام
ستاسو د MXNet روزنې سکریپټ ته د Horovod API سره د کار کولو وړتیا اضافه کړئ. لاندې سکریپټ د MXNet Gluon API پراساس د ساده ټیمپلیټ په توګه کارول کیدی شي. په بولډ کې لینونو ته اړتیا ده که تاسو دمخه د ورته روزنې سکریپټ لرئ. دلته یو څو مهم بدلونونه دي چې تاسو ورته اړتیا لرئ د هوروود سره زده کړه وکړئ:
- Установите контекст в соответствии с локальным рангом Horovod (строка 8), чтобы понимать, что обучение выполняется на правильном графическом ядре.
- Передайте начальные параметры от одного воркера ко всем (строка 18), чтобы убедиться, что все воркеры начинают работу с одинаковыми начальными параметрами.
- Создайте Horovod 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 GPUs سره هر یو، او په کلستر کې ټول 16 GPUs پرمخ ځي. د Stochastic Gradient Descent (SGD) اصلاح کوونکی به د لاندې هایپر پارامیټرونو سره وکارول شي:
- mini-batch size: 256
- learning rate: 0.1
- سرعت: 0.9
- د وزن کمښت: 0.0001
По мере масштабирования от одного GPU к 64 GPU мы линейно масштабировали скорость обучения в соответствии с количеством GPU (от 0,1 для 1 GPU до 6,4 для 64 GPU), сохраняя при этом количество изображений, приходящихся на один GPU, равным 256 (от пакета в 256 изображений для 1 GPU до 16 384 для 64 GPU). Параметры weight decay и momentum изменялись по мере увеличения числа GPU. Мы использовали смешанную точность обучения с типом данных float16 при прямом проходе и float32 для градиентов, чтобы ускорить вычисления float16, поддерживаемые 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
پایلې
پدې مقاله کې، موږ د اپاچي MXNet او Horovod په کارولو سره د توزیع شوي ماډل روزنې لپاره د توزیع وړ طریقې ته کتنه وکړه. موږ په ImageNet ډیټاسیټ کې د پیرامیټر سرور طریقې په پرتله د اندازه کولو موثریت او لګښت اغیزمنتوب وښوده چې په کې د ResNet50-v1 ماډل روزل شوی و. موږ هغه مرحلې هم شاملې کړې چې تاسو کولی شئ د هوروود په کارولو سره د څو مثالونو روزنې چلولو لپاره د موجوده سکریپټ بدلولو لپاره وکاروئ.
که تاسو یوازې د MXNet او ژورې زده کړې سره پیل کوئ، د نصب کولو پاڼې ته لاړ شئ
Если вы уже работали с MXNet и хотите попробовать распределенное обучение с Horovod, то загляните на
* لګښت په اساس محاسبه کیږي
د کورس په اړه نور معلومات ترلاسه کړئ
سرچینه: www.habr.com