Это перекрестное Середина
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
Цель 🏁
Будучи склонным к чрезмерному инженерии 🙄 Мои боковые проекты Я начал свой путь автоматизации моего рабочего процесса виртуальной машины со следующими целями:
- Развернуть (и удалить) целую виртуальную машину шаблоном, который я могу версировать на GitHub
- Запустить/остановить виртуальную машину из моей командной строки Так что я не плачу за это, если мне это не нужно (виртуальные машины GPU 💰💰💰)
- Получите изменения кода, которые я делаю на виртуальной машине, используя ноутбук 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»