При обучении модели нейронной сети время имеет решающее значение. Вот почему используются различные конфигурации машин, включая графические процессоры, TPU и несколько серверов.

Последние пару месяцев я изучаю проект YouTube-8M и уже публиковал предыдущие публикации о проекте, наборе видеоданных, алгоритмах и способах их запуска в облаке. Для этого поста я обучил два алгоритма из начального кода на разных стандартных конфигурациях компьютеров AI Platform, чтобы сравнить их. Платформа AI предоставляет ряд уровней масштабирования, которые представляют собой установленные конфигурации различных типов машин и количества машин для выполнения заданий.

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

Флаги командной строки

Проект YouTube-8M включает файл yaml в репозиторий начальный код, чтобы задать конфигурацию для этого проекта при запуске на AI PLatform. Вы можете изменять этот файл каждый раз, чтобы изменить уровни, или вы можете сделать что-то более простое, а именно передать флаги, которые изменяют уровни (--scale-tier)и типы (--master-machine-type).

Существует несколько различных форматов прохождения уровня шкалы.

--scale-tier='BASIC_TPU'
--scale-tier=basic-tpu

При передаче флагов уровня масштабирования необходимо указать --runtime-version, иначе будет ошибка:

"Версия среды выполнения должна быть предоставлена, если URI главного образа Docker пуст."

Используйте следующее для этого проекта.

--runtime-version=1.14

Уровни шкалы

Я экспериментировал с запуском двух разных алгоритмов, логистики на уровне кадра и глубокого пакета кадров (DBoF), в начальном коде на следующих уровнях масштабирования.

  • STANDARD_1: 1 мастер с 8 VCPU| Память 8 ГБ, 4 рабочих с 8 VCPU| 8 ГБ памяти и 3 сервера параметров с 4 VCPU| 15 ГБ памяти
  • PREMIUM_1: 1 мастер с 16 VCPU| 14,4 ГБ памяти, 4 рабочих с 16 VCPU| 14,4 ГБ памяти и 3 сервера параметров с 8 VCPU| 52 ГБ памяти
  • BASIC_GPU: 1 рабочий с 1 GPU K80 | 8 ВЦП| 30 ГБ памяти
  • BASIC_TPU: 1 мастер с 4 VCPU| 15 ГБ памяти и 8 ядер TPU v2
  • ПОЛЬЗОВАТЕЛЬСКИЙ: дополнительная информация ниже

Пример кода при передаче флагов уровня шкалы

JOB_NAME=yt8m_train_frame_$(date +%Y%m%d_%H%M%S)
gcloud --verbosity=debug ai-platform jobs submit training \
$JOB_NAME --package-path=youtube-8m --module-name=youtube-8m.train \ --staging-bucket=$OUTPUT_BUCKET \
--scale-tier=basic-tpu --runtime-version=1.14 --region=us-central1\
-- --train_data_pattern='$TRAIN_BUCKET/train*.tfrecord' \
--frame_features --model=FrameLevelLogisticModel \
--feature_names="rgb,audio" --feature_sizes="1024,128" \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME --start_new_model

Только ЦП

Обратите внимание, что в предыдущем посте о том, как запустить этот проект на платформе AI, рассказывалось о его запуске с эквивалентом BASIC_GPU. При использовании STANDARD_1 и PREMIUM_1 не хватило памяти для запуска моделей. Вы можете рассмотреть возможность использования пользовательской настройки, которая позволит вам увеличить основную и рабочую память. Кроме того, отметим, что в предыдущих сообщениях я запускал эти модели на одном сервере только с процессорами с памятью не менее 30 ГБ, и я смог запустить уровень кадра, но не DBoF. Возможно, вы сможете найти конфигурацию с несколькими рабочими процессами, которая запускает DBoF только с процессорами, но, в конце концов, имеет смысл использовать TPU и GPU при обучении нейронной сети.

Графические процессоры

Платформа AI предоставляет вам доступ к 3 различным типам графических процессоров для конфигураций машин. Стандартные уровни масштабирования включают только K80, и вам необходимо использовать пользовательский уровень, чтобы использовать другие. Это различные типы графических процессоров в порядке возрастания их производительности.

  • K80
  • p100
  • v100

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

Доступ к ТПУ

Уровень масштабирования TPU — это быстрый способ получить доступ к TPU для вашего проекта. При запросе TPU необходимо указать регион; в противном случае вы можете оставить его выключенным. Вы можете получить следующую ошибку, если не выберете регион, в котором в системе есть TPU:

«RESOURCE_EXHAUSTED Ни в одной зоне в регионе us-west1 нет ускорителей всех запрошенных типов».

Когда я оставил регион, по умолчанию он был us-west1, и, глядя на список типов и зон TPU, оказалось, что он базируется в регионе us-central1. Список типов и зон ТПУ можно посмотреть по этой ссылке.

Пользовательские уровни

Настраиваемые уровни — это именно то, как это звучит, они обеспечивают гибкость в конфигурации машины.

При использовании пользовательского уровня масштабирования необходимо передать master-machine-type.

--master-machine-type=[MACHINE TYPE OPTIONS]

Варианты типа машины, которые я использовал.

  • complex-model-m-gpu: 4 графических процессора K80 | 8 ВЦП| 30 ГБ памяти
  • complex-model-l-gpu: 8 графических процессоров K80 | 16 виртуальных процессоров| 60 ГБ памяти
  • standard-p100: 1 графический процессор P100 | 8 виртуальных процессоров | 30 ГБ памяти
  • complex-model-m-p100: 4 графических процессора P100 | 16 виртуальных процессоров | 60 ГБ памяти
  • standard-v100: 1 GPU V100 | 8 виртуальных процессоров | 30 ГБ памяти
  • large-model-v100: 1 GPU V100 | 16 виртуальных процессоров | 52 ГБ памяти

Пример кода при передаче флагов пользовательского уровня и типа машины.

JOB_NAME=yt8m_train_frame_$(date +%Y%m%d_%H%M%S)
gcloud --verbosity=debug ai-platform jobs submit training \
$JOB_NAME --package-path=youtube-8m --module-name=youtube-8m.train \ --staging-bucket=$OUTPUT_BUCKET \
--scale-tier=custom --master-machine-type=standard_p100 \
--runtime-version=1.14 \
-- --train_data_pattern='$TRAIN_BUCKET/train*.tfrecord' \
--frame_features --model=FrameLevelLogisticModel \
--feature_names="rgb,audio" --feature_sizes="1024,128" \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME --start_new_model

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

Подробнее о конфигурациях смотрите на скриншоте ниже и ознакомьтесь с документами:

квоты

Ниже приведены квоты, которые были автоматически установлены для моего проекта.

  • 16 ТПУ_V2
  • 16 ТПУ_V3
  • 2 P4
  • 2 V100
  • 40 K80
  • 40 P100

Я обнаружил это в ошибке, которую я получил, когда попытался поэкспериментировать с несколькими типами машин, которые имеют более 2 V100. Если ваша работа требует от вас большего масштабирования машин, чем это, вам необходимо сделать запрос на увеличение квоты. Если в ближайшем будущем я получу доступ к более чем 2 V100, я запущу эти другие типы машин и добавлю подробности ниже.

Сравнение производительности

Теперь самое интересное — сравнить производительность двух разных алгоритмов со всеми этими разными конфигурациями. Что хорошо в AI Platform и любом управляемом сервисе, так это то, что вы можете запустить все это одновременно, и они могут работать параллельно.

Напоминаем, что цена на шины с предопределенными шкалами составляет 0,49 доллара США в час за единицу обучения, что является базовой ценой. Чтобы рассчитать стоимость задания, умножьте базовую цену на потребленную единицу машинного обучения. Использованные единицы ML (MLU) эквивалентны единицам обучения с учетом продолжительности работы.

Время и стоимость могут немного отличаться, если вы попробуете это самостоятельно, но они должны быть в пределах нескольких минут от того, что указано ниже.

Логистика на уровне кадра

Каждый пункт указывает уровень шкалы/тип машины, общее время обучения и общую стоимость.

  • BASIC_GPU: 13 часов 9 минут и 21,85 MLU * 0,49 доллара США = 10,71 доллара США.
  • BASIC_TPU:20 часов 51 минута и 198,58 MLU * 0,49 доллара США = 97,31 доллара США.
  • complex-model-m-gpu: 11 часов 30 минут и 59,27 MLU* 0,49 доллара США = 29,04 доллара США.
  • complex-model-l-gpu: 11 часов 7 минут и 114,72 MLU* 0,49 доллара США = 56,21 доллара США.
  • стандартный-p100: 12 часов 45 минут и 47,39 MLU * 0,49 доллара США = 23,22 доллара США.
  • complex-model-m-p100: 11 часов 57 минут и 159,61 MLU * 0,49 доллара США = 78,21 доллара США.
  • standard-v100: 12 часов 19 минут и 71,39 MLU * 0,49 доллара США = 34,98 доллара США.
  • large-model-v100: 13 часов 17 минут и 79,28 MLU * 0,49 доллара США = 38,85 доллара США.

Стоимость базовой конфигурации графического процессора составляет половину стоимости следующего по стоимости варианта, стандартного p100, но для запуска требуется почти на 30 минут больше. Это отличный пример определения того, сколько стоит время. Можете ли вы подождать 30 минут, пока обучение не закончится? Наверное. Тем не менее, во время обучения вам, скорее всего, придется запускать эти машины несколько раз, чтобы настроить и поэкспериментировать с моделью. Это дополнительное время может накапливаться, и может показаться более рентабельным (особенно с учетом сроков) использовать машину, которая может сократить время.

Глубокая сумка кадров (DBoF)

Каждый пункт указывает уровень шкалы/тип машины, общее время обучения и общую стоимость.

  • BASIC_GPU: 1 день 10 часов и 56,26 MLU * 0,49 доллара = 27,57 доллара США.
  • BASIC_TPU:недостаточно памяти и выход с ненулевым статусом
  • complex-model-m-gpu: 1 день 4 часа и 145,95 MLU * 0,49 доллара США = 71,52 доллара США.
  • complex-model-l-gpu: 1 день 3 часа и 286,36 MLU * 0,49 доллара США = 140,32 доллара США.
  • стандартный-p100: 16 часов 59 минут и 63,14 MLU * 0,49 доллара США = 30,94 доллара США.
  • complex-model-m-p100: 16 часов 22 минуты и 219,11 MLU * 0,49 доллара США = 107,36 доллара США.
  • standard-v100: 16 часов 24 минуты и 92,8 MLU * 0,49 доллара США = 45,47 доллара США.
  • large-model-v100: 15 часов 23 минуты и 91,76 MLU * 0,49 доллара США = 44,96 доллара США.

Очевидно, что для этой модели GPU v100 были немного быстрее и могут быть почти такими же экономичными, как p100. что было почти таким же быстрым и самым дешевым вариантом с учетом времени. Кроме того, при добавлении большего количества графических процессоров, как в сложных моделях, стоимость значительно увеличивалась, но время не улучшалось так сильно. В этом случае работу выполняет один графический процессор, но существуют и другие ситуации, основанные на модели, данных и ограничениях по времени, когда требуется несколько графических процессоров.

Также отметим, что если вы хотите поэкспериментировать с TPU, создайте настраиваемый уровень, который их использует, и используйте основной/главный уровень с большим объемом памяти, чем конфигурация BASIC_TPU (не менее 30 ГБ).

В целом для обеих моделей графические процессоры v100 демонстрируют высокую производительность, но одиночный p100 является лучшим вариантом, если учитывать компромиссы между временем и стоимостью.

Заворачивать

Этот пост был посвящен обзору того, как различные уровни масштабирования платформы ИИ и типы машин работают с примерами алгоритмов YouTube-8M. Масштабирование количества GPU, TPU и серверов зависит от сложности вашей модели, объема данных и того, сколько времени у вас есть для выполнения работы. Это поможет вам определить, что использовать, а использование нескольких серверов или графических процессоров не обязательно быстрее. Прежде чем запускать платформу, важно уделить время тому, чтобы понять ваши требования.

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