Як пераадолець страх і пачаць выкарыстоўваць Azure Machine Learning

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

Вядома, мы ўсё чулі пра Мазутнае навучанне 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 Code, а таксама пашырэння 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 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 у спісе эксперыментаў:

Як пераадолець страх і пачаць выкарыстоўваць 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

Дадаць каментар