Як подолати страх та почати використовувати Azure Machine Learning

Я знаю багатьох Data Scientist-ів - та й мабуть сам до них належу - які працюють на машинах з GPU, локальних або віртуальних, розташованих у хмарі, або через Jupyter Notebook, або через якесь середовище розробки Python. Працюючи протягом 2 років експертом-розробником з AI/ML, я робив саме так, при цьому готував дані на звичайному сервері або робочій станції, а запускав навчання на віртуалці з GPU в Azure.

Звичайно, ми всі чули про Лазурне машинне навчання - Спеціальну хмарну платформу для машинного навчання. Однак після першого ж погляду на вступні статті, Складається враження, що Azure ML створить вам більше проблем, ніж вирішить. Наприклад, у згаданому вище навчальному прикладі навчання на Azure ML запускається з Jupyter Notebook, при цьому сам навчальний скрипт пропонується створювати та редагувати як текстовий файл в одній із осередків — при цьому не використовуючи автодоповнення, підсвічування синтаксису та інші переваги нормального середовища розробки. Тому ми довгий час всерйоз не використовували Azure ML у своїй роботі.

Однак нещодавно я виявив спосіб, як почати ефективно використовувати Azure ML у своїй роботі! Цікаві подробиці?

Як подолати страх та почати використовувати Azure Machine Learning

Основний секрет - це розширення Visual Studio Code для Azure ML. Воно дозволяє вам розробляти навчальні скрипти прямо в VS Code, використовуючи всі переваги середовища - при цьому ви можете навіть запускати скрипт локально, а потім просто взяти та відправити його на навчання в кластері Azure ML кількома клацаннями миші. Зручно, чи не так?

При цьому ви отримуєте такі переваги від використання Azure ML:

  • Можна працювати більшу частину часу локально на своїй машині у зручному IDE, та використовувати GPU тільки для навчання моделі. При цьому пул навчальних ресурсів може автоматично підлаштовуватися під необхідне навантаження, і встановивши мінімальну кількість вузлів 0 ви зможете автоматично запускати віртуалку "на вимогу" за наявності навчальних завдань.
  • Ви можете зберігати всі результати навчання в одному місці, включаючи досягнуті метрики та отримані моделі - немає необхідності самому вигадувати якусь систему чи порядок зберігання всіх результатів.
  • Водночас над одним проектом можуть працювати кілька людей - вони можуть використовувати один і той же обчислювальний кластер, всі експерименти при цьому вишиковуватимуться в чергу, а також вони можуть бачити результати експериментів один одного. Одним із таких сценаріїв є використання Azure ML у викладанні Deep LearningКоли замість того, щоб давати кожному студенту віртуальну машину з GPU, ви можете створити один кластер, який буде використовуватися всіма централізовано. Крім того, загальна таблиця результатів з точністю моделі може бути хорошим елементом змагання.
  • За допомогою Azure ML можна легко проводити серії експериментів, наприклад, для оптимізації гіперпараметрів - Це можна робити кількома рядками коду, немає необхідності проводити серії експериментів вручну.

Сподіваюся, я переконав вас спробувати Azure ML! Ось як можна почати:

  • Переконайтеся, що у вас встановлена Код Visual Studio, а також розширення Azure Sign In и Azure ML
  • Клонуйте репозиторій https://github.com/CloudAdvocacy/AzureMLStarter — він містить демонстраційний код для тренування моделі розпізнавання рукописних цифр на датасеті MNIST.
  • Відкрийте клонований репозиторій у Visual Studio Code.
  • Читайте далі!

Azure ML Workspace та Azure ML Portal

Azure ML організований навколо концепції робочої області - Workspace. У робочій області можуть зберігатися дані, до неї відправляють експерименти для навчання, там же зберігаються результати навчання – отримані метрики та моделі. Подивитися, що знаходиться всередині робочої області, можна через портал Azure ML — і звідти можна здійснювати безліч операцій, починаючи від завантаження даних і закінчуючи моніторингом експериментів і розгортанням моделей.

Створити робочу область можна через веб-інтерфейс Портал Azure (Див. покрокові інструкції), або з використанням командного рядка Azure CLI (інструкції):

az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml

З робочою областю пов'язані також деякі обчислювальні ресурси (обчислення). Створивши скрипт для навчання моделі, ви можете надіслати експеримент на виконання в робочу область, та вказати compute target - при цьому скрипт буде упакований, запущений у потрібному обчислювальному середовищі, а потім усі результати експерименту будуть збережені в робочій області для подальшого аналізу та використання.

Навчальний скрипт для MNIST

Розглянемо класичне завдання розпізнавання рукописних цифр за допомогою набору даних MNIST. Аналогічно надалі ви зможете виконувати будь-які свої навчальні скрипти.

У нашій репозиторії є скрипт train_local.pyякий навчає найпростішу модель лінійної регресії з використанням бібліотеки SkLearn. Звичайно, я розумію, що це не найкращий спосіб вирішити завдання — ми використовуємо його для прикладу як найпростіший.

Скрипт спочатку скачує дані MNIST із OpenML, а потім використовує клас LogisticRegression для навчання моделі, а потім друкує отриману точність:

mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])

shuffle_index = np.random.permutation(len(mist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]

X_train, X_test, y_train, y_test = 
  train_test_split(X, y, test_size = 0.3, random_state = 42)

lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))

print('Overall accuracy:', acc)

Ви можете запустити скрипт на своєму комп'ютері і за кілька секунд отримаєте результат.

Запускаємо скрипт у Azure ML

Якщо ж ми запускатимемо скрипт на навчання через Azure ML, у нас буде дві основні переваги:

  • Запуск навчання на довільному обчислювальному ресурсі, який зазвичай більш продуктивний, ніж локальний комп'ютер. При цьому Azure ML сам потурбується про те, щоб запакувати наш скрипт з усіма файлами з поточної директорії в docker-контейнер, встановити необхідні залежності і відправити його на виконання.
  • Записує результати в єдиний реєстр всередині робочої області Azure ML. Щоб скористатися цією можливістю, нам потрібно додати кілька рядків коду до нашого скрипту для запису результуючої точності:

from azureml.core.run import Run
...
try:    
    run = Run.get_submitted_run()
    run.log('accuracy', acc)
except:
    pass

Відповідна версія скрипта називається train_universal.py (Вона трохи більш хитро влаштована, ніж написано вище, але не сильно). Цей скрипт можна запускати як локально, і на віддаленому обчислювальному ресурсі.

Щоб запустити його в Azure ML з VS Code, треба зробити наступне:

  1. Переконайтеся, що Azure Extension підключено до підписки. Виберіть значок Azure у меню зліва. Якщо ви не підключені, у нижньому правому куті з'явиться повідомлення (ось таке), натиснувши яку ви зможете увійти через браузер. Можна також натиснути Ctrl-Shift-P для виклику командного рядка VS Code, та набрати Azure Sign In.

  2. Після цього у розділі Azure (іконка зліва) знайдіть секцію НАВЧАННЯ МАШИНИ:

Як подолати страх та почати використовувати Azure Machine Learning
Тут ви повинні бачити різні групи об'єктів усередині робочої сфери: обчислювальні ресурси, експерименти і т.д.

  1. Перейдіть до списку файлів, натисніть правою кнопкою на скрипті train_universal.py і виберіть Azure ML: Run as experiment in Azure.

Як подолати страх та почати використовувати Azure Machine Learning

  1. Після цього піде серія діалогів в області командного рядка VS Code: підтвердіть підписку, що використовується, і робочу область Azure ML, а також виберіть Create new experiment:

Як подолати страх та почати використовувати Azure Machine Learning
Як подолати страх та почати використовувати Azure Machine Learning
Як подолати страх та почати використовувати Azure Machine Learning

  1. Виберіть створення нового обчислювального ресурсу Create New Compute:

    • обчислення визначає обчислювальний ресурс, у якому відбуватиметься навчання. Ви можете вибрати локальний комп'ютер або хмарний кластер AmlCompute. Я рекомендую створити масштабований кластер машин STANDARD_DS3_v2, з мінімальним числом машин 0 (а максимальне може бути 1 або більше, залежно від ваших апетитів). Це можна зробити через інтерфейс VS Code, або попередньо через ML Portal.

    Як подолати страх та почати використовувати Azure Machine Learning

  2. Далі потрібно вибрати конфігурацію Compute Configuration, яка визначає параметри створюваного для навчання контейнера, зокрема всі необхідні бібліотеки. У нашому випадку, оскільки ми використовуємо Scikit Learn, вибираємо SkLearn, а потім просто підтверджуємо запропонований список бібліотек натисканням Enter. Якщо ви використовуєте якісь додаткові бібліотеки, їх необхідно вказати тут.

    Як подолати страх та почати використовувати Azure Machine Learning
    Як подолати страх та почати використовувати Azure Machine Learning

  3. Після цього відкриється вікно з JSON-файлом, що описує експеримент. У ньому можна виправити деякі параметри, наприклад, ім'я експерименту. Після цього натисніть на посилання Submit Experiment прямо всередині цього файлу:

Як подолати страх та почати використовувати Azure Machine Learning

  1. Після успішної подачі експерименту через VS Code, праворуч в області повідомлень ви побачите посилання на Azure ML Portal, на якій зможете відстежувати статус та результати експерименту.

Як подолати страх та почати використовувати Azure Machine Learning
Згодом ви завжди зможете знайти його у розділі Досліди Azure ML Portal, або у розділі Лазурне машинне навчання у списку експериментів:

Як подолати страх та почати використовувати Azure Machine Learning

  1. Якщо ви після цього внесли в код якісь виправлення або змінили параметри, повторний запуск експерименту буде набагато швидшим і простішим. Натиснувши правою кнопкою на файл, ви побачите новий пункт меню Repeat last run просто виберіть його, і експеримент буде відразу ж запущений:

Як подолати страх та почати використовувати Azure Machine Learning
Результати метрик від усіх запусків ви завжди зможете знайти на Azure ML Portal, немає потреби їх записувати.

Тепер ви знаєте, що запускати експерименти за допомогою Azure ML це просто і безболісно, ​​і при цьому ви отримуєте ряд приємних переваг.

Але ви могли помітити недоліки. Наприклад, для запуску скрипта знадобилося значно більше часу. Звичайно, для пакування скрипта в контейнер та розгортання його на сервері потрібен час. Якщо при цьому кластер був урізаний до розміру в 0 вузлів, потрібно ще більше часу для запуску віртуальної машини, і все це дуже помітно, коли ми експериментуємо на простих завданнях типу MNIST, які вирішуються за кілька секунд. Однак, у реальному житті, коли навчання триває кілька годин, а то й днів чи тижнів, цей додатковий час стає несуттєвим, особливо на тлі значно вищої продуктивності, яку може дати обчислювальний кластер.

Що далі?

Я сподіваюся, що після прочитання цієї статті ви зможете і використовуватимете Azure ML у своїй роботі для запуску скриптів, управління обчислювальними ресурсами та централізованого зберігання результатів. Однак, Azure ML може надати вам ще більше переваг!

Усередині робочої області можна зберігати дані, створюючи централізоване сховище всім своїх завдань, якого легко звертатися. Крім того, ви можете запускати експерименти не з Visual Studio Code, а з використанням API це може бути особливо корисно, якщо вам потрібно здійснити оптимізацію гіперпараметрів, і потрібно запустити скрипт багато разів з різними параметрами. Більше того, в Azure ML вбудована спеціальна технологія Гіпердрайвщо дозволяє робити більш хитрий пошук та оптимізацію гіперпараметрів. Про ці можливості я розповім у своїй наступній нотатці.

Корисні ресурси

Для більш докладного вивчення Azure ML вам знадобляться наступні курси Microsoft Learn:

Джерело: habr.com

Додати коментар або відгук