Пошаговое руководство по обучению модели на Vertex AI от Google Cloud |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2021-08-01 15:00 Предыстория и личный интерес Не так давно компания Google предоставила во всеобщее пользование свою облачную платформу для машинного обучения — Vertex AI. Моей радости просто нет предела, поскольку я давно мечтал стать свидетелем согласованного целостного сценария рабочих процессов МО на Google Cloud. Годами данная платформа разрабатывала сервисы и инструменты, связанные с МО. И вот наконец появилась возможность объединить их все в одну интегрированную платформу. Переполняемый большими ожиданиями я приступил к изучению документации. Надо сказать, кое-что в ней требует доработки. Она отличается внушительным объемом преимущественно отличного содержания, но при этом в ней нарушена логика структурирования материала. Документация напоминает толстый сборник статей, которые связаны между собой несколькими состряпанными в последнюю минуту одностраничниками по типу указателей. Так сразу и не разберешься, где начало. Кроме того, поскольку затруднительно определить, какие из предложенных ссылок действительно важны, то приходится отвлекаться и просматривать каждую из них. Учитывая мою любовь к базовым сервисам, мне бы хотелось не только научиться более эффективно с ними работать, но и поделиться о них знаниями. Именно этим обусловлено появление данного руководства по Vertex AI. Отметим, что предварительный опыт работы с сервисами МО Google Cloud не требуется. Начнем с азов и создадим нашу первую модель, обученную на Vertex AI. Предварительные требования Прежде всего, для достижения поставленной цели потребуются базовые знания платформы Google Cloud. Кроме того, нужно будет создать проект Google Cloud, а также настроить стандартные утилиты командной строки, такие как Примечание: Далее в коде и командах используются плейсхолдеры пути, такие как По мере изучения статьи вы проверите, насколько ваш уровень подготовленности соответствует описанным предварительным требованиям. Если вы чувствуете, что материал выходит за рамки имеющихся у вас знаний, то вам следует поглубже изучить указанные темы, прежде чем двигаться дальше. Постановка задачи В данной статье мы решим довольно простую задачу классификации изображений. Как правило, всеобщее предпочтение отдается датасету MNIST. Но поскольку он представлен в серой цветовой палитре, а душа просит ярких красок, то выберем CIFAR10. Этот набор данных содержит 60 000 цветных изображений 32x32 в 10 классах, по 6000 изображений на класс. Далее вы увидите примеры этих изображений. Подготовка среды разработки В качестве основной среды разработки для последующего взаимодействия выбираем JupyterLab. Из нее мы сможем писать интерактивный код Python и легко получать доступ к терминалу командной строки. JupyterLab можно установить и локально. Однако если вы обладаете опытом работы в области МО, то, вероятно, этот инструмент у вас уже есть. Советую использовать Notebook в Vertex AI (ее управляемую версию JupyterLab). Обусловлено это двумя причинами. Во-первых, в этот инструмент разработки встроены все стандартные пакеты МО. Во-вторых, его конфигурация предусматривает подсоединение к другим сервисам Google Cloud, что избавляет от досадной необходимости заморачиваться насчет настроек авторизации и подключения. И наконец, он позволяет расширять возможности локальной рабочей станции. Например, для увеличения CPU/RAM/GPU понадобится лишь блокнот Notebook с поддержкой соответствующего типа машины. В случае потребности в большем объеме диска достаточно создать диск Google Cloud и подсоединить его к виртуальной машине Notebook. С учетом того, что настроить этот инструмент довольно просто, буквально пара-тройка кликов, и к тому же данное руководство не предполагает работы с ним, то здесь я не буду загружать вас инструкциями. Но если интересно, можете самостоятельно ознакомиться с его документацией. Весь код Python и команды из консоли по умолчанию будут выполняться в JupyterLab, если не обозначен другой способ. Подготовка данных Подготовка данных — первоочередная задача в любом проекте МО. В нашем случае CIFAR10 уже входит в каталог датасетов Tensorflow. Но для имитации реальной разработки проекта МО мы обработаем датасет и загрузим его в хранилище Google Cloud Storage (GCS) для последующей работы. Многие функции Tensorflow имеют встроенную поддержку GCS.Выполним эту процедуру лишь раз, после чего результат будет повторно использоваться для дальнейшего обучения и валидации модели. В нескольких строках кода скачиваем датасет, предварительно его обрабатываем и создаем образцы Tensorflowдля обучающей, контрольной и тестовой выборок. import tensorflow as tf (train_images, train_labels), (test_images, test_labels) = tf.keras.dataset.cifar10.load_data() def preprocess(filename, images, labels): preprocess('train.tfrecord', train_images[:40000], train_labels[:40000]) Затем копируем файлы в корзину GCS для дальнейшего использования. Настоятельно рекомендую сосредоточить Vertex AI Notebook (если вы его используете), корзину GCS и последующие сервисы Vertex AI в одной области. Это не только позволит повысить производительность, но и поможет предотвратить ряд непредвиденных проблем взаимодействия между областями, которые могут возникнуть в процессе работы. gsutil -m cp *.tfrecord GCS_PATH_FOR_DATA Проверяем, что данные в GCS доступны и закодированы корректно. Далее получаем, декодируем и отображаем несколько изображений из фалов образцов Tensorflow. Ниже представлен код валидации данных: import matplotlib.pyplot as plt class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] dataset = tf.data.TFRecordDataset([GCS_PATH_FOR_DATA + 'train.tfrecord']) Обучение модели локально Перед началом работы на Vertex AI обучим модель локально и убедимся, что все сделано правильно. Сначала готовим входные датасеты. Перед вами код создания датасета Tensorflow: def extract(example): def get_dataset(filename): Затем строим модель. Ее архитектура содержит несколько сверточных слоев, за которыми следуют уплощенные полносвязные слои, и в итоге на выходе выдает вероятность 10 классов. Ниже представлен код построения модели: from tensorflow.keras import layers, models, losses def create_model(): model = create_model() Теперь приступаем к обучению модели. Код обучения модели: model.fit(train_dataset, epochs=5, validation_data=val_dataset) Точность модели составляет всего лишь 60% на тестовом датасете — так себе результат, требующей дальнейшей проработки. Но в настоящий момент нас больше интересует тот факт, что процесс локального обучения модели прошел от начала до конца. Обучение модели на Vertex AI Пришло время перемещаться в Cloud. По отношению к модели применим следующие операции:
Приведем окончательный код построения модели: # Распределенная стратегия для эффективного применения имеющегося оборудования. # Создание обратного вызова для сохранения проверки в конце каждой эпохи. model.fit(train_dataset, epochs=EPOCHS, validation_data=val_dataset, callbacks=[ckpt_callback]) # Экспорт модели в GCS. Теперь у нас все готово для обучения модели на Vertex AI. На высоком уровне этот процесс включает следующие этапы:
Реструктуризация кода Обучающая среда на Vertex AI похожа на среду JupyterLab, а запуск задания обучения происходит аналогично локальному запуску программы Python. Такая программа у нас уже есть — достаточно лишь перенести все фрагменты кода из раздела “Обучение модели локально” в файл Помимо этого, добавим в программу несколько эпох в качестве аргумента. Ниже представлен код аргумента модели: import argparse parser = argparse.ArgumentParser() args = parser.parse_args() # Обращаемся к аргументу как args.epochs. Попробуйте запустить обучение локально и проверьте, что все работает. При обучении на Vertex AI нам придется подождать, пока задание не будет распланировано, что занимает определенное время. Но мы ведь не хотим, чтобы оно провалилось из-за глупой ошибки. python task.py --epochs=1 Сборка и загрузка дистрибутива Python На этом этапе необходимо укомплектовать дистрибутив Python. Структурируем каталог следующим образом: |-- setup.py Файл from setuptools import find_packages setup( В случае необходимости установить другие стандартные зависимости пакета Python вы можете объявить их в файле Теперь упаковываем дистрибутив Python. Следующая команда генерирует файл python setup.py sdist --formats=gztar Копируем дистрибутив Python в GCS, чтобы Vertex AI могла получить к нему доступ. gsutil cp dist/trainer-0.1.tar.gz GCS_PATH_FOR_PYTHON_CODE Запуск задания обучения Итак, у нас все готово для запуска задания обучения на Vertex AI. Документация к этому разделу немного непонятна, так что рассмотрим порядок действий. Перед тем как продолжить, проясним следующее: мы запускаем настраиваемое задание обучения с помощью предварительно подготовленного контейнера. Задание настраиваемое, потому что мы создаем модель с нуля. Используемый контейнер — это среда, в которой выполняется код обучения. Вы могли бы обучать с помощью своего настраиваемого контейнера, содержащего заданные вами инструменты и зависимости. Но в рамках данной статьи мы не будем рассматривать этот усложненный сценарий, а сосредоточимся на простом рабочем процессе от “а” до “я”. Запускаем обучение посредством инструмента командной строки gcloud beta ai custom-jobs create --region=us-central1 --display-name=e2e-tutorial --config=config.yaml Основная часть команды находится в файле workerPoolSpecs: Мониторинг статуса задания Команда gcloud beta ai custom-jobs describe JOB_ID --region=us-central1 Если все проходит успешно, то через несколько минут в статусе задания вы увидите Проверка модели Итак, мы обучили модель на Vertex AI и сохранили ее в Google Cloud Storage. Перед подведением итогов уделим внимание анализу модели в JupyterLab: cloud_model = tf.keras.models.load_model(GCS_PATH_FOR_SAVED_MODEL) Как видим, точность повысилась с 60% (локальное обучение с 5 эпохами) до 66% (обучение с 15 эпохами на Vertex AI). Заключение На этом все. Не забудьте очистить ресурсы Google Cloud, если вы создавали блокнот Vertex AI. Мощные виртуальные машины могут оказаться весьма дорогостоящими. Источник: m.vk.com Комментарии: |
|