Die Ent­wick­lung von Pro­duk­ten mit maschi­nel­lem Ler­nen oder ML-gestütz­ten Pro­dukt­funk­tio­nen umfasst zwei unter­schied­li­che Disziplinen:

  • Modell­ent­wick­lung: Data Sci­en­tists – hoch­qua­li­fi­ziert in Sta­tis­tik, linea­rer Alge­bra und Kal­kül – trai­nie­ren, bewer­ten und wäh­len das leis­tungs­fä­higste sta­tis­ti­sche oder neu­ro­nale Netz­werk­mo­dell aus.
  • Modell-Bereit­stel­lung: Ent­wick­ler – hoch­qua­li­fi­ziert in Soft­ware­de­sign und ‑tech­nik – erstel­len ein robus­tes Soft­ware­sys­tem, stel­len es in der Cloud bereit und ska­lie­ren es, um eine große Anzahl gleich­zei­ti­ger Modell­in­fe­renz­an­fra­gen zu bedienen.

Das ist natür­lich eine grobe Ver­ein­fa­chung. Für die Ent­wick­lung nütz­li­cher und erfolg­rei­cher ML-gestütz­ter Pro­dukte sind meh­rere andere wich­tige Fach­kennt­nisse erforderlich:

  • Daten­tech­nik: Auf­bau von Daten­pipe­lines zum Sam­meln von Daten aus unter­schied­li­chen Quel­len, Aufbereitung und Umwand­lung die­ser Daten in homo­gene, sau­bere Daten, die sicher für das Trai­ning von Model­len ver­wen­det wer­den können.
  • Pro­dukt­de­sign: Ver­ste­hen der geschäft­li­chen Anfor­de­run­gen, Iden­ti­fi­zie­ren von wich­ti­gen Zie­len und rele­van­ten Geschäfts­ma­tri­zen; Defi­nie­ren von Pro­dukt­funk­tio­nen oder User Sto­ries für diese Ziele, Erken­nen der zugrun­de­lie­gen­den Pro­bleme, die mit ML bes­ser gelöst wer­den kön­nen; Ent­wer­fen von Benut­zer­er­fah­run­gen, um nicht nur die ML-Modell­vor­her­sage naht­los mit den übri­gen Pro­dukt­funk­tio­nen zu nut­zen, son­dern auch (Re-)Aktionen der Benut­zer als impli­zite Bewer­tung der Modell­er­geb­nisse zu sam­meln und zur Ver­bes­se­rung der Modelle zu nutzen.
  • Sicher­heits­ana­lyse: Sicher­stel­len, dass das Soft­ware­sys­tem, die Daten und das Modell sicher sind und dass keine per­so­nen­be­zo­ge­nen Daten durch die Kom­bi­na­tion von Modell­er­geb­nis­sen und ande­ren öffent­lich zugäng­li­chen Infor­ma­tio­nen oder Daten offen­ge­legt werden.
  • KI-Ethik: Stel­len Sie sicher, dass alle gel­ten­den Gesetze ein­ge­hal­ten wer­den, und fügen Sie Maß­nah­men zum Schutz vor jeg­li­cher Art von Vor­ein­ge­nom­men­heit hinzu (z. B. Begren­zung des Umfangs des Modells, zusätz­li­che mensch­li­che Auf­sicht usw.).

Da immer mehr Modelle in der Pro­duk­tion ein­ge­setzt wer­den, hat die Bedeu­tung von MLOps natür­lich zuge­nom­men. Der Schwer­punkt liegt zuneh­mend auf der naht­lo­sen Gestal­tung und Funk­tion von ML-Model­len inner­halb des Gesamt­pro­dukts. Die Ent­wick­lung von Model­len kann nicht in einem Silo erfol­gen, da dies Aus­wir­kun­gen auf das Pro­dukt und das Unter­neh­men haben kann.

Wir brau­chen einen ML-Lebens­zy­klus, der auf die Rea­li­tä­ten von ML-gestütz­ten Pro­duk­ten und MLOps abge­stimmt ist. Er sollte die Sicht­bar­keit für alle Betei­lig­ten erleich­tern, ohne zu viele Ände­run­gen in den bestehen­den Arbeits­ab­läu­fen der Daten­wis­sen­schaft­ler und Inge­nieure zu verursachen.

Im wei­te­ren Ver­lauf des Arti­kels gebe ich zunächst einen Über­blick über die typi­schen Modell­ent­wick­lungs- und Soft­ware­ent­wick­lungs-Work­flows und zeige dann auf, wie beide zusam­men­ge­führt wer­den kön­nen, um sich an die Anfor­de­run­gen der Erstel­lung ML-gestütz­ter Pro­dukte in der MLOps-Ära anzupassen.

Lebens­zy­klus der Modellentwicklung

Las­sen wir die Online-Bereit­stel­lung von Model­len in der Pro­duk­tion für einen Moment bei­seite. Data Sci­en­tists ent­wi­ckeln seit über einem Jahr­zehnt sta­tis­ti­sche Modelle und Modelle mit neu­ro­na­len Net­zen. Häu­fig wur­den diese Modelle off­line (d. h. manu­ell) für prä­dik­tive Ana­ly­sen verwendet.

Die Modell­ent­wick­lung besteht aus zwei Grup­pen von Akti­vi­tä­ten: Daten­vor­be­rei­tung und Modell­trai­ning. Sie beginnt mit der For­mu­lie­rung eines ML-Pro­blems und endet mit der Modellauswertung.

For­mu­lie­ren 

Data Sci­en­tists über­set­zen ein Unter­neh­mens­ziel in ein Pro­blem des maschi­nel­len Ler­nens. Es gibt meh­rere Fak­to­ren, die Sie berück­sich­ti­gen müssen:

  • Geschäfts­ziel: Beschrän­ken Sie sich auf eine kleine Gruppe von ML-Pro­ble­men, die dem Unter­neh­mens­ziel die­nen können.
  • Kos­ten von Feh­lern: Kein ML-Modell kann zu 100 % genau sein. Wie hoch sind die Kos­ten für falsch-posi­tive und falsch-nega­tive Ergeb­nisse? Wenn bei­spiels­weise ein Bild­klas­si­fi­zie­rungs­mo­dell bei einer gesun­den Per­son fälsch­li­cher­weise Brust­krebs vor­her­sagt, wird dies durch wei­tere Tests kor­ri­giert. Wenn das Modell jedoch den Krebs bei einem Pati­en­ten nicht dia­gnos­ti­ziert, kann dies auf­grund der spä­ten Erken­nung töd­lich sein.
  • Daten­ver­füg­bar­keit: Es mag Sie über­ra­schen, aber Sie kön­nen mit kei­nen Daten begin­nen und Ihre Daten­er­he­bung mit einem Boot­strap durch­füh­ren. Je umfang­rei­cher die Daten sind, desto mehr Arten von Model­len sind denk­bar. Wenn Sie bei­spiels­weise eine Anoma­lie­er­ken­nung ohne mar­kierte Daten durch­füh­ren möch­ten, kön­nen Sie mit ver­schie­de­nen Arten von unüber­wach­ten Clus­te­ring-Algo­rith­men begin­nen und Punkte, die sich in kei­nem Clus­ter befin­den, als Anoma­lien mar­kie­ren. Wenn Sie jedoch Benut­zer­re­ak­tio­nen auf Ihr Modell sam­meln, erhal­ten Sie einen mar­kier­ten Daten­satz. Dann möch­ten Sie viel­leicht aus­pro­bie­ren, ob ein über­wach­tes Klas­si­fi­zie­rungs­mo­dell bes­ser funktioniert.
  • Bewer­tungs­me­tri­ken: Je nach Pro­blem­stel­lung soll­ten Sie auch eine Metrik für die Modell­leis­tung fest­le­gen, die Sie opti­mie­ren möch­ten und die mit der Geschäfts­me­trik für Ihr Geschäfts­ziel über­ein­stim­men sollte.

Sam­meln

Sam­meln Sie die erfor­der­li­chen Daten aus inter­nen Anwen­dun­gen sowie aus exter­nen Quel­len. Dies kann durch Scra­pen des Webs, Erfas­sen von Ereig­nis­strö­men aus Ihrer mobi­len Anwen­dung oder Ihrem Web­ser­vice, Change Data Cap­ture (CDC)-Streams aus ope­ra­ti­ven (OLTP-)Datenbanken, Anwen­dungs­pro­to­kol­len usw. gesche­hen. Sie kön­nen alle benö­tig­ten Daten in Ihre Daten­pipe­line ein­spei­sen, die von Data Engi­neers ent­wi­ckelt und gepflegt wird.

Kura­tie­ren

Die gesam­mel­ten Daten sind fast nie unver­sehrt. Sie müs­sen berei­nigt, Dupli­kate ent­fernt, feh­lende Werte ergänzt und in einem Data Ware­house oder einem Data Lake gespei­chert wer­den. Wenn die Daten für das Trai­ning eines über­wach­ten ML-Modells bestimmt sind, müs­sen Sie sie auch beschrif­ten. Außer­dem müs­sen Sie die Daten kata­lo­gi­sie­ren, damit sie leicht gefun­den und rich­tig ver­stan­den wer­den kön­nen. Ver­su­chen Sie, so viel wie mög­lich zu auto­ma­ti­sie­ren, aber es wird auch Teile geben, die manu­ell erle­digt wer­den müs­sen (ins­be­son­dere die Beschriftung).

Umwand­lung

Sobald die Daten berei­nigt sind, kön­nen Sie sie so umwan­deln, dass sie für die Ana­lyse und ML-Model­lie­rung geeig­net sind. Dazu kann es erfor­der­lich sein, die Struk­tur zu ändern, sie mit ande­ren Tabel­len zu ver­bin­den, sie ent­lang wich­ti­ger Dimen­sio­nen zu agg­re­gie­ren oder zusam­men­zu­fas­sen, zusätz­li­che Merk­male zu berech­nen usw. Data Engi­neers soll­ten all dies in der Daten­pipe­line automatisieren.

Vali­die­ren

Imple­men­tie­ren Sie Qua­li­täts­prü­fun­gen, füh­ren Sie Pro­to­kolle über sta­tis­ti­sche Ver­tei­lun­gen im Zeit­ver­lauf und erstel­len Sie Aus­lö­ser, die eine War­nung aus­lö­sen, wenn eine der Prü­fun­gen fehl­schlägt oder die Ver­tei­lung über die erwar­te­ten Gren­zen hin­aus­geht. Data Engi­neers imple­men­tie­ren in Abspra­che mit Data Sci­en­tists diese Vali­die­run­gen in der Datenpipeline.

Erfor­schen

Data Sci­en­tists füh­ren explo­ra­tive Daten­ana­ly­sen (EDA) durch, um die Bezie­hun­gen zwi­schen ver­schie­de­nen Merk­ma­len und dem Ziel­wert, den das Modell vor­her­sa­gen soll, zu ver­ste­hen. Sie füh­ren auch Fea­ture Engi­nee­ring durch, was wahr­schein­lich dazu führt, dass wei­tere Umwand­lungs- und Vali­die­rungs­prü­fun­gen hin­zu­ge­fügt wer­den (die bei­den vor­he­ri­gen Phasen).

Trai­nie­ren

Data Sci­en­tists trai­nie­ren meh­rere Modi, füh­ren Expe­ri­mente durch, ver­glei­chen die Modell­leis­tung, stim­men Hyper­pa­ra­me­ter ab und wäh­len einige Modelle mit der bes­ten Leis­tung aus.

Aus­wer­ten

Bewer­ten Sie die Modell­ei­gen­schaf­ten anhand von Geschäfts­zie­len und ‑kenn­zah­len. Einige Rück­mel­dun­gen kön­nen sogar dazu füh­ren, dass das ML-Pro­blem anders for­mu­liert wird und der gesamte Pro­zess noch ein­mal wie­der­holt wird.

Diese Data-ML-End­los­schleife ist nicht linear. Nicht in jeder Phase geht man zur nächs­ten Phase über. Wenn man Pro­bleme ent­deckt, kehrt man zur ent­spre­chen­den vor­he­ri­gen Stufe zurück, um sie zu lösen. Es gibt also impli­zite Über­gänge von jeder Phase zu frü­he­ren Phasen.

Es ist ähn­lich wie bei der DevOps-Schleife, der Ent­wick­ler fol­gen. Nicht jeder Code, der die Test­phase durch­läuft, wird zur Frei­gabe wei­ter­ge­lei­tet. Wenn die Tests fehl­schla­gen, geht es zurück in die Code- (manch­mal sogar in die Pla­nungs-) Phase, um die Pro­bleme zu beheben.

Lebens­zy­klus der Softwareentwicklung

Die DevOps-End­los­schleife ist der De-facto-Stan­dard für den Soft­ware­ent­wick­lungs­le­bens­zy­klus zur schnel­len Erstel­lung und Bereit­stel­lung von Soft­ware­an­wen­dun­gen und ‑diens­ten in der Cloud.

Er besteht aus zwei Grup­pen von Akti­vi­tä­ten: Ent­wurf und Ent­wick­lung eines Soft­ware­sys­tems sowie Bereit­stel­lung und Über­wa­chung von Soft­ware­diens­ten und ‑anwen­dun­gen.

Pla­nen 

Dies ist die erste Phase für jedes Pro­dukt oder Pro­dukt­merk­mal. Sie erör­tern die Geschäfts­ziele und die wich­tigs­ten Geschäfts­kenn­zah­len sowie die Pro­dukt­funk­tio­nen, die zur Errei­chung die­ser Ziele bei­tra­gen kön­nen. Sie gehen den Pro­ble­men der End­be­nut­zer auf den Grund und dis­ku­tie­ren über die User Jour­neys, um diese Pro­bleme zu lösen und die erfor­der­li­chen Daten zu sam­meln, um zu beur­tei­len, wie ein ML-Modell in der rea­len Welt funktioniert.

Codie­ren

Ent­wer­fen und ent­wi­ckeln Sie die Soft­ware, das End-to-End-Pro­dukt oder die Anwen­dung, und nicht nur ML-Modelle. Legen Sie Ver­träge und APIs fest, die der Anwen­dungs­code ver­wen­det, um die Modell­in­fe­renz auf­zu­ru­fen und ihre Ergeb­nisse zu nut­zen, und auch, wel­che Benut­zer­re­ak­tio­nen und Rück­mel­dun­gen gesam­melt wer­den sollen.

Es ist sehr wich­tig, dass sich Ent­wick­ler, Daten­in­ge­nieure und Daten­wis­sen­schaft­ler hier auf die glei­che Seite stel­len. So las­sen sich spä­ter böse Über­ra­schun­gen vermeiden.

Erstel­len

In die­ser Phase wird die kon­ti­nu­ier­li­che Inte­gra­tion ver­schie­de­ner Teile vor­an­ge­trie­ben, wäh­rend sie sich wei­ter­ent­wi­ckeln und in eine Form ver­packt wer­den, die ver­öf­fent­licht wer­den kann. Dabei kann es sich um eine Biblio­thek oder ein SDK, ein Docker-Image oder ein Anwen­dungs-Binary (z. B. apk für Android-Apps) handeln.

Tes­ten

Unit-Tests, Inte­gra­ti­ons­tests, Abde­ckungs­tests, Leis­tungs­tests, Last­tests, Daten­schutz­tests, Sicher­heits­tests und Bias-Tests. Den­ken Sie an alle Arten von Soft­ware- und ML-Tests, die hier anwend­bar sind, und auto­ma­ti­sie­ren Sie sie so weit wie möglich.

Die Tests wer­den in einer Sta­ging-Umge­bung durch­ge­führt, die der ange­streb­ten Pro­duk­ti­ons­um­ge­bung ähnelt, aber nicht für einen ähn­li­chen Umfang aus­ge­legt ist. Sie kann Dummy‑, künst­li­che oder anony­mi­sierte Daten ent­hal­ten, um das Soft­ware­sys­tem durch­gän­gig zu testen.

Frei­ge­ben

Sobald alle auto­ma­ti­sier­ten Tests bestan­den sind und in eini­gen Fäl­len die Test­ergeb­nisse manu­ell über­prüft wur­den, wer­den der Soft­ware­code oder die Modelle zur Frei­gabe frei­ge­ge­ben. Genau wie der Code soll­ten auch die Modelle ver­sio­niert und die not­wen­di­gen Meta­da­ten auto­ma­tisch erfasst wer­den. So wie die Docker-Images in einem Docker-Repo ver­sio­niert wer­den, sollte auch das Modell in einem Modell-Repo per­sis­tiert werden.

Wenn Modelle zusam­men mit dem Code für den Micro­ser­vice, der das Modell bedient, ver­packt wer­den, dann ent­hält das Docker-Image auch das Modell-Image. An die­ser Stelle endet die kon­ti­nu­ier­li­che Inte­gra­tion und das kon­ti­nu­ier­li­che Deploy­ment beginnt.

Bereit­stel­len

Aus­wahl der frei­ge­ge­be­nen Arte­fakte aus dem Docker-Repo­si­tory oder Modell­spei­cher und Bereit­stel­lung in der Pro­duk­ti­ons­in­fra­struk­tur. Je nach Ihrem Bedarf kön­nen Sie Infra­struc­ture as a Ser­vice (IaaS), Con­tai­ner as a Ser­vice (CaaS) oder Plat­form as a Ser­vice (PaaS) wählen.

Sie kön­nen auch Ten­sor­Flow Serve, PyTorch Serve oder Dienste wie Sage­Ma­ker und Ver­tex AI für die Bereit­stel­lung Ihrer Modell­dienste verwenden.

Betrei­ben 

Sobald die Dienste bereit­ge­stellt sind, kön­nen Sie beschlie­ßen, zunächst einen klei­nen Pro­zent­satz des Daten­ver­kehrs zu sen­den. Canary Deploy­ment ist eine gän­gige Tak­tik, um in Pha­sen zu aktua­li­sie­ren (z. B. 2%, 5%, 10%, 25%, 75%, 100%). Im Falle eines Pro­blems, uner­war­te­ten Ver­hal­tens oder eines Rück­gangs der Metri­ken kön­nen Sie die Bereit­stel­lung zurücknehmen.

Sobald das Tor für 100 % Daten­ver­kehr geöff­net ist, sollte Ihre Bereit­stel­lungs­in­fra­struk­tur den alten Dienst nach und nach abschal­ten. Außer­dem sollte sie sich an die Last­spit­zen und ‑abfälle anpas­sen. Kuber­netes und Kube­Flow sind gän­gige Tools für die­sen Zweck.

Über­wa­chen 

In die­ser letz­ten Phase über­wa­chen Sie stän­dig den Zustand der Dienste, Feh­ler, Laten­zen, Modell­vor­her­sa­gen, Aus­rei­ßer und die Ver­tei­lung der Ein­ga­be­mo­dell­merk­male usw. Falls ein Pro­blem auf­tritt, kön­nen Sie je nach Schwe­re­grad und Dia­gnose das Sys­tem auf eine ältere Ver­sion zurück­set­zen, einen Hot­fix ver­öf­fent­li­chen, ein erneu­tes Modell­trai­ning ansto­ßen oder was auch immer sonst erfor­der­lich ist.

MLOps-Lebens­zy­klus

Der­zeit ist es üblich, dass Daten­wis­sen­schaft­ler ein Modell ent­wi­ckeln und es dann den Ent­wick­lern und ML-Inge­nieu­ren zur Inte­gra­tion in das übrige Sys­tem und zum Ein­satz in der Pro­duk­tion „über­las­sen“.

Die ML- und Ent­wick­lungs­si­los und die frag­men­tier­ten Eigen­tums­ver­hält­nisse sind einer der häu­figs­ten Gründe für das Schei­tern vie­ler ML-Pro­jekte. Die Ver­ein­heit­li­chung der Lebens­zy­klen von Modell und Soft­ware­ent­wick­lung ver­schafft allen Betei­lig­ten die drin­gend benö­tigte Transparenz.

Der Pla­nungs­schritt ist der Startpunkt

Die Pro­dukt­pla­nung kommt vor allem ande­ren. Bei der Defi­ni­tion von Geschäfts­zie­len und der Gestal­tung von Benut­zer­er­fah­run­gen sollte nicht nur die Pro­dukt­funk­tio­na­li­tät berück­sich­tigt wer­den, son­dern auch, wie die Modell­er­geb­nisse und die Erfas­sung der Benut­zer­re­ak­tio­nen in das Pro­duk­ti­ons­de­sign inte­griert werden.

Anders als bei her­kömm­li­cher Soft­ware, bei der mit der Zeit immer mehr Daten gesam­melt wer­den, muss die Benut­zer­er­fah­rung der ML-Aspekte eines Pro­dukts mög­li­cher­weise aktua­li­siert wer­den, um davon zu pro­fi­tie­ren, auch wenn es keine „neue Funk­tio­na­li­tät“ gibt.

Bauen Sie das Pro­dukt zunächst ohne ML

Oft­mals baue ich eine End-to-End-Anwen­dung zunächst mit einer regel­ba­sier­ten Heu­ris­tik oder einem Dummy-Modell auf und schließe die Daten-ML-Schleife kom­plett ab. Dies dient als Basis­mo­dell und ist bei der Daten­er­fas­sung nütz­lich. Es gibt den Daten­wis­sen­schaft­lern auch einen Kon­text, indem es zeigt, wie das Modell im Pro­dukt ver­wen­det wird.

Unter­schied­li­che Kadenz für Modell- und Softwareentwicklung

Die Ent­wick­lung eines ML-Modells unter­schei­det sich deut­lich von der Ent­wick­lung von Soft­ware. Soft­ware­sys­teme kön­nen inkre­men­tell ent­wi­ckelt wer­den (wobei einige Teile nicht funk­tio­nie­ren). Anders als Soft­ware­teile kön­nen ML-Modelle nicht in eine feine Gra­nu­la­ri­tät zer­legt werden.

Ein ein­zi­ger Lebens­zy­klus schließt nicht aus, dass sich die Räder von Data, ML, Dev und Ops mit unter­schied­li­cher Geschwin­dig­keit dre­hen. In der Tat geschieht dies bereits bei DevOps. Bei eini­gen Teams führt nicht jeder Ent­wick­lungs­sprint zur Bereit­stel­lung einer neuen Ver­sion. Ande­rer­seits gibt es Teams, die stünd­lich neue Ver­sio­nen bereit­stel­len, d. h. Hun­derte von Malen in einem ein­zi­gen Sprint. Jedes Rad soll sich mit sei­ner eige­nen opti­ma­len Geschwin­dig­keit drehen.

Kon­so­li­dierte Eigen­ver­ant­wor­tung, frühe Inte­gra­tion, häu­fige Iteration

Dies sind meine 3 Kon­zepte zur Ver­bes­se­rung der Erfolgs­quote bei der Ent­wick­lung und dem Ein­satz von ML-gestütz­ten Produkten:

  • Kon­so­li­dierte Ver­ant­wort­lich­keit: Ein funk­ti­ons­über­grei­fen­des Team ist für das gesamte Pro­jekt verantwortlich.
  • Früh­zei­tig ein­bin­den: Imple­men­tie­ren Sie ein ein­fa­ches (regel­ba­sier­tes oder Dummy-) Modell und ent­wi­ckeln Sie zunächst eine Pro­dukt­funk­tion von Anfang bis Ende.
  • Häu­fig ite­rie­ren: Bes­sere Modelle erstel­len und das ein­fa­che Modell erset­zen, über­wa­chen und wiederholen.

Zusam­men­fas­sung

Der Lebens­zy­klus des maschi­nel­len Ler­nens für die MLOps-Ära bringt die Modell­ent­wick­lung und die Soft­ware­ent­wick­lung zu einem unlös­ba­ren Kno­ten zusam­men. Es erleich­tert die Sicht­bar­keit für alle Betei­lig­ten bei der Ent­wick­lung von ML-gestütz­ten Pro­duk­ten und Funktionen.

Quelle: medium

Erfah­ren Sie hier mehr über Lösun­gen im Bereich Data Manage­ment oder besu­chen Sie eines unse­rer kos­ten­lo­sen Web­i­nare.