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

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

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

Платформа ИИ

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

Начиная

Чтобы начать использовать AI Platform с YouTube-8M, нужно выполнить несколько шагов по настройке. Вы должны включить API, установить программное обеспечение на компьютере/сервере, где вы будете запускать команды для взаимодействия с платформой, загрузить кодовую базу и сделать данные доступными.

API

Включите Google AI Platform API в консоли GC.

Настройте локальные переменные среды, необходимые для задания, которое вы собираетесь запустить.

BUCKET_NAME=[Name of the bucket for data]
JOB_NAME=[Name for the job that will run in AI Platform]

Программное обеспечение

Где бы вы ни планировали запускать команды для запуска заданий Cloud AI Platform, убедитесь, что установлено следующее:

Проверьте версии, которые установлены.

python --version
python -c 'import tensorflow as tf; print(tf.__version__)'Data

Кодовая база

Загрузите кодовую базу YouTube-8M на свой компьютер.

cd ~/yt8m/code && git clone https://github.com/google/youtube-8m.git

Выполнять команды из этого уровня каталога.

~/yt8m/code

Данные

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

Ввод данных

К счастью, набор данных уже общедоступен в Cloud Storage, поэтому вы можете получить доступ к различным файлам с помощью gsutil. Вы можете настроить переменные среды, указывающие на эти общедоступные корзины.

TRAIN_BUCKET='gs://us.data.yt8m.org/2/frame/train/train*.tfrecord'
VALIDATE_BUCKET='gs://us.data.yt8m.org/3/frame/validate/validate*.tfrecord'
TEST_BUCKET='gs://us.data.yt8m.org/3/frame/test/test*.tfrecord'

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

gsutil -q -m cp -r [LOCAL FOLDER PATH] gs://[TRAIN BUCKET NAME]

Затем вы можете использовать адрес своего сегмента для ввода данных в командах ниже. Обратите внимание, я использовал -q для тихого, чтобы он не перечислял каждый файл по мере его загрузки, и -m, чтобы сделать его параллельным и быстрым для загрузки.

Выходные данные

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

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

OUTPUT_BUCKET=gs://${USER}_yt8m_train_bucket
gsutil mb $OUTPUT_BUCKET

Оценка стоимости | Цены

Чтобы понять, сколько будет стоить выполнение такой работы на платформе AI, перейдите по ссылке Ресурсы продуктов AI & ML с подробным описанием цен. Ниже я расскажу о конфигурации машины, которая использовалась на платформе AI, и о том, как рассчитывается стоимость.

Конфигурация компьютера

Чтобы увидеть, как YouTube-8M определил настройку облака, проверьте cloudml-gpu.yaml для получения сведений о конфигурации и внесения изменений. Текущая конфигурация установлена ​​на CUSTOM scaleTier и standard_gpu master Type. Фактически это то же самое, что и BASIC_GPU scaleTier.

Тип standard_gpu — это стандартный тип машины, использующий Compute Engine с n1-standard-8 (8 виртуальных процессоров, 30 ГБ памяти, максимальный общий размер хранилища PD 257 ТБ) и включающий 1 графический процессор NVIDIA Tesla K80. Для сравнения, перед использованием AI Platform я вручную настроил n1-standard-8, который не включает графический процессор. На ручную настройку сервера ушло несколько дней, а на запуск экземпляра на платформе AI — менее 10 минут.

Эта страница содержит более подробную информацию о типах машин. Обратите внимание: вы можете изменить конфигурацию AI Platform, чтобы использовать несколько графических процессоров, а также разделить и запустить обучение на нескольких рабочих/серверах. Добавление большего количества графических процессоров и рабочих процессов потенциально может сократить время обучения, когда у вас есть более сложные модели (больше вычислений) и большие наборы данных для обработки. Однако для более простых моделей или меньшего количества данных это может быть ненамного быстрее.

Разбивка затрат

Согласно руководству по ценообразованию, тип standard_gpu стоит 0,8300 доллара США в час на основе базовой цены и количества единиц обучения. Для этого типа машины цена основана на 1,6939 учебных единицах. Базовая цена за час для одной единицы обучения составляет 0,49 доллара США (0,83 доллара США/1,6939) или 0,0081 доллара США в минуту.

За выполнение задания на платформе AI взимается плата с шагом в 1 минуту, и для каждого задания требуется минимум 10 минут, поэтому при текущей конфигурации это будет минимум 0,08 доллара США. Обратите внимание, что все это на дату публикации и в Северной и Южной Америке.

Используйте это уравнение, чтобы рассчитать стоимость обучения с использованием потребленных единиц ML.

Consumed ML units * base price

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

Пример работы с использованием 3,44 единиц ML (128 минут) с базовой ценой 0,49 доллара США.

3.44 * $0.49 = $1.69

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

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

Тренироваться

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

Я использовал пример кода проекта YouTube-8M, который включает логистическую регрессию на уровне кадра и широкий набор параметров модели кадра. В этом предыдущем посте представлен обзор моделей.

Уровень кадра

Для модели на уровне кадра выполните следующие команды с вашего терминала.

JOB_NAME_FRAME_TRAIN=yt8m_train_frame_$(date +%Y%m%d_%H%M%S)
gcloud --verbosity=debug ai-platform jobs submit training \
$JOB_NAME_FRAME_TRAIN --package-path=youtube-8m \
--module-name=youtube-8m.train \
--staging-bucket=$OUTPUT_BUCKET \
--config=youtube-8m/cloudml-gpu.yaml \
-- --train_data_pattern=$TRAIN_BUCKET \
--frame_features --model=FrameLevelLogisticModel \
--feature_names="rgb,audio" --feature_sizes="1024,128" \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME_FRAME_TRAIN --start_new_model

Обратите внимание, что пустой флаг -- отмечает конец конкретных флагов gcloud and ai-platform и начало ARGS / flags, которые вы хотите передать приложению. Перейдите по этой ссылке для получения дополнительной информации о флагах ИИ-платформы.

Приведенная выше команда выполнялась примерно за 13 часов и стоила около 11 долларов. Это не было улучшением по сравнению с моим сервером, работающим только на процессоре.

ДБоФ | Глубокая сумка рамы

Для модели DBoF запустите эту команду для обучения.

JOB_NAME_DBOF_TRAIN=yt8m_train_dbof_$(date +%Y%m%d_%H%M%S)
gcloud --verbosity=debug ai-platform jobs submit training \
$JOB_NAME_DBOF_TRAIN --package-path=youtube-8m \
--module-name=youtube-8m.train \
--staging-bucket=$OUTPUT_BUCKET \
--config=youtube-8m/cloudml-gpu.yaml \
-- --train_data_pattern=$TRAIN_BUCKET \
--frame_features --model=DbofModel --feature_names='rgb,audio' \
--feature_sizes='1024,128' \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME_DBOF_TRAIN --start_new_model

Приведенная выше команда выполнялась примерно за 33 часа, в то время как мне не удалось завершить обучение на сервере ЦП, поскольку ему не хватало вычислительной мощности. Эта работа стоила около 28 долларов.

Оценивать

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

Уровень кадра

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

JOB_NAME_FRAME_EVAL=yt8m_eval_$(date +%Y%m%d_%H%M%S)
gcloud --verbosity=debug ai-platform jobs \
submit training $JOB_NAME_FRAME_EVAL \
--package-path=youtube-8m --module-name=youtube-8m.eval \
--staging-bucket=$OUTPUT_BUCKET \
--config=youtube-8m/cloudml-gpu.yaml \
-- --eval_data_pattern=$VALIDATE_BUCKET \
--frame_features --model=FrameLevelLogisticModel \
--feature_names='rgb,audio' --feature_sizes='1024,128' \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME_FRAME_TRAIN --segment_labels \
--run_once=True

Приведенная выше команда выполнялась за 24 минуты 52 секунды, а работа стоила около 0,27 доллара США. На самом деле это заняло на пару минут больше, чем сервер, работающий только на ЦП. Это хороший пример того, как в зависимости от того, насколько велик набор данных и насколько сложна модель, вам может не потребоваться столько вычислительной мощности для выполнения работы. Кроме того, использование GPU или TPU становится более выгодным, когда у вас есть больше данных для обработки.

DBoF

Используйте эту команду для оценки модели DBoF.

JOB_NAME_DBOF_EVAL=yt8m_eval_dbof_$(date +%Y%m%d_%H%M%S)
gcloud --verbosity=debug ai-platform jobs \
submit training $JOB_NAME_DBOF_EVAL \
--package-path=youtube-8m --module-name=youtube-8m.eval \
--staging-bucket=$OUTPUT_BUCKET \
--config=youtube-8m/cloudml-gpu.yaml \
-- --eval_data_pattern=$VALIDATE_BUCKET \
--frame_features --model=DbofModel --feature_names='rgb,audio' \
--feature_sizes='1024,128' \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME_DBOF_TRAIN --segment_labels \
--run_once=True

Приведенная выше команда выполнялась за 1 час 20 минут и стоила около 1,03 доллара США. Нечего сравнивать с моим сервером, работающим только на процессоре, так как я не смог пройти обучение по DBoF.

Предсказать | Вывод

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

Уровень кадра

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

JOB_NAME_FRAME_TEST=yt8m_inference_frame_$(date +%Y%m%d_%H%M%S);
gcloud --verbosity=debug ai-platform jobs \
submit training $JOB_NAME_FRAME_TEST \
--package-path=youtube-8m --module-name=youtube-8m.inference \
--staging-bucket=$OUTPUT_BUCKET \
--config=youtube-8m/cloudml-gpu.yaml \
-- --input_data_pattern=$TEST_BUCKET \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME_FRAME_TRAIN \
--segment_labels \
--output_file=$OUTPUT_BUCKET/$JOB_NAME_FRAME_TEST/predictions.csv

Приведенная выше команда выполнялась за 35 минут и 5 секунд и стоила около 0,41 доллара США. Это было в два раза больше, чем в моем примере с сервером только на ЦП. Конечно, мы запустили разовый результат, и обычно вы запускаете модель в производство и запускаете данные в пакетном режиме или в потоковом режиме. Тем не менее вычислений, необходимых для прогнозов, обычно меньше, чем для обучения.

DBoF

Используйте эту команду для выполнения вывода по модели DBoF и получения прогнозов.

JOB_NAME_DBOF_TEST=yt8m_inference_dbof_$(date +%Y%m%d_%H%M%S);
gcloud --verbosity=debug ai-platform jobs \
submit training $JOB_NAME_DBOF_TEST \
--package-path=youtube-8m --module-name=youtube-8m.inference \
--staging-bucket=$OUTPUT_BUCKET \
--config=youtube-8m/cloudml-gpu.yaml \
-- --input_data_pattern=$TEST_BUCKET \
--train_dir=$OUTPUT_BUCKET/$JOB_NAME_DBOF_TRAIN --segment_labels \
--output_file=$OUTPUT_BUCKET/$JOB_NAME_DBOF_TEST/predictions.csv

Приведенная выше команда выполнялась примерно за 43 минуты 17 секунд и стоила около 0,51 доллара США.

Kaggle-анализ

Получив файл predictions.csv, вы можете отправить его на Kaggle site в разделе Поздняя отправка.

Это даст вам счет и покажет вашу позицию в таблице лидеров.

Примеры на уровне кадра и DBoF, которые я отправил в Kaggle, получили примерно одинаковые оценки. Он выводит приведенный выше снимок экрана. Это не удивительный результат, учитывая, что это общедоступный код, и я ожидаю, что многие его пробовали.

Статус и журналы заданий платформы ИИ

Есть несколько разных способов наблюдать за тем, как выполняются задания на платформе ИИ, когда вы их запускаете, а также получать информацию после их выполнения. Вы можете проверить прогресс в своем терминале или в Google Cloud Console.

Местный терминал

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

Ниже описано текущее состояние вашего задания в вашем терминале:

gcloud ai-platform jobs describe $JOB_NAME

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

gcloud ai-platform jobs stream-logs $JOB_NAME

Облачная консоль Google

В Google Cloud Console я смог наблюдать за выполнением заданий по обучению, оценке и выводу в разделе Задания в разделе Платформа AI.

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

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

Кроме того, вы можете получить подробную информацию журнала в разделах Журналирование операций и Просмотр журналов.

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

Отменить задание

Если есть задание, которое вам нужно отменить, вы можете сделать это с консоли или с вашего терминала.

gcloud ai-platform jobs cancel $JOB_NAME

Как только задание будет завершено, оно сохранит выходные файлы по указанному вами пути и завершит работу серверов.

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

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