Рубрики
Uncategorized

Автоматизированный рабочий процесс DEV для использования VM Data Science на Azure

Это перекрестная спуск от среднего TL; DR; Я собрал кучу сценариев на GitHub … Tagged DataScience, Azure, DevOps, Terraform.

Это перекрестное Середина

TL; DR; Я собрал кучу сценариев на GitHub, которые позволяют вам развернуть виртуальную машину из вашей командной строки, а также легко синхронизировать код из вашего локального каталога в виртуальную машину, чтобы иметь возможность использовать Local IDE и GIT, но выполнять на мощной удаленной машине. Идеально подходит для приложений по науке о данных, основанных на ноутбуке Юпитера.

В Мой предыдущий пост в блоге Я объяснил, как сделать Terraform развертывание Azure Data Science Virtual Machine Анкет

Обзор доступных команд

Мотивация 😓

Недавно я начал делать немного #DeepLaring 🔮 как часть моего искусственного интеллекта. Когда я работал над #Deeplearning NanodeGree в прошлом году, я начал Скрипт запуска/остановка GPU VM и rsyncing код вокруг. На этот раз мне хотелось попробовать облако лазурства. Главным образом потому, что моя дневная работа позволяет мне смотреть на многие их услуги, которые я хотел бы глубже погрузиться в предложения Azure Data Science. Будучи скорее разработчиком программного обеспечения по признаку и меньшей степени ученого для данных 👨‍🔬 Я часто чувствую, что мои стандарты для управления версиями, тестирования и простоты разработки находятся за пределами тех, которые экосистема ML предлагает по умолчанию (надеюсь, что это не оскорбляет данные Волшебники там). Моя машина разработки — небольшой MacBook без поддержки GPU. Поэтому для обучения нейронных сетей я хотел получить виртуальную машину с графическим процессором на борту. Azure предлагает виртуальные машины с Предварительное изображение Ubuntu Содержание всех сегодняшних инструментов науки о данных: Python, Conda, Jupyter, GPU Neuralnet Libs и т. Д.

Лучшие функции, видеть Этот список для полного стека доступен на DSVM ( источник )

Имея идеальную цель для запуска моего кода, мне было интересно, как на самом деле сохранить свою локальную машину на моей основной машине разработки — это означает, что я не хочу настроить GIT на виртуальной машине, чтобы версировать мой код. Вот где наш друг rsync входит в картинку 🖼. Это позволяет вам синхронизировать два каталога по SSH.

rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

Цель 🏁

Будучи склонным к чрезмерному инженерии 🙄 Мои боковые проекты Я начал свой путь автоматизации моего рабочего процесса виртуальной машины со следующими целями:

  1. Развернуть (и удалить) целую виртуальную машину шаблоном, который я могу версировать на GitHub
  2. Запустить/остановить виртуальную машину из моей командной строки Так что я не плачу за это, если мне это не нужно (виртуальные машины GPU 💰💰💰)
  3. Получите изменения кода, которые я делаю на виртуальной машине, используя ноутбук Jupyter, синхронизированный с моей локальной машиной, чтобы я мог выяснить

Развертывание инфраструктуры 📦

Я снова выбрал Terraform для развертывания виртуальной машины. Как упоминалось в моем предыдущем сообщении, вы также можете использовать Azure Resource Manager Шаблоны Для этого, но мой личный фаворит Терраформ 😍. Поэтому я продолжил из своих предыдущих выводов, чтобы построить следующий рецепт Terraform. Предлагаемая настройка состоит в том, чтобы поместить сценарий в инфра -папку в ваш рабочий каталог проектов.

Anoff/VM-Automation

Это создает несколько ресурсов:

  • Ресурсная группа: логическая группировка на Azure, которая содержит все ресурсы ниже
  • Виртуальная сеть: Ну … виртуальная частная сеть, которую ваши ресурсы используют для общения*
  • Сеть подсеть: подсеть, которую будет использовать ваш VPN*
  • сетевой интерфейс: сетевой интерфейс, чтобы ваша виртуальная машина могла связываться с виртуальной сетью
  • Виртуальная машина: Фактический ресурс вычисления (вызовет дисковые ресурсы для файловой системы)
  • Публичный IP -адрес: Статический IP, который сделает вашу виртуальную машину от Интернета
  • локальный исполнитель (NULL Resource): используется для написания некоторых результатов процесса создания виртуальной машины на свой диск

* Извините, если я не объяснил эти правильно, я не 💯 % уверен, что я правильно понимаю, что они делают 😊

Это созданные ресурсы

Переменные в рецепте Terraform

Использование Терраформные переменные Некоторые свойства этого рецепта могут быть настроены.

Самый простой способ изменить значения переменной — это config.auto.tfvars Файл, который содержит все имена переменных и их описание.

Вы можете найти его в GitHub Repo Прямо рядом с самим рецептом Terraform. Как вы можете видеть, все переменные имеют значение по умолчанию, даже если вы не указали свойства .tfvars. Те, которые вы, скорее всего, захотите изменить, admin_public_key и admin_private_key

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

config.auto.tfvars

Подписание условий лицензии для Data Science VM ⚖

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

Ошибка терраформ из -за отсутствующего лицензионного соглашения

Проблема заключается в том, что DSVM публикуется через Azure Market Place, и даже если он не несет дополнительных сборов в дополнение к ресурсам Azure VM, которые вам необходимо прочитать и согласиться с условиями лицензии. Вы можете сделать это, как описано в сообщении об ошибке через PowerShell. Полный процесс открытия PowerShell объясняется в этом Прочти меня . Короткая версия, если у вас уже есть PowerShell Open, — это запустить:

# Use this command to view the current license agreement

$ Get-AzureRmMarketplaceTerms -Publisher "microsoft-ads" -Product "linux-data-science-vm-ubuntu" -Name "linuxdsvmubuntu" # If you feel confident to agree to the agreement use the following command to enable the offering for your subscription

$ Get-AzureRmMarketplaceTerms -Publisher "microsoft-ads" -Product "linux-data-science-vm-ubuntu" -Name "linuxdsvmubuntu" | Set-AzureRmMarketplaceTerms -Accept

После успешного подписания условий лицензии вы должны увидеть следующий вывод в своей оболочке

Запустить Terraform 🏃‍ 🏃‍чего ️

После подписания лицензии вы можете инициализировать Terraform, используя Terraform Init а затем может запустить терраформ применить Чтобы поднять инфраструктурные ресурсы на Azure. Это может занять 5 ~ 10 минут, чтобы полностью предоставить виртуальную машину.

После его запуска вы можете заметить два новых файла. Оба содержат ссылку на созданную виртуальную машину. .VM-IP Содержит общедоступный IP -адрес, который был создан и будет использоваться для SSH в машине. .vm-id Является ли идентификатор ресурса Azure вашей виртуальной машины и является уникальным идентификатором, который мы будем использовать для запуска/остановки машины позже. Оба являются простыми текстовыми файлами и содержат только одну строку, не стесняйтесь их проверять. Машина теперь работает и работает, и вы можете работать с ней.

Принесите код в виртуальную машину 💁‍♀

Прежде чем выполнять какую -либо работу, вы можете загрузить код начальной загрузки на виртуальную машину — или вы просто хотите запустить там существующую ноутбук Jupyter. Опять же, репозиторий GitHub содержит небольшой сценарий, который поможет вам сделать это (работает из коробки на машинах Mac/Unix, в противном случае вам нужно сначала установить Make и RSYNC).

Anoff/VM-Automation

Поместите Makefile в рабочий каталог вашего кода и обязательно обновите определения пути к двум файлам, упомянутым в конце последней главы, содержащей детали недавно созданной виртуальной машины. Если у вас был сценарий Terraform в подпапке под названием Infra, нечего делать. В противном случае вы должны либо скопировать два файла в такой каталог, либо изменить определение пути в Makefile.

Используйте сделать синхронизацию В своем рабочем каталоге (где вы поместили Makefile) для синхронизации вашего локального контента каталогов на удаленную машину. Вы можете увидеть команду, которая выполняется, и как будет назван удаленный каталог. В моем случае это ~/work/aind-rnn, который является одним из моих нанодегри. Вы также можете увидеть, что команда автоматически игнорирует все файлы, которые определены в вашем .gitignore Это означает, что все, что вы не хотите вернуть, также не будет копировано вокруг. Это особенно полезно для артефактов, созданных в процессах обучения нейронной сети.

Вывод синхронизации

Запустите ноутбук Jupyter 📒

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

Сначала вам нужно SSH в машине, используя сделать SSH который также будет делать пересылку портов для порта Юпитера 8888 на локальную машину, чтобы вы могли открыть http://localhost: 8888 В вашем локальном браузере (мой MacBook) и подключитесь к WebServer, который слушает этот порт на виртуальной машине (Notepbook Jupyter). Теперь, когда у вас есть оболочка, работающая на DSVM, манипулируйте файловой системой, установите недостающие пакеты через Pip/Conda или просто запустите процесс.

Запуск ноутбука Юпитера на виртуальной машине

Процесс ноутбука Jupyter, запущенный выше, связан с жизненным циклом интерактивной оболочки, которую мы открыли с помощью SSH -соединения. Закрытие соединения SSH также убьет сервер Юпитера. Весь ваш код все еще должен быть там, так как Юпитер регулярно сохраняет диск, но ваше ядро питона исчезло, и все объекты памяти (состояние выполнения ноутбука) будут потеряны. Вам нужно будет снова выполнить ноутбук с начала после того, как вы снова в машину и запустить Юпитер.

Совершить свои изменения 💾

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

_🚨_make убедитесь, что вы сначала выходите из соединения SSH

Скопируйте удаленные изменения в локальную файловую систему

Удаленный файл SULE_MOMMY_I_CHANGED_A_FILE Сейчас был скопирован в мой местный рабочий каталог, и я могу использовать GIT Commit -AM «Все используют значимые сообщения о коммите, верно?» Чтобы совершить мои изменения или использовать мои локальные инструменты для выполнения модульных тестов, проверьте Codestyle, добавьте несколько комментариев …

Начните и остановитесь виртуальная машина 🎬 🛑

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

Makefile поставляется с тремя командами для управления состоянием самой виртуальной машины. Все они требуют уникального идентификатора ресурса Azure, расположенного в ID .vm, чтобы выбрать правильную виртуальную машину в вашей подписке Azure:

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

Сделать начало сообщает Azure распределять новые ресурсы и снова накапливаться виртуальной машиной

Сделать статус скажу вам, если виртуальная машина встала или нет

Запуск виртуальной машины/статус/остановка

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

Снизить риск банкротства 💸

Если вы боитесь законопроекта, который может прийти, если вы пропустите остановку виртуальной машины, вы должны познакомиться с Автоматическое отключение Особенности, которые Azure предлагает вам. Он позволяет указать время, в которое виртуальная машина автоматически выключается каждый день.

Виртуальная машина автоматическая сног

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

Резюме 📚

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

Anoff/VM-Automation

Я хотел бы услышать отзывы через Проблемы , Twitter 🐦 или комментарии. Одна мысль, которую я имею, состоит в том, чтобы объединить все команды в двоичный CLI, чтобы он работал по кросс -платформе и может быть просто установлен, копировав вокруг одного файла. Если вам интересно, дайте мне знать 😻

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

Доступные команды

/Андреас

Оригинал: «https://dev.to/anoff/automated-dev-workflow-for-using-data-science-vm-on-azure-2h55»