Professional Documents
Culture Documents
Mérnöki MLOps
Mérnöki MLOps
Emmanuel Raj
BIRMINGHAM—MUMBAI
Mérnöki MLOps
Copyright © 2021 Packt Publishing
Minden jog fenntartva. Ezen könyvnek semmilyen részét nem szabad reprodukálni, visszakereső
rendszerben tárolni vagy bármilyen formában vagy módon továbbítani a kiadó előzetes írásos
engedélye nélkül, a bíráló cikkekben vagy kritikákban lévő rövid idézetek kivételével.
Minden erőfeszítést megtettek ezen könyv előkészítése során, hogy biztosítsák a megjelenő
információk pontosságát. Azonban az ebben a könyvben szereplő információk kifejezett vagy
hallgatólagos garancia nélkül kerülnek értékesítésre. Sem a szerző, sem a Packt Publishing,
sem annak kereskedői és forgalmazói nem felelnek az e könyv által közvetlenül vagy közvetve
okozott vagy állítólagos károkért.
A Packt Publishing igyekezett biztosítani a könyvben említett minden vállalat és termék
védjegyének információit a megfelelő betűhasználattal. Azonban a Packt Publishing nem
garantálhatja ezen információk pontosságát.
ISBN 978-1-80056-288-2
www.packt.com
Közreműködők
A szerzőről
Emmanuel Raj egy finnországi gépi tanulással foglalkozó főmérnök, több, mint 6 éves
szakmai tapasztalattal. Gépi tanulással foglalkozó mérnök a TietoEvry-nél is és
a mesterséges intelligenciával foglalkozó szövetség tagja az Európai Bizottságnál. Lelkesedik
az MI demokratizálásáért és kutatás és a tudományos világ iparba történő integrálásáért.
Mérnöki diplomáját az Arcada University of Applied Sciences-en szerezte Big Data
Analytics témában Élénken érdeklődik az olyan technológiák K+F-e iránt, mint az Edge
MI, Blockchain, NLP, MLOps, és robotika. Hisz benne, hogy a tanulás legjobb módja a
tanítás, lelkesedik az új technológiák megismerése és másokkal történő megosztása iránt.
A lektorokról
Magnus Westerlund (DSc) információ technológiai egyetemi tanár és a mesterképzés
vezetője a finnországi Arcada University of Applied Sciences egyetem big data analytics
szakán, Helsinkiben. Telekommunikációs és információkezelési háttérrel rendelkezik és az
információs rendszerekből doktorált a finnországi Åbo Akademi University egyetemen.
Magnus az analitika, IT biztonság, kiberszabályozás és megosztott könyvelési technológia
területein publikált kutatásokat. Jelenlegi kutatási témája az okos szerződésen alapuló
megosztott biztonság az IoT alkalmazásoknál és az intelligens rendszerek értékelése.
Műszaki szakértőként részt vesz a Z-inspection® hálózatban, amely az MI tudatos
használatáért (#MUAI) dolgozik.
Előszó
1
MLOps WorkFlow alapjai
A szoftver- és Az ML adoptációjának trendjei
infrastruktúrafejlesztés evolúciója4 a szoftverfejlesztésben 13
A gépi tanulás és mély-tanulás erősödése 5 Az MLOps megértése 14
A Moore-törvény vége 7 MLOps munkafolyamatai és
MI-alapú alkalmazások 7 elvei 16
A szoftverfejlesztés evolúciója 8 Egy felhasználási mód megvitatása 17
A hagyományos Összefoglalás26
szoftverfejlesztés kihívásai 11
2
Az Ön gépi tanulási problémájának jellemzése
Az ML megoldás fejlesztési Az MLOps-jának szerkesztése 37
folyamata28 Kis adatos műveletek 39
ML modelltípusok 29 Big data műveletek 40
Tanulási modellek 30 Hibrid MLOps 41
Hibrid modellek 31 Nagy léptékű MLOps 41
Statisztikai modellek 34
Megvalósítási ütemterv
HITL modellek 36
az Ön megoldásához 42
ii Table of Contents
3
A kód találkozik az adattal
Az üzleti probléma elemzése és Adat előfeldolgozás 66
a probléma kategorizálása 52 Adatminőség értékelése 66
Az erőforrások és eszközök Hiányzó adatok kalibrálása 68
beállítása 54 Címkekódolás 68
Az MLflow telepítése 54 Új jellemző: Future_weather_condition 70
Azure Machine Learning 55 Adatkorrelációk és szűrés 70
Azure DevOps 58 Idősorozatok elemzése 73
JupyterHub 60
Adatok regisztrációja
A forráskódkezelés és ellátása verzióval 74
10 alapelve az ML-nél 60 Az ML folyamat irányába 76
Milyen a jó adat az ML-nek? 64 Funkció tároló 77
Összefoglalás 78
4
Machine Learning folyamatok
Átvesszük az ML folyamatok Modell tesztelése és mérések
alapjait 80 meghatározása 96
Adatbevitel és funkciótervezés 88 Az SVM osztályozó tesztelése 96
Adatbevitel (tanítási adatkészlet) 90 A Random Forest osztályozó tesztelése 97
Összefoglalás 102
Table of Contents iii
5
Modellértékelés és csomagolás
Modellértékelés és Következtetés 126
értelmezhetőségi mérések 104 Együttműködési képesség 126
Tanulási modellek mérései 105 Telepítési agnoszticitás 126
Hibrid modellek mérései 114
Hogyan kell csomagolni az ML
Statisztikai modellek mérései 119
modelleket? 126
HITL modellek mérése 121
Szerializált fájlok 127
Termeléstesztelési módszerek 122 Csomagolás vagy konténerezés 128
Tömeges tesztelés 123 Mikroszolgáltatás generálása és
A/B tesztelés 123 telepítése 129
Próbateszt vagy árnyékteszt 124 Következtetéskész modellek 130
Tesztelés CI/CD-ben 124
Csatlakozás a munkaterülethez és a
Miért kell csomagolni az ML modelltárgyak importálása 131
modelleket? 125 Modelltárgyak betöltése
következtetéshez 131
Szállíthatóság 125
Összefoglalás 132
6
Az Ön ML rendszerének telepítési alapelvei
ML a kutatásban vs a Gyakorlati telepítés (az üzleti
termelésben 136 problémához) 146
Adatok 136 A modell telepítése az ACI-n 146
Méltányosság 137 A modell telepítése az Azure
Értelmezhetőség 138 Kubernetes Service-en (AKS) 153
Teljesítmény 138 A szolgáltatás telepítése az MLflow
Prioritás 139 használatával 161
7
Robosztus CI/CD folyamatok kialakítása
Folytonos integráció, szállítás munkaterülethez 172
és telepítés az MLOps-ban 166 Egy folytonos integrációs és
Folyamatos integráció 167 telepítési folyamat felállítása
a tesztkörnyezethez. 174
Folyamatos szállítás 167
Tárgyak csatlakoztatás a folyamathoz 175
Folyamatos telepítés 168
Egy tesztkörnyezet beállítása 178
Egy CI/CD folyamat és a
tesztkörnyezet felállítása (Azure Folyamatvégrehajtás és
DevOps használatával) 168 tesztelés 185
Egy szolgáltatási fiók létrehozása 169 Folyamat-végrehajtási
A bővítmény telepítése, hogy kapcsolók188
csatlakozzon az Azure ML Összefoglalás 190
8
API-k és mikroszolgáltatások kezelése
Bevezetés az API-khoz és Egy ML modell API-ként történő
mikroszolgáltatásokhoz 192 kiszolgálásának gyakorlati
Mi az Application Programming megvalósítása 199
Interface (API, alkalmazásprogramozó API tervezése és fejlesztése 200
interfész)? 192
Mikroszolgáltatások 193 Egy mikroszolgáltatás
fejlesztése Docker
Mikroszolgáltatások igénye használatával 206
az ML-hez 195
Az API tesztelése 207
Elméleti felhasználási eset 195
Összefoglalás212
A régi aranyat ér: REST API-
alapú mikroszolgáltatások 198
9
Az Ön ML megoldásának tesztelése és biztosítása
Az ML alkalmazásának tesztelése a tervezés szerint 214
tesztelési és biztosítási Adatok tesztelése 214
igényének felismerése 214 Modelltesztelés 215
Az Ön ML megoldásának Tanítás előtti tesztek 216
Table of Contents v
10
A termelési kiadás lényeges részei
A termelési infrastruktúra konfigurálása az
felállítása 230 automatizációhoz 245
Azure Machine Learning munkaterület 231 Egy Git kapcsoló beállítása 246
Azure Machine Learning SDK 234 Egy Tárgyas kapcsoló beállítása 247
Egy Ütemező kapcsoló beállítása 248
A termelési környezetünk
felállítása a CI/CD folyamatban 237 Folyamat kiadáskezelés 250
A termeléskész folyamatunk A folytonos monitorozás felé 252
tesztelése 243 Összefoglalás 252
Folyamatkapcsolók
11
Az Ön ML rendszerének mon-itorozási alapelvei
Egy ML rendszer Az Explainable Monitoring
monitorozásának fő alapelvei 256 Framework értelmezése 264
Modelleltérés 257 Megfigyelés 265
Modellelfogultság 258 Elemzés 267
Modellátláthatóság 258 Irányítás 271
Modellmegfelelőség 259
Magyarázható MI 260
Folytonos monitorozás lehetővé
tétele a szolgáltatásnál 274
Monitorozás az MLOps Összefoglalás 274
munkafolyamatban 263
vi Table of Contents
12
Modellek kiszolgálása és monitorozása
Modellek kiszolgálása, A modell kiszolgálása egy gépnek 280
monitorozása és fenntartása
a termelésben 276 A magyarázható monitorozási
keretrendszer megvalósítása 281
Az ML modellek
Az Ön ML rendszerének monitorozása 284
kiszolgálásának különböző
Az Ön ML rendszerének elemzése 307
módjai 277
A modell kiszolgálása tömeges Az Ön ML rendszerének
szolgáltatásként 278 irányítása 308
A modell kiszolgálása egy emberi Összefoglalás 309
felhasználónak 279
13
Az ML rendszerek irányítása a folytonos tanuláshoz
A folytonos tanulás Modell auditálása és jelentések 333
szükségességének értelmezése 312
Modell újratanításának
Folytonos tanulás 312
engedélyezése 335
A folytonos tanulás szükségessége 313
Modell manuális újratanítása 336
Magyarázható monitorozás, Modell automatikus újratanítása 336
irányítás 315
A CI/CD folyamat fenntartása 336
Riasztások és műveletek 315
Modell QA és irányítás 333
Összefoglalás 338
Miért érdemes feliratkozni? 339
Alkalmazott jelölések
A könyvben többféle szöveges jelölést alkalmazunk.
Kód a szövegben: A kódszavakat jelöli a szövegben, adatbázis táblázatok neveit,
mappaneveket, fájlneveket, fájlkiterjesztéseket, elérési utakat, formális URL-eket,
felhasználói beviteleket és Twitter-neveket. Itt egy példa: "Az előkészített adatkészletet
a .get_by_name() függvénnyel importáltuk."
A kódblokkok a következőképpen néznek ki:
uri = workspace.get_mlflow_tracking_uri( )
mlflow.set_tracking_uri(uri)
Amikor fel kívánjuk hívni a figyelmét a kódblokk egy adott részére, akkor a releváns
sorokat vagy elemeket félkövérrel szedjük:
python3 test_inference.py
Félkövér: Egy új kifejezést, fontos szót vagy szavakat jelöl, amelyek a képernyőn láthatók.
Például a menükön vagy párbeszédablakokon megjelenő szavak a szövegben ilyenek.
Itt egy példa: "Lépjen a Számítás opcióra és kattintson a Létrehozás gombra, hogy
megismerje a felhőn elérhető számítási lehetőségeket."
xii Előszó
Kapcsolatfelvétel
Mindig szívesen fogadjuk olvasóink visszajelzését.
Általános visszajelzés: Ha a könyvre vonatkozó bármilyen kérdése van, említse meg
a könyv címét az üzenet tárgyában és küldjön egy e-mailt nekünk a customercare@
packtpub.com címre.
Hibajegyzék: Bár mindent megtettünk a tartalom pontossága érdekében, hibák mindig
vannak. Ha hibát talál ebben a könyvben, hálásak lennénk, ha jelentené nekünk. Kérjük
látogasson el a www.packtpub.com/support/errata oldalra, válassza ki a könyvét,
kattintson az Errata Submission Form linkre és írja le az információkat.
Kalózkodás: Ha bármilyen illegális másolatával találkozik a munkáinknak az interneten,
hálásak lennénk, ha megadná nekünk az elérési címet vagy a weboldal nevét. Kérjük,
vegye fel velünk a kapcsolatot a copyright@packt.com címen az anyag linkjével.
Ha szeretne szerzővé válni: Ha van olyan terület, amelynek Ön a szakértője, és szeretne
könyvet írni, vagy közreműködni benne, kérjük látogasson el az authors.packtpub.
com címre.
Vélemények
Kérjük, írjon véleményt. Miután elolvasta és használta a könyvet, írjon egy véleményt azon
a webhelyen, ahonnan könyvet megvásárolta. Ezáltal a potenciális olvasók is láthatják és
használhatják az Ön elfogulatlan véleményét a vásárlási döntések meghozatalához; a Packt
csapatánál megtudhatjuk, mit gondolnak vevőink a termékeinkről; szerzőink pedig
megismerhetik a visszajelzését a könyveikkel kapcsolatban. Köszönjük!
További információkért a Packt-ról, kérjük, látogasson el a packt.com címre.
1. rész:
Keretrendszer gépi
tanulási modellek
kiépítéséhez
A szoftver- és infrastruktúrafejlesztés
evolúciója
A modern internetes kor (1995 körül) beköszöntésével a szoftveres alkalmazások
növekedését figyelhettük meg, az olyan operációs rendszerektől kezdve, mint
amilyen a Windows 95 a Linus operációs rendszerekig és weboldalakig, mint amilyen
a Google és az Amazon, amelyek több, mint két évtizede szolgálják a világot (online).
Ez a folyamatosan fejlődő szolgáltatások kultúráját eredményezte a felhasználói
interakciókból származó hatalmas mennyiségű adat gyűjtése, tárolása és feldolgozása
révén. Az ilyen fejlesztések formálják az IT infrastruktúra- és szoftverfejlesztés evolúcióját.
Az IT infrastruktúra átalakulása az évezred eleje óta felgyorsult. Azóta a cégek egyre
jobban adoptálták a felhő alapú számítást, mivel az új lehetőségeket tárt fel számukra,
hogy kiszervezzék az IT infrastruktúra karbantartását, miközben biztosítja a szükséges
IT erőforrásokat, mint amilyen a tárhely, a számítási erőforrások és a műveletek
méretezéséhez és futtatásához szükséges szolgáltatások.
A felhő alapú számítás igény szerint biztosítja az olyan IT erőforrások elérhetőségét,
mint amilyen az adattárolás és a számítási erőforrások úgy, hogy nincs szükség arra, hogy
az IT erőforrások felhasználója aktívan menedzselje őket. Például a számítási és tárolási
erőforrásokat biztosító cégeknek nem kell közvetlenül kezelniük ezeket az erőforrásokat,
és nem felelősek a futtatásukért, a karbantartást kiszervezték a felhőszolgáltatónak.
A felhő alapú számítást használó cégek profitálhatnak belőle, mivel nem kell megvenniük
és karbantartaniuk az IT erőforrásokat; ez lehetővé teszi számukra, hogy kevesebb belsős
szakembert foglalkoztassanak az IT erőforrások karbantartása terén, és így optimalizálni
tudják a költségeket és erőforrásokat. A felhő alapú számítás lehetővé teszi az igény
szerinti méretezést, és a felhasználók az erőforrások felhasználása alapján fizetnek.
Ennek eredményeként olyan cégeket láttunk, akik a vállalkozásuk és IT infrastruktúrájuk
részeként adoptálták a felhő alapú számítást.
A szoftver- és infrastruktúrafejlesztés evolúciója 5
A felhő alapú számítás 2006 óta vált népszerűvé az iparban, amikor a Sun Microsystems
elindította a Sun Grid-et 2006 márciusában. Ez egy hardver- és adaterőforrás megosztó
szolgáltatás. Ezt a szolgáltatást vásárolta fel az Oracle, és később Sun Cloud-nak nevezték.
Ezzel párhuzamosan ugyanabban az évben (2006) egy másik felhő alapú számítási
szolgáltatást indított el az Amazon, amelyet Elastic Compute Cloud-nak hívtak. Ez új
lehetőségeket tett elérhetővé a cégek számára az igény szerinti számítási, tárolási és
méretezési lehetőségek biztosításához. Azóta az iparágak közötti átalakulás egységesen
a felhő alapú számítás irányába tart.
Az elmúlt évtizedben globális és regionális szinten is számos cég katalizálta a felhőre
való áttérést, olyan vállalatokkal, mint a Google, IBM, Microsoft, UpCloud, Alibaba és
még mások, akik komolyan beruháztak a felhőszolgáltatások kutatásába és fejlesztésébe.
Ennek eredményeképp váltás történt a helyi számításról (a cégeknek saját szervereik
és adatközpontjaik vannak) az igény szerinti számításra, ennek oka a robosztus és
méretezhető felhőszolgáltatások elérhetősége. Ma a cégek és szervezetek képesek igény
szerint biztosítani az erőforrásokat a felhőben, hogy kielégítsék az adatfeldolgozási
igényeiket.
Ezzekel a fejlesztésekkel működés közben figyelhettük meg Moore törvényét, amely azt
állítja, hogy az egy mikrochipen található tranzisztorok száma 2 évente megduplázódik,
bár a számítógépek ára feleződik, ez idáig igaz volt. Következésképpen néhány trend
a következőként változik.
A Moore-törvény vége
2012 előtt az MI eredményei szorosan követték a Moore-törvényt, a számítás 2 évente
megduplázódott. 2012 óta a számítás 3,4 hónaponta duplázódik meg (forrás: AI Index
2019 - https://hai.stanford.edu/research/ai-index-2019). Az 1.1 ábrán
megfigyelhetjük, hogy a kereslet a mély-tanulásra és a nagy teljesítményű számításra
(HPC) exponenciálisan növekszik, nagyjából 35-szörös a számítás növekedése
18 hónaponta, és ez láthatóan túlszárnyalja a Moore-törvényt (2x, 18 hónaponta).
A Moore-törvény még mindig érvényes a CPU-k (egymagos teljesítmény) esetében, de az
olyan új hardver architektúrákra, mint a GPU és TPU, nem. Ez elavulttá és túlszárnyalttá
teszi a Moore-törvényt a jelenlegi igények és trendek tükrében.
MI-alapú alkalmazások
Az alkalmazások MI-alapúvá válnak, ezt több iparágban látjuk. Jóformán minden
alkalmazás elkezdi használni az MI-t, és ezek az alkalmazások külön futnak megosztott
munkaterheléseken, mint amilyen a HPC, mikroszolgáltatások, és a big data, ahogy az
a 1.2 ábrán látható:
A szoftverfejlesztés evolúciója
A szoftverfejlesztés kéz a kézben fejlődött az infrastruktúrafejlesztéssel, hogy kezelje az
alkalmazások hatékony fejlesztését az infrastruktúra használatával. Hagyományosan
a szoftverfejlesztés a fejlesztés vízesés-módszerével kezdődött, ahol a fejlesztést lineárisan
végezték a követelmények összegyűjtésével a kialakításhoz és fejlesztéshez. A vízesés-
modellnek számos korlátozása van, amelyek az évek folyamán a szoftverfejlesztés
evolúciójához vezettek, az Agile módszertanok és a DevOps módszer képében, ahogy az
1.3 ábrán látható:
A vízesés-módszer
A vízesés-módszert szoftverfejlesztésre használták az internetes kor (~1995) kezdete
óta. Ez egy nem iteratív szoftverfejlesztési mód. Egyirányú módszer. Minden szakasza
előre szervezett és egymás után kerül végrehajtásra, a követelmények összegyűjtésétől
kezdve a szoftvertervezésig, -fejlesztésig és -tesztelésig. A vízesés-módszer megfelelő
és megvalósítható, amikor jól meghatározott, konkrét követelmények vannak, és azok
nem változnak az idő múlásával. Így ez nem felel meg a dinamikus projektekhez, ahol
a követelmények a felhasználói igények szerint változnak és fejlődnek. Az ilyen esetekben,
ahol folytonos a módosítás, a vízesés-módszer nem használható a szoftverfejlesztéshez.
A vízesés szoftverfejlesztési módszer fő hátrányai a következők:
Az Agile módszer
Az Agile módszer elősegíti az iteratív és progresszív megközelítését a szoftverfejlesztésnek.
A vízesés módszerrel szemben az Agile megközelítés precíz és felhasználóközpontú.
A módszer kétirányú és gyakran bevonja a végfelhasználókat vagy ügyfeleket a fejlesztési
és tesztelési folyamatba, így lehetőségük van tesztelni, visszajelezni és javításokat javasolni
a projekt fejlesztési folyamata és fázisai során. Az Agile-nak számos előnye van a vízesés
módszerrel szemben:
A DevOps módszer
A DevOps módszer kibővíti az agile fejlesztési gyakorlatokat a szoftverváltozás
mozgásának korszerűsítésével a kialakítás, tesztelés, telepítés és leadás folyamatán keresztül.
Arra bátorítja a szoftverfejlesztőket, hogy CI/CD folyamatokat használó alkalmazásokat
készítsenek a keresztfunkcionális csapatok közötti autonómia engedélyezésével.
Ez összehozza a fejlesztést, IT műveleteket, minőségbiztosítást és biztonságot, hogy
javítsa a szoftver leadásának minőségét és hatékonyságát. A DevOps gyakorlatok és
eszközök egy keretrendszert biztosítanak a jobban megtervezett, fejlesztett és telepített
szoftver létrehozásához, amely jobban válaszol az ügyfél igényeire. A DevOps módszerek
használatával lehetőség van a szoftver gyors elkészítésére és megbízható futtatására.
A hagyományos szoftverfejlesztés kihívásai 11
A kód és adat ezen kapcsolata miatt gondosan össze kell kapcsolni a kettőt a fejlesztésben,
így irányított módon fejlődnek a robosztus és méretezhető ML rendszer közös célja felé;
a tanításhoz, teszteléshez és következtetéshez szükséges adat a különböző források között
és az idő múlásával változik, illetve meg kell felelnie a változó kódnak. A szisztematikus
MLOps megközelítés nélkül eltérés lehet abban, ahogy a kód és adat fejlődik, amely
problémákat okoz a termelésben, útját állja az egyenletes telepítésnek, és olyan
eredményekhez vezet, amelyeket nehéz követni és reprodukálni.
Az ML adoptációjának trendjei
a szoftverfejlesztésben
Mielőtt elmélyednénk az MLOps módszer és munkafolyamat működésében, érdemes
megérteni az átfogó képet és a trendeket arról, hogy az MLOps hol és hogyan jelent meg
a világban. Ahogy számos alkalmazás vált MI-alapúvá, a szoftverfejlesztés továbbfejlődött
az ML elősegítésére. Az ML egyre nagyobb részét fogja képezni a szoftverfejlesztésnek,
főleg a következő okok miatt:
Információ
Ezen pontok forrása az Európai Bizottság megbízható MI-re vonatkozó
szabályzata és befektetési ajánlatai (https://ec.europa.eu/
digital-single-market/en/news/policy-and-
investment-recommendations-trustworthy-artificial-
intelligence) és a 2019-es MI Index (https://hai.stanford.
edu/research/ai-index-2019).
14 MLOps WorkFlow alapjai
Az MLOps megértése
Az MLOps célja a termelési ML rendszerek hatékony és megbízható kialakítása, telepítése
és fenntartása. Ez egy kialakulóban lévő, interdiszciplináris módszer, amely az ML,
DevOps és az adattechnika metszetében áll.
Az MLOps folyamat
A felső réteg az MLOps folyamat, amely olyan műveleteket végez, mint például
a kialakítás, telepítés és monitorozás, ezek modulárisan működnek, egymással
szinkronban. Nézzük meg az egyes modulok működését.
Kialakítás
A kialakítás modul rendelkezik a fő ML folyamattal, és ez kizárólag az ML modellek
tanítására, csomagolására és verziókezelésére szolgál. A szükséges számítási erőforrások
(például a felhőben vagy a megosztott számítási kapacitáson található CPU vagy GPU)
működteti, hogy futtassa az ML tanítását és folyamatát:
A folyamat balról jobbra halad. Nézzük meg részletesen az egyes lépések működését:
Meghajtók
Ezek a kulcsfontosságú meghajtók az MLOps folyamatnál: adat, kód, tárgyak, köztes
szoftverek és infrastruktúra. Nézzük meg az egyes meghajtókat, hogy hogyan engedélyezik
az MLOps folyamatot:
MLOps munkafolyamatai és elvei 25
• Adat: Az adatnak több formája lehet, például szöveg, hang, videó és képek.
A hagyományos szoftveres alkalmazásoknál az adat általában strukturált, míg az
ML alkalmazásoknál strukturált vagy strukturálatlan, Az adatok kezeléséhez az
ML alkalmazásoknál az adatok a következő lépésekben kell kezelni: adatszerzés,
adatcímkézés, adatkatalogizálás, adatelőkészítés, adat minőségellenőrzés,
adatmintázás és adatjavítás. Minden lépésnek meg van a maga életciklusa. Ebből
áll az ML alkalmazásokhoz szükséges folyamatok és eszközök teljesen új készlete.
Az ML folyamat hatékony működéséhez az adatokat szét kell választani tanítási,
tesztelési és monitorozási adatokra (a termelésben gyűjtötték, például modell
bemenetek, kimenetek és telemetriai adatok) és el kell látni verzióval. Ezek az
adatműveletek az MLOps folyamat részét képezik.
• Kód: Ez három kulcsfontosságú kódmodul, amelyek az MLOps folyamatot
működtetik: tanítási kód, tesztelési kód és alkalmazáskód. Ezeket a szkripteket vagy
kódokat a CI/CD és adatfolyamatok használatával hajtják végre, hogy biztosítsák
az MLOps folyamat robosztus működését. A forráskódkezelő rendszer (például Git
vagy Mecurial használatával) lehetővé teszi a feldolgozást és jelentős szerepet játszik
az irányításban és a CI, CD és adatfolyamatok zökkenőmentes integrációjában.
A teljes kód fel van osztva és el van látva verzióval a forráskódkezelő beállításban
(például Git).
• Tárgyak: Az MLOps folyamat olyan tárgyakat generál, mint az adatok, szerializált
modellek, kódrészek, rendszernaplók, ML modell tanítása és a tesztelő mérések
információi. Mindezek a tárgyak hasznosak az MLOps folyamat sikeres működése
érdekében, biztosítják annak követhetőségét és fenntarthatóságát. Ezeket
a tárgyakat olyan köztes szoftverszolgáltatások használatával kezeljük, mint amilyen
a modelljegyzék, munkaterületek, naplózó szolgáltatások, forráskódkezelő
szolgáltatások, adatbázisok stb.
26 MLOps WorkFlow alapjai
Összefoglalás
Ebben a fejezetben megismertük az ML-t működtető infrastruktúra és szoftverfejlesztés
evolúcióját. Elmerültünk az MLOps alapkoncepcióiban, majd megismertünk egy
generikus MLOps munkafolyamatot, amely számos ML megoldásnál megvalósítható több
iparágban.
A következő fejezetben arról fog tanulni, hogy képezzen le bármilyen ML problémát egy
MLOps-on alapuló megoldássá és kezdje el fejleszteni azt egy MLOps munkafolyamat
használatával.
2
Az Ön gépi tanulási
problémájának
jellemzése
Ebben a fejezetben alapvető ismereteket szerez a Gépi tanulás (ML) megoldásainak
különböző fajtáiról, amelyeket a termeléshez készítenek, és megtanulja kategorizálni
a kapcsolódó műveleteket a szervezete üzleti és technológiai igényeivel összhangban.
Megtanulja, hogyan felügyelje az ML megoldások beüzemelésének megvalósítási
ütemtervét, amelyet a szükséges eszközök és infrastruktúra beszerzése követ bármilyen
adott problémánál. A fejezet végére megismeri, hogyan kell robosztus és méretezhető
ML megoldásokat tervezni és beszerezni a megoldások megvalósításához szükséges
eszközöket és adatokat.
Az ML Operations (MLOps) célja, hogy összekösse a tudományos világot az iparral
a legkorszerűbb tervezési elvek felhasználásával, és fel fogjuk deríteni az ipar és
a tudományos világ különböző elemeit, hogy holisztikus képet alkothassunk és tudatában
legyünk a lehetőségeknek. Mielőtt elkezdené kialakítani az MLOps megoldását, fontos, hogy
megértse az elérhető különféle lehetőségeket, összeállításokat, problémákat, megoldásokat
és módszertanokat az üzletorientált problémák megoldásához. Ahhoz, hogy ezeket
megismerje, ebben a fejezetben a következő fő témákat érintjük:
• Az Ön MLOps-jának jellemzése
• Megvalósítási ütemterv az Ön megoldásához
• A szükséges adatok, eszközök és infrastruktúra beszerzése
• Egy valós üzleti probléma ismertetése
ML modelltípusok
Mivel egy sor ML és mély tanulásos modell van, amely ugyanazt az üzleti problémát
kezeli, kulcsfontosságú megérteni az ML modellek világát ahhoz, hogy egy hatékony
algoritmust válasszunk. Nagyjából 15 típusú ML technika van, ezeket 4 kategóriába lehet
sorolni, nevezetesen a tanulási modellekbe, hibrid modellekbe, statisztikai modellekbe
és az ember a hurokban (HITL) modellekbe, ahogy az a következő táblázatban látható
(ahol minden négyzetrács az egyik kategóriát képviseli) a 2.2 ábrán. Érdemes megjegyezni,
hogy más lehetséges módjai is vannak az ML modellek kategorizálásának, és egyik sem
teljes, így ezek a kategorizálások egyik esetben megfelelőek, míg másik esetben nem.
Itt van az általunk javasolt kategorizálás, amellyel az ML modelleket vizsgáljuk:
Tanulási modellek
Először megnézünk kétféle alap tanulási modellt, a felügyelt tanulást és a felügyelet
nélküli tanulást:
Felügyelt tanulás
A felügyelt tanulási modelleket vagy algoritmusokat címkézett adatok alapján tanítják.
A tanítási adatokban a bemenet eredménye jelölt vagy ismert. Így a modellt arra tanítják
be, hogy megjósolja a kimenetelt, amikor kap egy bemenetet a címkézett adat alapján,
amelyből tanul, és Ön mondja meg a rendszernek, melyik kimenet felel meg egy adott
bemenetnek a rendszerben.
A felügyelt tanulási modellek nagyon hatékonyak a szűk MI eseteiben és a jól
meghatározott feladatoknál, de csak ott használhatók, ahol van elegendő és széleskörű
címkézett adat. Láthatjuk a 2.3 ábrán, hogy a felügyelt tanulás esetében a modell
megtanult osztályozni és jósolni egy bemenetet.
Gondoljon a képosztályozó modell példájára, amelyet a macskák és kutyák képeinek
osztályozására használtunk. Egy felügyelt tanulási modellt tanítottunk be a címkézett
adatokkal, amely több ezer helyesen címkézett macska és kutya képéből állt. A betanított
modell ezután megtanulja osztályozni az adott bemeneti képet, mivel az egy kutyát vagy
macskát tartalmaz.
Hibrid modellek
Gyors fejlődés történt az ML-nél, mivel kombinálták a hagyományos módszereket, hogy
hibrid modelleket fejlesszenek a változatos üzleti és kutatási problémák megoldásához.
Nézzünk meg néhány hibrid modellt és hogy hogyan működnek. A 2.4 ábra különböző
hibrid modelleket mutat:
Önellenőrzéses tanulás
Az önellenőrzéses tanulási problémák olyan felügyelet nélküli tanulási problémák,
ahol az adat címkézetlen; ezeket a problémákat lefordítják felügyelt tanulási problémákra
annak érdekében, hogy a felügyelt tanuláshoz használt algoritmusokat használhassák
rajtuk a fenntartható megoldásukhoz. Általában az önellenőrzéses algoritmusokat egy
alternatív feladat megoldására használják, amelyben azért ellenőrzik magukat, hogy
megoldják a problémát vagy egy kimenetet generáljanak. Az önellenőrzéses tanulás egyik
példája a Generative Adversarial Networks (GANs); ezeket általában arra használják,
hogy szintetikus adatokat generáljanak címkézett és/vagy címkézetlen adatokon történő
tanítással. Megfelelő tanítással a GAN modellek képesek egy releváns kimenetet generálni
önellenőrzött módon. Például egy GAN képes legenerálni egy emberi arcot egy bevitt
szöveges leírás alapján, mint például nem: férfi, kor: 30, szín: barna stb.
Multitask tanulás
A multitask tanulás a felügyelt tanulás egy megtestesülése, amely magába foglalja a
modell tanítását egy adatkészlettel, és ennek a modellnek a felhasználását több feladat
vagy probléma megoldására. Például a természetes nyelv feldolgozásánál szóbeágyazásokat
használunk vagy Bidirectional Encoder Representations from Transformers (BERT)
beágyazó modelleket, amelyet egyetlen nagy adatállománnyal tanítottak be. (a BERT
egy előtanított modell, amelyet nagy szöveges korpusszal tanítottak be. A modell jól érti
egy adott emberi nyelv működését.) Ezek a modellek számos felügyelt tanulási feladat
megoldására felhasználhatók, például szövegosztályozásra, kulcsszavak kinyerésére,
érzelemelemzésre stb.
Megerősítő tanulás
A megerősítő tanulás egy olyan tanulási típus, amelyben egy ágens, például egy
robotrendszer, megtanul egy meghatározott környezetben működni, hogy szekvenciális
döntéshozatali feladatokat hajtson végre vagy elérjen egy előre meghatározott célt. Ezzel
egyidejűleg az ágens a folyamatosan kiértékelt visszajelzés és a környezet jutalmazása alapján
tanul. Mind a visszajelzést, mind a jutalmakat az ágens tanulásának alakítására használják,
ahogy az a 2.5 ábrán látható. Erre egy példa a Google AlphaGo-ja, amely nemrég
felülmúlta a világ vezető Go játékosát. A visszajelzést és jutalmakat használó 40 napos
öntanítás után az AlphaGo képes volt legyőzni a világ legjobb ember Go játékosát:
ML modelltípusok 33
Együttes tanulás
Az együttes tanulás egy olyan hibrid modell, amely magába foglal két vagy több, azonos
adatokon tanított modellt. Az előrejelzésekhez az egyes modelleket külön használja és
egy együttes előrejelzést készít az összes kimenet kombinálásának eredményeként és
átlagolja őket, hogy meghatározza a végső kimenetet vagy előrejelzést. Erre egy példa
a véletlenszerű erdő algoritmus, amely egy együttes tanulási módszer az osztályozási vagy
regressziós feladatokhoz. Úgy működik, hogy számos döntési fát képez a tanítás során,
és kimenetként létrehoz egy előrejelzést az összes döntési fa előrejelzéseinek átlagolása
alapján.
Átvitt tanulás
Mi, emberek rendelkezünk egy természetes képességgel, hogy átadjuk a tudást
egymás között. Ezt az elvet fordították le az ML-re, ahol egy modellt úgy tanítanak be,
hogy végrehajtson egy feladatot, és ezt átviszik egy másik modellhez kiindulási pontként
egy másik feladat végrehajtásához szükséges betanításhoz vagy finomhangoláshoz.
Ez a típusú tanulás népszerű a mély tanulásnál, ahol az előtanított modelleket használják
a számítógépes látással vagy természetes nyelv feldolgozásával kapcsolatos problémák
megoldására egy előtanított modell finomhangolása vagy betanítása által. Az előtanított
modellekből történő tanulás hatalmas kezdőlökést ad, mivel nem kell a nulláról tanítani
a modellt, ami nagy mennyiségű tanítási adatot spórol meg. Például betaníthatunk
egy érzelemosztályozó modellt olyan tanítási adat felhasználásával, amely csak néhány
címkézett adatmintát tartalmaz. Ez lehetséges az átvitt tanulással, amely egy előtanított
BERT modellt használ (amelyet egy nagy címkézett adatos korpuszon tanítottak be).
Ez lehetővé teszi a tanítás átvitelét egyik modelltől a másikhoz.
34 Az Ön gépi tanulási problémájának jellemzése
Egyesített tanulás
Az egyesített tanulás az ML végrehajtásának egy kollaboratív módja (szinergia a felhő
és a peremhálózat között). A tanulási folyamat megoszlik több eszköz között, az adatnak
csak egy helyi mintáját tárolja. Nincs adatcsere vagy adatátvitel az eszközök vagy a felhő
között az adatvédelem és -biztonság megőrzése érdekében. Az adatok megosztása
helyett a helyben tanított modelleket osztják meg, hogy tanuljanak egymástól a globális
modellek tanításához. Nézzünk meg egy példát az egyesített tanulásra kórházakban
(ahogy az a 2.6 ábrán látható), ahol a páciensek adatai bizalmasok és nem oszthatók meg
harmadik felekkel. Ebben az esetben az ML tanítása helyben történik a kórházakban
(a peremhálózaton) és globális modelleket központilag tanítják (a felhőben) az adatok
megosztása nélkül. A helyben tanított modelleket úgy finomhangolják, hogy globális
modelleket állítsanak elő. Az adatok központi ML folyamatban történő bevitele helyett,
helyben tanított modelleket visznek be. A globális modellek úgy tanulnak, hogy a helyi
modellekből hangolják a paramétereiket, hogy konvergáljanak az optimális teljesítmény
felé, összefűzik a helyi modellek tanulását:
Statisztikai modellek
Néhány esetben a statisztikai modellek hatékonyak a döntéshozásban. Fontos tudni, hogy
hol lehet statisztikai modelleket használni a legjobb eredmények vagy döntések eléréséhez.
A statisztikai modelleknek három típusa van: induktív tanulás, deduktív tanulás és
transzduktív tanulás. A 2.7 ábra mutatja a statisztikai modellek típusai közötti kapcsolatot:
ML modelltípusok 35
HITL modellek
Kétféle HITL modell van: az emberközpontú megerősítéses tanulás modelljei és az aktív
tanulási modellek. Ezeknél a modelleknél az ember-gép kollaboráció lehetővé teszi az
algoritmus számára, hogy emberszerű viselkedéseket és kimeneteleket utánozzon. A fő
hajtóerő ezeknél az ML megoldásoknál az ember a hurokban (HITL). Emberek validálják,
címkézik és tanítják újra a modelleket, hogy fenntartsák a modell pontosságát:
Az MLOps-jának szerkesztése
Az MLOps elsődleges célja, hogy egy szervezetet vagy az egyének egy csoportját rávegye
a hatékony együttműködésre, hogy olyan adatokat és ML-működtetésű eszközöket
alakítsanak ki, amely megoldja az üzleti problémáikat. Ennek eredményeként nő a teljes
teljesítmény és átláthatóság. A munkavégzés a silókban vagy a funkcionalitások ismétlődő
fejlesztése rendkívül költséges és időrabló lehet.
Ebben a részben megismerjük, az MLOps hogyan szerkeszthető a szervezeteken belül.
Az MLOps folyamat helyes kialakítása elsődleges fontosságú. A MLOps megfelelő
folyamatának és eszközeinek kiválasztásával Ön és a csapata készen állnak egy robosztus,
méretezhető, egyszerű és fenntartható MLOps folyamat megvalósítására. Például nemrég
segítettem az egyik ügyfelemnek az egészségügyben az MLOps-juk kialakításában és
optimalizálásában, amely 76%-os költségoptimalizációt eredményezett (a tárolási és
számítási erőforrásoknál) az előző hagyományos működésükhöz képest.
Az ügyfél adatkutatókból álló csapata azt vette észre, hogy az idejük 30%-a felszabadult
a hétköznapi és ismétlődő napi feladatok miatt (például adattördelés, ML folyamat
és a hiperparaméter hangolása), ez lehet a hatása egy hatékony MLOps folyamat
kialakításának. A hatékony MLOps megvalósításával a csapata biztos lehet
a hatékonyságban, magas teljesítményben és nagyszerű együttműködésben, amely
megismételhető és követhető a szervezetén belül.
38 Az Ön gépi tanulási problémájának jellemzése
• Big data: Olyan mennyiségű adat, amely nem fér el egyetlen tipikus számítógép
memóriájában; például > 1 TB
• Közepes méretű adat: Olyan mennyiségű adat, amely elfér egyetlen szerver
memóriájában; például 10 GB és 1 TB között
• Kis méretű adat: Olyan mennyiségű adat, amely könnyen elfér egy laptop vagy
PC memóriájában; például < 10 GB
• Olyan szituációkba futnak bele, amikor a munka nagy részét több ember ismétli,
beleértve az olyan feladatokat, mint az adatok előállítása, az ML folyamatok
ugyanazt a munkát végzik, vagy az ML modellek hasonló típusait tanítják be.
• Silókban dolgoznak és alig értik a csapattársaik által végzett párhuzamos munkát.
Ez kisebb átláthatósághoz vezet.
• Hatalmas költségek vagy a vártnál nagyobb költségek merülnek fel a hétköznapi
és ismételt munka miatt.
• A kód és az adat elkezd önállóan növekedni.
• A tárgyakat nem ellenőrzik és így nem megismételhetők.
Hibrid MLOps
A hibrid csapatok tapasztalt adatkutatókkal, adatmérnökökkel és DevOps mérnökökkel
működnek, és ezek a csapatok kihasználják az ML lehetőségeit az üzleti tevékenységük
támogatásához. Jóval előrébb járnak az MLOps megvalósításában más csapatokhoz képest.
Big data-val és olyan nyílt forráskódú szoftveres eszközökkel dolgoznak, mint amilyen
a PyTorch, TensorFlow, és scikit-learn, és így megkövetelik a hatékony együttműködést.
Gyakran jól meghatározott problémákon dolgoznak a robosztus és méretezhető
szoftvertechnológiai gyakorlatok megvalósításával. Azonban ez a csapat is érzékeny
az olyan kihívásokra, mint a következők:
1. fázis: ML fejlesztés
Az Ön problémájánál az MLOps keretrendszer megvalósításának ez a kezdete;
a követelmények teljesítésének megkezdése előtt a problémának és a megoldásnak
egyértelműnek és életszerűnek kell lennie. Ebben a fázisban figyelembe vesszük
a robosztus és méretezhető MLOps keretrendszer tervezéséhez és megvalósításához
szükséges rendszerkövetelményeket. Azzal kezdjük, hogy kiválasztjuk a megfelelő
eszközöket és infrastruktúrát (tárolás, számítás stb.), amely az MLOps megvalósításához
szükséges.
Amikor felállítottuk az infrastruktúrát, el kell látnunk a szükséges munkaterülettel és
a fejlesztési és tesztkörnyezetekkel az ML kísérletek (tanítás és tesztelés) végrehajtásához.
A fejlesztési környezet használatával tanítjuk az ML modelljeinket, és a tesztadatok
felhasználásával a fejlesztési vagy tesztkörnyezetekben teszteljük a modellek teljesítményét
és működését a munkafolyamattól vagy követelménytől függően. Amikor az infrastruktúrát
felállítottuk, és betanítottuk, teszteltük, szerializáltuk és becsomagoltuk az első ML
modellt, akkor kész van az MLOps keretrendszer 1. fázisa és validáltuk a robosztusságát.
A szerializálás és konténerizálás fontos folyamat a szabványosításhoz, és hogy felkészítsük
a modelleket a telepítésre.
Most rátérünk a 2. fázis megvalósítására.
44 Az Ön gépi tanulási problémájának jellemzése
3. fázis: Műveletek
A 3. fázis a fő műveletek fázisa a 2. fázisban telepített modelleknél. Ebben a fázisban
a telepített modell teljesítményét monitorozzuk a modell eltérése, elfogultsága vagy
más mérések alap (a következő fejezetekben fogunk elmélyedni ezekben a feltételekben
és mérésekben). A modell teljesítménye alapján engedélyezhetjük a folytonos tanulást
a periodikus modell újratanításán keresztül és engedélyezhetjük a riasztásokat és
tevékenységeket. Ezzel egyidőben monitorozzuk a naplókat a telemetriai adatokban
a termelési környezetnél, hogy észleljünk minden lehetséges hibát, és azonnal megoldjuk
őket, hogy biztosítsuk a termelési rendszer megszakítatlan működését. Egyúttal
kezeljük az adatfolyamatokat, az ML platformot és biztonságot is. Ezen fázis sikeres
megvalósításával monitorozhatjuk a telepített modelleket és robosztus, méretezhető
és biztonságos módon taníthatjuk újra őket.
A legtöbb esetben mind a három fázist meg kell valósítani az ML megoldásához,
de néhány esetben elég az 1. és 2. fázis; például amikor az ML modellek tömeges
következtetéseket készítenek és nem kell valós időben következtetniük. Ezen mérföldkövek
elérésével és a három fázis megvalósításával egy robosztus és méretezhető ML életciklust
állítottunk fel szisztematikusan és fenntarthatóan az alkalmazásainkhoz.
Adatok
Korábban azt hittem, hogy az adatokról tanulni az olyan eszközök használatának
elsajátítását jelenti, mint például a Python, SQL és regression. Az eszköz csak olyan jó,
amennyire a személy, és amennyire az a kontextust érti körülötte. A kontextus és
a tartomány számít az adattisztítástól a modellezésen át az értelmezésig. A világ legjobb
eszközei sem javítanak meg egy rossz problémameghatározást (vagy annak hiányát).
Annak ismerete, hogy mely problémát kell megoldani, nagyon kontextusvezérelt és
üzletfüggő döntés. Ha tudatában van a problémának és kontextusnak, az lehetővé
teszi, hogy felismerje a megfelelő tanítási adatokat, amelyek a probléma megoldásához
szükségesek.
A tanítási adat létfontosságú része az ML rendszereknek. Kulcsszerepet játszik az ML
rendszerek fejlesztésében a hagyományos szoftverrendszerekkel szemben. Ahogy az
előző fejezetben láttuk, mind a kód, mind a tanítási adatok párhuzamosan dolgoznak
egy ML rendszer fejlesztésével és fenntartásával. Ez nem csak az algoritmusról, hanem
az adatokról is szól. Két szempont biztosítja, hogy a megfelelő adatokkal rendelkezzen
az algoritmus tanításához, ezek a megfelelő mennyiségű és minőségő adatok biztosítása:
Követelmények
A termék vagy üzleti/technológiai probléma tulajdonosa kulcsfontosságú szerepet
játszik a robosztus ML rendszer hatékony kialakításának irányításában azáltal, hogy
meghatározza a követelményeket és az adatok méretére, gyűjteményére és a szükséges
adatformátumokra tekintettel alakítja őket. Ezek a követelmények fontos bemenetek az
ML rendszerek fejlesztőinek, mint amilyenek az adatkutatók vagy ML mérnökök, hogy
elkezdhessék megtervezni a megoldást a probléma kezelésére a követelményeken alapuló
megadott adatkészlet elemzése és korrelálása által. Az ML megoldás követelményeinek
átfogó adatkövetelményekből kell állnia. Az adatkövetelmények specifikációi az
adatok minőségéről és mennyiségéről szóló információkból állnak. A követelmények
lehetnek extenzívebbek; például tartalmazhatnak becsléseket az elvárt vagy előre jelzett
teljesítményről a teljesítmény mérőszámainak képében, amelyeket a követelmények
elemzése és közzététele során határoztak meg.
Eszközök és infrastruktúra 47
Eszközök és infrastruktúra
Az MLOps területe gyorsan fejlődött az elmúlt két évben; számos eszköz és
keretrendszer továbbfejlődött az infrastruktúrakínálat részeként. Meglátogathatja
a https://landscape.lfai.foundation/ oldalt, hogy lássa milyen sok
mainstream lehetőséget fejlesztettek, hogy kezelni tudja az ML-t, mély tanulást,
megerősítő tanulást, fejlesztési környezeteket, adatfolyamatokat, modellkezelést,
magyarázandó MI-t, biztonságot és megosztott számítást.
48 Az Ön gépi tanulási problémájának jellemzése
Fontos megjegyzés
A probléma kontextusa:
Adatkutatóként dolgozik egy kis csapatban, három másik adatkutatóval együtt,
egy teherszállító cégnek, amelynek a székhelye a finnországi Turku kikötőben
van. A Finnországba importált termékek 90%-a teherhajókon érkezik országszerte
a kikötőkbe. A teherhajózáshoz az időjárási körülmények és a logisztika időnként
kihívást jelenthet a kikötőknél. Az esős idő hátráltathatja a kikötői logisztikát
és műveleteket, amely hatással lehet az ellátási lánc műveleteire. Az esős idő
előrejelzése lehetőséget ad rá, hogy optimalizálják az olyan erőforrásokat,
mint a humánerőforrás, logisztika és szállítási erőforrások a kikötői ellátási
lánc hatékony műveletei érdekében. Üzleti szempontból az esős idő előrejelzése
lehetőséget ad a kikötőknek, hogy akár ~20%-kal csökkentsék a működési
költségeiket a humánerőforrás, logisztika és szállítási erőforrások hatékony
tervezése és beosztása által a kikötői ellátási lánc műveleteinek esetében.
Feladat:
Adatkutatóként azt a feladatot kapta, hogy fejlesszen egy ML-alapú megoldást
az időjárási körülmények 4 órás előrejelzésére a finnországi Turku kikötőben.
Ez lehetővé teszi a kikötőnek, hogy optimalizálja az erőforrásait, amely akár
20%-os költségmegtakarítást tesz lehetővé. A kezdéshez megkapta az elmúlt
10 év időjárásának adatkészletét Turku kikötőben (az adatkészlet a következő
fejezetben található). A feladata, hogy egy folytonos tanuláson alapuló ML
megoldást alakítson ki a Turku kikötőbeli műveletek optimalizálására.
Összefoglalás 49
Ezzel teljesen készen áll rá, hogy megvalósítson egy MLOps keretrendszert az előző üzleti
problémára.
Összefoglalás
Ebben a fejezetben megismertük az ML megoldás fejlesztési folyamatát, hogy hogyan kell
meghatározni a megfelelő ML megoldást egy problémához, és hogyan kell kategorizálni
a műveleteket a megfelelő MLOps megvalósításához. Vetettünk egy futó pillantást egy
generikus megvalósítási ütemtervre és láttunk néhány tippet a legfontosabb dolgok
beszerzésére, mint amilyenek az eszközök, adatok és infrastruktúra az ML alkalmazásának
megvalósításához. Végül átvettük a következő fejezetben egy MLOps munkafolyamat
(megvitattuk az 1. fejezet: MLOps WorkFlow alapjai részben) megvalósításával
megoldandó üzleti problémát, ahol gyakorlatias tapasztalatokat fogunk szerezni az
MLOps-ról.
A következő fejezetben rátérünk az elméletről a gyakorlati megvalósításra. A fejezet
gyakorlatias lesz, amikor elkezdjük felállítani az MLOps eszközöket az Azure-on
és elkezdjük a kódolást az adatok tisztításához, hogy megoldjuk az üzleti problémát
és rengeteg gyakorlati tapasztalatot szerezzünk.
3
A kód találkozik
az adattal
Ebben a fejezetben elkezdjük az MLOps gyakorlatias megvalósítását, mivel megtanulunk
megoldani egy üzleti problémát az előző fejezetben megvitatott MLOps munkafolyamat
használatával. Megbeszéljük a forráskódkezelés hatékony módszereit is a gépi tanuláshoz
(ML), felderítjük az adatminőség jellemzőit, valamint elemezzük és formáljuk az adatokat
egy ML megoldáshoz.
Azzal kezdjük ezt a fejezetet, hogy kategorizáljuk az üzleti problémát kiválasszuk
a leginkább hozzáillő MLOps megoldást. Ezt követően felállítjuk a szükséges erőforrásokat
és eszközöket a megoldás megvalósításához. Megvitatjuk az ML forráskód-kezelésének
10 vezérelvét, hogy alkalmazzuk a tiszta kód gyakorlatokat. Megvitatjuk, miből áll
a jó minőségű adat az ML-nél és még egyebeket, amelyet az üzleti problémához
kapcsolódó adatkészlet feldolgozása követ, illetve beolvassuk és ellátjuk verzióval az ML
munkaterületen. A fejezet nagy része gyakorlatias és úgy készült, hogy megismertesse Önt
az MLOps-szal. Ehhez ebben a fejezetben a következő fő témákat érintjük:
Ezt a két eszközt használjuk ahhoz, hogy lássuk, hogyan működnek a dolgok egy tisztán
felhőalapú megközelítésnél és egy nyílt forráskódú/felhő-agnosztikus megközelítésnél.
A teljes kódot és a CI/CD műveleteket az Azure DevOps használatával fogjuk irányítani
és kezelni, ahogy az a 3.2 ábrán látható:
Az MLflow telepítése
Az MLflow telepítésével kezdünk, amely egy nyílt forráskódú platform az ML életciklus
kezeléséhez, beleértve a kísérletezést, reprodukálhatóságot, telepítést és egy központi
modelljegyzéket.
Az MLflow telepítéséhez menjen a terminálhoz és hajtsa végre a következő parancsot:
A sikeres telepítés után tesztelje a telepítést úgy, hogy végrehajtja a következő parancsot és
elindítja az mlflow követő UI-t:
mlflow ui
Az mlflow követő UI futásakor egy szerver fog futni, amely az 5000-es porton válaszol
a számítógépén, és egy olyan üzenetet ír ki, mint a következő:
Itt részletes utasításokat találhat egy Azure Machine Learning példány létrehozásáról:
https://docs.microsoft.com/azure/machine-learning/how-to-
manage-workspace?tabs=python.
Azure DevOps
A forráskód és a CI/CD-vel kapcsolatos műveletek egészét az Azure DevOps használatával
fogjuk irányítani és kezelni. Az Azure DevOps adatraktárában lévő kezelt kódot fogjuk
használni az ML modellek tanítására, telepítésére és monitorozására, amelyet a CI/CD
folyamatok tesznek lehetővé. Kezdjük azzal, hogy létrehozunk egy Azure DevOps
előfizetést:
JupyterHub
Végül szükségünk lesz egy interaktív adatelemzési és vizualizációs eszközre, hogy
feldolgozzuk az adatokat a kódunk használatával. Ehhez a JupyterHub-ot használjuk.
Ez egy gyakori adatkutatási eszköz, amelyet az adatkutatók széleskörűen használnak az
adatok feldolgozására, vizualizációjára és ML modellek tanítására. A telepítéséhez kövesse
a két egyszerű lépést:
• Modularitás: A moduláris kód jobb, mint egy nagy tömb. A modularitás támogatja
az újrahasználhatóságot és megkönnyíti a korszerűsítést a szükséges komponensek
cseréjével. A szükségtelen komplexitás és ismétlődés elkerüléséhez kövesse ezt az
aranyszabályt:
Két vagy több ML komponenst csak akkor kell párosítani, amikor az egyik
használja a másikat. Ha egyik sem használja a másikat, akkor a párosítást
el kell kerülni.
Returns:
bool: The return value. True for success, False
otherwise.
"""
64 A kód találkozik az adattal
jupyter lab
%matplotlib inline
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.pyplot import figure
import seaborn as sns
from azureml.core import Workspace, Dataset
#import dataset
df = pd.read_csv('Dataset/weather_dataset_raw.csv')
Adat előfeldolgozás
A nyers adat nem adható át közvetlenül az ML modellnek a tanításhoz. Az adatot
előfeldolgozni vagy finomítani kell, mielőtt az ML modellt tanítjuk. Az importált adat
további elemzéséhez egy lépéssort fogunk végrehajtani az adatok előfeldolgozásához,
hogy az ML tanításához megfelelő formába kerüljön. Azzal kezdjük, hogy értéklejük az
adatminőséget, hogy ellenőrizzük a pontosságot, teljességet, megbízhatóságot, relevanciát
és időbeniséget. Ezután kalibráljuk a szükséges adatokat és a szöveges számokból álló adattá
kódoljuk, amely ideális az ML tanításához. Végül elemezzük a korrelációkat és idősorokat,
és kiszűrjük az ML modell tanításánál irreleváns adatokat.
Adatminőség értékelése
Az adatminőség értékeléséhez megnézzük a pontosságot, teljességet, megbízhatóságot,
relevanciát és időbeniséget. Először ellenőrizzük, hogy az adat teljes-e és megbízható-e
úgy, hogy értékeljük a formátumokat, összesített statisztikákat és az olyan anomáliákat,
mint a hiányzó adat. Pandas függvényeket használunk a következőképpen:
df.describe()
Adat előfeldolgozás 67
df.dtypes
• S_No int64
• Timestamp object
• Location object
• Temperature_C float64
• Apparent_Temperature_C float64
• Humidity float64
• Wind_speed_kmph float64
• Wind_bearing_degrees int64
• Visibility_km float64
• Pressure_millibars float64
• Weather_conditions object
• dtype object
68 A kód találkozik az adattal
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df.isnull().values.any()
df['Weather_conditions'].fillna(method='ffill', inplace=True,
axis=0)
Címkekódolás
Mivel a gépek nem értik az emberi nyelvet vagy szöveget, minden szöveget számokká kell
alakítani. Ezelőtt dolgozzuk fel a szöveget. Van egy Weather_conditons oszlopunk
a szövegben olyan értékekkel vagy címkékkel, mint például rain, snow és clear.
Ezeket az értékeket találtuk a pandas value_counts() függvényének használatával
a következőképpen:
df['Weather_conditions'].value_counts()
Adat előfeldolgozás 69
y = pd.DataFrame(data=y, columns=["Weather_condition"])
df = pd.concat([df,y], axis=1)
df.drop(['Weather_conditions'], axis=1, inplace=True)
Új jellemző: Future_weather_condition
Mivel azzal bíztak meg minket, hogy jósoljuk meg az időjárást 4 órával előre, ezért
létrehozunk egy új jellemzőt Future_weather_condition néven azáltal, hogy négy
sorral eltoljuk a Current_weather_condition-t, mivel minden sort egy órás
időközzel rögzítettek. A Future_weather_condition a jövőbeni időjárási körülmény
címkéje 4 órával később. Ezt az új jellemzőt függő változóként fogjuk használni az
előrejelzéshez az ML használatával:
df['Future_weather_condition'] = df.Current_weather_condition.
shift(4, axis = 0)
df.dropna(inplace=True)
Adatkorrelációk és szűrés
Most, hogy az adat gép által teljesen olvasható, megfigyelhetjük a korrelációkat a Pearson
korrelációs együttható használatával, hogy megfigyeljük, hogyan kapcsolódnak az
egyes oszlopok más oszlopokhoz. Az adat és jellemző korrelációja egy lényeges lépés,
mielőtt jellemzőt választanánk az ML modell tanításához, különösen, amikor a jellemzők
folytonosak, mint a mi esetünkben. A Pearson korrelációs együttható egy statisztikai
lineáris korreláció az egyes változók (X és Y) között, amely egy értéket hoz létre +1 és
-1 között. A +1 érték egy pozitív lineáris korreláció, a -1 egy negatív lineáris korreláció,
és a 0 egy nem lineáris korreláció. Ez használható a folytonos változók közötti kapcsolat
feltárására, bár érdemes megjegyezni, hogy a Pearson korreláció nem jelent okozati
viszonyt. Megvizsgálhatjuk a Pearson korrelációs együtthatókat az adatunknál a pandas
használatával a következőképpen:
Adat előfeldolgozás 71
df.corr(method="pearson")
# Visualizing using heatmap
corrMatrix = df.corr()
sn.heatmap(corrMatrix, annot=True)
plt.show()
Bármi 0,5 és 1,0 között egy pozitív korrelációval rendelkezik és bármi -0,5 és -1,0 között
egy negatív korrelációval rendelkezik. A grafikon alapján pozitív korreláció van a
Current_weather_condition-nel, és a Temperature_C szintén pozitívan korrelál
a Future_weather_c-vel.
Idősorozatok elemzése
Mivel a hőmérséklet egy folytonos változó, érdemes megfigyelni a változását az időben.
Vizualizálhatunk egy idősorozatrajzolót a matplotlib használatával a következőképpen:
time = df['Timestamp]
temp = df['Temperature_C']
# plot graph
plt.plot(time, temp)
plt.show()
weather_ds = dataset.register(workspace=workspace,
name=weather_ds_portofTurku, description='processed weather
data')
76 A kód találkozik az adattal
Az ML folyamat irányába
Idáig feldolgoztuk az adatokat azzal, hogy az olyan szabálytalanságokon dolgoztunk, mint
a hiányzó adatok, a korrelációk megfigyelésével kiválasztott jellemzők, létrehozott új
jellemzők és végül a Machine Learning munkaterületre bevitt és verziókezelt, feldolgozott
adatok. Két módja van az adatbevitelre az ML modell tanításánál az ML folyamatban.
Az egyik mód a központi tárolóból (ahol az összes nyers adatot tárolja) és a másik mód
egy funkció tároló használata. Mivel a tudás hatalom, ismerjük meg a funkció tároló
használatát, mielőtt rátérünk az ML folyamatra.
Az ML folyamat irányába 77
Funkció tároló
Egy funkció tároló tiszteletben tartja a központi tárolót, mivel fontos jellemzőket tárol
és elérhetővé teszi őket a tanításhoz vagy következtetéshez. A funkció tároló egy olyan
tároló, ahol a nyers adatokat hasznos jellemzőkké alakíthatja, amelyeket az ML modellek
közvetlenül tanításra és előrejelzések készítésére használhatnak. A nyers adat általában
különböző adatforrásokból érkezik, amelyek lehetnek, strukturáltak, strukturálatlanok,
folyamszerűek, kötegeltek és valós idejűek. Mindegyiket be kell húzni, át kell alakítani
(egy jellemzőfolyamat használatával) és tárolni kell valahol, ami lehet egy funkció tároló.
A funkció tároló aztán fogja az adatot és fogyasztásra elérhetővé teszi. Az adatkutatók
hajlamosak duplán dolgozni (főleg az adatfeldolgozásnál). Ez elkerülhető, ha van egy
központosított funkció tárolónk. A funkció tároló lehetővé teszi az adatkutatóknak,
hogy hatékonyan osszák meg és használják újra a jellemzőket más csapatokkal, és így nő
a termelékenységük, mivel nem a nulláról kell kezdeniük a jellemzők előfeldolgozását.
Jó tudni egy funkció tároló előnyeit, mivel hasznos lehet az ML folyamat működtetéséhez
(főleg az adatbeviteli lépésnél), azonban nem alkalmas minden esetben. A felhasználás
eseten múlik. A mi esetünk megvalósításánál nem fogjuk használni a funkció tárolót, de
folytatjuk az adat összekapcsolásával közvetlenül a központi tárolóból, ahol előfeldolgozott
és regisztrált adatkészleteink vannak, amelyekre a tanításhoz és teszteléshez szükségünk
van. A bevitt és verziókezelt adatokkal készen áll, hogy továbblépjen a saját ML
folyamatának kialakítására. Az ML folyamat lehetővé teszi a további jellemzőtervezést,
jellemző méretezést, tanítás felügyeletét és az adatkészletek tesztelését, amelyeket az ML
modellek tanításához és a hiperparaméterek hangolásához fogunk használni a gépi tanulás
betanításánál. Az ML folyamatot és funkcionalitásokat felhőalapú számítási erőforrásokon
keresztül fogjuk végrehajtani, nem helyileg a számítógépén, mint ebben a fejezetben.
Ez teljesen felhőalapú lesz.
Összefoglalás
Ebben a fejezetben megismertük hogyan kell meghatározni a megfelelő ML megoldást
egy üzleti problémához, és hogyan kell kategorizálni a műveleteket a megfelelő
MLOps megvalósításához. Beállítottuk az eszközeinket, erőforrásainkat és fejlesztési
környezetünket. Megvitattuk a forráskódkezelés 10 vezérelvét, amelyet az adatminőség
jellemzői követtek. Gratulálok! Eddig megvalósította az MLOps munkafolyamat egyik
kritikus építőelemét, az adatfeldolgozást és az adatok regisztrációját a munkaterületen.
Végül vetettünk egy pillantást az ML folyamat fő részeire.
A következő fejezetben az MLOps legizgalmasabb részét fogja megcsinálni: kialakítja
az ML folyamatot. Haladjunk tovább!
4
Machine Learning
folyamatok
Ebben a fejezetben felfedezzük és megvalósítjuk a gépi tanulás (ML) folyamatokat
az MLOps megközelítés használatával átvett gyakorlatias példákon keresztül. Többet
tudhatunk meg, ha megoldjuk az üzleti problémát, amelyen a 3. fejezet: A kód találkozik
az adattal részben dolgoztunk. A tanulásnak ez az elméleti és gyakorlati megközelítése
biztosítja, hogy széleskörű tudással rendelkezzen az ML folyamatok megtervezéséről és
megvalósításáról a problémáinál és cégének problémáinál. Egy ML folyamat moduláris
szkriptekből vagy kódból áll, amely végrehajtja az ML összes hagyományos lépését, mint
például az adatok előfeldolgozása, funkciók kialakítása és méretezése bármely modell
tanítása vagy újratanítás előtt.
Az előző fejezetben előfeldolgozott adatok bevitelével kezdjük ezt a fejezetet azáltal,
hogy funkciótervezést és -méretezést hajtunk végre, hogy az ML tanításához megfelelő
formába kerüljenek. Felderítjük az ML folyamatok alapelveit és megvalósítjuk őket
az üzleti problémánál. Ezután megnézzük az ML modell tanítását, a hiperparaméter
hangolását és a betanított modellek tesztelését. Végül a modellek csomagolásáról és
a szükséges tárgyakról fogunk tanulni. Regisztrálni fogjuk a modelleket a további
kiértékeléshez és telepíteni fogjuk az ML modelleket. Ebben a fejezetben a következő fő
témákat érintjük:
1. Adatbevitel
2. Modellképzés
3. Modelltesztelés
4. Modellcsomagolás
5. Modellregisztráció
4.7 ábra: Egy Azure DevOps Git tároló klónozása (Git hitelesítő adatok generálása)
2. Másolja ki a HTTPS linket a Command Line részen, hogy megkapja az Azure
DevOps adatraktár linket, például egy ilyet:
https://xxxxxxxxx@dev.azure.com/xxxxx/Learn_MLOps/_git/
Learn_MLOps
86 Machine Learning folyamatok
Itt a kimenet:
import pandas as pd
import numpy as np
import warnings
from math import sqrt
warnings.filterwarnings('ignore')
from azureml.core.run import Run
from azureml.core.experiment import Experiment
from azureml.core.workspace import Workspace
from azureml.core.model import Model
from azureml.core.authentication import
ServicePrincipalAuthentication
from azureml.train.automl import AutoMLConfig
import pickle
from matplotlib import pyplot as plt
from matplotlib.pyplot import figure
import mlflow
88 Machine Learning folyamatok
Az URl az mlruns mappát adja meg, ahová az MLflow tárgyakat és naplókat fogjuk
menteni a kísérletekhez.
A követési URl beállításával az MLflow kísérleteinél, Ön beállította az MLflow-nak
a tárgyak és naplók mentési helyét az mlruns mappában (a biztosított számításán).
Ezen parancsok végrehajtása után ellenőrizze az aktuális útvonalat. Meg fogja találni
az mlruns mappát.
Adatbevitel és funkciótervezés
Az adat létfontosságú az ML modellek tanításához; adatok nélkül nincs ML. Az adatbevitel
egy kapcsoló lépés az ML folyamatnál. Ez foglalkozik az adat mennyiségével,
gyorsaságával, pontosságával és változatosságával a különböző adatforrásokból történő
adat kinyerése által, és beviszi a szükséges adatot a modell tanításához.
Az ML folyamat az ML modellek tanításához megfelelő adatok bevitelével kezdődik. Azzal
kezdünk, hogy hozzáférünk az előző fejezetben regisztrált előfeldolgozott adatokhoz.
Kövesse ezeket a lépéseket, hogy hozzáférjen és importálja az előkészített adatokat és
készen álljon az ML tanítására:
Megjegyzés
Írja be a saját hitelesítő adatait, mint amilyen a subscription_id,
resource_group és workspace_name és indítson el egy munkaterület
objektumot a hitelesítő adatok használatával.
validation_dataset = /
Dataset.Tabular.from_delimited_files(datastore.
path('data/validation_data.csv'))
training_ds = training_dataset.
register(workspace=workspace, name='training_dataset',
description='Dataset to use for ML training')
test_ds = validation_dataset.register(workspace=workspace,
name='test_dataset',
description='Dataset for validation ML models')
Egy 80% (tanítási adat) és 20% (tesztelési adat) felosztással a tanítási és tesztelési
adatkészletek már készek a jellemzők méretezésére és az ML modell tanítására.
3. Ahhoz, hogy az ML modell tanítása optimális és hatékony legyen, adatok egyforma
léptékűek kell legyenek. Ezért méretezzük az adatokat a StandardScalar()
funkció használatával az sklearn-ből, hogy kalibráljuk az adatokban lévő
numerikus értékeket ugyanarra a léptékre:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_val = sc.transform(X_val)
Ennek a futtatásnak vagy kísérletnek a célja, hogy a legjobb SVM modellt tanítsa
be a legjobb paraméterekkel. A Grid Search a különböző paraméterkombinációk
tesztelésére és az algoritmus konvergenciájának optimalizálására használatos
a legjobb teljesítmény érdekében. A Grid Search-nek kell némi idő a futáshoz
(nagyjából 15 perc a STANDARD_DS11_V2 (2 mag, 14 GB RAM) számítógépen).
A Grid Search eredménye vagy kimenete az ajánlja, hogy a legjobban teljesítő
paraméterek legyenek C=1 és a kernel az rbf. A run.log() használatával
naplóztuk a modell tanításához használt adatkészletet (a tanítási készlet) és követtük
a kísérletet. Ezt az adatot az Azure ML munkaterület és az MLflow kísérletekben
naplóztuk.
4. Végül a legjobb paraméterek használatával egy új modellt tanítottunk be a C=1
és kernel='rbf' felhasználásával a következőképpen:
svc = SVC(C=svc_grid.get_params(deep=True)
['estimator__C'], kernel=svc_grid.get_params(deep=True)
['estimator__kernel'])
svc.fit(X_train, y_train)
# Logging training parameters to AzureML and MLFlow
experiments
94 Machine Learning folyamatok
run.log("C", svc_grid.get_params(deep=True)
['estimator__C'])
run.log("Kernel", svc_grid.get_params(deep=True)
['estimator__kernel'])
After training the SVC classifier, the following output
is shown:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto_
deprecated',
kernel='rbf', max_iter=-1, probability=False, random_
state=None,
shrinking=True, tol=0.001, verbose=False)
predicted_svc = svc.predict(X_test)
acc = accuracy_score(y_test, predicted_svc)
fscore = f1_score(y_test, predicted_svc, average="macro")
precision = precision_score(y_test, predicted_svc,
average="macro")
Modellcsomagolás 97
Modellcsomagolás
Miután teszteltük az előző lépésben a betanított modellt, a modell szerializálható egy
fájllá, hogy exportálják a tesztelési vagy termelési környezetbe. A szerializált fájlok
kompatibilitási kihívásokkal járnak, mint amilyen a modell együttműködési képessége,
ha nem jól csinálják. A modell együttműködési képessége kihívás, különösen, amikor
a modelleket eltérő keretrendszerek használatával tanítják. Például ha az 1. modellt az
sklearn használatával tanították, és a 2. modellt a TensorFlow használatával tanították,
akkor az 1. modell nem importálható vagy exportálható a TensorFlow használatával
a modell további finomhangolásához vagy következtetéséhez.
98 Machine Learning folyamatok
Ennek a kódnak a kimenete egy szerializált svc.onnx fájl. Ehhez hasonlóan az ONNX
használatával konvertálni fogjuk a Random Forest modellt is egy rf.onnx nevű
szerializált fájllá, hogy a modellt importálhassuk és exportálhassuk a tesztelési és termelési
környezetekbe:
print('Name:', model.name)
print('Version:', model.version)
print('Name:', model.name)
print('Version:', model.version)
100 Machine Learning folyamatok
A modell sikeres regisztrációja után a print függvény kimenete vissza fogja adni
a regisztrációnál használt modellnevet (random-forest-classifier) és megmutatja
a modell verzióját, például 1. Végül regisztráljuk a termelési tárgyakat a következtetéshez.
Most láthatja minkét modellt az Azure ML munkaterület Models részén, ahogy
a 4.9 ábrán látható:
pickle.dump(sc, scaler_pkl)
Modellek és termelési tárgyak regisztrációja 101
A kód kimenete egy szerializált pickle fájlt fog elmenteni a méretező számára
a scaler.pkl néven. Következőként regisztrálni fogjuk ezt fájlt a modellregisztrációhoz,
hogy később a modelljeinkkel együtt töltsük le és telepítsük a következtetéshez.
A méretező regisztrációja a model .register() függvény használatával történik
a következőképpen:
print('Name:', scaler.name)
print('Version:', scaler.version)
Összefoglalás
Ebben a fejezetben átvettük az ML folyamatok elméletét és gyakoroltuk őket az ML
folyamatok kialakításával egy üzleti probléma esetében. Beállítottuk az eszközöket,
erőforrásokat és a fejlesztési környezetet az ML modellek tanításához. Az adatbeviteli
lépéssel kezdtük, amelyet a modell tanítási, tesztelési és csomagolási lépése követett
és végül befejeztük a regisztráló lépést. Gratulálok! Idáig megvalósította az MLOps
munkafolyamat egy kritikus építőelemét.
A következő fejezetben megnézzük a termelési modellek értékelését és csomagolását.
5
Modellértékelés és
csomagolás
Ebben a fejezetben részletesen fogunk tanulni az ML modellek értékeléséről és
értelmezhetőségi méréseiről. Ez lehetővé teszi számunkra, hogy átfogóan megismerjük
az ML modellek teljesítményét a tanításuk után. Arról is tanulunk majd, hogyan kell
csomagolni és telepíteni a modelleket a további felhasználáshoz (mint amilyenek
a termelési rendszerek). Részletes megvizsgáljuk, hogyan értékeltük és csomagoltuk
a modelleket az előző fejezetben és felderítjük a modellek értékelésének és magyarázásának
új módjait, hogy biztosítsuk a betanított modellek átfogó ismeretét és a potenciális
felhasználhatóságukat a termelési rendszerekben.
104 Modellértékelés és csomagolás
Keresztvalidálás
Egy ML modell értékelése fontos ahhoz, hogy megértsük a viselkedését és trükkös lehet.
Általában két alkészletre osztjuk az adatkészletet: a tanítási és a tesztelési készletekre.
Először a tanítási készletet használjuk fel a modell betanításához, aztán a tesztelési
készletet a modell teszteléséhez. Ezután értékeljük a modell teljesítményét, hogy
meghatározzuk a hibát, olyan mérések használatával mint a modell pontossági százaléka
a tesztadatokon.
Ez a módszertan nem megbízható és átfogó, mert az egyik tesztkészlet pontossága
eltérhet egy másik tesztkészletétől. Ezen probléma elkerülésére a keresztvalidálás biztosít
megoldást az adatkészlet fragmentálásával vagy csoportokra osztásával, és biztosítja, hogy
mindegyik csoportot felhasználják valamikor tesztkészletként, ahogy az 5.2 ábrán látható:
Precizitás
Amikor egy osztályozót betanítottak, a precizitás egy lényeges mérés lehet a pozitív
osztályú jóslások számszerűsítésénél, amelyek valójában igazak és a pozitív osztályhoz
tartoznak. A precizitás számszerűsíti a helyes pozitív előrejelzések számát.
Például mondjuk, hogy betanítottunk egy osztályozót, hogy határozza meg a macskákat és
kutyákat a képek alapján. Amikor a betanított modell a tesztképeken végez következtetést,
a modellt a kutyák előrejelzésére/észlelésére használjuk a képeknél (más szóval a kutyák
a pozitív osztály). A precizitás ebben az esetben számszerűsíti a helyes kutya előrejelzések
számát (pozitív előrejelzések).
A precizitás a helyesen jelzett pozitív példák és az összes észlelt pozitív példa arányaként
számítható.
Precizitás = Igaz pozitívok / (Igaz pozitívok + Hamis pozitívok)
A precizitás a hibás pozitívok minimalizálására fókuszál. A magas precizitás a 0 és 1
közötti tartományba esik, és a hibás pozitívok alacsony arányával van összefüggésben.
Minél magasabb a precizitás, annál jobb; például egy képosztályozó modell, amely
megjósolja, hogy egy rákos beteg igényel-e kemoterápiás kezelést. Ha a modell azt jósolja,
hogy egy betegnek kemoterápiát kellene kapnia, amikor ténylegesen nincs rá szükség, az
nagyon káros lehet, mivel a kemoterápia hatásai károsak lehetnek, ha nincs rá szükség.
Ez az eset egy veszélyes hibás pozitív. A magasabb precizitási pontszám kevesebb hibás
pozitívot eredményez, miközben egy alacsony precizitási pontszám a hibás pozitívok
magasabb számát eredményezi. Így a kemoterápiás kezelés esetében a jósló modellnek
magas precizitási pontszámmal kell rendelkeznie.
108 Modellértékelés és csomagolás
Újrahívás
Amikor egy osztályozót betanítottak, az újrahívás felhasználható a pozitív osztályú
jóslások számszerűsítésére, az adatkészletben lévő pozitív példák összessége alapján.
Az újrahívás a helyesen jelzett pozitívok számát méri az összes elérhető pozitív jóslás
számához viszonyítva. Az újrahívás megadja kihagyott pozitív jóslásokat a precizitással
szemben, amely csak a helyesen jelzett pozitívok számát árulja el az összes pozitív jóslás
számához viszonyítva.
Például vegyük a korábbi példát, ahol betanítottunk egy osztályozót, hogy határozza
meg a macskákat és kutyákat a képek alapján. Amikor a betanított modell a tesztképeken
végez következtetést, a modellt a kutyák előrejelzésére/észlelésére használjuk a képeknél
(más szóval a kutyák a pozitív osztály). Az újrahívás ebben az esetben számszerűsíti
a hiányzó kutya előrejelzések számát (pozitív előrejelzések).
Ilyen módon az újrahívás a pozitív osztály lefedettségének empirikus jelölése.
Újrahívás = Igaz pozitívok / (Igaz pozitívok + Hamis negatívok)
Az újrahívás a hibás negatívok minimalizálására fókuszál. A magas újrahívás alacsony
hibás negatív aránnyal van összefüggésben. Minél magasabb az újrahívás, annál
jobb. Például egy modell, amely a profiladatokat elemzi egy utasnál egy repülőtéren,
hogy megjósolja, az utas potenciális terrorista-e. Ebben az esetben biztonságosabbak
a hibás pozitívok, mint a hibás negatívok. Ha a modell azt jósolja, hogy egy ártatlan
személy terrorista, az leellenőrizhető a következő mélyebb vizsgálatnál. De ha egy
terrorista átmegy, számos élet kerülhet veszélybe. Ebben az esetben a hibás negatívok
biztonságosabbak, mint a hibás pozitívok, mivel a hibás negatívok ellenőrizhetők egy
mélyebb kivizsgálás segítségével. A újrahívásnak magasnak kell lennie a hibás negatívok
elkerüléséhez. Ebben az esetben a magas újrahívási pontszám előnyt élvez a magas
precizitással szemben.
F-pontszám
Olyan esetben, amikor el kell kerülnünk mind a magas hibás pozitívokat, mind a magas
hibás negatívokat, az f-pontszám egy hasznos mérés ennek eléréséhez. Az f-mérték
lehetőséget biztosít rá egyesítsük a precizitást és az újrahívást egyetlen mérőszámmá,
amely mindkét tulajdonságot tükrözi.
Se a precizitás se az újrahívás nem kapja meg a szerepet a teljes történetben.
A precizitásunk lehet a legjobb szörnyű újrahívással, vagy alternatívaként az F-mérték
kifejezi mind a precizitást mind az újrahívást. A következő képlettel számítjuk:
Modellértékelés és értelmezhetőségi mérések 109
Zavarodottsági mátrix
A zavarodottsági mátrix egy olyan mérés, amely az osztályozó modellek teljesítményét
jelenti a tesztadatminták egy készletén, amelynél az előrejelzési értékek ismertek.
Ez egy mátrixos formájú mérés, ahol a zavarodottsági mátrix egy N x N mátrix, és N az
előrejelzett osztályok száma. Például mondjuk, hogy két osztályunk van az előrejelzéshez
(bináris osztályozás), akkor N = 2, és ennek eredményeként egy 2 x 2 mátrixunk lesz,
mint amilyen itt látható az 5.3 ábrán:
AUC-ROC
Egy eltérő perspektíva a modellteljesítmény vizsgálatánál lehetővé teheti számunkra,
hogy értelmezzük a modell teljesítményét és finomhangoljuk azt a jobb eredmények
eléréséhez. A ROC és AUC görbék lehetővé tehetik az ilyen meglátásokat. Nézzük meg,
hogy a Receiver Operating Characteristic (ROC) görbe hogyan teheti lehetővé, hogy
értelmezzük a modellteljesítményt. A ROC görbe az osztályozási modell teljesítményét az
összes osztályozási küszöbértéknél bemutató grafikon. A grafikon két paramétert használ,
hogy leírja a modell teljesítményét: az Igaz pozitív arányt (TPR=TP/TP+FN) és a Hamis
pozitív arányt (FPR=FPFP+TN).
A következő grafikon egy tipikus ROC görbét mutat:
Például egy 0,12 értékű MCC azt mutatja, hogy az osztályozó nagyon véletlenszerű.
Ha 0,93, az azt jelenti, hogy az osztályozó jó. Az MCC egy hasznos mérőszám,
hogy segítsen egy osztályozó eredménytelenségének kimutatásában.
A Rand index
A Rand index egy olyan mérőszám, amely a klaszterező technikák minőségét értékeli.
A klaszterek közötti hasonlóság fokát mutatja. A Rand index a helyes döntések százalékát
méri. A döntések egy adatpontpárt (például dokumentumokat) rendelnek hozzá
ugyanahhoz a klaszterhez.
Ha N adatpont van, a döntések teljes száma = N(N-1)/2, amely a döntésben érintett
adatpontpárokat mutatja.
Rand index = TP + TN / TP + FP + FN + TN
Tisztaság
A tisztaság egy külső értékelési mérőszám a klaszterminőséghez. A tisztaság
kiszámításához a klasztereket a klaszteren belül leggyakoribb osztály szerint kell címkézni,
majd ezen klaszter hozzárendelésének pontossága mérhető, ha a helyesen hozzárendelt
adatpontok számát elosztjuk N-nel (a klaszterezett adatpontok teljes száma). A jó
klaszterezés tisztasági értéke közel van az 1-hez, és a rossz klaszterezés tisztasági értéke
közel van a 0-hoz. Az 5.5 ábra egy tisztaság számítási példa vizuális megjelenítése,
amelynek alább található a magyarázata:
A Silhouette-együttható
A klaszterező algoritmusoknál fontos a klaszterminőség meghatározása. A klaszterek
minőségének vagy jóságának meghatározásához használatos mérőszámként a silhouette-
pontszám vagy silhouette-együttható. Az értéktartománya -1 és +1 közötti. Amikor
a klaszterek egyértelműen megkülönböztethetők vagy jól elkülönülnek egymástól, akkor
a silhouette-pontszám 1. Másrészt a -1 azt jelenti, hogy klasztereket rosszul osztották ki,
és a 0 azt jelenti, hogy a klaszterek közömbösek egymáshoz képest. Így kell kiszámítani
a silhouette-pontszámot:
Silhouette-pontszám = (b-a)/max(a,b)
a = az átlagos távolság az egyes pontok között egy klaszteren belül (átlagos klaszteren
belüli távolság).
b = az átlagos távolság a klaszterek között (átlagos klaszterek közötti távolság).
A Turing-teszt
A Turing-tesztet a híres Alan Turing készítette. Ő az imitációs játékként utalt rá az 1950-es
években. A Turing-teszt egy olyan teszt, amely azt értékeli, hogy egy gép mennyire képes
egy emberéhez hasonló intelligens viselkedés bemutatására. Más értelemben a Turing-
teszt azt is értékeli, hogy egy gép mennyire képes átverni egy embert, hogy az azt higgye,
hogy egy feladatot egy emberszerű gép vagy egy ember végzett-e el. Például működés
közben láthatjuk a Turing-tesztet az 5.6 ábrán, ahol egy szöveg alapú interakció történik az
emberi vizsgáztató, X, és egy számítógép vagy gépi alany (Bob), valamint a vizsgáztató,
X, és egy emberi alany (Alice) között:
Fordulónkénti jutalmak
A megerősítéses tanulási modellek olyan hibrid modellek, amelyek tartalmazzák
a folytonos tanulás mechanizmusát az ágens és a működtető környezet között, hogy
előre meghatározott célokat érjen el. Az ágens a jutalmak alapján tanul, amelyeket
a célhoz vezető hatékony vagy optimális lépésekért kap. Amikor az optimális irányítás
a cél, akkor azalapján akarja mérni az ágenst, hogy milyen jól végzi a feladatot.
Annak számszerűsítéséhez, hogy az ágens mennyire végzi jól a feladatot, az összesített
jutalom, mint például a teljes jutalom epizódonként ("visszatérésként" is ismert) vagy
időléptékenkénti átlagos jutalom használható az irányítás értékelésére és optimalizálására
az ágensnél, tekintettel a környezetre és a célokra.
Megbánás
A megbánás egy gyakran használt mérés az olyan hibrid modelleknél, mint amilyenek
a megerősítéses tanulási modellek. Minden időléptéknél Ön kiszámítja a különbséget
az optimális döntés és az algoritmus által hozott döntés jutalma között. A kumulatív
megbánás ezután kiszámítható ennek összegzésével. A minimális megbánás 0 az optimális
intézkedésnél. Minél kisebb a megbánás, annál jobban teljesített egy algoritmus.
A Megbánás lehetővé teszi az ágens tevékenységeinek értékelését a legjobb intézkedésre
való tekintettel az ágens optimális teljesítménye érdekében, ahogy az 5.7 ábrán látható.
Az árnyékolt terület a pirosban a megbánás:
A modell értelmezhetősége és annak magyarázata, hogy modell miért hoz meg bizonyos
döntéseket vagy előrejelzéseket, számos üzleti problémánál vagy iparágnál kulcsfontosságú
lehet. A korábban megvitatott technikák használatával értelmezhetjük a modell
teljesítményét, de marad néhány szürke terület, például a mély tanulásos modellek, amelye
fekete dobozos modellek. Általánosan megjegyzendő, hogy ezek a modellek taníthatók
úgy, hogy nagyszerű eredményeket vagy pontosságokat érjenek el a tesztadatokon,
de nehéz megmondani miért. Az ilyen szituációkban a SHapley Additive exPlanations
(SHAP) hasznos lehet annak dekódolásához, hogy mi történik az előrejelzett
eredményekkel és melyik jellemző előrejelzése korrelál a legjobban. A SHAP-ot ez
a dokumentum ajánlotta (a NIPS-nél): http://papers.nips.cc/paper/7062-a-
unified-approach-to-interpreting-model-predictions.
A SHAP működik az osztályozási és regressziós modelleknél is. A SHAP elsődleges célja,
hogy megmagyarázza a modell kimeneti előrejelzését az egyes jellemzők hozzájárulásának
kiszámításával. A SHAP magyarázási módszer Shapley-értékeket használ, hogy
megmagyarázza a jellemző fontosságát a modell kimeneteinél vagy előrejelzéseinél.
A Shapley-értékeket a kooperatív játékelméletből számítják, és ezek az értékek -1 és 1
között változnak. A Shapley-értékek leírják a modell kimeneteinek eloszlását a jellemzők
között, ahogy az 5.8 ábrán látható:
Számos SHAP magyarázó technika van, mint például a SHAP Tree Explainer, SHAP
Deep Explainer, SHAP Linear Explainer, és SHAP Kernel Explainer. A felhasználási
esettől függően ezek a magyarázók hasznos információt nyújthatnak a modell
előrejelzéseiről és segítenek megérteni a fekete dobozos modelleket. Továbbiakat
itt olvashat: https://christophm.github.io/interpretable-ml-book/
shap.html
MIMIC magyarázó
A Mimic magyarázó egy fekete dobozos modelleket utánzó megközelítés, amely egy
magyarázható globális helyettes modellt tanít. Ezek a betanított globális helyettesítő
modellek magyarázható modellek, amelyeket úgy tanítottak be, hogy megközelítsék
bármely fekete dobozos modell előrejelzéseit, amilyen pontosan csak lehetséges.
A helyettesítő modell használatával egy fekete dobozos modell a következőképpen
mérhető vagy magyarázható.
Az következő lépéseket egy helyettesítő modell tanításához hajtjuk végre:
1. Egy helyettesítő modell tanítását azzal kezdjük, hogy kiválasztunk egy adatkészletet,
X-et. Ez az adatkészlet leget ugyanaz, mint amit a fekete dobozos modell tanításához
használtunk vagy lehet egy hasonló eloszlásokkal rendelkező másik adatkészlet,
a felhasználástól függően.
2. Nyerjük ki a fekete dobozos modell előrejelzéseit a kiválasztott adatkészlethez,
X-hez.
3. Válasszunk ki egy magyarázható modelltípust (lineáris modell, döntési fa, random
forest stb.).
4. Az adatkészlet, X, és annak előrejelzéseinek használatával tanítsuk be
a magyarázható modellt.
5. Most van egy betanított helyettesítő modellje. Éljen!
6. Értékelje ki, hogy a helyettesítő modell milyen jól adta vissza a fekete dobozos
modell előrejelzéseit, például az R-négyzet vagy F-pontszám használatával.
7. Értelmezze a fekete dobozos modell előrejelzéseit a helyettesítő modell
értelmezésével.
Átlag
A középérték vagy átlag az adatkészlet központi értéke. Kiszámításához össze kell adni
az összes értéket és az összeget elosztani az értékek számával:
átlag = x1 + x2 + x3 +.... + xn / n
Standard eltérés
A standard eltérés az értékek szórását méri az adatkészletben. Minél alacsonyabb
a standard eltérés, az adatpontok annál közelebb vannak az átlaghoz. Egy nagyobb
szórású adatkészletnek magasabb lenne a standard eltérése.
Elfogultság
Az elfogultság a leképező függvény erősségét (vagy merevségét) méri a független
(bemeneti) és függő (kimeneti) változók között. Minél erősebbek a modell feltételezései
a leképezés funkcionális formájának tekintetében, annál nagyobb az elfogultság.
120 Modellértékelés és csomagolás
A magas elfogultság jól jön, amikor az alapot szolgáló igaz (de ismeretlen) modellnek
olyan egyeztetési tulajdonságai vannak, mint a leképező függvény feltételezései. Azonban
teljesen elveszítheti a fonalat, ha a mögöttes modell nem mutat hasonló tulajdonságokat
a leképzés funkcionális formájával. Például az a feltételezés, hogy egy lineáris kapcsolat
van a változók között, amikor a valóságban az erősen nem lineáris, és ez rossz
illeszkedéshez vezetne:
Az elfogultság mindig pozitív érték. Itt van egy további forrás, hogy többet tudjon
az elfogultságról az ML-nél. Ez a cikk részletesebb magyarázatot kínál: https://
kourentzes.com/forecasting/2014/12/17/the-bias-coefficient-a-
new-metric-for-forecast-bias/.
Variancia
A modell varianciája annak a mértéke, ahogy a modell teljesítménye változik, amikor
eltérő tanítási adatokra illesztik. A jellemzők modellre gyakorolt hatását rögzíti
a variancia.
Egy magas varianciájú modell sokat fog változni a tanítási adatkészlet kis változásaira is.
Másrészt egy alacsony varianciájú modell nem változna sokat a tanítási adatkészlet nagy
változásaira sem. A variancia mindig pozitív érték.
R-négyzet
Az R-négyzet, determinációs együtthatóként is ismert, a függő változó változását méri,
amely magyarázható a modellel. Kiszámításához a megmagyarázott változást el kell
osztani a teljes változással. Egyszerűen az R-négyzet azt méri, az adatpontok mennyire
vannak közel az illesztett regressziós vonalhoz.
Az R-négyzet értéke 0 és 1 közé esik. Az alacsony R-négyzet azt jelzi, hogy függő változó
változásának nagy részét a modell nem magyarázza, hanem más tényezők okozzák,
amelyeket az nem tartalmaz. Általában véve egy magasabb R-négyzet értéket kell
megcéloznia, mert ez azt jelzi, hogy a modell jobban illeszkedik az adatokra.
RMSE
Az átlagos négyzetes gyökeltérés (RMSE) a különbséget méri a modell előrejelzett értékei
és a megfigyelt (valós) értékek között.
Modellértékelés és értelmezhetőségi mérések 121
Számos opció van, és Önnek ki kell választania a helyes mérést a valós termelési
szituációhoz, hogy rendesen igazolt értékelésekkel rendelkezzen; például miért akarna
egy adatkutató vagy adatkutató csapat egy értékelési mérést választani egy másik helyett,
például az R-négyzetet az átlag helyett egy regressziós problémánál. A felhasználási eseten
és az adattípuson múlik.
Emberi elfogultság
Mint az emberi agy, az ML rendszerek is ki vannak téve a kognitív elfogultságnak. Az emberi
kognitív elfogultság olyan folyamat, amely rontja a döntéshozást és érvelési képességet,
amely hibázáshoz vezet. Az emberi elfogultság esetei magukba foglalják a sztereotipizálást,
szelektív észlelést, a bandwagon-effektust (divatból cselekvés), kivételezést, az igenlésre való
hajlamot, megfigyelési szelekciós elfogultságot és a spekuláns tévképzetét. Számos esetben
fontos elkerülni az ilyen elfogultságokat az ML rendszereknél, hogy észszerű és optimális
döntéseket hozzanak. Ez pragmatikusabbá teszi az ML rendszereket az embereknél, ha
megoldjuk az emberi elfogultság levezetését és kijavítjuk azt. Ez különösen hasznos a
HITL-alapú rendszereknél. Az elfogultság tesztelésénél az emberi elfogultság három típusa
azonosítható, és ezeken kell dolgozni az ML rendszer döntéshozásának fenntartásához, hogy
az mentes legyen az emberi elfogultságtól. A három emberi elfogultság a következő:
• Interakció elfogultság
Amikor egy ML rendszerrel megetetnek egy olyan adatkészletet, amely bizonyos
típusú bejegyzések tartalmaz, akkor egy interakció elfogultság jön létre, amely
megakadályozza az algoritmust, hogy más típusú bejegyzéseket ismerjen fel. Ez az
elfogultságtípus a betanított modellek következtetéses tesztelésénél azonosítható.
Az olyan módszerek, mint a SHAP és PFI hasznosak lehetnek az ilyen elfogultság
azonosításánál.
• Látens elfogultság
A látens elfogultság akkor tapasztalható, amikor a tanítási adatkészletben több
példa rendelkezik egy jellemzővel, amely kiemelkedő. Ezután az algoritmus nem
fogja felismerni azokat, amelyek nem rendelkeznek ezzel a jellemzővel. Például
nemrégiben az Amazon HR algoritmusa, amely a jelentkezések alapján választotta
ki az embereket a vállalaton belüli szerepekre, elfogult lett a nőkkel szemben, az oka
a látens elfogultság volt.
122 Modellértékelés és csomagolás
• Szelekciós elfogultság
Szelekciós elfogultság akkor kerül bele egy algoritmusba, amikor az elemzésre
kijelölt adatok nincsenek jól randomizálva. Például egy nagy teljesítményű
arcfelismerő rendszer tervezésekor, kulcsfontosságú minden lehetséges arcszerkezet
és arcforma típusát belefoglalni, illetve mintát venni minden etnikai és földrajzi
lehetőségből, hogy elkerüljék a szelekciós elfogultságot. A szelekciós elfogultság
olyan módszerekkel azonosítható, mint a SHAP vagy PFI, amelyek figyelik
a modellre jellemző elfogultságot.
Optimális intézkedés
Az emberi megerősítéses tanulás esetében a rendszer célja, hogy maximalizálja a művelet
jutalmát az aktuális állapotban. A műveletekért kapott jutalom maximalizálása érdekében
az optimális tevékenység használható mérőszámként a rendszer méréséhez. Az optimális
tevékenység esetében olyan művelet kerül kiválasztásra, amely az aktuális állapotban
maximalizálja a jutalmat. Az optimális tevékenység az a mérőszám vagy állapot, amely
ideális egy rendszernek, hogy legjobban teljesítsen. Egy emberi megerősítéses tanuláson
alapuló rendszerben egy emberi kezelő vagy tanár állítja be az optimális tevékenységet
a rendszer céljaként, hogy elérje az emberszintű teljesítményt.
Az automatizáció foka
Az automatizáció a termékek automatikus előállításának folyamata, vagy egy feladat
elvégzése robotok vagy algoritmusok használatával, közvetlen emberi segítség nélkül.
Egy ML rendszer automatizációs szintje kiszámítható az összes feladat automatizációs
fokának felhasználásával. Alapvetően ez a rendszer által teljesen automatizált feladatok
százaléka, és ezek a feladatok nem igényelnek semmilyen emberi segítséget. Azt mutatja,
hogy az összes feladatnak hány százaléka teljesen automatizált. Például a DeepMind
AlphaGo-ja elérte a 100%-os automatizációt, hogy önállóan működjön, hogy legyőzze
a világbajnok ember játékosokat.
Kockázati arány
Annak valószínűsége, hogy egy ML modell hibákat vét, a hibaarány. A hibaarányt a modell
termelési rendszerekben nyújtott teljesítménye alapján számítják. Minél alacsonyabb
a hibaarány, annál jobb egy ML rendszer. Az ember a hurokban rendszerek célja,
hogy csökkentse a hibaarányt, megtanítsa az ML modellt a legoptimálisabb működésre.
Termeléstesztelési módszerek
Mivel különféle üzletek működnek, ezért eltérő típusú termelési rendszerek szolgálják
ezeket az üzleteket. Ebben részben megnézzük az általánosan használt termelési
rendszerek különböző típusait, és hogy hogyan kell tesztelni őket.
Termeléstesztelési módszerek 123
Tömeges tesztelés
A tömeges tesztelés validálja a modelljét azzal, hogy olyan környezetben hajt végre
tesztelést, amely különbözik a tanítási környezettől. A tömeges tesztelést egy adatminta-
készleten hajtják végre, hogy teszteljék a modell a következtetését a választott mérőszámok
használatával, mint amilyen a pontosság, RMSE vagy f1-pontszám. A tömeges tesztelés
elvégezhető különféle számítási típusokon, például a felhőben vagy egy távoli szerveren
vagy egy tesztszerveren. A modellt általában egy szerializált fáljként szolgáltatják, és a fájlt
objektumként töltik be és a tesztadatokon következtetnek vele.
A/B tesztelés
Biztosan találkozott már az A/B teszteléssel. Gyakran használják szolgáltatások
tervezésénél (weboldalak, mobil appok stb.) és reklámkampányok értékelésénél.
Például arra használják, hogy kiértékeljék, egy konkrét célközönségnek szánt kialakítás
konkrét megváltoztatása pozitív hatással lesz-e az olyan üzleti mutatókra, mint
a felhasználói elköteleződés, az átkattintási arány vagy értékesítés arány. Egy hasonló
technikát alkalmaznak az ML modellek tesztelésénél az A/B tesztelés használatával.
Amikor a modelleket az A/B tesztelés használatával tesztelik, a teszt olyan fontos
kérdéseket fog megválaszolni, mint például a következők:
Tesztelés CI/CD-ben
A tesztelés megvalósítása a CI/CD folyamatok részeként értékes lehet a modell
teljesítményének automatizálása és (beállított kritériumok alapján történő) értékelése
tekintetében. A CI/CD folyamatokat többféleképpen lehet beállítani a műveletektől és
architektúrától függően, például:
Szállíthatóság
Az ML modellek szoftvertárgyakba történő csomagolása lehetővé teszi, hogy elszállítsák egyik
környezetekből a másikba. Ez egy fájl vagy fájlköteg vagy konténer szállításával végezhető
el. Mindegyik esetben elszállíthatjuk a tárgyakat és különböző beállításokban átmásolhatjuk
a modellt. Például egy csomagolt modell telepíthető egy virtuális gépen vagy szerver nélküli
beállításban.
126 Modellértékelés és csomagolás
Következtetés
Az ML következtetés egy olyan folyamat, amely magába foglalja a valós idejű adatok
feldolgozását az ML modellek használatával egy kimenet kiszámításához, ami például egy
előrejelzés vagy numerikus pontszám. Az ML modellek csomagolásának célja, hogy képes
legyen kiszolgálni az ML modelleket valós időben az ML következtetéshez. A hatékony
ML modellcsomagolás (például egy szerializált modell vagy konténer) képes kezelni
a telepítést és kiszolgálni a modellt az előrejelzésekhez és a valós idejű vagy kötegelt adatok
elemzéséhez.
Együttműködési képesség
Az ML modell együttműködési képessége két vagy több modell vagy komponens azon
képességes, hogy információt cseréljenek, és hogy felhasználják a kicserélt információt
egymás tanítására vagy finomhangolására és hatékonyan végezzék a műveleteket.
A kicserélt információ formája lehet adat vagy szoftvertárgy vagy modellparaméter.
Az ilyen információk lehetővé teszik a modellek finomhangolását, újratanítását vagy
adaptálását különböző környezetekhez más szoftvertárgyak tapasztalata alapján,
a teljesítmény és hatékonyság érdekében. Az ML modellek csomagolása az alapja az
ML modellek együttműködési képességének lehetővé tételéhez.
Telepítési agnoszticitás
ML modellek olyan szoftvertárgyakba történő csomagolás, mint amilyenek a szerializált
fájlok vagy konténerek, lehetővé teszik, hogy a modelleket változatos futtásidejű
környezetekbe szállítsák és telepítsék, mint amilyen egy virtuális gép, egy tároló szerver
nélküli környezet, egy streaming szolgáltatás, mikroszolgáltatás vagy szolgáltatásköteg.
Olyan szállítási és telepítési agnoszticitási lehetőségeket tár fel, amelyek ugyanazokat
a szoftvertárgyakat használják, mint amibe egy ML modellt csomagoltak.
Szerializált fájlok
A szerializálás egy fontos folyamat egy ML modell csomagolásánál, mivel lehetővé
teszi a modell hordozhatóságát, együttműködési képességét és a modellkövetkeztetést.
A szerializálás egy objektum vagy adatszerkezet (például változók, tömbök és rekordok)
tárolható tárggyá (például egy fájl vagy memóriapuffer) történő konvertálásának
módszere, amely szállítható a számítógépes hálózatok között. A szerializálás fő célja
a szerializált fájl újraépítése az előző adatszerkezetté (például egy szerializált fájlt egy
ML modellváltozóvá) egy eltérő környezetben. Így egy újonnan betanított ML modell
szerializálható egy fájllá és exportálható egy új környezetbe, ahol deszerializálható egy
ML modellváltozóvá vagy adatszerkezetté az ML következtetéséhez. A szerializált fájl nem
menti vagy tartalmazza a korábban társított módszereket vagy megvalósításokat. Csak
az adatszerkezetet menti, ahogy van, egy tárolható tárgyban, például egy fájlban.
Itt van néhány népszerű szerializálási formátum az 5.1 táblázatban:
Következtetéskész modellek
Korábban egy üzleti problémán dolgoztunk, hogy megjósoljuk az időjárást egy kikötőben.
Ahhoz, hogy kialakítsunk egy megoldást ehhez az üzleti problémához, végrehajtottuk
az adatfeldolgozást és az ML modell tanítását, amelyet a modellek szerializálása követett.
Most ebben a részben megismerjük, hogyan történik a következtetés a szerializált
modellen. Ezen rész kódja elérhető a mellékelt a Jupyter jegyzettömbből a fejezethez
tartozó mappában a könyv GitHub adatraktárában. Itt vannak az utasítások a kód
futtatásához:
import pandas as pd
import numpy as np
import warnings
import pickle
from math import sqrt
warnings.filterwarnings('ignore')
from azureml.core.run import Run
from azureml.core.experiment import Experiment
from azureml.core.workspace import Workspace
from azureml.core.model import Model
# Connect to Workspace
ws = Workspace.from_config()
print(ws)
# Load Scaler and model to test
scaler = Model(ws,'scaler').download(exist_ok=True)
svc_model = Model(ws,'support-vector-classifier').
download(exist_ok=True)
Ezen kód futtatása után új letöltött fájlokat fog látni a bal panelen a JupyterLab ablakában.
import onnxruntime as rt
import numpy
sess = rt.InferenceSession("svc.onnx")
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
ML modelles következtetés
Az ML modelles következtetés végrehajtásához méretezzük a tesztadatokat és beállítjuk
őket a következtetéshez a fit_transform() metódus használatával. Most végrehajtjuk
a következtetést a tesztadatokon az ONNX munkamenet használatával és futtatjuk
a sess.run() függvénnyel a test_data bemeneti adatok float 32 formátumban
való átadásával. Végül kiírjuk a modell következtetésének eredményeit:
Összefoglalás
Ebben a fejezetben megismertük az ML modellek értékelésére és értelmezésére szolgáló
különféle módszereket. Tanultunk a termelési tesztelés módszereiről és a modellek
csomagolásának jelentőségéről, miért és hogyan kell csomagolni a modelleket, és
különféle gyakorlatokról és eszközökről a modellek csomagolására az ML modelles
következtetésekhez a termelésben. Végül ahhoz, hogy megértsük a következtetéshez
használt szerializált modellek be- és kicsomagolásának működését, végrehajtottuk az
ML modelles következtetés gyakorlati megvalósítását szerializált modellek használatával
a tesztadatokon.
A következő fejezetben megismerjük az Ön ML modelljeinek telepítését. Csatolják be
biztonsági öveiket és készüljenek fel a modellek termelésben történő telepítésére!
2. rész:
Gépi tanulási
modellek telepítése
méretre
• ML a kutatásban vs a termelésben
• Az ML következtetés típusainak megismerése a termelésben
• A leképező infrastruktúra az Ön megoldásánál
• Gyakorlati telepítés (az üzleti problémához)
• A folytonos integráció és folytonos fejlesztés szükségességének felismerése
ML a kutatásban vs a termelésben
Az ML-t a kutatásban adott célokkal és prioritásokkal valósítják meg, hogy javítsák
a legkorszerűbb technológiát, míg az ML célja a termelésben egy szituáció vagy üzlet
optimalizálása, automatizálása vagy javítása.
Az ML modellek telepítésének megértéséhez kezdjük azzal, hogy összehasonlítjuk, hogyan
valósítanak meg egy ML-t a kutatásban és a termelésben (az iparban). Több tényező,
mint például a teljesítmény, prioritás, adat, méltányosság és értelmezhetőség (ahogy a 6.1
táblázat felsorolja) írja le, miben különbözik az ML működése és telepítése a kutatásban
és a termelésben:
Adatok
Általában véve az adatok a kutatási projektekben statikusak, mivel az adatkutatók vagy
statisztikusok egy beállított adatkészleten dolgoznak és próbálják felülmúlni az aktuálisan
legkorszerűbb modelleket. Például nemrég számos áttörést figyeltek meg a természetes
nyelveket feldolgozó modellekben, például a Google BERT-jénél vagy a Baidu XLNet-
jénél. Ezen modellek tanításához az adatokat összegyűjtötték és lefordították statikus
adatkészletté. A kutatás világában a modellek teljesítményének értékeléséhez vagy
teljesítményméréséhez statikus adatkészleteket használnak, ahogy a 6.2 táblázatban
látható (forrás: https://arxiv.org/abs/1906.08237):
ML a kutatásban vs a termelésben 137
Méltányosság
A való életben az elfogult modellek költségesek lehetnek. A nem méltányos vagy elfogult
döntések rossz üzleti és műveleti választásokhoz vezetnek. A termelésben lévő ML
modelleknél fontos, hogy döntések a lehető legméltányosabbak legyenek. Költséges
lehet az üzletnek, ha a termelésben lévő modell nem méltányos. Például nemrég az
Amazon készített egy HR szűrő szoftvert, amely kiszűri a jelentkezőket a munkára
való megfelelőségük alapján. Az ML szakértők az Amazonnál felfedezték, hogy a férfi
jelentkezők előnyben részesültek a női jelentkezőkkel szemben (forrás: https://
www.businessinsider.com/amazon-ai-biased-against-women-no-
surprise-sandra-wachter-2018-10). Ez a fajta rendszerelfogultság költséges
lehet, mivel az Amazon esetében elszalaszthatnak néhány csodálatos tehetséget az
elfogultság miatt. Így a méltányos modellek kritikusak a termelésben, és folyamatosan
monitorozni kell őket. A kutatásban is fontosak a méltányos modellek, de nem olyan
kritikusak, mint a termelésben vagy a való életben, és nem olyan kritikusan monitorozzák
a méltányosságot, mint a termelésben. A kutatás célja a legkorszerűbb technológia
felülmúlása, és a modell méltányossága csak egy másodlagos cél.
138 Az Ön ML rendszerének telepítési alapelvei
Értelmezhetőség
A modell értelmezhetősége kritikus a termelésben, hogy megértsék a korrelációt vagy
okozatot az ML modell döntései és a műveletekre vagy üzletre gyakorolt hatás között, hogy
egy adott üzletet vagy feladatot optimalizáljon, javítson vagy automatizáljon. A kutatásban
nem ez a helyzet, ahol a cél a legkorszerűbb eredmények elérése vagy felülmúlása, és itt
a jobb teljesítmény (például a pontosság vagy más mérőszámok) a prioritás. A kutatás
esetében az ML értelmezhetősége jó, ha van, de nem követelmény. Jellemzően az ML
projektek inkább a kimenetelek előrejelzésével foglalkoznak, mint az okozat megértésével.
Az ML modellek nagyszerűek a korrelációk megtalálásában az adatok között, de az
okozatokban nem. Nem akarunk abba a hibába esni, hogy azonosnak tekintjük a társítást
az okkal a vállalkozásunkban. Annak a lehetőségét, hogy az ML-re támaszkodjunk,
ez a probléma komolyan akadályozza. Ez a probléma komolyan korlátozza azon
lehetőségünket, hogy az ML-t döntéshozásra használjuk. Olyan erőforrásokra van
szükségünk, amelyek megérthetik az okozati összefüggéseket az adatok között, olyan ML
megoldásokat alakítanak ki, amelyek jól általánosítanak üzleti szempontból. A jó modell
értelmezhetőségi mechanizmusok javíthatják az okozat felismerését és lehetővé teszi,
hogy olyan ML megoldásokat készítsünk, amely jól általánosít és képes korábban nem
látott adatokat kezelni. Ennek eredményeként megbízhatóbb és átláthatóbb döntéseket
hozhatunk az ML használatával.
A termelés esetében (egy üzleti felhasználási esetnél) az értelmezhetőség hiánya
egyáltalán nem ajánlott. Nézzünk meg egy elméleti esetet. Tételezzük fel, hogy Ön rákos
és ki kell választania egy sebészt a műtétje végrehajtásához. Két sebész érhető el, egy
ember (80%-os gyógyulási aránnyal) és a másik egy MI fekete dobozos modell (90%-os
gyógyulási aránnyal), amelynél nem értelmezhető vagy magyarázható, hogyan működik,
de magas a gyógyulási arány. Mit választana? MI-t vagy egy sebészt a rák gyógyítására?
Egyszerűbb lenne a sebészt lecserélni az MI-re, ha a modell nem egy fekete dobozos
modell lenne. Bár az MI jobb, mint a sebész, a modell megértése nélkül a döntés, bizalom
és megfelelőség problémás. A modell értelmezhetősége létfontosságú a jogi döntések
meghozásához. Ezért lényeges a modell értelmezhetősége az ML-nél a termelésben.
A következő fejezetekben többet fogunk erről tanulni.
Teljesítmény
Amikor az ML modellek teljesítményére terelődik a szó, a kutatásban a legkorszerűbb modellek
javításán van a fókusz, míg a termelésben az egyszerűbb modellek helyett a jobb modellek
kialakításán van a hangsúly, amely kiszolgálja az üzleti igényeket (a legkorszerűbb modellek
nincsenek fókuszban).
Az ML következtetés típusainak megismerése a termelésben 139
Prioritás
A kutatásban a modellek gyorsabb és jobb betanítása a prioritás, míg a termelésben
a gyorsabb következtetés a prioritás, mivel a fókusz a döntéshozáson és az üzleti igények
valós idejű kiszolgálásán van.
Telepítési célok
Ebben a részben megnézzük a telepítési célok különböző típusait, és hogy miért és hogyan
szolgáljuk ki az ML modelleket a következtetéshez ezeken a telepítési célokon. Kezdésként
nézzünk meg egy virtuális gépet vagy egy helyi szervert.
Virtuális gépek
Virtuális gépek lehetnek a felhőben vagy helyben az üzlet vagy szervezt IT beállításaitól függően.
Az ML modellek virtuális gépeken történő kiszolgálása elég gyakori. Az ML modellek virtuális
gépeken való kiszolgálása webszolgáltatások formájában történik. A virtuális gépen futó
webszolgáltatás egy felhasználói kérést (HTTP kérés formájában) kap, amely tartalmazza
a bemeneti adatokat. A webszolgáltatás a bemeneti adatok átvétele után előfeldolgozza azt az ML
modell következtetéséhez szükséges formátumban, amely webszolgáltatás része. Miután az ML
modell elkészíti az előrejelzést vagy végrehajtja a feladatot, a kimenetet átalakítja és egy felhasználó
által olvasható formátumban mutatja be. Gyakran a formátum JavaScript Object Notation
(JSON) vagy Extensible Markup language string (XML). Általában egy webszolgáltatást egy
REST API formájában szolgálnak ki. A REST API webszolgáltatások többféle eszköz használatával
fejleszthetők; például FLASK vagy FAST API webalkalmazási eszközök használhatók a REST API
webszolgáltatások fejlesztésére Python vagy Spring Boot felhasználásával Java-ban, vagy Plumber-
rel R-ben, az igényektől függően. Ezzel párhuzamosan a virtuális gépek kombinációját használják
a webszolgáltatás robosztusságának méretezésére és fenntartására.
140 Az Ön ML rendszerének telepítési alapelvei
Konténerek
A konténerek egy megbízható mód a Linux operációs rendszert használó alkalmazások
futtatására, személyre szabott beállításokkal. A konténer egy alkalmazás, amely egyedi
beállítással fut, ahogy a fejlesztő beállította. A konténerek egy alternatív és erőforrás-
takarékosabb módjai a modellek kiszolgálásának a virtuális gépeknél. Úgy működnek, mint
a virtuális gépek, mivel van saját futásidejű környezetük, amely elszigetelt és a memóriára,
fájlrendszerre és folyamatokra korlátozódik.
A tervezők testre szabhatják a konténereket, hogy a szükséges erőforrásokra korlátozzák
őket, mint amilyen a memória, fájlrendszer és a folyamatok, a virtuális gépek is ilyen
beállításokra vannak korlátozva. Rugalmasabbak és modulárisan működnek és így
optimálisabban és hatékonyabban használják az erőforrásokat. lehetővé teszik a nullára
méretezést, mivel a konténerek csökkenthetők nulla másolatra és kérésre futtathatnak
egy biztonsági mentést. Így lehetséges az alacsonyabb számítási kapacitás fogyasztása
a virtuális gépeken futó webszolgáltatásokhoz képest. Az alacsonyabb számítási
kapacitásfogyasztás eredményeként lehetséges a költségmegtakarítás a felhőben.
Az ML következtetés típusainak megismerése a termelésben 141
Szerver nélküli
A szerver nélküli számítás, ahogy a neve sugallja, nem tartalmaz virtuális gépet vagy
konténert. Megszünteti az infrastruktúrakezelési feladatokat, mint például az OS kezelése,
szerverkezelés, kapacitásbiztosítás és tárhelykezelés. A szerver nélküli számítás lehetővé
teszi a fejlesztőknek és szervezeteknek, hogy a fő termékükre koncentráljanak az olyan
hétköznapi feladatok helyett, mint a szerverek kezelése és működtetése, akár a felhőn,
akár helyben vannak. A szerver nélküli számítás felhőalapú szolgáltatások használatával
irányítható.
Például a Microsoft Azure az Azure Functions-t használja, és az AWS a Lambda
functions-t használja a szerver nélküli alkalmazások telepítéséhez. A szerver nélküli
alkalmazások telepítése magába foglalja egy fájlgyűjtemény elküldését ( .zip fájlok
formájában) az ML alkalmazások futtatásához. A .zip archívum jellemzően egy adott
függvénnyel vagy metódussal rendelkező fájl, amely futtatható. A zip archívumot feltöltik
a felhőplatformra a felhőszolgáltatások használatával és szerver nélküli alkalmazásként
telepítik. A telepített alkalmazás egy API végpontként szolgál, hogy elküldje a bemenetet
az ML modellt kiszolgáló szerver nélküli alkalmazásnak.
Számos előnye lehet a szerver nélküli alkalmazásokat használó ML modellek telepítésének:
nem szükséges telepíteni vagy frissíteni a függőségeket vagy karbantartani vagy frissíteni
a rendszereket. A szerver nélküli alkalmazások igény szerint automatikusan méreteznek
robusztus az egész teljesítményük. A szinkron (a végrehajtás egymás után történik
egyetlen sorozatban, A → B → C → D) és aszinkron (a kivétel párhuzamosan vagy egy
prioritás alapján történik, nem sorrendben: A → C → D → B vagy A és B egymással
párhuzamosan, illetve C és D párhuzamosan) műveletek is támogatottak a szerver
nélküli funkcióknál. Azonban van néhány hátrány is, például az olyan felhő erőforrások
elérhetősége, mint a RAM vagy tárhely vagy GPU, amelyek kritikus követelmények az
olyan nehéz modellek futtatásához, mint amilyenek a mély tanulásos vagy megerősítéses
tanulási modellek. Például az erőforráskorlát falába ütközhetünk, ha egy modellt a szerver
nélküli műveletek használata nélkül telepítettünk. A telepített modell vagy alkalmazás
nem fog automatikusa méretezni, és így korlátozza az elérhető számítási kapacitás.
Ha a limitnél több felhasználó következtet a modellel vagy alkalmazással, az elérhetetlen
erőforrás akadályba ütközünk. A következő ábrán a hagyományos alkalmazások és szerver
nélküli alkalmazások fejlesztését láthatjuk:
Az ML következtetés típusainak megismerése a termelésben 143
Modell streaming
A modell streaming egy modellkiszolgálási módszer a streaming adatok kezelésére.
A streaming adatoknak nincs kezdete vagy vége. Minden pillanatban ezernyi forrásban
képződik adat, és amint lehet fel kell dolgozni és elemezni kell őket. Például a Google
Search eredményeit valós időben kell feldolgozni. A modell streaming egy másik módja
az ML modellek telepítésének. Két fő előnye van más modellkiszolgáló technikákkal
szemben, mint amilyenek REST API-k vagy tömeges feldolgozási megközelítések. Az első
előnye az aszinkronitás (több kérés egyidejű kiszolgálása). A REST API ML alkalmazások
robosztusak és méretezhetőek, de meg van az a korlátjuk, hogy szinkronok (a klienstől
érkező kéréseket első be első ki alapon dolgozzák fel), amely magas késéshez és erőforrás-
felhasználáshoz vezethet. Ennek a korlátozásnak a leküzdéséhez elérhető a folyamatos
feldolgozás. Ez eredendően aszinkron, mivel a felhasználónak vagy kliensnek nem kell
irányítania vagy várnia a rendszerre, hogy feldolgozza a kérést.
144 Az Ön ML rendszerének telepítési alapelvei
Például nézzük meg egy intelligens e-mail asszisztens felhasználási esetét, amelyet az
ügyfélszolgálat automatizálásával bíztak meg, ahogy a 6.4 ábrán látható. A felhasználók
kiszolgálásához szükséges válaszok automatizálása érdekében az e-mail asszisztens
rendszer előrejelzést hajt végre több modell használatával:
scaler_path = os.path.join(os.getenv('AZUREML_MODEL_
DIR'), 'scaler/2/scaler.pkl')
# deserialize the scalar file back into a variable to
be used for inference
scaler = joblib.load(scaler_path)
model_onnx = os.path.join(os.getenv('AZUREML_MODEL_DIR'),
'support-vector-classifier/2/svc.onnx')
# deserialize support vector classifer model
model = onnxruntime.InferenceSession(model_onnx,
None)
input_name = model.get_inputs()[0].name
label_name = model.get_outputs()[0].name
model_prediction = model.run([label_
name], {input_name: data.astype(np.float32)})[0]
return model_prediction
with open("myenv.yml","w") as f:
f.write(myenv.serialize_to_string())
inference_config = InferenceConfig(entry_script="score.
py", environment=myenv)
from azureml.core.webservice import AciWebservice
aciconfig = AciWebservice.deploy_configuration(cpu_
cores=1,
memory_gb=1,
tags={"data": "weather"},
description='weather-prediction')
ws = Workspace.from_config()
model1 = Model(ws, 'support-vector-classifier')
model2 = Model(ws, 'scaler')
service = Model.deploy(workspace=ws,
name='weatherprediction',
models=[model1, model2],
inference_config=inference_config,
deployment_config=aciconfig)
service.wait_for_deployment(show_output=True)
Gyakorlati telepítés (az üzleti problémához) 151
scoring_uri = service.scoring_uri
print(scoring_uri)
response = requests.post(scoring_uri, data=test_sample,
headers=headers)
print(response.status_code)
print(response.elapsed)
print(response.json())
import azureml.core
from azureml.core import Workspace
from azureml.core.model import Model
conda_deps = CondaDependencies.create(conda_
packages=['numpy','scikit-learn==0.19.1','scipy'], pip_
packages=["numpy", "onnxruntime", "joblib", "azureml-
core", "azureml-defaults", "scikit-learn==0.20.3"])
myenv = Environment(name='myenv')
myenv.python.conda_dependencies = conda_deps
if aks_target.get_status() != "Succeeded":
aks_target.wait_for_completion(show_output=True)
158 Az Ön ML rendszerének telepítési alapelvei
Megjegyzés
Ha már létezik egy klaszter ugyanazzal az AKS klaszternévvel ( aks_name
= port-aks), akkor az új klaszter nem jön létre. Helyette a meglévő
klaszter (itt a port-aks nevű) lesz csatolva a munkaterülethez a további
telepítésekhez.
ws = Workspace.from_config()
model1 = Model(ws, 'support-vector-classifier')
model2 = Model(ws, 'scaler')
Gyakorlati telepítés (az üzleti problémához) 159
aks_service.wait_for_deployment(show_output = True)
print(aks_service.state)
12. A telepített szolgáltatás egy REST API webszolgáltatás, amellyel egy HTTP kéréssel
érhető el a következőképpen:
import requests
if service.auth_enabled:
headers['Authorization'] = 'Bearer '+ service.get_
keys()[0]
elif service.token_auth_enabled:
headers['Authorization'] = 'Bearer '+ service.get_
token()[0]
scoring_uri = service.scoring_uri
print(scoring_uri)
response = requests.post(scoring_uri, data=test_sample,
headers=headers)
print(response.status_code)
print(response.elapsed)
print(response.json())
ws = Workspace.from_config()
print(ws.name, ws.resource_group, ws.location, sep =
'\n')
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
# Deploy on ACI
(webservice,model) = mlflow.azureml.deploy(model_uri=
'runs:/{}/{}'.format(run.id, model_path), workspace=ws,
model_name='svc-mlflow', service_name='port-weather-
pred', deployment_config=aci_config, tags=None, mlflow_
home=None, synchronous=True)
webservice.wait_for_deployment(show_output=True)
Egy telepítés sikeres üzenetet fog kapni, amikor a telepítés sikerrel járt. Az MLflow
telepítés további részleteiért kövesse ezeket a példákat: https://docs.microsoft.
com/azure/machine-learning/how-to-use-mlflow#deploy-
andregister-mlflow-models.
Gratulálunk! Telepítette az ML modelleket több telepítési célon, mint amilyen az ACI és
AKS az azureml és mlflow használatával.
Következőként arra fogunk koncentrálni, hogy teljesen kihasználjuk az MLOps
lehetőségeit a folytonos integráció és folytonos telepítés használatával, hogy egy robosztus
és dinamikusan fejlődő rendszerünk legyen a termelésben.
A folytonos integráció és folytonos fejlesztés szükségességének felismerése 163
Összefoglalás
Ebben a fejezetben megtanultuk az ML modellek termelésben történő telepítésének fő
elveit. Megismertük a különböző telepítési módszereket és célokat, és a szükségleteiket.
Az átfogó ismeret és gyakorlati tapasztalat érdekében megvalósítottuk a telepítést, hogy
megtanuljuk, hogyan kell telepíteni az ML modelleket a különböző telepítési célokra, mint
a virtuális gépek, konténerek és egy automatikusan méretező klaszter. Ezzel készen áll rá,
hogy bármilyen típusú telepítési kihívást kezeljen, amellyel találkozik.
A következő fejezetben el fogunk mélyedni a robosztus ML szolgáltatások kialakításának,
telepítésének és fenntartásának titkaiban, amelyeket a CI és CD tesz lehetővé. Ez fogja
szabadjára engedni az MLOps potenciálját! Merüljön el benne!
7
Robosztus CI/
CD folyamatok
kialakítása
Ebben a fejezetben a folytonos műveletekről fog tanulni az MLOps folyamatban.
Az alapelvek, amelyeket ebben a fejezetben tanul, lesznek a kulcs folytonos telepítések
irányításához egy üzleti kontextusban. Ahhoz, hogy átfogó ismereteket és közvetlen
tapasztalatot szerezzen, átvesszük egyszerre az elveket és a gyakorlati megvalósítást.
Felállítunk egy CI/CD folyamatot a tesztkörnyezethez, miközben a folytonos
integrációról (CI) és folytonos telepítésről (CD) komponenseiről, a folyamattesztelésről,
valamint a kiadásokról és kapcsolótípusokról tanulunk. Ezáltal képes lesz automatizálni
a gépi tanulási (ML) modellek folyamatainak telepítését bármilyen szituációban
a felhőn a folytonos tanulás lehetőségeivel, összhangban az üzlettel, Kezdjük azzal,
hogy megnézzük, egyáltalán miért van szükségünk CI/CD-re az MLOps-ban. Olyan más
témák felfedezésével folytatjuk, mint a következők:
Folyamatos integráció
A CI célja, hogy szinkronizálja az alkalmazást (ML folyamat és alkalmazás) a fejlesztővel
valós időben. A fejlesztő módosításai a rögzítésekben vagy összevonásokban egy
alkalmazás létrehozásával és az azon végzett automatizált tesztelésekkel lesznek validálva.
A CI kiemeli az automatizált tesztelést, és az alkalmazás robosztusságának (hogy nem
rossz vagy hibás-e) ellenőrzése van a fókuszban, amikor új rögzítéseket von össze a fő
ágban. Amikor egy új rögzítés kerül a fő ágba, létrejön egy új kialakítás, amelynek
a robosztussága tesztelésre kerül az automatizált tesztelés használatával. Ezen folyamat
automatizálásával elkerülhetjük a szoftver megkésett szállítását és más integrációs
kihívásokat, amelyek miatt a felhasználók napokig várnak a kiadásra. Az automatizáció
és a tesztelés a CI lelke.
Folyamatos szállítás
A folytonos szállítás a CI-ből nyúlik ki, hogy biztosítsa, hogy az új módosítások vagy
kiadások telepítve lettek és hatékonyan jutottak el a felhasználókhoz; ezt az automatizált
tesztelés és kiadási folyamatok irányítják. Az automatizált tesztelés és a kiadási folyamatok
lehetővé teszik a fejlesztők és termékmenedzserek számára, egyetlen kattintással telepítsék a
változásokat, amely lehetővé teszi a zökkenőmentes irányítást és a felügyeleti lehetőségeket
a folyamat bármely fázisában. A folytonos szállítási folyamatban meglehetősen gyakori egy
emberi ágens (a QA csapatból) bevonása a kialakítás jóváhagyására (átment vagy sem),
mielőtt azt telepítenék a termelésben (ahogy az a 7.1 ábrán látható egy folytonos szállítási
folyamatban). Egy jellegzetes folytonos szállítási folyamatban egy kialakítás előzetes
elfogadási teszteken megy keresztül, mielőtt telepítik az próbafázisban, ahol egy emberi
ágens felügyeli a teljesítményt smoke tesztekkel és más megfelelő tesztekkel.
Amint teljesítette a smoke teszteket, az emberi ágens átadja a kialakítást, hogy telepítsék
a termelésben. A kialakítási és kiadási folyamat automatizálásával illetve egy emberi ágens
bevonásával a folyamatba, biztosítjuk a nagyszerű minőséget a termelés tekintetében,
és elkerülhetünk néhány buktatót, amelyet egy teljesen automatizált folyamat talán nem
venne észre. A folytonos szállítás használatával egy üzlet teljesen irányíthatja a kiadási
folyamatát és kis csomagokban adhat ki egy új kialakítást (könnyű a hibaelhárítás a hibák
vagy blokkolók esetén), vagy lehet egy teljes kiadása megkövetelt időkereten (napi, heti
vagy havi) belül.
168 Robosztus CI/CD folyamatok kialakítása
Folyamatos telepítés
A CD lehetővé teszi a teljes automatizálását és egy lépéssel tovább megy, mint a folytonos
szállítás. A kialakítás és kiadás minden szakasza a termeléséhez teljesen automatizált
bármilyen emberi beavatkozás nélkül, a folytonos szállítással szemben. Egy ilyen
automatizált folyamatban csak egy elbukott teszt állíthatja meg, hogy egy új módosítás
telepítésre kerüljön a termelésben. A folytonos telepítés leveszi a nyomást a csapatról,
hogy fenntartsák a kiadási folyamatot, és gyorsítja a telepítést egyenesen az ügyfelekhez
a folytonos tanulás lehetővé tételével az ügyfelek visszajelzési hurkain keresztül.
Az ilyen automatizációval nem lesz többé kiadási nap a fejlesztőknek. Ez leveszi róluk
a nyomást és koncentrálhatnak csak a szoftver kialakítására, és nem kell aggódniuk
a tesztek és a kiadáskezelés miatt. A fejlesztők végezhetik kényelmesen a szoftver
kialakítását, tesztelését és telepítését és perceken belül élesíthetik azt, ahelyett hogy
a kiadási napokra várnának vagy az emberi jóváhagyásra, amely napokkal és néha
hetekkel késleltetheti a szoftver kiadását a felhasználóknak. A folytonos telepítés biztosítja
a teljes automatizációt, hogy robosztus és méretezhető szoftvert telepítsünk és szolgáljunk
ki a felhasználóknál.
Learn_MLOps
├──07_CICD_Pipeline
│ ├── AciDeploymentconfig.yml
├── AksDeploymentconfig.yml
└── InferenceConfig.yml
└── myenv.yml
└── score.py
Ezzel a szolgáltatási fiókja a megadott névvel (például mlops_sp) készen áll a használatra
a CI/CD folyamatok kezeléséhez. Következőként telepíteni fogjuk a folyamatokhoz
használatos bővítményt.
1. Ahogy a 7.7 ábrán látható, menjen az Artifacts részre, kattintson az Add gombra,
válassza ki az Azure Repository opciót, majd válassza ki az adatraktárt (például
Learn_MLOps), hogy csatlakozzon a kiadási folyamattal:
4. Következőként fel fog ugrani egy ablak, hogy írja be a telepítési információkat.
Ahogy a 7.13 ábrán látható, mutasson az Azure ML munkaterületére (például
mlops_ws) és legyen beállítva a Model Source opció a Model Artifact lehetőségre
(mivel a korábban generált modelltárgyakat használjuk a modellek tanításakor
és csomagolásakor):
entryScript: score.py
runtime: python
condaFile: myenv.yml
name: project_environment
dependencies:
# The python interpreter version.
# Currently Azure ML only supports 3.5.2 and later.
- python=3.6.2
- pip:
- numpy
- onnxruntime
- joblib
- azureml-core~=1.10.0
- azureml-defaults~=1.10.0
- scikit-learn==0.20.3
- inference-schema
- inference-schema[numpy-support]
- azureml-monitoring
channels:
- anaconda
- conda-forge
Egy CI/CD folyamat és a tesztkörnyezet felállítása (Azure DevOps használatával) 183
AciDeploymentConfig.yml
computeType: ACI
containerResourceRequirements:
cpu: 1
memoryInGB: 1
authEnabled: False
sslEnabled: False
appInsightsEnabled: True
Folyamatvégrehajtás és tesztelés
Most itt az idő tesztelni a folyamatát, és ehhez létre fogunk hozni egy kiadást és validálni
fogjuk, hogy a folyamat kiadása sikerese lefutott-e. A következő lépések segíteni fognak
a folyamata tesztelésében:
Folyamat-végrehajtási kapcsolók
Egy hatékony CI/CD folyamatban a folyamat végrehajtása lehetséges kell legyen többféle
esemény vagy kapcsoló hatására. Ha a folyamatot csak szokványos események, például
kódtárolás vagy push-or-pull kérések képesek aktiválni, az hátrány vagy korlátozás
lehet a rendszernek. Annak a lehetősége, hogy a folyamatot több esemény használatával
aktiváljuk, javítja a CI/CD folyamat rugalmasságát és működését. Nézzünk meg néhány
kapcsolótípust, amely értéket adhat hozzá a CI/CD folyamathoz:
• Tárgyas kapcsolók
A tárgyak generálása a folyamat és fejlesztési folyamat különböző szakaszaiban
történik. A generált tárgyak, mint egy betanított modell, metaadat, feltöltött Docker
képek vagy bármilyen feltöltött fájl, aktiválhatják egy bizonyos rész végrehajtását
a CI/CD folyamatban. Az ilyen opciók hatalmas rugalmasságot és funkcionalitást
tesznek lehetővé a CI/CD folyamat számára.
• Docker Hub kapcsolók
Minden alkalommal, amikor elküld egy új Docker képet egy Ön által választott
Docker Hub adatraktárba, egy kapcsoló aktiválható a CI/CD folyamatban
a követelmények alapján. Például amikor feltölt egy új Docker képet a Docker
Hub-ra (vagy Azure Container Registry-re), a folyamatot aktiválja, hogy telepítse
a Docker képet egy webszolgáltatásként.
• Ütemező kapcsolók
A folyamatrész aktiválható egy megadott időeseményt követően. Az ilyen kapcsoló
nagyon hasznos egy ütemezett tisztításhoz vagy cron feladatokhoz vagy bármilyen
más munkafolyamathoz, amelyet egy időintervallum után kell futtatni; például egy
kapcsoló az ML modell újratanításához minden nap 12:00-kor.
• API kapcsolók
Az API kapcsolók célja, hogy integrálják a külső szolgáltatásokat (vagy bármilyen
más alkalmazást vagy szolgáltatást). Ez beállítható, így a folyamatrésze egy másik
rendszer eseménye alapján aktiválódik. Például, amikor egy rendszergazda
retrain kommentet tesz egy fejlesztő platformján, a folyamat aktiválható
a meglévő, telepített modell újratanításához. Ezeket a kapcsolókat API hívások
használatával irányítják.
• Git kapcsolók
A Git kapcsolókat gyakran használják folyamat-végrehajtások aktiválására,
például amikor új kódot rögzítenek egy ághoz vagy egy új pull kérés érkezik.
Amikor módosítás történik egy adatraktáron, akkor bizonyos részek aktiválhatók
a folyamatban a követelmények szerint.
Folyamat-végrehajtási kapcsolók 189
Összefoglalás
Ebben a fejezetben megtanultuk a folytonos műveletek fő elveit az MLOps-ban, elsősorban
a folytonos integrációt, szállítást és telepítést. Ehhez elvégeztük egy CI/CD folyamat és
tesztkörnyezet beállításának gyakorlati megvalósítását az Azure DevOps használatával.
Teszteltük a folyamatot a végrehajtás robosztusságára és végül megnéztünk néhány
kapcsolót a folyamat működésének javítására, illetve beállítottunk egy Git kapcsolót
a tesztkörnyezethez. Ez a fejezet a folytonos műveletek alapjául szolgál az MLOps-ban
és ezáltal képes lesz automatizálni az ML modellek folyamatainak telepítését bármilyen
szituációban a felhőn, a folytonos tanulás lehetőségeivel, összhangban az üzletével.
A következő fejezetben megnézzük az API-kat, mikroszolgáltatásokat, és hogy mit
kínálnak az MLOps-alapú megoldások számára.
8
API-k és
mikroszolgáltatások
kezelése
Ebben a fejezetben az API-król és a mikroszolgáltatások kezeléséről fog tanulni. Idáig
telepítettünk ML alkalmazásokat, amelyek API-kként szolgáltak. Most megnézzük,
hogyan kell API-kat fejleszteni, szervezni, kezelni és kiszolgálni. Meg fogja tanulni az
API és mikroszolgáltatás tervezési alapelveket az ML következtetéshez, így megtervezheti
a saját egyedi ML megoldásait.
Ebben a fejezetben gyakorlás útján megtanulunk kialakítani egy mikroszolgáltatást
FastAPI és Docker használatával és kiszolgálni az egy API-ként. Ehhez átvesszük az API
és mikroszolgáltatás tervezésének alapjait egy korábban betanított (a 4. fejezet: Machine
Learning folyamatok részben) ML modellhez. Végül reflektálunk a robosztus és méretezhető
mikroszolgáltatások és API-k tervezésének néhány alapelvére, kihívására és tippjeire a
teszt- és termelési környezetek esetében. Ez a fejezet a következő témaköröket tárgyalja:
A 8.1 ábrán láthatjuk egy API szerepét, ahogy lehetővé teszi a hozzáférést az alkalmazás
adataihoz (az adatbázisból) és harmadik felekkel vagy más alkalmazásokkal kommunikál,
mint amilyenek a mobilalkalmazások (a mobilfelhasználóknál), időjárásjelző
alkalmazások (mobilon vagy a weben), elektromos autók stb. Az API-k a számítógépek
hajnala óta működnek, hogy lehetővé tegyék az alkalmazások közötti kommunikációt.
Idővel láttunk olyan fejlesztőket, akik konszenzusra jutottak olyan protokollokkal,
mint a Simple Object Access Protocol (SOAP) és Representational State Transfer
(REST) a 2000-es évek elején. Az előző években kifejlesztették az API protokollok
új típusú generációját, mint amilyen a Remote Procedure Call (RPC) és GraphQL,
ahogy a következő táblázatban látható:
Mikroszolgáltatások
A mikroszolgáltatások egy modern módja az appok fejlesztésének és telepítésének,
egy szolgáltatás futtatásához. A mikroszolgáltatások lehetővé teszik a szétosztott
alkalmazásokat egyetlen nagy monolitikus alkalmazás helyett, ahol a funkcionalitások
kisebb töredékekre oszlanak fel (ezeket hívjuk mikroszolgáltatásnak). Egy mikroszol-
gáltatás egyedi alkalmazás a mikroszolgáltatás architektúrájában. Ez a központosított
vagy monolitikus architektúrák ellentétje, ahol minden funkcionalitást egybecsomagoltak
egy nagy appba. A mikroszolgáltatások népszerűsége megnőtt a Service-Oriented
Architecture (SOA) miatt, amely alternatíva a hagyományos monolitikus (egyedüli
és önmagába elegendő alkalmazások) fejlesztésre.
194 API-k és mikroszolgáltatások kezelése
8.3 ábra: Monolitikus ML alkalmazás működése (PoC egy elméleti használati esethez)
Minden kamerát ehhez a szerverhez csatlakoztatnak a helyi hálózaton keresztül.
Az algoritmusok az autópozíció becsléséhez és az üzemállapot becslőhöz működnek,
de további fejlesztések szükségesek, és összességében a PoC működik. Ez a monolitikus
app nagy érzékeny az összeomlásra a kamerák instabilitása, a helyi hálózat és más hibák
miatt. Az ilyen instabilitások jobban kezelhetők mikroszolgáltatásokkal. Nézzük meg ezt
a gyakorlatban a 2. szakaszban.
• Videó adatfolyamgyűjtő.
• Képfeldolgozó: Ez összesíti a képeket, fogadja, feldolgozza és gyorsítótárazza
a képeket, illetve csomagokat készít a további feldolgozáshoz.
• Pozícióosztályozó: Megbecsüli egy autó pozícióját (orr vagy far), amely
a javítóüzemben parkol.
• Üzemállapot becslő: Ez aszinkron módon fogadja az autópozíciók becsléseit
és kalibrálja az üzemállapotot, illetve valós idejű adatokat küld a felhőbe.
• A felhő összegyűjti és tárolja az adatokat MQTT (egy alap könnyű, megosztó-
feliratkozó hálózati protokoll, amely üzeneteket szállít eszközök között)
használatával. Az adatok megjelennek egy kezelőpulton, hogy az autóüzem
operátorai elemezhessék a műveleteket.
Learn_MLOps
├──08_API_Microservices
│ ├── Dockerfile
├── app
└── variables.py
└── weather_api.py
└── requirements.txt
└── artifacts
└── model-scaler.pkl
└── svc.onnx
variables.py
Csak egy csomagot használunk a bemeneti változók definiálására. Az általunk
használandó csomagot pydantic-nak hívják; ez egy adatvalidációs és beállításkezelő
csomag, amely Python típusú megjegyzéseket használ. A pydantic használatával
definiálni fogjuk a bemeneti változókat a WeatherVariables nevű osztályban, amelyet
a fastAPI szolgáltatáshoz használtunk.
class WeatherVariables(BaseModel):
temp_c: float
202 API-k és mikroszolgáltatások kezelése
humidity: float
wind_speed_kmph: float
wind_bearing_degree: float
visibility_km: float
pressure_millibars: float
current_weather_condition: float
weather_api.py
Ez a fájl a fastAPI szolgáltatás definiálására használatos. A szükséges modelltárgyakat
importáltuk és felhasználtuk az API végpontok kiszolgálásához a modell
következtetéséhez, hogy előrejelzéseket készítsünk valós időben vagy a termelésben:
Megjegyzés
Importáltuk a WeatherVariables osztályt, amelyet korábban a
variables.py fájlban hoztunk létre. Az ebben a fájlban definiált változókat
használjuk a bemeneti adatok megszerzésére a fastAPI szolgáltatáshoz.
Requirement.txt
Ez a szövegfájl tartalmazza az összes csomagot, amely a fastAPI szolgáltatás futásához
szükséges:
numpy
fastapi
uvicorn
scikit-learn==0.20.3
pandas
onnx
onnxruntime
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
COPY ./app /app
RUN pip install -r requirements.txt
EXPOSE 80
CMD ["uvicorn", "weather_api:app", "--host", "0.0.0.0",
"--port", "80"]
Először egy hivatalos fastAPI Docker képet használunk a Docker Hub-ról a FROM
parancs használatával, és a képre mutatunk: tiangolo/uvicorn-gunicorn-
fastapi:python3.7. A kép Python 3.7-et használ, amely kompatibilis a fastAPI-
val. Következőként átmásoljuk az app mappát egy app nevű könyvtárba a docker
képen/konténeren belül. Az app mappa Docker képbe/konténerbe való
átmásolása után telepítjük a requirements.txt fájlban felsorolt szükséges csomagokat
a RUN parancs használatával.
Mivel az uvicorn szerver (AGSI szerver) a fastAPI-nél a 80-as portot használja
alapértelemzettként, ezért EXPOSE-oljuk (hozzáférhetővé tesszük) a 80 -as portot
a Docker képnek/konténernek. Végül előkészítjük a szervert a Docker képen/
konténeren belül a CMD "uvicorn weather_api:app –host 0.0.0.0 –
port 80" parancs használatával. Ez a parancs a weather_api.py fájlra mutat, hogy
hozzáférjen a fastAPI app objektuma a szolgáltatáshoz és hosztolja azt a kép/konténer
80-as portján.
Gratulálok, már majdnem kész van. Most teszteljük a mikroszolgáltatás gyorsaságát
és meglátjuk, működik-e, és ha igen, hogyan.
Az API tesztelése
Az API gyorsaságának teszteléséhez a következő lépéseket hajtjuk végre:
2. Futtasson egy Docker konténert helyileg. Most letehetünk egy futó Docker
konténert az előbb létrehozott Docker képből. Egy Docker konténer futtatásához
a RUN parancsot használjuk:
docker run -d –name weathercontainer -p 80:80 fastapi
Egy Docker konténer a fastapi Docker képből lett lerakva. A futó konténer neve
weathercontainer és a portja a 80 leképezve a helyi számítógép 80-as portjára.
A konténer a háttérben fog futni, mivel használtuk a -d kifejezést a RUN parancsban.
Egy konténer sikeres futtatásakor egy konténer ID jelenik meg a terminálon, például:
2729ff7a385b0a255c63cf03ec9b0e1411ce4426c9c49e8db
4883e0cf0fde567.
Láthatjuk, hogy a fastapi kép konténerje leképződött és sikeresen fut a helyi gép 80-as
portján. Hozzáférhetünk a szolgáltatáshoz és tesztelhetjük azt a böngészőből a helyi
gépünkön a 0.0.0.0:80 címen.
Megjegyzés
Ha hibákat kap vagy nincs válasz, amikor az API szolgáltatását futtatja
vagy teszteli, akkor lehet, hogy le kell tiltania a CORS validálást az olyan
böngészőknél, mint a Chrome, Firefox és Brave vagy hozzá kell adnia egy
bővítményt (például menjen a Chrome Web Store-ba és keressen egyet),
amely letiltja a CORS validálást az API-k helyi futtatásához és teszteléséhez.
Alapértelmezetten nem kell letiltania a CORS-t; csak akkor tegye meg, ha
szükséges.
Összefoglalás
Ebben a fejezetben megtanultuk az API tervezésének és a mikroszolgáltatás termelésben
történő telepítésének fő elveit. Érintettük az API-tervezési módszerek alapjait és tanultunk
a FastAPI-ról. Az üzleti problémánknál elkészítettük egy API szolgáltatás fejlesztésének
gyakorlati megvalósítását az Egy ML modell API-ként történő kiszolgálásának gyakorlati
megvalósítása részben a FastAPI és Docker használatával. Az ebben a fejezetben szerzett
gyakorlati tudás felhasználásával robosztus API szolgáltatások tervezhet és telepíthet az
ML modelljeinek kiszolgálására. Az API szolgáltatások fejlesztése az ML modellekhez egy
lépcsőfok az ML modellek termelésbe való eljuttatásához.
A következő fejezetben elmélyedünk a tesztelés és biztonság fogalmaiban. Megvalósítunk
egy tesztelési módszert egy API szolgáltatás robosztusságának teszteléséhez a Locust
használatával. Gyerünk!
9
Az Ön ML
megoldásának
tesztelése és
biztosítása
Ebben a fejezetben elmélyedünk a gépi tanulási (ML) megoldás tesztelési és biztonsági
vonatkozásaiban. Várhatóan megkapja az alapokat a tesztek különböző típusairól az
ML megoldásának méretezhetőségi és robosztussági teszteléséhez, valamint az ML
megoldásának biztosításához szükséges tudást. Megnézünk több, az ML megoldások ellen
irányuló támadást és az ML megoldás megvédésének módjait.
Ebben a fejezetben példákkal fogunk tanulni, ahogy terheléstesztelést és biztonsági
tesztelést hajtunk végre az időjárás előrejelző üzleti felhasználási esetnél, amelyen
korábban dolgoztunk. Kezdésként reflektálunk az ML megoldás tesztelésének és
biztosításának szükségességére és következő témák felderítésével folytatjuk a fejezetben:
Adatok tesztelése
Az adatok tesztelésének célja, hogy biztosítsuk, hogy az adatok elég jó minőségűek-e az
ML modell tanításához. Minél jobb az adat minősége, annál jobb modelleket tanítunk be
az adott feladatokra. Szóval hogyan értékeljük az adatminőséget? Az adatok következő öt
tényezőjének vizsgálatával:
• Pontosság
• Teljesség (nincsenek hiányzó értékek)
• Konzisztencia (az adat várható formátumának és mennyiségének tekintetében)
• Relevancia (az adatoknak meg kell felelnie a tervezett igényeknek és szükségleteknek)
• Időbeniség (a legújabb vagy naprakész adatok)
Az Ön ML megoldásának tesztelése a tervezés szerint 215
Ezen tényezők alapján, ha egy vállalat képes kezelni minden egyes adatkészlet
adatminőségét, amikor megkapja vagy létrehozza azt, akkor az adatminőség garantált.
Itt van néhány lépés, amelyet a csapata vagy vállalata használhat az adat minőségbiztosítási
intézkedésént:
Modelltesztelés
A modelltesztelésnek le kell fednie az olyan szerverhibákat, mint a következők:
Ezek a tesztek két fázisban szervezhetők: tanítás előtt és után. Ezen tesztek beleillesztése
a munkafolyamatba robosztus modelleket készíthet a termelésnek. Nézzük meg, mit tehet
a tervezés által a tanítás előtti és utáni tesztelés.
216 Az Ön ML megoldásának tesztelése és biztosítása
@task
def test_weather_predictions(self):
self.client.post("", data=test_data,
headers=headers)
Locust -f load_test-py
Gyakorlatias telepítés- és következtetés-tesztelés (egy üzleti felhasználási eset) 219
7. Végül adja meg a végpontot vagy hosztot, amelyet terheléssel szeretne tesztelni
és nyomja meg a Start swarming gombot, hogy elindítsa a terheléses teszt
végrehajtását. A 7. fejezet: Robosztus CI és CD folyamatok kialakítása részben
telepítettünk egy végpontot. Ajánlott a telepített végpontot tesztelni.
8. Menjen az Azure ML munkaterületére, lépjen be az Endpoints részre, lépjen
a dev-webservice nevű telepített végpontra, és másolja ki a végpont webcímét
a hoszt szövegdobozába.
9. Következőként kattintson a Start swarming gombra, hogy elindítsa végpont
terheléses tesztelését. Ez elindítja a terheléses tesztet és megnyit egy új oldalt, ahol
valós időben monitorozhatja a terheléses tesztjeit, ahogy a 9.3 ábrán látható:
Kérjük, vegye figyelembe, hogy ez a teljesítmény egy adott felhasználási esetnél lehet
is ideális és nem is, az Ön üzleti vagy felhasználói igényeitől függően. Egy stabilabb
válaszolási idő a kívánatos; például egy 50 ms-nál kevesebbet változó válaszolási idő
a minimum és maximum válaszolási idők között kedvezőbb lehet egy stabil
teljesítményhez. Az ilyen teljesítmény eléréséhez ajánlott a modelljeit felsőbb kategóriás
infrastruktúrán telepíteni, ahogy megfelelő, például egy GPU-n vagy egy felső kategóriás
CPU-n, nem pedig egy CPU-n egy Azure konténerpéldányon. Ehhez hasonlóan
a 9.5 ábrán láthatjuk a válaszolási időket a felhasználók számának arányában.
Támadások típusai
Megnézünk néhányat az ML rendszerek leggyakoribb támadásaiból. Magas szinten
a hekkerek támadásai négy kategóriára bonthatók: mérgezés, bemeneti támadások és
kitérés, visszatervezés és hátsó ajtós támadások. Nézzük meg, a támadók hogyan jutnak
be az ML rendszerekbe ezekkel a támadásokkal.
Mérgezés
Egy hekker vagy támadó azt keresi, hogyan rongálhatja meg az MI modellt egy mérgezéses
támadásnál. Mérgezéses támadások bármelyik szakaszban (tanítás, telepítés vagy valós
idejű következtetés) történhetnek. Jellemzően a tanítás és következtetés során történnek.
Nézzük meg a mérgezéses támadások megvalósításának három jellemző módját:
Visszatervezés
Egy MI rendszer felhasználójának az lehet egy fekete vagy nem átlátszó doboz. Gyakori
az Mi rendszereknél, hogy bemeneteket fogadnak kimenetek generálásához anélkül,
hogy megmutatnák, mi van belül (mind logika, mind algoritmus tekintetében). A tanítási
adatkészletek, amelyek hatékonyan tartalmazzák az összes betanított rendszer tudását,
általában bizalmasok. Ez elméletileg lehetetlenné teszi egy külsősnek, hogy megjósolja,
miért bizonyos kimenetek jönnek létre, vagy hogy mi megy az MI rendszer belsejében
az algoritmus, tanítási adatok vagy logika tekintetében. Azonban néhány esetben
ezek a rendszerek érzékenyek lehetnek a visszatervezésre. A támadó vagy hekker célja
a visszatervezéses támadásoknál, hogy lemásolja az eredetileg szolgáltatásként telepített
modellt és saját céljára használja.
Egy Model Extraction Attacks against Recurrent Neural Networks (https://arxiv.
org/pdf/2002.00123.pdf) című dokumentumban, amelyet 2020 februárjában
adtak ki, a kutatók kísérleteket végeztek a modellkinyerési támadásokkal egy RNN és egy
LSTM nyilvánosan elérhető tudományos adatkészletekkel tanított modelleken. A kutatók
ténylegesen reprodukálták egy ML rendszer funkcionalitását egy modellkinyerési
támadáson keresztül. Bemutatták, hogy egy nagy pontosságú modellkinyerési támadás
kinyerhető hatékonyan, elsődlegesen egy loss függvény vagy architektúra konfigurálásával
vagy másolásával a célmodellről.
Egy másik esetben a Max Planck Institute for Informatics kutatói bemutatták 2018-ban,
hogyan voltak képesek információt következtetni egy nem átlátszó modellből egy sor
bemeneti-kimeneti kérés használatával.
Összefoglalás 227
Összefoglalás
Ebben a fejezetben megtanultuk az API tervezés általi tesztelésének és biztosításának fő
elveit. Megismertük az ML megoldások különféle tesztelési módszereit, hogy biztosítsuk
őket. Az átfogó értelmezés és gyakorlati tapasztalat érdekében megvalósítottuk a korábban
telepített ML modell (a 7. fejezet: Robosztus CI és CD folyamatok kialakítása részben)
terheléses tesztjét, hogy megjósolja az időjárást. Ezzel készen áll rá, hogy különböző
tesztelési és biztonsági szituációkat kezeljen, amellyel találkozik.
A következő fejezetben el fogunk mélyedni a robosztus ML szolgáltatások termelésben
történő telepítésének és fenntartásának titkaiban. Ez lehetővé teszi, hogy robosztus ML
megoldásokat telepítsen a termelésben. Merüljön el benne!
10
A termelési kiadás
lényeges részei
Ebben a fejezetben a folytonos integráció és folytonos szállítás (CI/CD) folyamatról
fog tanulni, egy termelési környezet lényeges részeiről, és hogy hogyan kell felállítani
egy termelési környezetet a korábban tesztelt és jóváhagyott gépi tanulásos (ML)
modelljeinek kiszolgálásához a végfelhasználók számára. Be fogjuk állítani a szükséges
infrastruktúrát a CI/CD folyamat termelési környezetéhez, konfigurálni fogjuk a termelési
telepítések folyamatait, a folyamatvégrehajtási kapcsolókat a teljes automatizációhoz,
és megtanuljuk kezelni a termelési kiadásokat. Ez a fejezet taglalja a CI/CD folyamat
és termelési környezet lényeges alapjait, mivel a folyamat a termék nem a modell.
A CI/CD folyamatok alapjainak megismerésével képes lesz automatizált CI/CD
folyamatokat fejleszteni, tesztelni és konfigurálni a felhasználási esetéhez vagy üzletéhez.
Egy sor témát fogunk lefedni a termelési telepítések kapcsán, majd elmélyedünk
a termelésben lévő ML modellek monitorozásáról szóló bevezetésben.
230 A termelési kiadás lényeges részei
5. Ha már biztosította az AKS klaszterét, egy futó Kubernetes klasztert fog látni azzal
a névvel, amelyet megadott a számításnál (például prod-aks), ahogy az előző
képernyőképen látható.
├──10_Production_Release
├── create_aks_cluster.py
├── config.json
if aks_target.get_status() != "Succeeded":
aks_target.wait_for_completion(show_output=True)
Az előző kód sikeres végrehajtása után egy új klaszter jön létre a kiválasztott névvel (azaz
a prod-aks). Általában egy új klaszter létrehozása nagyjából 15 percet vesz igénybe.
Amikor a klaszter létrejött, megtekinthető az Azure Machine Learning munkaterületen,
ahogy a 10.4 ábrán láthattuk. Most, hogy beállítottuk az előkövetelményeket a CI/CD
folyamat javításához a termelési környezetünkben, kezdjük el a beállítást!
A termelési környezetünk felállítása a CI/CD folyamatban 237
3. Ha rákattint az Add gombra a DEV TEST részen, akkor ki kell választania egy sablont
az új szakasz létrehozásához. Válassza az EMPTY JOB opciót (a Select a template
szöveg alatt) és adja a production vagy PROD nevet a szakasznak és mentse el,
ahogy a következő képernyőképen látható:
1. Először hozzon létre egy új kiadást, menjen a Pipelines | Releases részre, válassza
ki a korábban létrehozott folyamatot (például: Port Weather ML Pipeline),
és kattintson a Create Release gombra a képernyő jobb felső részén, hogy elindítson
egy új kiadást, ahogy itt látható:
4. Amikor ezt sikeresen elvégzi egy kiadáson, akkor a DEV TEST és PROD szakaszok
is telepítve lesznek a CI és CD használatával. Biztosítania kell, hogy a folyamat
robosztus legyen. Következőként jobban testre szabhatjuk a folyamatot egyedi
kapcsolók hozzáadásával, amelyek automatizálják a folyamatot emberi felügyelet
nélkül. A CI/CD folyamatok emberi felügyelet nélküli automatizálása kockázatos
lehet, de vannak előnyei, például a valós idejű folyamatos tanulás (monitorozás és
modellek újratanítása) és gyorsabb telepítések. Jó tudni, hogyan kell automatizálni
a CI/CD folyamatot emberi felügyelet nélkül a hurokban. Jegyezze meg, hogy sok
esetben ez nem ajánlott, mivel sok hibalehetőség van. Néhány esetben hasznos
lehet, nagyban függ a felhasználási esettől és az ML rendszer céljaitól. Nézzük meg a
kapcsolókat a teljes automatizációhoz.
Folyamatkapcsolók konfigurálása az
automatizációhoz
Ebben a részben három kapcsolót fogunk konfigurálni a tárgyak alapján, amelyeket már
csatlakoztattunk a folyamathoz. A kapcsolók, amiket be fogunk állítani a következők:
2. Egy Git kapcsoló beállításához a master ágnál (amikor módosítást hajtanak végre
a master ágon, aktiválódik egy új kiadás) kattintson a Trigger ikonra (villám ikon)
és mozgassa az on/off kapcsolót kikapcsoltról bekapcsoltra. Ez aktiválni fogja
a folytonos telepítés kapcsolóját.
3. Végül adjon hozzá egy ágszűrőt és mutasson rá az ágra, amelyhez a kapcsolót
be akarja állítani (ebben az esetben a master ág), ahogy az előző képernyőképen
láthatta. Mentse a változtatásait a Git kapcsoló beállításához.
Ezen lépések megvalósításával beállított egy folytonos telepítés kapcsolót, hogy elindítson
egy új kiadást, amikor változások történnek a master ágon.
Ezen lépések végrehajtásával lesz egy beállított folytonos telepítés kapcsolója, amely elindít
egy új folyamatkiadást, amikor egy új tárgyat hoztak létre vagy regisztráltak az Azure
Machine Learning munkaterületén.
Folyamat kiadáskezelés
A kiadások a CI/CD folyamatokban lehetővé teszik a csapata számára, hogy teljesen
automatizálják és folyamatosan szállítsák a szoftvert az ügyfeleinek, gyorsabban és
alacsonyabb kockázattal. A kiadások lehetővé teszik, hogy több termelési szakaszban
tesztelje és szállítsa a szoftverét, vagy félig automatizált folyamatokat állítson be
jóváhagyásokkal és igény szerinti telepítésekkel. Fontos kezelni és monitorozni ezeket
a kiadásokat. Kezelhetjük úgy a kiadásokat, hogy megnyitjuk a folyamatot a Pipelines
| Releases részen, és kiválasztjuk a CI/CD folyamatunkat (például Port Weather ML
Pipeline), ahogy a következő képernyőképen látható:
Ezen kérdések kiadás utáni alapos átgondolása segíthet javítani és iterálni a stratégiáján
illetve jobb kiadáskezelő gyakorlatokat kifejleszteni.
252 A termelési kiadás lényeges részei
Összefoglalás
Ebben a fejezetben átvettük a CI/CD folyamat és termelési környezet alapjait. Elvégeztünk
néhány gyakorlati megvalósítást, hogy beállítsuk a termelési infrastruktúrát, majd
folyamatokat állítottunk be a folyamat termelési környezetében a termelési telepítésekhez.
Teszteltük a termeléskész folyamatot, hogy teszteljük annak robosztusságát. Ahhoz, hogy
eljussunk a következő szintre, teljesen automatizáltuk a CI/CD folyamatot különféle
kapcsolók használatával. Végül megnéztük a kiadáskezelési gyakorlatokat és lehetőségeket,
valamint megvitattuk az ML rendszer folyamatos monitorozásának szükségességét.
az egyik fő gondolat, hogy a folyamat a termék, nem a modell. Jobb egy robosztus és
hatékony folyamat kialakítására koncentrálni a legjobb modell kialakítása helyett.
A következő fejezetben megismerjük az MLOps munkafolyamat monitorozási modulját
és többet tudunk meg a változtató magyarázható monitorozási keretrendszerről.
3. rész: Gépi
tanulási modellek
monitorozása
a termelésben
Vágjunk bele!
Modelleltérés
Egy dinamikusan változó világban élünk. Emiatt a környezet és az adat, amelyben egy ML
modellt telepítettek egy feladat elvégzésére vagy előrejelzések készítésére, az folyamatosan
fejlődik, és elengedhetetlen figyelembe venni ezt a változást. Például a COVID-19 járvány
egy nemvárt valóságot mutatott meg nekünk. Sok üzleti művelet virtuálissá vált, és ez
a járvány egy egyedi szituációval szembesített minket, amelyet sokan az új normaként
érzékelnek. Sok kis üzlet ment csődbe, és a magánszemélyek rendkívüli pénzügyi hiánnyal
néznek szembe a munkanélküliség emelkedése miatt. Ezek az emberek (kis üzletek és
magánszemélyek) hiteleket és pénzügyi segítséget kérnek a bankoktól és intézetektől, mint
még soha (nagy léptékben). A csalásérzékelő algoritmusok, amelyet a bankok és intézetek
már telepítettek és használtak, nem látták ezt az adatsebességét és -pontosságot a hitel és
pénzügyi segítség igényléseinek tekintetében.
Ezek a változások a jellemzőknél (ilyen például a kérelmező bevétele, hiteltörténete,
a kérelmező lakhelye, az igényelt mennyiség stb.) eltéríthették a modell súlyozását/
ítélőképességét (vagy összezavarták a modellt), mivel egy egyébként hitelképes kérelmező,
aki még nem igényelt hitelt korábban, elveszítette a munkáját. Ez fontos kihívást jelentett
a modelleknek. Ahhoz, hogy megbirkózzon az ilyen dinamikusan változó környezetekkel,
kritikus fontosságú a modelleltérés, és hogy folyamatosan tanuljon belőle.
Az eltérés a környezetváltozásokhoz kapcsolódik, és az előrejelző ML modellek
teljesítményének romlására utal, illetve a romló változók közötti kapcsolatra. A
modellváltozások négy típusa következik, tekintettel a modellekre és adatokra:
Modellelfogultság
Akár tetszik, akár nem, az ML már sok döntésre hatással van az életében, például
a kiválasztásnál a következő munkájára, vagy a jelzáloga elfogadásánál a bankoktól.
Még az Evan rendfenntartó szervek is használják, hogy felkutassák a bűncselekmény
gyanúsítottjait, hogy megakadályozzák a bűncselekményeket. A ProPublica, egy újságíró
szervezet (ML-t használ a jövőbeni bűncselekmények előrejelzésére: https://www.
propublica.org/article/machine-bias-risk-assessments-in-
criminal-sentencing). 2016-ban a Propublica ML-je olyan eseteket mutatott, ahol
a modell elfogultan jelezte előre, hogy a fekete nők nagyobb kockázatot jelentenek, mint
a fehér férfiak, miközben az összes korábbi nyilvántartás az ellenkezőjét mutatta. Az ilyen
esetek költségesek lehetnek és káros szociális hatásaik vannak, ezért el kell kerülni őket.
Egy másik esetben az Amazon készített egy MI-t az emberek felvételéhez, de le kellett
állítania, mert diszkriminatív volt a nőkkel szemben (a Washington Post jelentése szerint).
Az ilyen elfogultságok költségesek lehetnek és nem etikusak. Ahhoz, hogy elkerüljük őket,
az MI rendszereket monitorozni kell, hogy megbízhassunk bennük.
A modellelfogultság egy olyan hibatípus, amely a modell tanításához használt
adatkészlet bizonyos jellemzői miatt következik be, amelyek jobban jelen vannak és/
vagy súlyozottabbak, mint a többi. Egy rosszul reprezentáló vagy elfogult adatkészlet
összekuszált kimeneteleket eredményezhet a modell felhasználási eseteinél, alacsony
pontosságot és analitikai hibákat. Más szóval az a hiba, amit az ML algoritmus
helytelen feltételezései eredményeznek. A magas elfogultság eredményezhet pontatlan
előrejelzéseket és okozhatja egy modellnél, hogy elmulassza a releváns kapcsolatokat
a jellemzők és az előrejelzett célváltozó között. Ennek egy példája az előbb említett MI,
amelyet az Amazon készített az emberek felvételére, de elfogult volt a nőkkel szemben.
Fogunk még tanulni a modellelfogultságról az Explainable Monitoring Framework részben,
ahol megismerjük az elfogultság és veszély észlelését.
Modellátláthatóság
Az MI nem determinisztikus természetű. Az ML-re különösen jellemző, hogy
folyamatosan fejlődik, frissül és újratanítják az életciklusa során. Az MI hatással van
szinte minden iparágra és szektorra. A növekvő adoptációjával és az ML használatával
hozott fontos döntésekkel lényegessé vált az ugyanolyan bizalmi szint kialakítása, mint
amilyen a determinisztikus rendszereké. Végül is a digitális rendszerek csak akkor
hasznosak, amikor meg lehet bízni a munkájukban. Egyértelműen szükség van a modell
átláthatóságára, sok CEO és üzleti vezető bátorít minket, értsük meg az MI üzleti döntéseit
és az üzleti hatásukat. Nemrég a TikTok vezérigazgatója tette a következő nyilatkozatot:
"Úgy véljük, minden vállalatnak közzé kéne tennie az algoritmusait, moderálási
szabályait és adatfolyamait a szabályozók előtt" (Forrás: TikTok).
A nyíltság és átláthatóság ilyen szintje a vállalatoknál kialakíthatná a társadalom bizalmát
az MI irányába, és lehetővé tenné a könnyebb adoptációt és megfelelőséget.
Egy ML rendszer monitorozásának fő alapelvei 259
Modellmegfelelőség
A modellmegfelelőség fontossá vált, mivel hatalmas költségekkel járhat a nem
megfelelőség a kormányok és társadalom irányába. A következő címsor a Washington
Post-ban szerepelt:
Magyarázható MI
Ideális esetben egy üzlet előtérben tartja a modell átláthatóságát és megfelelőségét, így az
üzlet dinamikusan adaptálódik a környezetváltozáshoz, mint amilyen a modelleltérés,
és menet közben kezeli az elfogultságot. Mindehhez szükség van egy keretrendszerre,
amely kapcsolatban tartja az üzlet összes érintettjét (IT és üzleti vezetők, szabályozók,
üzleti felhasználók stb.) az MI modellel, hogy megértsék a modell által hozott döntéseket,
miközben a modell átláthatóságának és megfelelőségének növelésére koncentrálnak.
Egy ilyen keretrendszer készíthető a Magyarázható MI használatával az MLOps részeként.
A Magyarázható MI lehetővé teszi, hogy az emberek könnyen megértsék az ML-t.
A modell magyarázhatósága és átláthatósága két megközelítés, amelyek lehetővé teszik
a Magyarázható MI-t. Az ML modellek mintákat vagy szabályokat alkotnak az adatok
alapján, amellyel betanították őket. A Magyarázható MI segít az embereknek vagy üzleti
érintetteknek, hogy megértsék ezeket a szabályokat vagy mintákat, amelyeket a modell
felfedezett, és segít validálni az üzleti döntéseket is, amelyeket az ML modell hozott. Ideális
esetben a Magyarázható MI-nek képesnek kell lennie több üzleti érintett kiszolgálására,
ahogy az a következő ábrán látható:
Az előző ábrán egy modell azt jósolta, hogy egy beteg diabéteszes. A LIME magyarázó
kiemeli és következtet a diabétesz tüneteire, mint a száraz bőr, túlzott vizelet és homályos
látás, amellyel hozzájárul a diabétesz előrejelzéséhez, miközben a Nincs fáradtság egy
bizonyíték ellene. A magyarázó használatával egy orvos képes dönteni és levonni
a következtetéseket a modell előrejelzéséből és ellátni a beteget a megfelelő kezeléssel.
Itt többet tudhat meg az MI magyarázatokról: https://cloud.google.com/
ai-platform/prediction/docs/ai-explanations/overview.
Ezen kérdések megválaszolása több üzleti érdekeltnél lehetővé teszi, hogy a munkavállalók
és üzletek adaptálódjanak az MI-hez, és maximalizálják a belőle nyert értéket azzal, hogy
biztosítják a modell átláthatóságát és megfelelőségét, miközben adaptálódnak a környezeti
változásokhoz a modell elfogultságának és eltérésének optimalizálásával.
Megfigyelés
A monitor modul feladata, hogy monitorozza az alkalmazást a termelésben (kiszolgálja
az ML modellt). Számos tényező szerepel egy ML rendszerben, mint például az alkalmazás
teljesítménye (telemetriai adatok, munkateljesítmény, szerver válaszidő, sikertelen kérések,
hibakezelés stb.), az adatvédelem, modelleltérés és a környezetek változása. A monitor
modulnak fontos információkat kell szereznie a termelésben lévő rendszernaplókból,
hogy kövesse az ML rendszer robosztusságát. Nézzük meg a monitor modul három
tevékenységének jelentőségét és funkcionalitását: az adatvédelemét, modelleltérését
és az alkalmazás teljesítményét.
Adatvédelem
Egy ML alkalmazás adatvédelmének biztosítása magába foglalja a bejövő (az ML
modell bemeneti adatai) és kimenő (ML modell előrejelzése) adatainak ellenőrzését,
hogy biztosítsa az ML rendszerek integritását és robosztusságát. A monitor modul
biztosítja az adatvédelmet az adat mennyiségének, változatosságának, pontosságának
és gyorsaságának vizsgálatával, hogy észlelje a kívülállókat és anomáliákat. A kívülállók
vagy anomáliák észlelése megakadályozza az ML rendszerek rossz teljesítményét és az
érzékenységüket a támadások ellen (például rosszindulatú támadások). A hatékony
auditálással párosított adatvédelem képes kezelni az ML rendszerek kívánt teljesítményét,
hogy üzleti érték jöjjön létre.
266 Az Ön ML rendszerének monitorozási alapelvei
Modelleltérés
Ha nem mérik a modelleltérést, a modell teljesítménye könnyen átlag alattivá válhat
és akadályozhatja az üzletet a rossz döntésekkel és ügyfélszolgálattal. Például nehéz
előre látni a változásokat vagy trendeket az adatokban egy olyan ritka esemény során,
mint a COVID-19. Itt van néhány hír, ami a címlapra került:
Alkalmazás teljesítménye
Kritikus monitorozni az alkalmazás teljesítményét, lássuk előre és megakadályozzuk
a potenciális hibákat, mivel ez biztosítja az ML rendszerek robosztusságát.
Itt monitorozhatjuk a termelési telepítési cél (például Kubernetes vagy egy helyi szerver)
telemetria adatait és kritikusrendszernaplóit. Az alkalmazásteljesítmény monitorozása
fontos meglátásokat adhat valós időben, mint amilyen a szerver munkateljesítménye,
késése, szerver válaszideje, hibás kérések száma vagy irányítási folyamat hibái stb.
Nincs kikövezett útja az alkalmazások monitorozásának és az üzleti felhasználási esetétől
függően az alkalmazásának teljesítménymechanizmusa felügyelhető és monitorozható,
hogy a rendszer működjön és üzleti értéket termeljen.
Az Explainable Monitoring Framework értelmezése 267
Elemzés
Az Ön ML rendszerének elemzése a termelésben, valós időben, kulcsfontosságú az
ML rendszer teljesítményének megértéséhez és robosztusságának biztosításához.
Az emberek fontos szerepet játszanak a modellteljesítmény elemzésében és az apró
anomáliák és veszélyek észlelésében. Így egy ember a hurokban hatalmas átláthatóságot
és magyarázhatóságot vihet az ML rendszerbe. Elemezhetjük a modell teljesítményét,
hogy észrevegyük az elfogultságokat vagy veszélyeket, és megértsük, miért bizonyos minta
szerint hozza a modell a döntéseket. Ezt olyan haladó technikák alkalmazásával vihetjük
végbe, mint az adatok darabolása, a rosszindulatú támadásokat megelőző technikák, vagy
a helyi és globális magyarázatok megismerése. Nézzük meg mindezt a gyakorlatban.
Adatok darabolása
Számos sikertörténet van az ML körül, az üzlet és élet általános javítása tekintetében.
Azonban még van lehetőség fejleszteni az adateszközöket a hibajavításhoz és a modellek
értelmezéséhez. A fejlesztés egyik fontos területe a modellek rossz teljesítményének
megértése az adatok bizonyos részein vagy szeletein, és hogy hogyan egyensúlyozhatjuk ki
az átfogó teljesítményt. A szelet egy adatkészlet része vagy alkészlete. Az adatok darabolása
segíthet nekünk megérteni a modell teljesítményét az adatalkészletek különböző típusain.
Feloszthatjuk az adatkészletet több szeletre vagy alkészletre, és vizsgálhatjuk a modell
viselkedését náluk.
268 Az Ön ML rendszerének monitorozási alapelvei
Például nézzünk meg egy elméleti esetet, ahol betanítottunk egy random forest modellt,
hogy osztályozza, egy személy jövedelme 50000 $ alatt vagy felett van-e. A modellt az
UCI népszámlálási adatokon tanítottuk be (https://archive.ics.uci.edu/ml/
datasets/Census-Income+%28KDD%29). A modell eredményei az adatszeleteken
(vagy alkészleteken) a következő táblázatban láthatók. A táblázat szerint az átfogó mutatók
elfogadhatók, mivel a teljes naplóveszteség alacsony az összes adatnál (lásd. az All sort).
Ez egy széleskörűen használt mérés a bináris osztályozási problémáknál, és azt mutatja,
mennyire van közel az előrejelzés valószínűsége a tényleges/valós értékekhez; bináris
osztályozás esetében 0 vagy 1. Minél jobban eltér az előrejelzett valószínűség a tényleges
értéktől, annál nagyobb a naplóveszteség értéke. Azonban az egyes szeletek mást
mondanak:
Az adatok darabolása lehetővé teszi, hogy lássuk a kisebb elfogultságokat és nem látható
korrelációkat, hogy megértsük, miért teljesít rosszul a modell az adat egy alkészletén.
Elkerülhetjük ezeket az elfogultságokat és javíthatjuk a modell teljes teljesítményét, ha
a modellt kiegyensúlyozott adatkészletek használatával tanítjuk, amelyek reprezentálják az
összes adatszeletet (például szintetikus vagy alulmintázott stb. adatok használatával), vagy
ha hangoljuk a modellek hiperparamétereit, hogy csökkentsük az átfogó elfogultságot.
Az adatok darabolása egy átfogó képet adhat a modell korrektségéről és teljesítményéről
egy ML rendszernél, és abban is segíthet, hogy egy szervezet optimalizálja az adatokat
és ML modelleket az optimális teljesítmény és megfelelő korrektségi küszöbértékek
eléréséhez. Az adatok darabolása segíthet kialakítani a bizalmat az MI rendszer
irányába azzal, hogy átláthatóságot és magyarázhatóságot kínál az adat és a modell
teljesítményében.
Megjegyzés
Az adatok darabolásáról és az automatizált adatdarabolási módszerekről
alkotott átfogó kép érdekében vessen egy pillantást az Automated Data Slicing
for Model Validation: A Big data - AI Integration Approach dokumentumra,
ezen a címen: https://arxiv.org/pdf/1807.06068.pdf.
11.7 ábra: Az RNN modell globális magyarázata (RNNVis használatával) a folyamat egészként történő
értelmezéséhez (a rejtett állítások, rétegek stb. hogyan hat a modell kimeneteire és az előrejelzési
folyamatokra)
Forrás: https://blog.acolyer.org/2019/02/25/understanding-hidden-
memories-of-recurrent-neural-networks/
Az Explainable Monitoring Framework értelmezése 271
Irányítás
Az ML rendszerek hatékonysága függ attól, hogyan irányítják, hogy elérjék a maximális
üzleti értéket. Egy rendszer irányításának nagy része magába foglalja a minőségbiztosítást
és irányítást, valamint a modell auditálását és a jelentést, hogy biztosítva legyen az
end-to-end követhetőség és a szabályoknak való megfelelőség. A modell teljesítményének
monitorozása és elemzése alapján irányíthatjuk az ML rendszereket. Az irányítást az okos
riasztások és műveletek végzik az üzleti érték maximalizálásához. Nézzük meg hogyan
irányítják az ML rendszert a riasztások és műveletek, a modell minőségbiztosítása és
irányítása és a modell auditálása és jelentése.
Riasztások és műveletek
Egy ML rendszer irányítása magába foglalja az ML alkalmazás monitorozását és
elemzését. Itt riaszthatók a rendszerfejlesztők, amikor a rendszer rendellenes viselkedést
mutat, mint amilyen a sikertelen kérés, a szerves lassú válaszideje, szerver kivételek,
hibák vagy nagy késés. A rendszerfejlesztők vagy rendszergazda riasztása gondoskodhat
a minőségbiztosításról és megelőzheti a rendszerhibákat. A riasztásoknak két különböző
típusa van: riasztások a rendszerteljesítményről és a modellteljesítményen alapuló
riasztások. Itt van néhány példa a rendszerteljesítmény riasztásaira:
Összefoglalás
Ebben a fejezeteben megtanultuk egy ML rendszer monitorozásának alapelveit.
Megismertünk néhány gyakori monitorozási módszert és az Explainable Monitoring
Framework-öt (beleértve a monitorozás, elemzés és irányítás szakaszait). Aztán alaposan
megismertük a Magyarázható Monitorozás elveit.
A következő fejezetben elmélyedünk a Explainable Monitoring Framework gyakorlati
megvalósításában. Ennek használatával kialakítunk egy monitorozási folyamatot, hogy
folyamatosan monitorozhassuk a termelésben lévő ML rendszert az üzleti felhasználási
esetünknél (amely előre jelzi az időjárást Turku kikötőben).
A következő fejezet elég gyakorlatias lesz, szóval készüljenek fel!
12
Modellek
kiszolgálása és
monitorozása
Ebben a fejezetben a gépi tanulásos (ML) modellek termelésben való kiszolgálásának
és monitorozásának szükségességére reflektálunk, és megismerjük az ML modellek
kiszolgálásának különböző módjait a modell fogyasztóinak vagy felhasználóinak irányába.
Aztán újra meglátogatjuk az Explainable Monitoring framework-öt a 11. fejezet: Az Ön ML
rendszerének monitorozási alapelvei részből és megvalósítjuk azt az üzleti felhasználási esetnél,
amelyet megoldottunk az MLOps használatával az időjárás előrejelzésére. Az Explainable
Monitoring Framework megvalósítása gyakorlatias. Következtetni fogunk a telepített API-val,
monitorozzuk és elemezzük a következtetési adatokat az eltérések használatával (mint
amilyen az adateltérés, jellemzőeltérés és modelleltérés), hogy egy ML rendszer teljesítményét
mérjük. Végül megnézünk számos elvet az ML rendszerek irányítására az ML rendszerek
robosztus teljesítménye érdekében, a folytonos tanulás és szállítás működtetésére.
Kezdjük azzal, hogy reflektálunk az ML monitorozásának szükségességére a termelésben.
Aztán ebben a fejezetben a következő fő témákat érintjük:
Egy tipikus szituációban (igény szerinti mód), egy modellt szolgáltatásként szolgáltak ki
fogyasztásra a felhasználóknak, ahogy a 12.2 ábrán látható. Aztán egy külső alkalmazás
egy gépen vagy egy ember egy kérést küld az előrejelzéshez vagy ML szolgáltatáshoz
az adatinak felhasználásával. Az ML szolgáltatás amikor megkapja a kérést, egy
terheléskiegyenlítőt használ, elirányítsa a kérést egy elérhető erőforráshoz (például egy
konténerhez vagy egy alkalmazáshoz) az ML alkalmazáson belül. A terheléskiegyenlítő
kezeli az erőforrásokat is az ML szolgáltatáson belül, hogy igény szerint új konténereket
vagy erőforrásokat kezeljen és generáljon. A terheléskiegyenlítő visszairányítja a kérést
a felhasználótól a modellhez, amely egy konténerben fut az ML alkalmazáson belül,
hogy készítse el az előrejelzést. Amikor megkapja az előrejelzést, a terheléskiegyenlítő
visszaáll a külső alkalmazásra a gépen vagy az emberre, aki a kérést indította, vagy a kérésre
a modell előrejelzésén belül. Így az ML szolgáltatás képes kiszolgálni a felhasználóit. Az ML
rendszer együttműködik a modelltárolóval vagy jegyzékkel, hogy frissítse magát a legújabb
vagy legjobban teljesítő modellekkel, hogy a legjobb módon szolgálja ki a felhasználókat.
Ezzel a szituációval szemben, ahol a felhasználók küldtek egy kérést, van egy másik
felhasználási eset is, ahol a modellt tömeges szolgáltatásként szolgálják ki.
A tömeges feldolgozás egyik fő előnye, hogy egy REST API-alapú szolgáltatással szemben egy
tömeges szolgáltatás könnyebb vagy kevesebb infrastruktúrát igényelhet. Egy tömeges feladat
megírása könnyebb egy adatkutatónak, mint egy online REST szolgáltatást telepíteni. Ez azért
van, mert az adatkutatónak csak egy modellt kell tanítania vagy deszerializálnia egy betanított
modellt egy gépen és végrehajtania a tömeges következtetést egy adatkötegen. A tömeges
következtetés eredményei tárolhatók egy adatbázisban, és nem kell válaszokat küldeni
a felhasználóknak vagy fogyasztóknak. Azonban az egyik fő hátránya a nagy késés, és hogy
nem valós idejű. Jellemzően egy tömeges szolgáltatás képes több száz vagy ezer jellemzőt
egyszerre feldolgozni. Használható egy tesztsorozat az optimális kötegméret meghatározására
az elfogadható késés eléréséhez a felhasználási esetnél. A jellemző kötegméret lehet 32, 64,
128 vagy 518, a 2 hatványa. A tömeges következtetés ütemezhető periodikusan és számos
felhasználási esetet szolgálhat ki, ahol a késés nem probléma. Mindjárt megvitatunk egy példát.
• Feladat vagy megoldás: Adatkutatóként azt a feladatot kapta, hogy fejlesszen egy
ML-alapú megoldást az időjárási körülmények 4 órás előrejelzésére a finnországi
Turku kikötőben. Ez lehetővé teszi a kikötőnek, hogy optimalizálja az erőforrásait,
amely akár 20%-os költségmegtakarítást tesz lehetővé. A kezdéshez megkapta az
elmúlt 10 év időjárásának adatkészletét Turku kikötőben (az adatkészlet a könyv
Git adatraktárában található). A feladata, hogy egy folytonos tanuláson alapuló
ML megoldást alakítson ki a Turku kikötőbeli műveletek optimalizálására.
import json
import requests
import pandas as pd
data = pd.read_csv('test_data.csv')
data = data.drop(columns=['Timestamp', 'Location', 'Future_
weather_condition'])
url = 'http://20.82.202.164:80/api/v1/service/weather-prod-
service/score'
headers = {'Content-Type':'application/json'}
for I in range(len(data)):
inference_data = data.values[i].tolist()
inference_data = json.dumps(""dat"": [inference_
data]})
r = requests.post(url, data=inference_data,
headers=headers)
print(str(i)+str(r.content))
Az Ön ML rendszerének monitorozása
A Monitor modul feladata az alkalmazás monitorozása az alkalmazásban (azaz az ML
modell kiszolgálása). A műveleti monitor modul a következő három funkcióval rendelkezik:
• Adatvédelem:
-A céladatkészlet regisztrálásához
-Egy adateltérés monitor létrehozásához
-Adateltérési elemzés végrehajtásához
-Jellemzőeltérési elemzés végrehajtásához
• Modelleltérés
• Alkalmazás teljesítménye
Adatvédelem
Az adatvédelem monitorozásához a következtetési adatoknál monitoroznunk kell az
adateltérést és jellemzőeltérést, hogy lássuk, van-e bármilyen rendellenes változás a bejövő
adatokban vagy bármilyen új minta:
A céladatkészlet regisztrációja
A tanítási adatkészletet a 4. fejezet: Machine Learning folyamatok részben az Adatbevitel és
funkciótervezés szakaszban regisztráltuk. Regisztrálnunk kell a következtetési adatkészletet
az Azure ML munkaterület Datasets részén.
286 Modellek kiszolgálása és monitorozása
2. A Create gomb kiválasztásakor figyelmeztetést fog kapni, hogy hozzon létre egy új
adateltérés monitort. Válassza ki tetszés szerint a cél adatkészletet.
3. A Registering the target dataset részen regisztráltuk az inputs.csv fájlokat
Input-InferenceData-ként. Válassza ki cél adatkészletként a következtetési
adatkészletét, ahogy a 12.14 ábrán látható:
7. Menjen a Compute részre, nyissa meg a Compute clusters fület, és hozzon létre
egy új számítási erőforrást (például drift-compute – Standard_DS_V2 machine),
ahogy a 12.17 ábrán látható:
9. Kattintson az Analyze existing data opcióra és futtassa le, hogy elemezzen bármely
meglévő következtetési adatot, ahogy a 12.18 ábrán látható:
Modelleltérés
A modelleltérés monitorozása lehetővé teszi, hogy ellenőrizzük a modellünk teljesítményét
a termelésben. Ott van modelleltérés, ahol a függő változók tulajdonságai változnak.
Például a mi esetünkben ez az időjárás osztályozásának eredménye (azaz esik-e vagy sem).
Pont ahogy beállítottuk az adateltérést az Adateltérési monitor létrehozása részben, úgy
beállíthatjuk a modelleltérési monitort is modell kimeneteinek monitorozására. Itt vannak
a magas szintű lépések a modelleltérés beállításához:
Alkalmazás teljesítménye
Telepítette az ML szolgáltatást REST API végpontok formájában, amelyet fogyaszthatnak
a felhasználók. Az Azure Application Insights (az Azure Monitor teszi lehetővé)
használatával monitorozhatjuk ezeket a végpontokat. Az alkalmazásunk teljesítményének
monitorozásához nyissuk meg az Application Insights vezérlőpultját, ahogy
a 12.23 ábrán látható. Menjen az Endpoints részre az Azure ML szolgáltatás
munkaterületén és válassza ki azt a REST API végpontot, amelyre az ML modelljét
telepítette. Kattintson az Application Insights url opcióra, hogy megnyissa az Application
Insights végpontot, amely csatlakozott az Ön REST API végpontjához:
Az Ön ML rendszerének elemzése
A termelésben lévő ML rendszerének valós idejű monitorozása és elemzése a kulcs ahhoz,
hogy megértse az ML rendszerének teljesítményét és biztosítsa annak robosztusságát
a maximális üzleti érték előállításához. Az emberek fontos szerepet játszanak
a modellteljesítmény elemzésében és az apró anomáliák és veszélyek észlelésében.
Elemezhetjük a modell teljesítményét, hogy észrevegyük az elfogultságokat vagy
veszélyeket, és megértsük, miért bizonyos minta szerint hozza a modell a döntéseket.
Ezt olyan fejlett technikák alkalmazásával érhetjük el, mint az adatok darabolása,
a rosszindulatú támadásokat megelőző technikák vagy a helyi és globális magyarázatok
megértése.
Adatok darabolása
A mi felhasználási esetünknél kihagyjuk az adatok darabolását, mivel nem túl változatosak
az adataink a demográfia vagy minták tekintetében (például nem, korcsoportok stb.).
A modell korrektségének méréséhez az elfogultság észlelésére fogunk koncentrálni.
308 Modellek kiszolgálása és monitorozása
Az Ön ML rendszerének irányítása
Egy rendszer irányításának nagy része magába foglalja a minőségbiztosítást és irányítást,
a modell auditálását és jelentést, hogy meglegyen az end-to-end követhetőség és
a szabályozásoknak való megfelelőség. Az ML rendszerek hatékonysága (azaz egy
kívánt vagy szándékolt eredmény előállításának képessége) függ attól, hogyan irányítják
a maximális üzleti érték eléréséhez. Idáig monitoroztuk és elemeztük a telepített
modellünket a következtetési adatoknál:
Összefoglalás 309
Összefoglalás
Ebben a fejezetben az ML modellek felhasználóknak történő kiszolgálásának alapelveiről
tanultunk és arról, hogyan monitorozzuk őket a maximális üzleti érték eléréséhez.
Megismertük az ML modellek kiszolgálásának különböző módjait a modell fogyasztóinak
vagy felhasználóinak irányába, és megvalósítottuk a Magyarázható Monitorozási
keretrendszert egy elméleti üzleti felhasználási esetnél és egy telepített modellnél.
Azért hajtottuk végre a Magyarázható Monitorozási keretrendszernek a gyakorlati
megvalósítását, hogy mérjük az ML rendszerek teljesítményét. Végül megvitattuk az ML
rendszerek irányításának szükségességét, hogy biztosítsuk az ML rendszerek robosztus
teljesítményét.
A következő és egyben utolsó fejezetben még jobban megismerjük az ML rendszerek
irányítását és a folytonos tanulás elveit!
13
Az ML rendszerek
irányítása
a folytonos
tanuláshoz
Ebben a fejezetben reflektálni fogunk a gépi tanulási (ML) megoldásoknál a folytonos
tanulás szükségességére. Az adaptáció áll a gépi intelligencia középpontjában. Minél jobb
az adaptáció, annál jobb a rendszer. A folytonos tanulás a külső környezetre fókuszál és
adaptálódik hozzá. A folytonos tanulás lehetővé tétele az ML rendszereknél nagyszerű
előnyökkel járhat. Megnézzük, mi szükséges egy ML rendszer sikeres irányításához, ahogy
felderítjük a folytonos tanulást és megvizsgáljuk az Explainable Monitoring Framework
irányítási összetevőjét, amely segít nekünk irányítani az ML rendszert a maximális érték
eléréséhez.
El fogunk mélyedni az irányítás gyakorlati megvalósításában a riasztás és intézkedés
funkciók engedélyezésével. Következőként megnézzük a modellek minőségbiztosításának
és a telepítések irányításának módjait, valamint megtanuljuk a legjobb praktikákat
a modell auditok és jelentések generálására. Végül olyan módszerekről fogunk tanulni,
amelyek lehetővé teszik a modell újratanítását és a CI/CD folyamatok fenntartását.
312 Az ML rendszerek irányítása a folytonos tanuláshoz
Folytonos tanulás
A folytonos tanulás az adatokból, emberi szakértőktől és a külső környezettől történő
folyamatos tanulás elvén alapszik. A folytonos tanulás lehetővé teszi az élethosszig tartó
tanulást a központjában történő adaptációval. Lehetővé teszi az ML rendszereknek, hogy
idővel intelligenssé váljanak, hogy adaptálódjanak a feladathoz. Monitorozással, illetve a
környezettől és az ML rendszert támogató emberi szakértőktől történő tanulással valósítja
ezt meg. A folytonos tanulás egy erőteljes kiegészítése lehet egy ML rendszernek. Lehetővé
teheti, hogy idővel megvalósítsa egy MI rendszer maximális potenciálját. A folytonos
tanulás nagyon ajánlott. Nézzünk meg egy példát:
13.1 ábra: Egy kölcsön kibocsátási szituáció, egy hagyományos rendszer és egy ember által támogatott
ML rendszer
A folytonos tanulás szükségességének értelmezése 313
Számos előnye van egy modell telepítésének (amelyet a folytonos tanulás tett lehetővé)
egy hagyományos folyamattal összehasonlítva egy olyan szervezetben, amely teljesen
az emberi alkalmazottaktól függ. Például az előző ábrán egy bank kölcsönjóváhagyási
folyamatának lépéseit láthattuk két esetben. Az első szituációban csak emberi szakértők
végezték (mint egy hagyományos banki felépítésben). A második esetben a folyamatot egy
ML rendszer használatával javították vagy automatizálták, hogy figyelje az alkalmazásokat,
tárgyaljon, kölcsönalkalmazási véglegesítést biztosítson (ahol egy emberi szakértő
ellenőrzi az ML rendszer döntéseit és jóváhagyja vagy elutasítja azokat) és jóváhagyja
a hitelt. A hagyományos felépítésben a feldolgozási idő 1 hét, míg az ML rendszer
feldolgozási ideje (az emberi szakértővel együtt dolgozva) 6 óra.
Az ML rendszer gyorsabb és fenntarthatóbb a banknak, mivel folyamatosan tanul és
javul egy ember segítségével. Az emberi alkalmazottak foglalkoztatása egy cégnél vagy
munkánál véges. Amikor elmennek, a szakterületi tapasztalatuk is elmegy, és egy új
alkalmazott betanítása vagy felvétele ugyanarra a feladatra költséges. Másrészt egy ML
modell együtt dolgozva, vagy kiegészítve egy emberi szakértővel, ami folyamatosan
tanul az idő múlásával, megoldja a betanítás kérdését egy idő után, és a tudása örökre
megmarad (az idő tekintetében). Az ML rendszer folytonos tanulása (egy emberi
szakértővel) örökre megtartható a banknál a hagyományos megközelítéssel szemben, ahol
az emberi alkalmazottak folyamatosan változnak. A folytonos tanulás hatalmas értéket
adhat egy ML rendszerhez és az üzlethez, hosszú távon.
Ezen okokból szükség van a folytonos tanulásra egy ML rendszerben. tehát a folytonos
tanulás nélkül nem érhetjük el a maximális értéket, amit egy ML rendszernek kínálnia
kellene. Más szóval a projektekre hibára ítéltek. A folytonos tanulás a kulcs az MI
projektek sikerében. Egy hatékony irányítási stratégia a Magyarázható Monitorozás
részeként lehetővé teheti a folytonos tanulást. A folytonos tanulás egyik fontos része
a modell újratanítása, így lépést tarthatunk a fejlődő adatokkal és releváns döntéseket
hozhatunk. Ehhez összeolvaszthatjuk a Magyarázható Monitorozást és a modell
újratanítását, hogy lehetővé tegyük a folytonos tanulást:
Magyarázható Monitorozás + Modell újratanítása = Folytonos tanulás
Továbblépve részletesebben megnézzük a folytonos tanulást. Most ismerjük meg, hogyan
vihetünk hatékony irányítást az ML rendszerekbe.
Magyarázható monitorozás, irányítás 315
Riasztások és műveletek
A riasztásokat a körülmények észlelését szolgáló ütemezett ellenőrzések hozzák létre.
Egy feltétel teljesülésekor létrejön egy riasztás. A létrejött riasztás alapján intézkedéseket
hajthatunk végre. Ebben a részben ezekről fogunk tanulni, és hogy hogyan kell kezelni
őket egy ML rendszer irányításához.
316 Az ML rendszerek irányítása a folytonos tanuláshoz
Mi a riasztás?
A riasztás egy ütemezett feladat, ami a háttérben fut, hogy monitorozzon egy alkalmazást,
hogy ellenőrizze, fennállnak-e bizonyos feltételek. Egy riasztást három dolog vezérel:
Hibakezelés
Potenciális hibák mindig lehetnek egy alkalmazásban. Előre láthatjuk őket, ha kezeljük
az összes lehetséges peremesetet az ML alkalmazásunknál. A következő ábrán látható
keretrendszer használatával kezelhetjük ezeket a hibákat. Ezen keretrendszer célja
a peremesetek azonosítása és az automatizált hibaelhárítási módszerek a lehetséges hibák
megszüntetésére. Ez működésben tartja az ML szolgáltatást:
Magyarázható monitorozás, irányítás 317
13.2 táblázat: A lehetséges gyakori kivételek vagy hibák, amelyeket keresni kell
Magyarázható monitorozás, irányítás 319
str(e)},
{'ErrorCode': 101})
model_onnx = os.path.join(os.getenv('AZUREML_MODEL_
DIR'),
'support-vector-classifier/2/svc.onnx')
try:
model = onnxruntime.InferenceSession(model_onnx,
None)
except Exception as e:
tc.track_event('FileNotFound', {'error_message':
str(e)},
{'ErrorCode': 101})
input_name = model.get_inputs()[0].name
label_name = model.get_outputs()[0].name
# variables to monitor model input and output data
inputs_dc = ModelDataCollector("Support vector
classifier model", designation="inputs", feature_
names=["Temperature_C", "Humidity", "Wind_speed_kmph",
"Wind_bearing_degrees", "Visibility_km", "Pressure_
millibars", "Current_weather_condition"])
prediction_dc = ModelDataCollector("Support vector
classifier model", designation="predictions", feature_
names=["Future_weather_condition"])
try:
322 Az ML rendszerek irányítása a folytonos tanuláshoz
inputs_dc.collect(data)
except Exception as e:
tc.track_event('ValueNotFound', {'error_
message': str(e)},
{'ErrorCode': 201})
Az adat méretezése egy fontos lépés a következtetés előtt. Meg kell róla győződnünk,
hogy jól készült el, hibák nélkül. A try és except hasznos lehet ilyen esetekben,
mivel egy scaler fájl használatával próbáljuk méretezni az adatokat, amelyeket
betöltöttünk az init függvénybe.
Ha az adat méretezése sikertelen, akkor létrejön egy kivétel. Itt a track_
event függvényt használjuk a kivétel követésére az Application Insights-
ban. Egy ScalingError egyedi eseménynevet generálunk, ha kivétel volt.
Egy kivétel üzenet és egy 301 hibakód kerül naplózásra az Application Insights-
ban. Ehhez hasonlóan a pontozó fájl esetében a legfontosabb lépés a modell
következtetése, amelyet aprólékosan kell elvégezni.
Magyarázható monitorozás, irányítás 323
output = 'error'
return output
Intézkedések beállítása
Állíthatunk be riasztásokat és intézkedéseket a kivételesemények alapján, amelyeket
korábban hoztunk létre (a Hibák kezelése részben). Ebben a részben egy intézkedést
állítunk be egy e-mailes emlékeztető formájában egy általunk generált riasztás alapján.
Amikor létrejön egy kivétel vagy riasztás az Application Insights-ban, értesítést kapunk
róla egy e-mailben. Így kivizsgálhatjuk és megoldhatjuk azt.
Állítsunk be egy intézkedést (e-mail) egy riasztás fogadásakor úgy, hogy belépünk
az Application Insights-ba, amelyet csatlakoztatnunk kellett az ML rendszerünk
végpontjához. Az Application Insights-ot az Azure ML munkaterületén keresztül érheti el.
Kezdjünk neki:
6. Végül létrehozunk egy feltételt. Kattintson a Review and create opcióra a feltétel
létrehozásához, ahogy az előző képernyőképen látható. Amint létrehozta ezt a
feltételt, látni fogja a Create alert rule panelen, ahogy a következő képernyőképen
látható. Következőként állítson be egy intézkedést úgy, hogy rákattint az Add action
groups majd Create action group opciókra:
7. Adjon meg egy e-mail címet, hogy megkaphassa az értesítéseket, ahogy a következő
képernyőképen látható. Itt elnevezheti az értesítését (az Alert rule name mezőben)
és megadhatja a szükséges információkat egy e-mailes riasztási intézkedés
beállításához:
Miután megadta az összes szükséges információt, beleértve egy e-mail címet, kattintson
a Review + Create gombra, hogy konfigurálja az intézkedést (egy hibán alapuló e-mailt).
Végül adja meg a riasztási szabály részleteit, például: Alert rule name, Description és
Severity, ahogy a következő képernyőképen látható:
8. kattintson a Create alert rule lehetőségre, hogy létrehozzon egy e-mailes riasztást
a hiba alapján (például: InferenceError). Ezzel létrehozott egy riasztást,
szóval itt az ideje tesztelni. Menjen a 13_Govenance_Continual_Learning
mappába és nyissa meg a test_inference.py szkriptet (cserélje le az URL-t a
saját végpont linkjével). Majd futtassa a szkriptet a következő paranccsal:
python3 test_inference.py
9. A szkript futtatása egy hibát fog adni. Állítsa le a szkriptet néhány következtetés
végrehajtása után. A hiba után 5-10 percen belül e-mailben értesítést fog kapni
a hibáról, ahogy a következő képernyőképen látható:
Modell QA és irányítás
A fejlődő vagy dinamikusan változó adat az előrejelzési hiba arányának növekedéséhez
vezet. Ennek oka lehet az adateltérés, mivel az üzlet és a külső környezet változik, vagy az
adatmérgezéses támadások. Ez növeli az előrejelzési hiba arányát, ami az ML modellek
újraértékeléséhez vezet, mivel újratanították őket (manuálisan vagy automatikusan),
így fedeztek fel új algoritmusokat, amelyek pontosabbak, mint az előzőek. Itt van néhány
irányelv az ML modellek új adatokkal történő teszteléséhez:
Adat audit
Az adat irányítja az ML rendszerek számos döntését. Emiatt az auditoroknak figyelembe
kell venniük az adatokat az auditálás és jelentés során, meg kell vizsgálniuk a tanítási
adatot, tesztelniük, következtetniük és monitorozniuk kell az adatot. Ez elengedhetetlen az
end-to-end követhetőséghez az adat felhasználásának követése érdekében (például, hogy
melyik adatkészletet melyik modell tanításához használták) az MLOps-nál. Egy Git for
Data típusú mechanizmus, amely verziókezeli az adatokat, lehetővé teheti az auditoroknak
az adatok hivatkozását, vizsgálatát és dokumentálását.
• Ha egy kialakítás elromlott, végre kell hajtani egy fix it asap szabályzatot a csapattól.
• Integrálja az automatizált elfogadási teszteket.
• Kérjen pull kéréseket.
• Nézze meg a kód áttekintését minden történetnél vagy jellemzőnél.
• Auditálja rendszeresen a rendszernaplókat és eseményeket (ajánlott).
• Rendszeresen jelentsen minden csapattag számára látható mérőszámokat
(például slackbot vagy e-mailes értesítések).
Összefoglalás
Ebben a fejezetben a folytonos tanulás fő alapelveiről tanultunk az ML megoldásokban.
Tanultunk a Magyarázható Monitorozásról (az irányítás összetevőről) a hibakezelés és az
ML rendszer fejlesztőinek e-mailes értesítések használatával történő riasztási műveletek
konfigurációjának gyakorlati megvalósításán keresztül. Végül megnéztük a modell
újratanításának módjait és a CI/CD folyamat fenntartását. Ezzel elláttuk Önt a kritikus
készségekkel az MLOps automatizálásához és irányításához az Ön felhasználási eseteihez.
Gratulálunk, hogy befejezte a könyvet! Az MLOps világa folyamatosan fejlődik. Már
készen áll rá, hogy az MLOps használatával segítse az üzlete gyarapodását. Remélem
élvezte a tanulást és olvasást a gyakorlatias MLOps megvalósításokon keresztül. Menjen,
és legyen olyan a változás, amilyet látni szeretne. A legjobbakat kívánjuk az MLOps
próbálkozásaihoz!
Packt.com
Iratkozzon fel az online digitális könyvtárunkra, hogy teljes hozzáférése legyen több, mint
7000 könyvhöz és videóhoz, valamint az iparágvezető eszközökhöz, amelyek segítenek
megtervezni az Ön személyes fejlődését és karrierépítését. További információkért, kérjük,
látogasson el weboldalunkra.
Tudta-e, hogy a Packt minden kiadott könyvnek az e-könyv változatát is kínálja, PDF-
és ePub-fájlok formájában? Korszerűsíthet az e-könyv verzióra a packt.com oldalon
és a nyomtatott könyv tulajdonosaként kedvezményre jogosult az e-könyv változatnál.
Lépjen velünk kapcsolatba a customercare@packtpub.com címen a további
részletekért.
A www.packt.com címen számos ingyenes műszaki cikket is olvashat, regisztráljon
az ingyenes hírlevelekre, és kapjon exkluzív kedvezményeket és ajánlatokat a Packt
könyvekre és e-könyvekre.
340 Egyéb könyvek, amiket ajánlunk
Egyéb könyvek,
amiket ajánlunk
Ha tetszett ez a könyv, lehet, hogy a Packt alábbi könyvei is érdekesek lehetnek az
Ön számára:
ML Operations setting up 54
reporting system 333 MLOps tools 47
MLOps 14, 15 Azure DevOps 58
characterizing 37 Azure ML Service 55
concepts 16 JupyterHub 60
continuous delivery (CD) 166 setting up 54
continuous deployment (CD) 166 MLOps tools, for business
continuous integration (CI) 166 problems implementation
intersection 14 Azure ML Service 53
MLOps based solution MLflow 53
implementation roadmap 42 MLOps workflow 16, 17
MLOps, characteries about 263
about 38 MLOps workflow, modules
big data ops 40 Drivers 24
hybrid MLOps 41 MLOps pipeline 16
large-scale MLOps 41, 42 ML pipeline
small data ops 39 basics 80, 81
MLOps, data scales compute resources, configuring
big-scale data 38 for 82, 83, 84
medium-scale data 38 data ingestion 88, 89, 90
small-scale data 38 implementing 85, 86, 87, 88
MLOps drivers model packaging 97, 98
about 16 model testing 96
artifacts 25 ML solution
code 25 securing, by design 224, 225
data 25 testing, by design 214
infrastructure 26 ML solution development process 28
middleware 26 ML solution, testing by design concepts
MLOps implementation data testing 214, 215
data, procuring 45, 46 deployment testing 217
requirements, procuring 46, 47 inference testing 217
MLOps infrastructures 47 model testing 215
MLOps pipeline pre-training tests 216
about 16 pro-training tests 216
build module 17, 18 ML system
deploy module 20 analyzing 307
monitor module 22 application performance 304, 306, 307
MLOps resources bias and threat, detecting 308
350
O version control 62
production artifacts
one-hot encoding 69 registering 100, 101, 102
OpenAPI Specification (OAS) 209 production environment
OpenOPI setting up, in CI/CD pipeline
reference link 199 237, 238, 240, 242
optimal policy 122 production infrastructure
setting up 230
P production-ready pipeline
testing 243, 244
Pearson correlation coefficient 70 production testing, methods
Permutation Feature Importance about 122
(PFI) 119 A/B testing 123
pipeline release management 250, 251 batch testing 123
pipeline triggers, configuring CI/CD, testing 124, 125
for automation shadow test 124
about 245 stage test 124
Artifactory trigger, setting up 247, 248 project audit 335
Git trigger, setting up 246 proof of concept (POC) 195
Schedule trigger, setting up 248, 249 Proof of Concept (PoC) 166
PoC (Proof of Concept) 163 purity 113
poisoning attack, ways
algorithm poisoning 225
dataset poisoning 225
Q
model poisoning 225 Quality Assurance (QA) 249
precision 107
principles of source code
management, for ML
R
about 60 rand index 113
clean code 61 Random Forest classifier
code readability 63 about 94
commenting and documentation 64 testing 97
error handling 62 training 94, 95
logging 62 Random Forest model
modularity 60 reference link 94
single task dedicated functions 61 rate of automation 122
structuring 61 Read and Docs
testing 61 URL 64
352
T W
target datasets 285 waterfall method
test environment 21 evolution 8
continuous integration (CI), weather_api.py file
setting up for 174 code 202, 203, 204, 206
deployment pipeline, setting up for 174
setting up 178, 179, 180, 182, 183, 184
setting up, with Azure DevOps 168, 169
Y
time series analysis 73 YAML (Yet Another Markup
traditional software development Language) 149
challenges 11, 12
training dataset
used, for training ML models 90, 91