Создание виртуальной машины для анализа данных в облаке Microsoft Azure
[Оригинал записи находится в моём личном блоге]
Для задач машинного обучения как правило требуются достаточно большие ресурсы: как вычислительные, так и для хранения данных. Поэтому всё большее количество специалистов по анализу данных (датасайнтистов) обращают свой взгляд в сторону облачных ресурсов.
Для всех, кто хочет использовать облако для машинного обучения или глубокого обучения нейросетей, у нас есть хорошая новость – облако Microsoft Azure прекрасно вам подойдёт! И вот почему:
- В Azure есть готовый образ Data Science Virtual Machine, как под управлением Windows, так и под Linux, на которых уже установлено всё необходимое вам программное обеспечение!
- В нашем облаке вам доступны компьютеры с графическими процессорами NVidia (т.н. N-Series VMs), что сильно ускоряет процесс обучения нейросетей.
В этом посте я рассмотрю инструкцию по созданию и настройке виртуальной машины для глубокого обучения в облаке. При этом я буду предполагать, что у вас уже есть облачная подписка Microsoft Azure, привязанная в вашему Microsoft Account – если это не так, то можно обзавестись пробной подпиской.
Для задач обработки данных хорошо подходит специализированная виртуальная машина Data Science Virtual Machine. На ней изначально уже установлены:
- Visual Studio и Visual Studio Code, с поддержкой R и Python
- Anaconda – самая популярная cреда для поддержки различных окружений на Python и не только
- Все необходимые фреймворки для обучения нейросетей: Microsoft Cognitive Toolkit (CNTK), Tensorflow, MXNet и др. Причем если вы используете виртуалку с GPU – все утилиты и библиотеки для работы с GPU (драйвера NVidia, CUDA, cuDNN и др.) будут уже настроены.
- Jupyter Notebooks
- Microsoft R
- Все необходимые библиотеки и утилиты для доступа к Azure
- Много полезных утилит (github, AzCopy, …) и прочих вкусностей
Виртуальные машины доступны как для Windows, так и для Linux:
При этом есть тонкости:
- Data Science Virtual Machine for Windows 2016 – это самый лучший вариант! Может ставится как на GPU (причем как NC, так и NV – подробнее об этом ниже), так и на обычную VM.
- Deep Learning Toolkit for DSVM – это более старая версия виртуальной машины для глубокого обучения на базе Windows Server, которая ставится только на виртуалки типа NC (которых иногда может не хватать).
- Из Linux-вариантов поддержка GPU есть только в Ubuntu, но зато и выбор фреймворков там чуть шире.
В Azure есть 2 типа виртуалок с GPU (т.н. N-Series VMs):
- NC (Compute) – предназначены для вычислений и глубокого обучения. Поскольку такие виртуалки пользуются значительной популярностью, их может иногда не хватать в тех или иных регионах.
- NV (Visualisation) – предназначены для запуска приложений графической визуализации. Тем не менее, на этих виртуалках теоретически можно считать нейросети, хотя делать это не рекомендуется. И стоят они чуть дороже.
Виртуальные машины с GPU доступны лишь в некоторых регионах, поэтому если вам не предлагают NC или NV в качестве опции при выборе типа виртуалки – попробуйте выбрать другой регион. Начинать стоит с США (South-Central US, East US) или Европы (North Europe). Вот на этой странице можно посмотреть доступность в разных регионах, выбирая их из drop-down вверху страницы.
Ниже описывается процесс создания и настройки Data Science VM на GPU.
1. Заходим на Azure Portal и выбираем вверху пункт “создать”:
2. В строке поиска пишем Data Science и получаем на выбор несколько вариантов, приведенных на рисунке выше.
3. Выбираем нужны вариант и нажимаем “Создать”. После этого переходим вот к такому экрану конфигурации:
4. При установке машины с GPU в качестве диска обязательно выбрать HDD, поскольку N-Series VM не бывают с SSD, и если выбрать SSD-потом не будет доступна опция выбора N-Series.
5. Выбираем имя пользователя, пароль и т.д. Также выбираем имя новой ресурсной группы, куда будут помещены все облачные объекты, привязанные в этой виртуальной машине – хранилище для дисков, сама виртуалка, сетевые интерфейсы и т.д.
6. В качестве региона выбираем подходящий регион по принципу, описанному выше. Если в выбранном регионе не окажется доступных VM с GPU – потом можно будет вернуться и сменить его.
7. Следующим пунктом выбираем размер и тип виртуалки. NC6 – это самая простая виртуалка с графическим процессором, и как видим на текущий момент она стоит около 60000 руб. в месяц.
8. В разделе “дополнительные параметры” в принципе можно ничего не настраивать, если вы просто создаете одну вирталку. Если же у вас уже есть какая-то виртуальная подсеть, или вы настраивали ранее сетевой доступ для другой VM – здесь есть некоторый простор для оптимизации.
9. На последнем экране читаем ещё раз выбранную конфигурацию и нажимаем “Купить”.
10. После этого машина долго и мучительно (более 10 минут) создается.
На этом этапе вы уже можете зайти в свою виртуалку, нажав кнопку “Connect” на страничке настроек (выделено красным):
Однако для комфортной работы с виртуальной машиной нужно сделать ещё несколько настроек:
1. Присвоить машине удобное DNS-имя, чтобы обращаться к ней по имени. Для этого надо нажать на IP-адрес на страничке выше (выделено синим), на открывшейся странице ввести DNS-имя и нажать “Сохранить”:
Также запомните окончание адреса, который зависит от региона. Для данной машины полный DNS-адрес будет smart8.southcentralus.cloudapp.azure.com. Теперь вы сможете просто подключаться к машине с помощью удалённого рабочего стола, используя DNS-адрес и введя указанные ранее данные о пользователе и пароль:
2. Очень удобно проводить обучение нейросетей не через удалённый терминал, а через браузер, используя Jupyter Notebook. Для этого рекомендуется настроить автоматический запуск Jupyter на виртуалке, а также пароль для доступа. Для этого войдите на машину через удалённый рабочий стол и запустите ярлык, показанный ниже:
После этого в появившемся текстовом окне необходимо дважды ввести пароль и нажать ENTER.
После этого необходимо немного подождать, и можно попробовать войти в Jupyter из локального браузера по адресу https://localhost:9999. При этом игнорируйте сообщения о том, что https-сертификат неверный – смело переходите на страницу, вводите установленный ранее пароль и начинайте работать!
3. Для того, чтобы Jupyter Notebook был доступен извне по порту 9999, необходимо добавить запись в Network Security Group для нашей машины (если это не было сделано по умолчанию). В панели управления Azure переходим в группу ресурсов нашей виртуалки и выбираем нечто, заканчивающееся на –nsg:
В открывшемся окне мы должны увидеть примерно такие правила:
Если правила Jupyter с портом 9999 нет, то его необходимо добавить вручную, указав протокол TCP и порт 9999.
После этого вы должны быть в состоянии зайти на Jupyter Notebook вашей машины, просто указав в браузере адрес https://smart8.southcentralus.cloudapp.azure.com:9999 и введя пароль, установленный на предыдущем шаге.
Поскольку машины с GPU дорогие, то рекомендуется останавливать виртуалки, когда вы их не используете. Так вы сможете снизить расходы с $1000 в месяц, до $70-150 (таков на данный момент мой типовой счет за облако, если я не делаю чего-то экстраординарного). Чтобы каждый раз не заходить на Azure Portal, очень удобно настроить специального Azure Bot в скайпе, который позволит вам запускать и останавливать машины простыми командами.
Процесс настройки бота такой:
1. Заходите на https://botframework.com в раздел Bot Directory.
2. Как правило, Azure Bot будет доступен на первой странице. Если нет – найдите его!
3. Нажимаете на бота и устанавливаете его себе в Skype.
4. При первом диалоге с ботом надо будет аутентифицироваться – перейти по ссылке, залогиниться в Azure и скопировать код с сайта в чат с ботом. После этого бот вас запомнит, и делать это будет не нужно.
5. Для остановки и запуска виртуальных машин используйте команды start vm <имя>, stop vm <имя>
Обратите внимание, что только такое выключение машины (DEALLOCATION) ведет к тому, что с вас перестают списывать деньги за её использование. Если вы просто в удалённом терминале скажете Shutdown – машина будет остановлена, но не деаллоцирована, и деньги продолжат списываться. При деаллокации машины освобождаются лишние ресурсы, включая IP-адреса и временные диски.
В заключение хотелось бы сказать несколько слов о хранении данных. Вместе с созданной машиной автоматически было создано два диска:
- Диск C: – системный. На нем хранятся все программы и системные файлы, и даже есть немного места. Содержимое этого диска сохраняется при деаллокации машины. Однако захламлять его вашими данными – не слишком хорошая идея.
- Диск D: – это быстрый диск для временных данных, его содержимое между запусками машины будет теряться.
Для долгосрочного хранения данных, а также для разделения их между машинами, можно использовать следующие подходы:
- Создать файловое хранилище внутри Azure Storage и затем подключить его к своей машине командой net use. Такой подход имеет тот плюс, что вы сможете также подключить то же хранилище к своей основной машине, и тем самым получите простой способ обмениваться данными. Однако файловое хранилище относительно медленное, а если оно вдруг расположено в другом регионе – то совсем медленное. Кроме того, за пересылку данных между регионами взимается какая-то плата.
- Создать виртуальный диск (Managed Disk) и подключить его к виртуальной машине. Виртуальные диски быстрее, чем файловые хранилища, но их сложнее подключить к внешним компьютерам.
В последнее время я делаю несколько проектов по анализу данных и обучению нейросетей, поэтому хочу поделиться с вами полезным приёмом использования виртуальных машин с GPU. Как известно, 80% времени обычно тратится на подготовку данных, и лишь 20% – на собственно запуск алгоритмов обучения. Поэтому я обычно имею в своём арсенале две виртуальные машины, подключенные к общему файловому хранилищу:
- Виртуальная машина для подготовки данных – это обычная виртуалка, без GPU, достаточно мощная, чтобы с ней было комфортно работать по удалённому доступу. Обычно я использую что-то типа DS2.
- Виртуальная машина для обучения – это NC6.
В каждый момент времени я запускаю ту машину, с которой планирую работать. При этом в обоих случаях все данные и скрипты располагаются на файловом хранилище, т.е. я имею к ним доступ отовсюду.
Однако для ускорения обучения я иногда копирую данные с внешнего хранилища на локальный диск (C: или D:, в зависимости от того, насколько долгосрочны должны быть эти данные).
Data Science Virtual Machine – это очень простой и быстрый способ начать использовать инструменты анализа данных и глубокого обучения. Я надеюсь, что мой опыт поможет вам использовать эти виртуальные машины в своей работе или исследованиях. Если у вас есть свой опыт использования виртуальных машин с GPU для анализа данных – делитесь опытом в комментариях!