Статьи

Блог Дмитра Сошникова

  1. Data Science Virtual Machine
  2. Виртуалки з GPU
  3. Процес створення VM
  4. Процес настройки VM
  5. Простий запуск і зупинка VM
  6. Зберігання даних
  7. Best Practice
  8. висновок
  9. Posted in Майкрософт and технології by Митя Сошників on травня 31st 2017 at 00:08.

Для задач машинного навчання як правило потрібні чималі ресурси: як обчислювальні, так і для зберігання даних. Тому все більша кількість фахівців з аналізу даних (датасайнтістов) звертають свій погляд у бік хмарних ресурсів.

Для всіх, хто хоче використовувати хмара для машинного навчання або глибокого навчання нейромереж, у нас є хороша новина - хмара Microsoft Azure прекрасно вам підійде! І ось чому:

  • У Azure є готовий образ Data Science Virtual Machine, як під управлінням Windows, так і під Linux, на яких вже встановлено все необхідне вам програмне забезпечення!
  • У нашому хмарі вам доступні комп'ютери з графічними процесорами NVidia (т.зв. N-Series VMs), що сильно прискорює процес навчання нейромереж.

У цьому пості я розгляну інструкцію по створенню та налагодженню віртуальної машини для глибокого навчання в хмарі. При цьому я буду припускати, що у вас вже є хмарна підписка Microsoft Azure, прив'язана в вашому Microsoft Account - якщо це не так, то можна обзавестися пробної підпискою .

Data Science Virtual Machine

Для задач обробки даних добре підходить спеціалізована віртуальна машина 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, але зате і вибір фреймворків там трохи ширше.

Виртуалки з GPU

У Azure є 2 типу віртуалок з GPU (т.зв. N-Series VMs):

  • NC (Compute) - призначені для обчислень і глибокого навчання. Оскільки такі виртуалки користуються значною популярністю, їх може іноді не вистачати в тих чи інших регіонах.
  • NV (Visualisation) - призначені для запуску додатків графічної візуалізації. Проте, на цих віртуалкою теоретично можна вважати нейромережі, хоча робити це не рекомендується. І стоять вони трохи дорожче.

Віртуальні машини з GPU доступні лише в деяких регіонах, тому якщо вам не пропонують NC або NV в якості опції при виборі типу виртуалки - спробуйте вибрати інший регіон. Починати варто з США (South-Central US, East US) або Європи (North Europe). Ось на цій сторінці можна подивитися доступність в різних регіонах, вибираючи їх з drop-down вгорі сторінки.

Процес створення VM

Нижче описується процес створення та налаштування Data Science VM на GPU.

1. Заходимо на Azure Portal і вибираємо вгорі пункт "створити":

Заходимо на   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 хвилин) створюється.

Процес настройки VM

На цьому етапі ви вже можете зайти в свою виртуалку, натиснувши кнопку "Connect" на сторінці налаштувань (виділено червоним):

Однак для комфортної роботи з віртуальною машиною потрібно зробити ще кілька налаштувань:

1. Присвоїти машині зручне DNS-ім'я, щоб звертатися до неї по імені. Для цього треба натиснути на IP-адресу на сторінці вище (виділено синім), на сторінці ввести DNS-ім'я і натиснути "Зберегти":

Для цього треба натиснути на IP-адресу на сторінці вище (виділено синім), на сторінці ввести DNS-ім'я і натиснути Зберегти:

Також запам'ятайте закінчення адреси, що залежить від регіону. Для даної машини повний DNS-адреса буде smart8.southcentralus.cloudapp.azure.com. Тепер ви зможете просто підключатися до машини за допомогою віддаленого робочого столу, використовуючи DNS-адресу та ввівши зазначені раніше дані про користувача і пароль:

Тепер ви зможете просто підключатися до машини за допомогою віддаленого робочого столу, використовуючи DNS-адресу та ввівши зазначені раніше дані про користувача і пароль:

2. Дуже зручно проводити навчання нейромереж НЕ через віддалений термінал, а через браузер, використовуючи Jupyter Notebook. Для цього рекомендується налаштувати автоматичний запуск Jupyter на виртуалке, а також пароль для доступу. Для цього увійдіть на машину через віддалений робочий стіл і запустіть ярлик, показаний нижче:

Для цього увійдіть на машину через віддалений робочий стіл і запустіть ярлик, показаний нижче:

Після цього в який з'явився текстовому вікні необхідно двічі ввести пароль і натиснути ENTER.

Після цього в який з'явився текстовому вікні необхідно двічі ввести пароль і натиснути ENTER

Після цього необхідно трохи почекати, і можна спробувати увійти в Jupyter з локального браузера за адресою https: // localhost: 9999 . При цьому ігноруйте повідомлення про те, що https-сертифікат невірний - сміливо переходите на сторінку, вводите встановлений раніше пароль і починайте працювати!

При цьому ігноруйте повідомлення про те, що https-сертифікат невірний - сміливо переходите на сторінку, вводите встановлений раніше пароль і починайте працювати

3. Для того, щоб Jupyter Notebook був доступний ззовні по порту 9999, необхідно додати запис в Network Security Group для нашої машини (якщо це не було зроблено за замовчуванням). В панелі управління Azure переходимо до групи ресурсів нашої виртуалки і вибираємо щось, що закінчується на -nsg:

В панелі управління Azure переходимо до групи ресурсів нашої виртуалки і вибираємо щось, що закінчується на -nsg:

У вікні, ми повинні побачити приблизно такі правила:

У вікні, ми повинні побачити приблизно такі правила:

Якщо правила Jupyter з портом 9999 немає, то його необхідно додати вручну, вказавши протокол TCP і порт 9999.

Після цього ви повинні бути в змозі зайти на Jupyter Notebook вашої машини, просто вказавши в браузері адресу https://smart8.southcentralus.cloudapp.azure.com:9999 і ввівши пароль, встановлений на попередньому кроці.

Простий запуск і зупинка VM

Оскільки машини з GPU дорогі, то рекомендується зупиняти виртуалки, коли ви їх не використовуєте. Так ви зможете знизити витрати з $ 1000 в місяць, до $ 70-150 (такий на даний момент мій типовий рахунок за хмару, якщо я не роблю чогось екстраординарного). Щоб кожен раз не заходити на Azure Portal, дуже зручно налаштувати спеціального Azure Bot в скайпі, який дозволить вам запускати і зупиняти машини простими командами.

Процес настройки бота такий:

1. Заходьте на http://botframework.com в розділ Bot Directory.

2. Як правило, Azure Bot буде доступний на першій сторінці. Якщо немає - знайдіть його!

3. Натискаєте на бота і встановлюєте його собі в Skype.

4. При першому діалозі з ботом треба буде аутентифицироваться - перейти за посиланням, залогінитися в Azure і скопіювати код з сайту в чат з ботом. Після цього бот вас запам'ятає, і робити це буде не потрібно.

5. Для зупинки і запуску віртуальних машин використовуйте команди start vm <ім'я>, stop vm <ім'я>

Для зупинки і запуску віртуальних машин використовуйте команди start vm <ім'я>, stop vm <ім'я>

Зверніть увагу, що тільки таке виключення машини (DEALLOCATION) веде до того, що з вас перестають списувати гроші за її використання. Якщо ви просто в віддаленому терміналі скажете Shutdown - машина буде зупинена, але не деаллоцірована, і гроші продовжать списуватися. При деаллокаціі машини звільняються зайві ресурси, включаючи IP-адреси і тимчасові диски.

Зберігання даних

На закінчення хотілося б сказати кілька слів про зберігання даних. Разом з створеної машиною автоматично було створено два диска:

  • Диск C: - системний. На ньому зберігаються всі програми і системні файли, і навіть є трохи місця. Вміст цього диска зберігається при деаллокаціі машини. Однак захаращувати його вашими даними - не дуже хороша ідея.
  • Диск D: - це швидкий диск для тимчасових даних, його вміст між запусками машини буде губитися.

Для довгострокового зберігання даних, а також для поділу їх між машинами, можна використовувати такі підходи:

  • Створити файлове сховище всередині Azure Storage і потім підключити його до своєї машини командою net use. Такий підхід має той плюс, що ви зможете також підключити той же сховище до своєї основної машині, і тим самим отримаєте простий спосіб обмінюватися даними. Однак файлове сховище щодо повільне, а якщо воно раптом розташоване в іншому регіоні - то зовсім повільне. Крім того, за пересилку даних між регіонами стягується якась плата.
  • Створити віртуальний диск (Managed Disk) і підключити його до віртуальної машини. Віртуальні диски швидше, ніж файлові сховища, але їх складніше підключити до зовнішніх комп'ютерів.

Best Practice

Останнім часом я роблю кілька проектів з аналізу даних і навчання нейромереж, тому хочу поділитися з вами корисним прийомом використання віртуальних машин з GPU. Як відомо, 80% часу зазвичай витрачається на підготовку даних, і лише 20% - на власне запуск алгоритмів навчання. Тому я зазвичай маю у своєму арсеналі дві віртуальні машини, підключені до загального файлового сховища:

  • Віртуальна машина для підготовки даних - це звичайна виртуалка, без GPU, досить потужна, щоб з нею було комфортно працювати з віддаленого доступу. Зазвичай я використовую щось типу DS2.
  • Віртуальна машина для навчання - це NC6.

У кожен момент часу я запускаю ту машину, з якої планую працювати. При цьому в обох випадках всі дані і скрипти розташовуються на файловому сховищі, тобто я маю до них доступ звідусіль.

Однак для прискорення навчання я іноді копіюю дані з зовнішнього сховища на локальний диск (C: або D :, в залежності від того, наскільки довгострокові повинні бути ці дані).

висновок

Data Science Virtual Machine - це дуже простий і швидкий спосіб почати використовувати інструменти аналізу даних і глибокого навчання. Я сподіваюся, що мій досвід допоможе вам використовувати ці віртуальні машини в своїй роботі або дослідженнях. Якщо у вас є свій досвід використання віртуальних машин з GPU для аналізу даних - діліться досвідом в коментарях!

Мітки: Azure , CNTK , Data Science , Deep Learning , GPU , Neural Networks

Posted in Майкрософт and технології by Митя Сошників on травня 31st 2017 at 00:08.

2 comments

Новости