Зная много Data Scientist-и — и предполагам, че сам съм такъв — които работят на машини с GPU, локални или виртуални, разположени в облака, било чрез Jupyter Notebook, било чрез някаква среда за разработка на Python. Работейки две години като експерт по AI/ML, правех точно така, подготвяйки данни на обикновен сървър или работна станция, а обучението стартирайки на виртуална машина с GPU в Azure.
Разбира се, всички чухме за — специализирана облачна платформа за машинно обучение. Но след като я погледнеш за първи път, , създават впечатление, че Azure ML ще ти създаде повече проблеми, отколкото ще реши. Например, в споменатия по-горе обучителен пример, обучението на Azure ML стартира от Jupyter Notebook, като самият обучителен скрипт се предлага да бъде създаден и редактиран като текстови файл в една от клетките — без да се използват автоматично допълнение, подсветка на синтаксиса и други предимства на нормалната среда за разработка. Поради тази причина дълго време не използвахме сериозно Azure ML в работата си.
Но наскоро открих начин как да започна да използвам ефективно Azure ML в работата си! Интересуват ли те подробностите?

Основната тайна е . То ти позволява да разработваш обучителни скриптове направо в VS Code, използвайки всички предимства на средата — и дори можеш да стартираш скрипта локално, а след това просто да го изпратиш за обучение в клъстера Azure ML с няколко кликвания на мишката. Удобно, нали?
При това получаваш следните предимства от използването на Azure ML:
- Можеш да работиш по-голямата част от времето локално на своята машина в удобна IDE, и да използваш GPU само за обучението на модела. Пулът от обучителни ресурси може автоматично да се настройва според изискваната натовареност, а като установиш минимален брой възли на 0, можеш автоматично да стартираш виртуална машина "при поискване", когато имаш обучителни задания.
- Можеш да съхраняваш всички резултати от обучението на едно място, включително постигнати метрики и получени модели — няма нужда сам да измисляш някаква система или ред за съхранение на всички резултати.
- В същото време по един проект могат да работят няколко души — те могат да използват един и същ изчислителен клъстер, всички експерименти ще бъдат подредени в опашка, и те могат да виждат резултатите от експериментите един на друг. Един от тези сценарии е използването на Azure ML в обучението по дълбоко обучение, когато вместо да предоставяте на всеки студент виртуална машина с GPU, можете да създадете един клъстер, който да се използва централизирано от всички. Освен това, обща таблица с резултати за точността на модела може да служи като добър конкурентен елемент.
- С Azure ML е лесно да се провеждат серии от експерименти, например за оптимизация на хиперпараметри — това може да стане с няколко реда код, без необходимостта да провеждате серии експерименти ръчно.
Надявам се, че успях да ви убедя да опитате Azure ML! Ето как можете да започнете:
- Убедете се, че имате инсталирано , както и разширенията и
- Клонирайте репозитория — той съдържа демонстрационен код за обучение на модел за разпознаване на ръкописни цифри на набора от данни MNIST.
- Отворете клонирания репозиторий във Visual Studio Code.
- Четете нататък!
Azure ML Workspace и Azure ML Portal
Azure ML е организиран около концепцията за работна област — Workspace. В работната област могат да се съхраняват данни, там се изпращат експерименти за обучение, и там се съхраняват резултатите от обучението — получените метрики и модели. Може да видите какво има в работната област чрез — и оттам може да се извършват множество операции, от качване на данни до мониторинг на експерименти и разгръщане на модели.
Може да създадете работна област чрез уеб интерфейса на (вж. ), или чрез командния ред на 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). След като създадете скрипт за обучение на модела, можете да изпратите експеримент за изпълнение в работната област и да посочите целеви компютър — в този случай скриптът ще бъде опакован, изпълнен в необходимата изчислителна среда, и след това всички резултати от експеримента ще бъдат запазени в работната област за последващ анализ и употреба.
Обучаващ скрипт за 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(mnist['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('Обща точност:', acc)Можете да стартирате скрипта на вашия компютър и след няколко секунди ще получите резултат.
Стартиране на скрипта в Azure ML
Ако стартираме скрипта за обучение през Azure ML, ще имаме две основни предимства:
- Стартиране на обучението на произволен изчислителен ресурс, който обикновено е по-мощен от локалния компютър. В този случай Azure ML ще се погрижи за опаковането на нашия скрипт с всички файлове от текущата директория в docker контейнер, инсталирането на необходимите зависимости и изпращането му за изпълнение.
- Записване на резултатите в единен регистър в работната област на Azure ML. За да се възползваме от тази възможност, трябва да добавим няколко реда код към нашия скрипт за запис на получената точност:
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run()
run.log('точност', acc)
except:
passСъответната версия на скрипта се нарича train_universal.py (тя е малко по-сложна от описаното по-горе, но не в значителна степен). Този скрипт може да се стартира както локално, така и на отдалечен изчислителен ресурс.
За да го стартирате в Azure ML от VS Code, трябва да направите следното:
Уверете се, че Azure Extension е свързан с вашата абонамента. Изберете иконата Azure от менюто вляво. Ако не сте свързани, в долния десен ъгъл ще се появи известие (), като кликнете върху него, ще можете да се логнете през браузъра. Можете също така да натиснете Ctrl-Shift-P за да отворите командния ред на VS Code и да напишете Azure Sign In.
След това, в раздела Azure (иконата вляво) намерете секцията МАШИННО ОБУЧЕНИЕ:

Тук трябва да видите различни групи обекти в работната област: изчислителни ресурси, експерименти и др.
- Отидете на списъка с файлове, кликнете с десен бутон върху скрипта
train_universal.pyи изберете Azure ML: Стартиране като експеримент в Azure.

- След това ще последва серия от диалози в конзолата на VS Code: потвърдете използваната абонаментна услуга и работната област Azure ML, както и изберете Създаване на нов експеримент:



Изберете създаване на нов изчислителен ресурс Създаване на ново изчисление:
- Compute определя изчислителен ресурс, на който ще се извършва обучението. Можете да изберете локален компютър или облачен клъстер AmlCompute. Препоръчвам да създадете мащабируем клъстер от машини
STANDARD_DS3_v2, с минимален брой машини 0 (а максималният може да бъде 1 или повече, в зависимост от вашите нужди). Това може да се направи през интерфейса на VS Code или предварително през .

- Compute определя изчислителен ресурс, на който ще се извършва обучението. Можете да изберете локален компютър или облачен клъстер AmlCompute. Препоръчвам да създадете мащабируем клъстер от машини
След това трябва да изберете конфигурация Конфигурация на изчисления, която определя параметрите на контейнера, създаден за обучение, включително всички необходими библиотеки. В нашия случай, тъй като използваме Scikit Learn, изберете SkLearn, и след това просто потвърдете предложения списък с библиотеки, натискайки Enter. Ако използвате допълнителни библиотеки, трябва да ги посочите тук.


След това ще се отвори прозорец с JSON файл, описващ експеримента. В него можете да коригирате някои параметри — например, името на експеримента. След това кликнете върху връзката Предайте експеримента в самия файл:

- След успешното подаване на експеримента през VS Code, вдясно в зоната за известия ще видите връзка към , където можете да следите статуса и резултатите от експеримента.

Впоследствие винаги можете да го намерите в раздела Експерименти , или в раздела 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



