Когда дело доходит до обучения большой модели глубокого обучения, нам необходимо преодолеть множество препятствий. Во-первых, нам нужно получить много-много данных. Обучение зависит от других шагов, таких как тонкая настройка нашей архитектуры и гиперпараметров, точность и создание своего рода регистрации и визуализации. Очевидно, что мы должны отслеживать прогресс и многое другое. Однако одним из наиболее частых конфликтов является нехватка аппаратных ресурсов. У большинства из нас нет NVIDIA Titan RTX или доступа к кластеру ПК, поэтому мы вынуждены часами ждать на каждой итерации обучения, чтобы оценить нашу модель.
Я также понимаю, что у нас есть соблазн купить высокопроизводительный графический процессор. И, честно говоря, я уже попробовал это. Тем не менее, есть гораздо более простой способ обучения наших моделей, и я уверен, что вы знаете об этом. Называется Облако. Поставщики облачных услуг, такие как облако Google, Amazon Web Services и Microsoft Azure, являются прекрасными примерами недорогой высококлассной инфраструктуры. Облако обычно предназначено для приложений машинного обучения.
В сегодняшней статье мы возьмем нашу ранее построенную модель Unet, которая выполняет сегментацию изображения, разверните его в облаке Google и запустите там полное обучение. Если вы помните из нашей последней статьи серии, мы разработали собственный цикл обучения в Tensorflow. Цель состоит в том, чтобы взять этот код почти без изменений и запустить его в экземпляре облака Google.
Как вы думаете, что такое экземпляр? Мы доберемся, не волнуйтесь.
Что касается структуры статьи, я думаю, что я должен делать это шаг за шагом и объяснять важные темы и детали, в то же время излагая все необходимые инструкции для достижения нашей конечной цели.
Начнем?
Облачные вычисления
Я уверен, что вы знаете, что такое облачные вычисления, но из соображений согласованности давайте дадим определение на высоком уровне.
Облачные вычисления — это по требованию доставка ИТ-ресурсов через интернет. Вместо того, чтобы покупать и обслуживать физические серверы и центры обработки данных, мы можем получить доступ к инфраструктуре, такой как компьютерная мощность и хранилище, от облачных провайдеров.
Сегодня около 90% всех компаний в мире используют ту или иную форму облачных сервисов. Надеюсь, этого достаточно, чтобы убедить вас в силе Облака. И самое удивительное, что у вас буквально есть доступ к огромному количеству различных систем и приложений, которые было бы невообразимо поддерживать самостоятельно.
Воооо, я прав?
Для нашего варианта использования нам понадобится только одна из всех служб с именем Вычислительный движок. Compute Engine позволяет нам использовать экземпляры виртуальных машин, размещенные на серверах Google и поддерживаемые ими.
Виртуальная машина (ВМ) — это эмуляция компьютерной системы. Виртуальные машины основаны на компьютерных архитектурах и обеспечивают функциональность физического компьютера. Их реализации могут включать специализированное оборудование, программное обеспечение или их комбинацию.
Таким образом, по сути, мы одалживаем небольшой ПК на серверах Google, устанавливаем любую операционную систему и программное обеспечение, которое мы можем захотеть (т. е. создаем виртуальную машину), и делаем удаленно все, что мы могли бы делать на нашем собственном локальном ноутбуке. Это так просто.
Хорошо, теперь, когда мы знаем основы, давайте приступим к практическому подходу. Если вы еще не создали учетную запись Google, не стесняйтесь сделать это. Все, что вам нужно сделать, это пойти здесьзарегистрируйте учетную запись (кредитная карта требуется по соображениям безопасности, но с нее не будет взиматься плата в течение как минимум года или если вы превысите бесплатные квоты) и наслаждайтесь всеми 300$ бесплатный кредит (по крайней мере, на момент написания этого поста).
Одна вещь, которую я забыл упомянуть, заключается в том, что в большинстве случаев облако следует модели ценообразования с оплатой по мере использования, что означает, что мы получаем плату в зависимости от того, сколько ресурсов мы используем.
Создание экземпляра ВМ
Если у вас есть облачная учетная запись Google, пришло время создать новый проект для размещения нашего приложения, щелкнув в верхнем левом углу «Новый проект» и назвав его как угодно.
Когда проект инициализирован, мы можем перейти к: Compute Engine > Экземпляры ВМ на боковой панели слева и создайте новую виртуальную машину.
Как вы можете видеть на изображении выше, вы можете настроить экземпляр так, как вам нравится. Вы можете выбрать свой процессор, свою оперативную память, вы можете добавить графический процессор и сделать его настолько высокопроизводительным, насколько вам нужно. Здесь я буду упрощать и выберу стандартный процессор с 3,75 ГБ памяти и Nvidia Tesla K80. И, конечно же, вы можете выбрать свою собственную ОС. Я буду использовать минимальный образ Ubuntu 20.04 с размером диска 10 ГБ.
Вы также можете выбрать некоторые другие вещи, такие как развертывание контейнера на экземпляре или разрешение трафика из Интернета, но не будем сейчас заниматься ими.
Подключение к экземпляру виртуальной машины
ОК, отлично, наш экземпляр запущен и работает. Пришло время начать использовать его. Мы можем подключиться к нему с помощью стандартного SSH, нажав кнопку SSH. Это откроет новое окно браузера и даст нам доступ к машине Google.
Как видите, у нас буквально есть доступ через терминал к удаленной машине на серверах Google, и, как вы можете себе представить, мы можем установить то, что хотим, как обычно делаем на своем ноутбуке.
Следующим шагом является перенести наши данные и код на удаленную машину с нашего ноутбука. Облако Google использует специализированную команду под названием «gcloud», которая обрабатывает многие вещи, такие как аутентификация (используя SHH под капотом). Подобная команда существует почти у всех облачных провайдеров, поэтому следующие шаги имеют примерно одинаковую логику.
SHH — это протокол, который использует шифрование для защиты соединения между клиентом и сервером и позволяет нам безопасно подключаться к удаленному компьютеру.
Вы можете очень легко загрузить и установить облачный SDK Google, следуя отличной документации. здесь. На самом деле, это довольно просто, и вам нужно выполнить всего 5 команд. После этого мы можем очень легко подключиться к экземпляру с нашего локального терминала, используя
gcloud compute ssh training-instance
И теперь мы находимся внутри удаленного экземпляра с нашего терминала. Как это круто?
Обратите внимание, что мы можем закрыть соединение и вернуться к локальному терминалу, набрав «выход».
Перенос файлов на экземпляр ВМ
Чтобы передать файлы из нашей локальной системы в удаленный экземпляр, мы можем использовать команду «gcloud scp». Я перенесу весь проект в инстанс, чтобы мы могли проводить обучение точно так же, как мы это делали локально. Учитывая тот факт, что это будет разовое обучение, а не регулярная работа, нет необходимости сворачивать наш код и отправлять только нужные файлы.
gcloud compute scp --recurse /home/aisummer/src/soft_eng_for_dl/ training-instance:app
Как видите, на левом терминале мы подключены к экземпляру gcloud и перечисляем все наши недавно переданные файлы с помощью команды «ls», а на правом терминале мы находимся внутри нашей локальной системы.
*Файлы, которые вы видите, — это весь проект, разработанный в рамках серии статей. Для получения более подробной информации ознакомьтесь с нашими предыдущими статьями или нашим Репозиторий Github.
Проведение обучения дистанционно
Теперь все, что нам нужно сделать, это просто запустить main.py в левом терминале, и обучение начнется немедленно. Да, я знаю, что мы забыли установить все необходимые зависимости, такие как Python, Tensorflow и т. д., но я надеюсь, что вы сможете сделать это без моей помощи. Только apt-get
python и «pip install» все библиотеки.
sudo apt install python3-pip
pip install -r requirements.txt
Кончик: Облако Google предоставляет множество готовых к использованию экземпляров для различных вариантов использования. Когда мы создаем экземпляр, мы можем выбрать готовый шаблон, который содержит все наши основные библиотеки и языки.
Как только обучение будет завершено, мы можем вернуть сохраненные веса модели и, возможно, журналы, и, я думаю, мы закончили. Обратите внимание, что, как и локально в предыдущей статье, мы снова можем отслеживать логи во время обучения и даже можем настроить Tensorboard. Как я уже говорил вам много раз, мы можем буквально делать все, что делали бы на своем собственном ноутбуке. Но с гораздо большим количеством ресурсов и готовых решений.
gcloud compute scp --recurse training-instance:app /home/aisummer/src/soft_eng_for_dl/
А как насчет обучающих данных?
Те, у кого врожденный талант наблюдать за деталями, могли заметить, что я намеренно не упомянул данные до этого момента. До сих пор я предполагал, что мы запекаем данные в нашем приложении и загружаем их в экземпляр виртуальной машины вместе с кодом. Поэтому, когда начинается обучение, оно считывает изображения питомцев с локального пути. Конечно, это не очень эффективно, и его следует избегать.
Лучшим вариантом может быть хранить данные в облаке также, но вне нашей компьютерной среды. У всех облачных провайдеров есть решение для хранения, которое позволяет нам делать именно это. AWS называет его S3, Azure называет его Azure Storage, а Google называет его Cloud Storage.
Хранилища объектов — это архитектуры хранения компьютерных данных, которые управляют данными как отдельными единицами, называемыми объектами, в отличие от других архитектур, которые управляют данными как иерархическими файлами или блоками. Каждый объект имеет данные, своего рода метаданные и глобальный уникальный идентификатор. Облачные хранилища обеспечивают безопасность, масштабируемость, гибкое управление и отказоустойчивость.
Объекты организованы в ведра и проект может содержать несколько сегментов. Например, в нашем случае мы можем создать корзину под названием «deep-learning-in-production-data» и сохранить в ней все наши любимые изображения. И это именно то, что мы собираемся сделать.
Мы можем создать ведро очень легко, перейдя в браузер хранилища и нажав «создать корзину», чтобы открыть форму создания корзины, показанную ниже.
Конечно, у нас может быть много сегментов для организации наших данных, как мы хотим. Каждый из них имеет свое имя, местоположение, класс хранения и, конечно же, все наши объекты.
Когда корзина создана, мы можем загрузить объект прямо из пользовательского интерфейса. Мы можем сделать все это, используя терминал или даже HTTP-запросы, но лично я не вижу смысла в этом.
Прохладный. Как видите, наши данные загружены, и пришло время использовать их для обучения. Это можно сделать очень легко, используя tf.data и конвейеры ввода, как мы более подробно объясняли в предыдущей статье о конвейерах ввода.
filenames = "gs://deep-learning-in-prodiction-training-data/oxford_iiit_pet/*"
filepath = tf.io.gfile.glob(filenames)
dataset = tf.data.TFRecordDataset(filepath)
Или мы можем использовать TFDS (наборы данных Tensorflow) и сделать что-то вроде этого:
tfds.load(name=" oxford_iiit_pet ", data_dir=" gs://deep-learning-in-prodiction-training-data/")
Вот и все. Мы включаем это небольшое изменение в код нашего входного конвейера, повторно развертываем наше приложение в экземпляре, и оно автоматически будет передавать данные из облачного хранилища в нашу модель во время обучения. Наконец, имейте в виду, что облако хранение смехотворно дешевое.
Заключение
Сегодня я попытался дать вам обзор того, как легко обучить модель глубокого обучения и хранить ваши данные в облаке. Иногда попытки запустить что-то локально и потратить много денег на покупку оборудования и оптимизацию вашего ПК просто не стоят того. Особенно, когда есть так много готовых к использованию решений. Если вы спросите меня, я ежедневно использую облачную инфраструктуру и предпочитаю ее для большинства своих проектов из-за ее простоты.
Правда, это справедливо не только для обучающих моделей машинного обучения, но и для служить им. Как мы увидим в следующих статьях, очень просто развернуть сервис и использовать его для обслуживания наших пользователей, поскольку он предоставляет такие вещи, как безопасность, масштабируемость и простота обслуживания. Дело не только в оборудовании, которое он предоставляет, а в абстракции, которую он дает нам, чтобы сосредоточиться на важных вещах. Мы сосредоточимся на нашей модели машинного обучения, а не на том, как построить и оптимизировать нашу инфраструктуру.
Я надеюсь, что к настоящему времени вы лучше познакомились с облачными сервисами, и я бы посоветовал потратить больше времени на изучение, особенно если вы хотите продолжить с нами эту серию статей. Потому что мы собираемся его использовать. Много!
Если вам понравилась эта статья, вы можете выразить свою поддержку, написав обмен это!
В качестве дополнительного материала настоятельно рекомендую TensorFlow: специализация передовых методов курс deeplearning.ai, размещенный на Coursera, который даст вам базовое понимание Tensorflow
Следите за новыми статьями об ИИ.
Рекомендации
* Раскрытие информации: Обратите внимание, что некоторые из приведенных выше ссылок могут быть партнерскими ссылками, и без дополнительной оплаты для вас мы будем получать комиссию, если вы решите совершить покупку после перехода по ссылке.