Как легко настроить мощную песочницу для глубокого обучения с помощью Google Cloud, Jupyter и Visual Studio Code и сократить расходы до нескольких долларов в месяц (первые 300 долларов — на Google).

Как и многие энтузиасты науки о данных, я погрузился в эту область, каждую свободную минуту изучая экосистему DS, а именно Python, Jupyter, NumPy, Pandas, Scikit-learn, Matplotlib и немного Seaborn. Вместе со всеми мощными инструментами Unix — vi, less, sort, cut, grep, cat, tail, head и т. д. — у вас есть невероятно продуктивная среда для поиска, очистки и анализа наборов данных, разработки функций, запуска регрессионных моделей и построения профессиональные визуальные эффекты. Однако, как только ваше любопытство (или работа) потянет вас к «глубокому обучению» мира «машинного обучения», вы быстро обнаружите, как и я, что даже у высокопроизводительного Macbook Pro не хватит мощности, чтобы работать даже самые простые модели сверточных нейронных сетей (сокращенно CNN). Я быстро понял это, пройдя курс fast.ai Джереми Ховарда и Рэйчел Томас. Если вы, как и я, финансируете свое обучение науке о данных из собственного кармана, у меня есть для вас недорогое, простое, но мощное решение.

Во-первых, я признаю, что мне нравится запускать все, что я могу, на своем ноутбуке. Однако для некоторых вещей мой ноутбук просто не справляется, например. для моего хобби сочинения музыки у меня в подвале есть усиленная коробка Intel i7, на которой работает сервер музыкальной библиотеки. Но для обучения моделей DL i7 и много оперативной памяти вам не помогут. Вам нужны графические процессоры. И графические процессоры дорогие. Но они не являются расходом на аренду. Теперь, когда на рынке доступен широкий выбор облачных сервисов, моим новым принципом стало не покупать, а арендовать.

Путем проб и ошибок я установил клиент-серверную песочницу на основе Jupyter, используя мой Macbook Pro и Visual Studio Code в качестве клиента, и сервер Jupyter, работающий на высокопроизводительном экземпляре Linux в Google Cloud. Результаты? Обучение моей модели глубокого обучения теперь происходит за секунды. На моем Macbook Pro? Ну, после 30 минут работы и пылающего вентилятора я убил процесс. Вы поняли картину?

Примечание. В этом подходе используется полноценный сервер Linux в облаке Google. Есть и другие пути, которые стоят меньше, например. Google Colab и ядра Kaggle. Однако при таком подходе вы получаете гибкость конфигурации, кредит в размере 300 долларов США (при умеренном использовании его хватит на некоторое время) и некоторый опыт работы с облачной платформой Google и использованием их интерфейса командной строки.

Сервер настройки

Создайте учетную запись GCP и получите 300 долларов США

Первый шаг — создать учетную запись на Google Cloud Platform (GCP). Я предполагаю, что вы поняли это и вошли в консоль GCP. Затем проверьте, получили ли вы кредит в размере 300 долларов США. В верхнем левом углу нажмите на меню и выберите Оплата Обзор. В правом нижнем углу Обзора вы должны увидеть баланс поощрительных кредитов. И это должно быть 300 долларов.

Создайте свой виртуальный сервер

В GCP теперь есть служба для подготовки сервера виртуальных машин, настроенного специально для работы с ноутбуками Jupyter. Нажмите на меню GCP (верхний левый угол) и прокрутите вниз до раздела ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ. Затем выберите Платформа AI → Блокноты.

На экране экземпляров Notebook вверху выберите НОВЫЙ ЭКЗЕМПЛЯР. В этом меню есть много опций, включая некоторые бета-версии и экспериментальные варианты. Я использую вариант PyTorch 1.4 с одним графическим процессором NVIDIA Tesla T4.

На следующем экране представлены параметры. Для этого упражнения я использую значения по умолчанию. Кнопка Настроить позволяет добавить больше места на загрузочный диск, добавить ОЗУ графического процессора и т. д. Стоимость по умолчанию составляет 0,382 доллара США в час. Инстансы Google E2 оплачиваются посекундно после первой минуты использования. Эта конфигурация по умолчанию будет стоить 38,2 цента в час. Это 785 часов бесплатного использования.

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

Теперь у вас есть полноценный Jupyter Notebook с мощным графическим процессором для поддержки построения моделей глубокого обучения. Нажмите ОТКРЫТЬ JUPYTERLAB рядом с именем вашего экземпляра. В вашем браузере откроется новая вкладка и блокнот Jupyter. Интерфейс очень простой. Вы можете просмотреть файловую систему, создать репозиторий Git или запустить сеанс терминала.

На этом этапе у вас есть полнофункциональная, мощная песочница DL. Однако это не рентабельный способ работы. Ваш новый экземпляр ВМ съедает эти 300 долларов каждую секунду, пока он работает. Я предпочитаю выполнять весь сбор данных, разработку функций и первоначальную регрессионную работу локально на своем macbook. Затем, когда мой набор данных очищен и подготовлен, и я нахожусь на этапе, чтобы попытаться подогнать модель DL, я запускаю свой экземпляр виртуальной машины, подключаюсь, запускаю свою модель, получаю результаты, а затем выключаю экземпляр. Чтобы эффективно выполнить этот рабочий процесс, я пройду еще несколько шагов.

Остановите и запустите свой экземпляр виртуальной машины (СДЕЛАЙТЕ ЭТОТ ШАГ ПЕРЕД ПРОДОЛЖЕНИЕМ)

Вернитесь в консоль Notebooks и выключите свой экземпляр.

Совет. Перейдите в раздел "Оплата" и в разделе Бюджеты и оповещения создайте бюджет, который будет отправляться вам по электронной почте, когда вы достигнете 1 доллара использования.

Настройка экземпляра ВМ для удаленного доступа по HTTP/HTTPS

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

Шаг 1. Откройте HTTP-доступ к вашему экземпляру виртуальной машины. В главном меню консоли в разделе COMPUTE выберите Compute Engine → Экземпляры ВМ.

Затем нажмите на свой экземпляр из списка. Отобразятся детали вашего экземпляра. Здесь нам нужно сделать два изменения. Нажмите ИЗМЕНИТЬ вверху, прокрутите вниз и установите два флажка HTTP в разделе «Брандмауэры», затем прокрутите вниз и нажмите Сохранить.

Шаг 2. Следуйте инструкциям в меню ниже, а затем нажмите СОЗДАТЬ ПРАВИЛО БРАНДМАУЭРА в верхней части консоли брандмауэра.

Введите отмеченные поля в следующих двух экранах.

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

Шаг 3. Остановите свой экземпляр ВМ. Вернитесь в консоль Notebooks, установите флажок рядом с вашим экземпляром и нажмите СТОП.

Управление экземпляром ВМ с помощью Google Cloud SDK

Шаг 1. Первый шаг – установка SDK на локальный компьютер. Вот инструкции Google по загрузке и установке SDK для MacOS, Windows и Linux. Убедитесь, что вы выполнили все шаги, включая размещение SDK в PATH.

Шаг 2. Инициализируйте SDK, выполнив следующую команду из терминала.

> gcloud init
...
> You must log in to continue. Would you like to log in (Y/n)?

Вам будет предложено войти в систему. Когда вы нажмете Y и Return, вы будете перенаправлены на веб-сайт Google. чтобы войти в свою учетную запись. После успешного входа в систему вы должны вернуться в сеанс терминала, где вам будет предложено выбрать вычислительный регион.

> Do you want to configure a default Compute Region and Zone? (Y/n)?

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

> gcloud config list

Вы должны увидеть что-то вроде следующего в окне терминала.

Шаг 3. Перед тем, как покинуть наш экземпляр виртуальной машины, мы выключили его. Давайте теперь запустим его обратно с помощью SDK. Вот команда. Замените имя_инстанса на имя вашего экземпляра.

> gcloud compute instances start inst_name

Теперь давайте потренируемся останавливать экземпляр. Вот команда.

> gcloud compute instances stop inst_name

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

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

Шаг 4.Пришло время подключиться к экземпляру и завершить настройку на стороне сервера. Введите следующую команду и замените inst_name своим экземпляром.

> gcloud compute ssh inst_name

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

Хорошо, мы почти у цели. Всего несколько изменений конфигурации Jupyter, и тогда мы сможем подключиться к Visual Studio Code и запустить модель. Ага! 😎

Настройка сервера ноутбуков Jupyter

Шаг 1. Создайте папку для блокнотов. Здесь Jupyter будет хранить файлы записной книжки. Я также рекомендую создать две подпапки, назначение которых станет ясно, когда мы запустим пример модели ниже.

> mkdir jnotebooks
> mkdir jnotebooks/data
> mkdir jnotebooks/pics

Шаг 2. Создайте конфигурацию Jupyter. Это создаст папку .jupyter вне вашего корневого каталога.

> jupyter notebook --generate-config

Теперь небольшая сложная часть. Нам нужно настроить несколько параметров Jupyter в файле .jupyter/jupyter_notebook_config.py. Я рекомендую использовать vim. Перед редактированием файла запишите корневой путь, выполнив pwd. Вот параметры. Все эти параметры уже есть в файле. Однако они закомментированы. Их нужно раскомментировать и изменить.

c.NotebookApp.ip = '*'
c.NotebookApp.port = 8888
c.NotebookApp.notebook_dir = '/home/username/jnotebooks'
c.NotebookApp.open_browser = False

Помните, мы создали папку jnotebooks. Введите полный путь для параметра notebook_dir.

Вот краткая шпаргалка vim с командами, которые вам понадобятся.

Шаг 3. Установите пароль Jupyter. Это необязательно, но настоятельно рекомендуется, так как мы только что открыли HTTP-доступ. В командной строке введите следующее, а затем введите свой пароль. Вам придется вводить это каждый раз, когда вы получаете доступ к этому серверу из VSC, поэтому я рекомендую не переусердствовать.

> jupyter notebook password

Шаг 4. Последний шаг здесь. Давайте запустим сервер Jupyter Notebook. Вот команда.

> jupyter-notebook

И та-да! Вы должны увидеть что-то вроде следующего.

Если ваш экран не очень похож на этот, завершите процесс, нажав Control-c, а затем вернитесь и проверьте четыре параметра в файле конфигурации Jupyter.

Клиент установки

Я большой поклонник Visual Studio Code. Некоторое время назад Microsoft открыла его исходный код, и с тех пор он быстро превратился в очень удобный и многофункциональный редактор. И что мне действительно нравится, так это то, что теперь он полностью поддерживает Jupyter Notebooks. Лично я не люблю запускать блокноты в браузере, когда нахожусь в рабочем режиме. Я предпочитаю настоящий редактор кода, который использую для Python и Java (и, надеюсь, скоро будет поддерживаться Swift). В VSC я могу создавать свои модели в блокнотах, а затем легко экспортировать их в файл Python и переходить к производству моего проекта в одном и том же редакторе. Хватит болтать. Давайте подключимся к нашему серверу и обучим модель.

Шаг 1. Установите и настройте Visual Studio Code. Если вы используете дистрибутив Anaconda, то все готово. Anaconda и VSC хорошо работают вместе. В противном случае нажмите здесь, чтобы получить последнюю версию для вашей операционной системы. VSC изначально поддерживает Jupyter, поэтому ничего дополнительно устанавливать не нужно.

Шаг 2. Откройте VSC и создайте новый блокнот Jupyter. Проще всего это сделать с помощью браузера команд. В MacOS это команда shift+command+p. Затем введите Python: Create New Blank Jupyter Notebook

Шаг 3. Подключиться к вашему серверу. Вы записали свой внешний IP-адрес при запуске сервера? Вам это понадобится здесь. Снова войдите в браузер команд с помощью shift+command+p. Затем введите команду Python: Specify local or remote Jupyter server for connections

Вы увидите это дальше. Выберите «Существующий».

Здесь вам нужен внешний IP-адрес вашего экземпляра виртуальной машины.

После ввода вашего http-адреса выше и нажатия кнопки «Ввод», возможно, VSC потребует перезагрузки. Если это произойдет, закройте VSC, запустите его снова, а затем выполните Шаг 3, чтобы вернуться к этому моменту. Введите тестовый код Python и выполните ячейку. VSC отправит код на сервер и отобразит возвращенный результат. Затем вы увидите адрес своего сервера Jupyter в правом верхнем углу, как показано ниже.

УСПЕХ! Теперь пришло время повеселиться!

ВРЕМЯ РАЗВЛЕЧЕНИЙ — обучите модель глубокого обучения

Я считаю, что каждый хакер, кодер и профессионал в области обработки данных знаком с набором данных Titanic на Kaggle. Это похоже на Hello World науки о данных. Я тоже играл с этим набором данных. Я применил только базовые рассуждения вроде предположим, что все люди умрут. Это даст вам посредственный результат всего за несколько строк кода. Ради интереса я проделал большую разработку функций, а затем применил все модели Scikit-learn и Xgboost. Затем, чтобы по-настоящему развлечься, я решил применить модель DL. Моя модель доступна на Github. Я рекомендую следить за рабочим процессом.

Шаг 1. Получить модель с Github здесь.

Шаг 2. Переключите VSC на локальный экземпляр Python. shift+command+p, затем Python: Specify local or remote Jupyter server for connections, затем выберите в меню По умолчанию. Это приведет к перезагрузке VSC (надеемся, что это требование перезагрузки исчезнет в будущем).

Шаг 3. Откройте файл titanic_feature_creation.ipynb в VSC и выполните каждую ячейку. Последняя ячейка запишет файлы titanic_train_wrangled.csv и titanic_test_wrangled.csv во вложенную папку с именем data. Эти два файла должны быть скопированы в ваш экземпляр виртуальной машины.

Шаг 4. Скопируйте файлы данных в экземпляр ВМ. В титанической папке, которую вы получили из Github, выполните следующую команду. Замените имя своего экземпляра на имя_инстанса.

> gcloud compute scp ./data/*.csv inst_name:~/jnotebooks/data/

Шаг 5. Подключите VSC к вашему серверу. Shift+command+p, затем Python: Specify local or remote Jupyter server for connections и выберите свой сервер в меню. Это приведет к перезагрузке VSC.

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

Шаг 7. Выполните все ячейки, чтобы создать файл submission.csv.

Что следует отметить

Отказ от ответственности. Ячейка с заголовком Преобразовать объекты в квадратный PNG — это простой способ преобразовать каждую строку (или запись) обоих файлов данных в изображение для этого упражнения. Есть много лучших способов преобразования данных для моделей глубокого обучения. Я хотел, чтобы эта демонстрация была максимально простой. Все созданные изображения хранятся в подпапке на сервере с именем images_titanic.

Посмотрим, как мы ранжируем!

Шаг 1. Теперь давайте извлечем файл submissions.csv, который был создан в последней ячейке, показанной ниже.

Вот команда. Еще раз подставьте имя вашего экземпляра вместо inst_name.

> gcloud compute scp inst_name:~/jnotebooks/data/submission.csv .

Шаг 2. Посетите сайт Kaggle Titanic здесь и отправьте свою работу.

Как дела?

78% процентиль это нормально. Неплохо. Однако, если вы настоящий практик ДС, вы бы посмеялись над этим. Это крайний случай чрезмерной инженерии. Но это не было упражнением в разработке оптимальной модели глубокого обучения. Это было все о том, как настроить песочницу, чтобы вы потом сосредоточились на построении оптимальных моделей.

Последняя вещь.