Как легко настроить мощную песочницу для глубокого обучения с помощью 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% процентиль это нормально. Неплохо. Однако, если вы настоящий практик ДС, вы бы посмеялись над этим. Это крайний случай чрезмерной инженерии. Но это не было упражнением в разработке оптимальной модели глубокого обучения. Это было все о том, как настроить песочницу, чтобы вы потом сосредоточились на построении оптимальных моделей.
Последняя вещь.