Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products
  • Manage your Dell EMC sites, products, and product-level contacts using Company Administration.

Методы оптимизации тренинга CheXNet на сервере Dell C4140 с графическими процессорами Nvidia V100

Summary: Передовые практики достижения максимальной производительности при распределенном горизонтально масштабируемом обучении CheXNet с использованием графических процессоров Nvidia V100 SXM2 на серверах Dell EMC C4140. ...

This article may have been automatically translated. If you have any feedback regarding its quality, please let us know using the form at the bottom of this page.

Article Content


Symptoms

Авторы статьи: Ракшитх Васудев (Rakshith Vasudev) и Джон Локмен (John Lockman), HPC AI Innovation Lab, октябрь 2019 г.

Cause

  -

Resolution

Как было указано ранее, CheXNet — это модель ассистента рентгенолога на основе ИИ, которая использует DenseNet для идентификации до 14 патологий на изображении рентгена грудной клетки. Были изучены несколько подходов горизонтального масштабирования обучения модели, которая может работать также или лучше, чем оригинальная модель CheXNet-121 с RESNET-50, демонстрирующих положительные перспективы как для масштабируемости, так и для повышения точности обучения (положительное значение AUROC). Авторы продемонстрировали масштабируемость систем с ЦП, однако мы заинтересованы в использовании параллелизма графических процессоров для ускорения процесса обучения. В этой статье описаны передовые практики достижения максимальной производительности при распределенном горизонтально масштабируемом обучении CheXNet с использованием графических процессоров Nvidia V100 SXM2 на серверах Dell EMC C4140. Сервер Dell EMC PowerEdge C4140 обеспечивает как плотность, так и производительность благодаря четырем графическим процессорам Nvidia V100 в конфигурации SXM2.


 

Конфигурация оборудования: Конфигурация программного обеспечения:
  • 4 PowerEdge C4140
  • 4 Nvidia V100 32 Гбайт SXM2
  • 2 20-ядерных процессора Intel(R) Xeon(R) Gold 6148 с тактовой частотой 2,40 ГГц
  • 384 Гбайт ОЗУ, DDR4 2666 МГц
  • 1 Mellanox EDR HCA
  • Файловая система Lustre
  • Платформа глубинного обучения: tensorflow-gpu
  • Версия платформы: 1.12.0
  • Версия Horovod: 0.16.4
  • Версия MPI: 4.0.0 с поддержкой cuda и ucx
  • Версия CUDA: 10.1.105
  • Версия CUDNN: 7.6.0
  • Версия NCCL: 2.4.7
  • Версия Python: 3.6.8
  • ОС и версия: RHEL 7.4


 


Конвейер данных критически важен для обеспечения максимальной производительности ускорителей:



 

Что такое данные tf, почему вы должны их использовать?

 

Поскольку новые вычислительные устройства (такие как графические процессоры и тензорные процессоры) позволяют обучать нейронные сети с возрастающей скоростью, обработка с помощью ЦП может стать узким местом. API tf.data предоставляет пользователям компоновочные блоки для проектирования входных конвейеров, которые эффективно используют ЦП, оптимизируя каждый этап процесса ETL.

 

Для выполнения этапа обучения необходимо сначала извлечь и преобразовать данные обучения, а затем перевести их в модель, запущенную на ускорителе. Однако во встроенной синхронной реализации, когда ЦП подготавливает данные, ускоритель простаивает. И наоборот, пока ускоритель обучает модель, ЦП простаивает. Таким образом, время этапа обучения представляет собой сумму времени предварительной обработки ЦП и времени обучения в ускорителе.

 

Конвейеризация накладывает друг на друга предварительную обработку и выполнение модели этапа обучения. Пока ускоритель выполняет этап обучения N, ЦП подготавливает данные для этапа N+1. Это максимально сокращает время шага (в отличие от суммы) обучения и время, необходимое для извлечения и преобразования данных.

 

Без конвейеризации ЦП и графический процессор/тензорный процессор находятся в режиме простоя в течение большей части времени:

SLN318898_en_US__1Sequantial execution
Рис. 1. При последовательном выполнении графический процессор часто простаивает

 

При конвейеризации время простоя значительно уменьшается:

SLN318898_en_US__2Pipelining overlaps
Рис. 2. Конвейеризация накладывает друг на друга использование ЦП и графического процессора, что позволяет максимально повысить коэффициент использования графического процессора.

 

API tf.data предоставляет программный механизм конвейеризации с помощью преобразования tf.data.Dataset.prefetch, который можно использовать для разделения времени, за которое данные производятся, и времени, за которое они потребляются. В частности, преобразование использует фоновый поток и внутренний буфер для предварительной выборки элементов из входного набора данных до того момента, когда они запрашиваются.

 

Более подробную информацию можно найти здесь: https://www.tensorflow.org/guide/performance/datasets

 

Если следовать указаниям, предоставленным tensorflow, можно получить конвейер данных, который выглядит так (старый подход):
https://github.com/dellemc-hpc-ai/code-examples/blob/master/cheXNet-snippets/old_approach.py

 

При таком подходе, также называемым старым подходом, конвейер данных tf выполняет следующее (при условии, что набор данных рентгена грудной клетки является последовательностью TFRecords):

 

  1. Получает абсолютный список имен файлов.
  2. Создает набор данных из списка имен файлов с помощью TFRecordDataset()
  3. Создает новый набор данных, который загружает и форматирует изображения, предварительно обрабатывая их.
  4. Разбивает набор данных.
  5. Перемешивает набор данных во время тренировки.
  6. Повторяет набор данных.
  7. Собирает набор данных в пакет.
  8. Выполняет предварительную выборку набора данных для batch_size.


 

Однако это не самый производительный код. Он приводит к остановкам и частому использованию графического процессора на 0%. По сути, он не использует ускорители эффективно.

Чтобы правильно настроить конвейер данных tf, мы используем подход, который применяется в официальных моделях tensorflow, в частности, для ResNet.  Разница между старым и новым подходом заключается в том, как выполняется настройка конвейера данных перед подачей данных в модель.

 

Вот как выглядит новый подход:
https://github.com/dellemc-hpc-ai/code-examples/blob/master/cheXNet-snippets/new_approach.py

 

Официальный подход моделей TensorFlow также называется новым подходом, выполняются следующие действия:

 

  1. Получает абсолютный список имен файлов.
  2. Создает набор данных из списка имен файлов с помощью from_tensor_slices()
  3. Разбивка выполняется заранее.
  4. Набор данных перемешивается в случайном порядке во время обучения.
  5. Затем набор данных параллельно чередуется, то есть чередует и обрабатывает несколько файлов (определяемых параметром cycle_length), чтобы преобразовать их для создания набора данных TFRecord.
  6. Затем выполняется предварительная выборка набора данных. Buffer_size определяет, сколько записей будет в предварительной выборке, что обычно является значением mini batch_size задания.
  7. Набор данных снова будет перемешан. Подробности перемешивания можно контролировать с помощью buffer_size.
  8. Набор данных повторяется.  Он повторяет набор данных до достижения значения num_epochs to train.
  9. Набор данных подвергается одновременным задачам map_and_batch(), которые анализируют файлы записи tf, которые в свою очередь предварительно обрабатывают изображение, и объединяют их в пакет.
  10. Предварительно обработанное изображение готово к использованию в качестве набора данных и выполнению предварительной выборки.


 

Ниже приведено сравнение производительности старого и нового подходов, использующих официальные модели TF.

SLN318898_en_US__3image(12053)
Рис. 3. При использовании нового подхода можно ожидать почти линейного масштабирования.

 

Как можно видеть, наблюдается значительный прирост производительности, и при использовании старого подхода масштабирование вообще не выполняется. Графические процессоры часто практически не используются, что приводит к стабильным показателям производительности. Повышение эффективности вычислений на одном графическом процессоре переходит в повышение эффективности вычислений на нескольких графических процессорах на нескольких узлах, если хорошо настроен обмен данными.
Использование ЦП для параллельной предварительной обработки данных, предварительной выборки обработанных данных в памяти, перенос большого количества операций умножения матрицы на графические процессоры при быстром обмене данными является еще одним аспектом, который делает этот новый подход более привлекательным для масштабирования многоузловых систем.


 


Другие методы, которые стоит рассмотреть, чтобы добиться оптимальной производительности:



 

Правильная среда имеет важное значение:

 

Среда, в которой выполняются задания, так же важна, как и сами задания, поскольку наличие нужных библиотек/модулей оказывает влияние на эффективность обучения. Кроме того, наличие последних библиотек, связанных с CUDA, может повысить производительность.

Если у вас нет рабочей среды, следуйте инструкциям в этом руководства, чтобы установить ее.



 

Использование правильных параметров привязки для MPI:

 

MPI — это библиотека обмена данными, которая помогает horovod распределять задания. Были изучены различные параметры привязки и сопоставления, и лучшим параметром для C4140 оказалось сопоставление по сокету. Рекомендуемая настройка:
mpirun --map-by socket -np x python pyfile.py --pyoptions



 

Убедитесь, что один процесс выполняется на одном графическом процессоре:

 

Если несколько процессов выполняются на одном графическом процессоре, они вполне могут бороться за ресурсы графического процессора, потребляя память графического процессора и не обрабатывать эффективно больше изображений на пакет, что приводит к тому, что производительность графического процессора становится все более низкой. Tensorflow 1.13.1 был изучен, но казалось, что в то время в нем была ошибка. Он запускал более одного процесса на графическом процессоре.


 

Подводя итог,

  • Правильная настройка конвейера данных крайне важна для повышения производительности.
  • Настройка правильной среды также способствует повышению производительности.
  • Использование правильных параметров привязки для MPI помогает повысить производительность.
  • Профилирование и устранение узких мест при неполном использовании графических процессоров.


 


Article Properties


Affected Product

High Performance Computing Solution Resources, Poweredge C4140

Last Published Date

17 Sep 2021

Version

5

Article Type

Solution