Sie haben es viel­leicht schon oft gehört, aber nur ein klei­ner Teil der Modelle für maschi­nel­les Ler­nen geht in Pro­duk­tion. Die Bereit­stel­lung und der Betrieb eines maschi­nel­len Lern­mo­dells ist für die meis­ten Bran­chen, die ML für ihre Anwen­dungs­fälle ein­set­zen, eine Her­aus­for­de­rung. In die­sem Arti­kel werde ich einige der bes­ten MLOps-Prak­ti­ken und Tipps vor­stel­len, die es Ihnen ermög­li­chen, Ihr ML-Modell in der Pro­duk­tion rich­tig zu betrei­ben. Bevor wir begin­nen, las­sen Sie uns über den typi­schen Lebens­zy­klus eines ML-Pro­jekts spre­chen, den wir viel­leicht alle kennen.

ML-Pro­jekt-Lebens­zy­klus

Ein typi­scher ML-Lebens­zy­klus lässt sich mit dem fol­gen­den Dia­gramm zusam­men­fas­sen, das haupt­säch­lich aus 3 Pha­sen besteht.

In der ers­ten Phase, bevor wir uns in unsere Daten ver­tie­fen, ist es wich­tig, dass wir uns auf den Erfolg vor­be­rei­ten. Des­halb müs­sen wir zusam­men mit den Wirt­schafts­exper­ten unser Pro­blem und die Unter­neh­mens­ziele sorg­fäl­tig defi­nie­ren! Wir müs­sen einige wich­tige Fra­gen beant­wor­ten, die es uns ermög­li­chen, Ent­schei­dun­gen bezüg­lich der Gestal­tung des Modells und der Pro­duk­ti­ons­pipe­line zu tref­fen. Zum Beispiel:

  • Was ist das ideale Ergebnis?
  • Was ist unser Bewer­tungs­maß­stab? Wie kön­nen wir einen ROI definieren?
  • Was sind die Erfolgs- und Misserfolgskriterien?
  • Wie hoch sind die Latenz­an­for­de­run­gen? Und kön­nen wir jede Funk­tion inner­halb der Latenz­zeit­an­for­de­run­gen bereitstellen? …

In der zwei­ten Phase erstel­len wir einen Pro­to­typ unse­res ers­ten ML-Modells, oder anders gesagt, wir füh­ren eine ML-Mach­bar­keits­stu­die durch.

Wir wei­sen also den ML-Geschäfts­wert anhand der in der ers­ten Phase defi­nier­ten Metrik nach. Den­ken Sie daran, dass die beste Pra­xis für ML-Engi­nee­ring Regel Num­mer 1 lau­tet: „Hal­ten Sie das erste Modell ein­fach und sor­gen Sie für die rich­tige Infrastruktur“. Das erste Modell bie­tet den größ­ten Nut­zen für unser Pro­dukt, daher muss es zu Beginn nicht das aus­ge­fal­lenste Modell sein.

In der drit­ten Phase gehen wir in die Pro­duk­tion über. Da dies das Haupt­thema die­ses Arti­kels ist, wer­den wir in den kom­men­den Abschnit­ten näher dar­auf ein­ge­hen. Sobald unsere Pro­duk­ti­ons­pipe­line fer­tig und gut kon­zi­piert ist, kön­nen wir viel schnel­ler und effi­zi­en­ter Erkennt­nisse sam­meln und neue Ideen umsetzen.

Was machen Data Sci­en­tists heute hauptsächlich?

Heute sehen die meis­ten ML-Pro­zesse, um ein maschi­nel­les Lern­mo­dell in die Pro­duk­tion zu brin­gen, in etwa so aus. Als Daten­wis­sen­schaft­ler beginnt man mit einem ML-Anwen­dungs­fall und einem Geschäfts­ziel. Mit dem Anwen­dungs­fall in der Hand begin­nen wir, die Daten, die uns rele­vant erschei­nen, aus ver­schie­de­nen Daten­quel­len zu sam­meln und zu unter­su­chen, um ihre Qua­li­tät zu ver­ste­hen und zu bewerten.

Sobald wir ein Gefühl für unsere Daten bekom­men haben, begin­nen wir mit der Aus­ar­bei­tung und Ent­wick­lung eini­ger Merk­male, die wir für unser Pro­blem als inter­es­sant erach­ten. Dann gehen wir in die Model­lie­rungs­phase über und begin­nen mit eini­gen Expe­ri­men­ten. In die­ser Phase füh­ren wir die ver­schie­de­nen expe­ri­men­tel­len Schritte regel­mä­ßig manu­ell durch. Bei jedem Expe­ri­ment füh­ren wir eine Daten­vor­be­rei­tung, ein Fea­ture-Engi­nee­ring und Tests durch. Dann füh­ren wir ein Modell­trai­ning und eine Abstim­mung der Hyper­pa­ra­me­ter für alle Modelle oder Modell­archi­tek­tu­ren durch, die wir für beson­ders viel­ver­spre­chend halten.

Zu guter Letzt eva­lu­ie­ren wir alle gene­rier­ten Modelle, tes­ten sie anhand eines Hol­dout-Daten­sat­zes, eva­lu­ie­ren die ver­schie­de­nen Metri­ken, betrach­ten die Leis­tung und ver­glei­chen die Modelle mit­ein­an­der, um zu sehen, wel­ches am bes­ten funk­tio­niert oder die höchste Bewer­tungs­me­trik lie­fert. Der gesamte Pro­zess ist ite­ra­tiv und wird immer wie­der manu­ell aus­ge­führt, bis wir das beste Modell mit der best­mög­li­chen Leis­tung erhalten.

Sobald wir das leis­tungs­stärkste Modell erhal­ten haben, legen wir es in der Regel in einem Spei­cher ab und über­ge­ben es an das IT- und Betriebs­team, des­sen Auf­gabe es dann ist, das Modell als Vor­her­sa­ge­dienst in der Pro­duk­tion ein­zu­set­zen. Und damit ist unsere Arbeit lei­der schon beendet.

ML Ope­ra­ti­ons Pit­falls – Was ist falsch an die­sem Ansatz?

Hier ist, was mit dem obi­gen Ansatz falsch ist.

Manu­ell: Die Schritte sind sehr manu­ell und wer­den jedes Mal von Grund auf neu geschrie­ben. Jedes Mal, wenn der Daten­wis­sen­schaft­ler ein neues Expe­ri­ment durch­füh­ren muss, muss er seine Notiz­bü­cher durch­ge­hen, sie aktua­li­sie­ren und sie manu­ell aus­füh­ren. Wenn das Modell mit neuen Trai­nings­da­ten auf­ge­frischt wer­den muss, muss der Daten­wis­sen­schaft­ler sei­nen Code erneut manu­ell ausführen.

Zeit­auf­wän­dig: Die­ser manu­elle Pro­zess ist zeit­auf­wän­dig und nicht effizient.

Nicht wie­der­ver­wend­bar: Der in den Note­books geschrie­bene benut­zer­de­fi­nierte Code kann nur vom Autor selbst ver­stan­den wer­den und kann nicht von ande­ren Daten­wis­sen­schaft­lern oder für andere Anwen­dungs­fälle wie­der­ver­wen­det oder genutzt wer­den. Sogar den Autoren selbst fällt es manch­mal schwer, ihre Arbeit nach einer gewis­sen Zeit zu verstehen.

Unre­pro­du­zier­bar­keit: Repro­du­zier­bar­keit ist die Fähig­keit, neu erstellt oder kopiert zu wer­den. Beim maschi­nel­len Ler­nen ist es wich­tig, das Modell genau repro­du­zie­ren zu kön­nen. Bei einem manu­el­len Pro­zess wie hier ist es wahr­schein­lich nicht mög­lich, eine ältere Ver­sion eines Modells zu repro­du­zie­ren, da sich die zugrun­de­lie­gen­den Daten geän­dert haben könn­ten, der Code selbst über­schrie­ben wor­den sein könnte oder Abhän­gig­kei­ten und ihre genauen Ver­sio­nen nicht auf­ge­zeich­net wor­den sind. Daher ist im Falle eines Pro­blems jeder Ver­such, zu einer älte­ren Ver­sion eines Modells zurück­zu­keh­ren, unter Umstän­den unmöglich.

Feh­ler­an­fäl­lig: Die­ser Pro­zess kann zu vie­len Feh­lern füh­ren, wie z. B. Ver­zer­rung der Trai­nings­da­ten, Leis­tungs­ab­fall des Modells, Ver­zer­rung des Modells, Absturz der Infrastruktur im Laufe der Zeit…

  • Trai­ning Ser­ving Skew: Wenn wir unser Modell ein­set­zen, wer­den wir manch­mal fest­stel­len, dass die Online-Leis­tung unse­res Modells völ­lig unter der Leis­tung liegt, die wir erwar­tet und auf dem Hol­dout-Daten­satz gemes­sen haben. Die­ses Phä­no­men tritt sehr häu­fig bei Model­len für maschi­nel­les Ler­nen auf. Dis­kre­pan­zen zwi­schen Trai­nings- und Ser­ving-Pipe­lines kön­nen zu Trai­nings-Ser­ving-Skew füh­ren. Ein Trai­nings-Ser­ving-Skew ist sehr schwer zu erken­nen und kann die Vor­her­sa­gen eines Modells völ­lig unbrauch­bar machen. Um die­ses Pro­blem zu ver­mei­den, müs­sen wir sicher­stel­len, dass die exak­ten Ver­ar­bei­tungs­funk­tio­nen sowohl für die Trai­nings- als auch für die Ser­ving-Daten aus­ge­führt wer­den, die Ver­tei­lung der Trai­nings- und Ser­ving-Daten über­wa­chen und die Echt­zeit­leis­tung des Modells über­wa­chen und mit der Off­line-Leis­tung vergleichen.
  • Modell­ver­fall: In den meis­ten Anwen­dungs­fäl­len sind die Daten­pro­file dyna­misch und ändern sich mit der Zeit. Wenn sich die zugrunde lie­gen­den Daten ändern, lässt die Modell­leis­tung nach, da die vor­han­de­nen Mus­ter nicht mehr aktu­ell sind. Sta­ti­sche Modelle sind nur sel­ten noch von Nut­zen. Wir müs­sen dafür sor­gen, dass die Modelle regel­mä­ßig mit neuen Daten aktua­li­siert wer­den, und die Echt­zeit­leis­tung der bereit­ge­stell­ten Modelle über­wa­chen, um einen Modell­ver­fall aus­zu­lö­sen. Die fol­gende Abbil­dung zeigt, wie ein ein­ge­setz­tes Modell mit der Zeit ver­fällt und wie not­wen­dig es ist, das Modell stän­dig durch ein neues zu aktualisieren.
  • Vor­ein­ge­nom­men­heit des Modells: Anwen­dun­gen von KI-Sys­te­men kön­nen kri­ti­scher Natur sein, wie z. B. medi­zi­ni­sche Dia­gno­sen oder Pro­gno­sen, die Zuord­nung der Fähig­kei­ten von Men­schen zu Arbeits­plät­zen oder die Prü­fung der Eig­nung einer Per­son für einen Kre­dit. So prak­tisch diese Anwen­dun­gen auch erschei­nen mögen, die Aus­wir­kun­gen von Ver­zer­run­gen in sol­chen Sys­te­men kön­nen sehr schäd­lich sein. Eine wich­tige Eigen­schaft künf­ti­ger KI-Sys­teme ist daher Fair­ness und Inklu­si­vi­tät für alle. Daher ist es für jedes Modell des maschi­nel­len Ler­nens wich­tig, die Fair­ness in Bezug auf sen­si­ble Merk­male (Geschlecht, Rasse …) zu mes­sen. Die sen­si­blen Merk­male hän­gen vom Kon­text ab. Auch bei nicht sen­si­blen Merk­ma­len ist es wich­tig, die Leis­tung der KI-Sys­teme für die ver­schie­de­nen Unter­grup­pen zu bewer­ten, um sicher­zu­stel­len, dass wir uns vor dem Ein­satz eines Modells bewusst sind, wel­che Unter­grup­pen unter­durch­schnitt­li­che Leis­tun­gen erbringen.
  • Sca­la­bi­lity: Sca­la­bi­lity mat­ters in machine lear­ning because trai­ning a model can take a long time and hence opti­mi­zing a model that takes mul­ti­ple weeks of trai­ning, is not workable. A model can be so big that it can’t fit into the working memory of the trai­ning device. Even if we decide to scale ver­ti­cally, it is going to be more expen­sive than sca­ling hori­zon­tally. There might be some cases where the data quan­tity is not big and hence sca­la­bi­lity might not be nee­ded at the begin­ning, but we should think if, with con­ti­nuous trai­ning, the amount of trai­ning data that we expect to receive will increase with time and might intro­duce a memory pro­blem for the infra­struc­ture that we set in place.

Die wich­tigs­ten Kom­po­nen­ten eines ML-Sys­tems
In die­sem Abschnitt beschrei­ben wir die Haupt­kom­po­nen­ten eines ML-Sys­tems und die bes­ten Prak­ti­ken, die es uns ermög­li­chen, die oben genann­ten Fall­stri­cke zu vermeiden.

Der Pro­zess der Bereit­stel­lung eines inte­grier­ten ML-Sys­tems und sei­nes kon­ti­nu­ier­li­chen Betriebs in der Pro­duk­tion umfasst die fol­gen­den Schritte:

Las­sen Sie uns die ein­zel­nen Kom­po­nen­ten der Pipe­line etwas näher erläutern.

Daten­ein­gabe:

Diese Kom­po­nente ist in der Regel extern und liegt außer­halb der ML-Pipe­line unse­res Anwen­dungs­falls. In aus­ge­reif­ten Daten­pro­zes­sen soll­ten Daten­in­ge­nieure die kon­ti­nu­ier­li­che Daten­auf­nahme und ‑umwand­lung opti­mie­ren, um den ver­schie­de­nen Daten­ana­ly­se­ein­hei­ten inner­halb des Unter­neh­mens, die sich auf daten­ge­stützte Erkennt­nisse und bes­ser infor­mierte Ent­schei­dun­gen freuen, stets aktu­elle Daten zu liefern.

Daten­va­li­die­rung:

In die­ser Kom­po­nente liegt unser Schwer­punkt auf der Vali­die­rung der Ein­ga­be­da­ten, die in unsere Pipe­line ein­ge­speist wer­den. Die Bedeu­tung die­ses Pro­blems in ML-Sys­te­men ist nicht zu unter­schät­zen. Unab­hän­gig von den ver­wen­de­ten ML-Algo­rith­men kön­nen Feh­ler in den Daten die Qua­li­tät des gene­rier­ten Modells stark beein­träch­ti­gen. Ein bekann­tes Kon­zept der Daten­wis­sen­schaft besagt: „Gar­bage in, gar­bage out“. Daher ist es von ent­schei­den­der Bedeu­tung, Daten­feh­ler früh­zei­tig zu erkennen.

Eine wei­tere Rolle, die feh­ler­freie Daten spie­len kön­nen, ist die Ana­lyse der Modell­aus­gabe. Diese Kom­po­nente ermög­licht es uns, die Aus­gabe unse­res ML-Modells rich­tig zu ver­ste­hen und zu debug­gen. Folg­lich müs­sen Daten in ML-Sys­te­men als Bür­ger ers­ter Klasse betrach­tet wer­den, genau wie Algo­rith­men und Infrastruktur. Sie müs­sen bei jeder Aus­füh­rung der ML-Pipe­line kon­ti­nu­ier­lich über­wacht und vali­diert werden.

Die­ser Schritt wird auch vor dem Modell­trai­ning ver­wen­det, um zu ent­schei­den, ob wir das Modell neu trai­nie­ren (im Falle einer Daten­drift) oder die Aus­füh­rung der Pipe­line stop­pen soll­ten (im Falle von Datenanomalien).

So sollte ein typi­sches Ver­hal­ten der Daten­va­li­die­rungs­kom­po­nente aussehen:

  • Es berech­net und zeigt deskrip­tive Sta­tis­ti­ken über die Daten an und kann auch die deskrip­ti­ven Sta­tis­ti­ken von auf­ein­an­der­fol­gen­den Daten­be­rei­chen anzei­gen (d. h. zwi­schen der aktu­el­len Pipe­line-Aus­füh­rung N und der letz­ten Pipe­line-Aus­füh­rung N‑1), um zu sehen, wie sich die Daten­ver­tei­lung ver­än­dert hat.
  • Dar­aus wird das Daten­schema abge­lei­tet, das die ver­wen­de­ten Daten repräsentiert.
  • It detects data anoma­lies. It should check if the data­set matches the pre­de­fi­ned vali­da­ted schema. It should detect data drift bet­ween con­se­cu­tive spans of data (i.e., bet­ween cur­rent pipe­line exe­cu­tion N and last pipe­line exe­cu­tion N‑1), such as bet­ween dif­fe­rent days of trai­ning data. It should also detect trai­ning ser­ving skew by com­pa­ring the trai­ning data with the online ser­ving data.

In der Pro­duk­tion, mit kon­ti­nu­ier­li­chem Trai­ning, sieht eine sche­ma­ti­sche Ansicht, die Sta­tis­ti­ken über neu ein­tref­fende Daten gene­riert, sie vali­diert und Berichte über Anoma­lien erstellt, wie folgt aus:

Daten trans­for­mie­ren

In die­sem Schritt wer­den die Daten für die ML-Auf­gabe vor­be­rei­tet. Dazu gehö­ren Daten­be­rei­ni­gung, Fil­te­rung, Daten­trans­for­ma­tio­nen und die Bear­bei­tung von Merk­ma­len. Sie sollte Dinge wie die Gene­rie­rung von Merk­ma­len zu Ganz­zahl-Map­pings erle­di­gen. Außer­dem berei­tet diese Kom­po­nente Merk­mals-Meta­da­ten vor, die in der Trai­ner­kom­po­nente benö­tigt wer­den könn­ten (dazu gehö­ren z. B. die Meta-Para­me­ter, die im Trai­nings­schritt für die Merk­mals­nor­ma­li­sie­rung benö­tigt wer­den, die Wör­ter­bü­cher, die für die Kodie­rung kate­go­ria­ler Varia­blen benö­tigt wer­den, usw…). Diese wer­den Trans­for­ma­ti­ons­ar­te­fakte genannt; sie hel­fen bei der Kon­struk­tion der Modelleingaben.

Ent­schei­dend ist, dass alle erzeug­ten Map­pings gespei­chert und zum Zeit­punkt des Ser­vings (wenn das trai­nierte Modell zur Erstel­lung von Vor­her­sa­gen ver­wen­det wird) wie­der­ver­wen­det wer­den müs­sen. Wird dies nicht kon­se­quent durch­ge­führt, kommt es zu dem bereits erwähn­ten Pro­blem der „Trai­ning Ser­ving Skew“.

Modell Trai­ning

Die Kom­po­nente Modell­schu­lung ist für das Trai­ning unse­res Modells ver­ant­wort­lich. In den meis­ten Anwen­dungs­fäl­len kön­nen Modelle stunden‑, tage- oder sogar wochen­lang trai­niert wer­den. Die Opti­mie­rung eines Modells, das meh­rere Wochen Trai­ning benö­tigt, ist nicht prak­ti­ka­bel. In ande­ren Fäl­len pas­sen die zum Trai­nie­ren des Modells ver­wen­de­ten Daten nicht ein­mal in den Speicher.

In die­sem Fall sollte die Kom­po­nente zum Trai­nie­ren des Modells in der Lage sein, die Par­al­le­li­tät von Daten und Modell zu unter­stüt­zen und auf eine große Anzahl von Mit­ar­bei­tern zu ska­lie­ren. Sie sollte auch in der Lage sein, Out-of-Memory-Daten zu verarbeiten.

Idea­ler­weise soll­ten alle Kom­po­nen­ten unse­res ML-Sys­tems ska­lier­bar sein und auf einer Infrastruktur lau­fen, die Ska­lier­bar­keit unterstützt.

Diese Kom­po­nente für die Modell­schu­lung sollte auch in der Lage sein, alles wäh­rend der Schu­lung auto­ma­tisch zu über­wa­chen und zu pro­to­kol­lie­ren. Wir kön­nen ein maschi­nel­les Lern­mo­dell nicht über einen län­ge­ren Zeit­raum trai­nie­ren, ohne zu sehen, wie es sich schlägt, und ohne sicher­zu­stel­len, dass es kor­rekt kon­fi­gu­riert ist, um die Ver­lust­funk­tion mit der Anzahl der Ite­ra­tio­nen zu mini­mie­ren. Schließ­lich sollte die Trai­nings­kom­po­nente auch die Abstim­mung der Hyper­pa­ra­me­ter unterstützen.

Modell­ana­lyse

In der Modell­ana­ly­se­kom­po­nente füh­ren wir eine gründ­li­che Ana­lyse der Trai­nings­er­geb­nisse durch und stel­len sicher, dass unsere expor­tier­ten Modelle leis­tungs­fä­hig genug sind, um in die Pro­duk­tion über­führt zu werden.

Mit die­sem Schritt kön­nen wir sicher­stel­len, dass das Modell nur dann für die Pro­duk­tion frei­ge­ge­ben wird, wenn es die Qua­li­täts­kri­te­rien erfüllt, die wir in der Framing-Phase fest­ge­legt haben. Zu den Kri­te­rien gehö­ren eine ver­bes­serte Leis­tung im Ver­gleich zu den zuvor bereit­ge­stell­ten Model­len und eine faire Leis­tung in den ver­schie­de­nen Daten­un­ter­grup­pen/-schei­ben. In der fol­gen­den Abbil­dung sehen Sie die Leis­tung unse­res trai­nier­ten Modells für das Fea­ture Slice trip_start_hour.

Das Ergeb­nis die­ses Schritts ist eine Reihe von Leis­tungs­me­tri­ken und eine Ent­schei­dung dar­über, ob das Modell in die Pro­duk­tion über­führt wer­den soll.

Modell-Betrieb

Im Gegen­satz zur Schu­lungs­kom­po­nente, bei der wir uns nor­ma­ler­weise um die Ska­lie­rung mit den Daten und der Modell­kom­ple­xi­tät küm­mern. Bei der Ser­ving-Kom­po­nente sind wir daran inter­es­siert, auf varia­ble Nut­zer­an­for­de­run­gen zu reagie­ren, indem wir die Ant­wort­la­tenz mini­mie­ren und den Durch­satz maximieren.

Daher sollte die Ser­ving-Kom­po­nente eine nied­rige Latenz haben, um schnell auf die Nut­zer reagie­ren zu kön­nen, hoch­ef­fi­zi­ent sein, so dass bei Bedarf viele Instan­zen gleich­zei­tig aus­ge­führt wer­den kön­nen, hori­zon­tal ska­lier­bar, zuver­läs­sig und robust gegen­über Ausfällen.

Außer­dem muss unsere Ser­ving-Kom­po­nente leicht auf neue Ver­sio­nen des Modells aktua­li­siert wer­den kön­nen. Wenn wir neue Daten erhal­ten, einen neuen Pipe­line-Lauf aus­lö­sen oder neue Ideen für die Modell­archi­tek­tur tes­ten, wol­len wir eine neue Ver­sion des Modells bereit­stel­len, und das Sys­tem soll naht­los auf diese neue Ver­sion übergehen.

Über­wa­chung

Wie bereits erwähnt, kann die Leis­tung unse­rer bereit­ge­stell­ten ML-Modelle auf­grund der sich stän­dig ver­än­dern­den Daten­pro­file mit der Zeit abneh­men, und wir müs­sen sicher­stel­len, dass unser Sys­tem diese Ver­schlech­te­rung über­wacht und dar­auf reagiert.

Daher müs­sen wir zusam­men­fas­sende Sta­tis­ti­ken unse­rer Daten ver­fol­gen und die Online-Leis­tung unse­res Modells über­wa­chen, um Benach­rich­ti­gun­gen zu sen­den, ein Roll­back durch­zu­füh­ren, wenn die Werte von unse­ren Erwar­tun­gen abwei­chen, oder mög­li­cher­weise eine neue Ite­ra­tion im ML-Pro­zess auszulösen.

Daher ist die Online-Über­wa­chung der Schlüs­sel zur Erken­nung von Leis­tungs­ein­bu­ßen und Modells­ta­gna­tion. Sie dient als Anhalts­punkt für eine neue Ver­such­si­te­ra­tion und ein erneu­tes Trai­ning des Modells anhand neuer Daten.

Pipe­line-Orga­ni­sa­ti­ons­kom­po­nente

Der Auto­ma­ti­sie­rungs­grad der soeben beschrie­be­nen Schritte defi­niert den Rei­fe­grad unse­res ML-Sys­tems und spie­gelt auch die Geschwin­dig­keit des Trai­nings neuer Modelle wider, die durch den Ver­fall des Modells oder durch neue Daten aus­ge­löst wird.

Ein manu­el­ler Pro­zess ist der­zeit in vie­len Anwen­dungs­fäl­len sehr ver­brei­tet. Er mag aus­rei­chend sein, wenn Modelle auf­grund einer sta­ti­schen Daten­ver­tei­lung nur sel­ten geän­dert wer­den. In der Pra­xis ist dies jedoch sel­ten der Fall. Die Daten sind oft dyna­misch und die Modelle bre­chen häu­fig, wenn sie in der rea­len Welt ein­ge­setzt wer­den. Sta­ti­sche Modelle wer­den sich mit Sicher­heit nicht an Ände­run­gen in den Daten, die die Umge­bung beschrei­ben, anpas­sen können.

Ein manu­el­ler Pro­zess kann auch gefähr­lich sein, da er eine Tren­nung zwi­schen ML-Trai­ning und ML-Betrieb bewirkt. Es trennt die Daten­wis­sen­schaft­ler, die das Modell erstel­len, von den Inge­nieu­ren, die das Modell als Vor­her­sa­ge­dienst betrei­ben. Und die­ser Pro­zess kann zu dem Pro­blem der Schief­lage beim Trai­nings­ser­vice führen.

Das Ziel der Orches­trie­rungs­kom­po­nente ist es, die ver­schie­de­nen Kom­po­nen­ten des Sys­tems zu ver­bin­den. Sie führt die Pipe­line in einer Sequenz aus und wech­selt auto­ma­tisch von einem Schritt zum nächs­ten, basie­rend auf den defi­nier­ten Bedin­gun­gen. Dies ist der erste Schritt zur Auto­ma­ti­sie­rung, da wir nun auto­ma­tisch neue Modelle in der Pro­duk­tion mit fri­schen Daten auf der Grund­lage von Live-Pipe­line-Aus­lö­sern trai­nie­ren können.

Wir müs­sen beach­ten, dass wir in der Pro­duk­tion nicht ein trai­nier­tes Modell als Vor­her­sa­ge­dienst bereit­stel­len. Viel­mehr wird eine ganze Trai­nings­pipe­line bereit­ge­stellt, die auto­ma­tisch und wie­der­holt aus­ge­führt wird, um das trai­nierte Modell als Vor­her­sa­ge­dienst bereitzustellen.

Spei­che­rung von Pipeline-Metadaten

Die Auf­gabe des Pipe­line-Meta­da­ten­spei­chers besteht darin, alle Details über unsere ML-Pipe­line-Aus­füh­run­gen auf­zu­zeich­nen. Dies ist sehr wich­tig, um die Abstam­mung zwi­schen den Kom­po­nen­ten auf­recht­zu­er­hal­ten und ein­ge­setzte Modelle bei Bedarf zu repro­du­zie­ren. Außer­dem hilft es uns bei der Feh­ler­su­che im Falle eines Fehlers.

Jedes Mal, wenn wir die Pipe­line aus­füh­ren, zeich­net der Spei­cher alle Details über unsere Pipe­line-Aus­füh­rung auf, z. B:

  • Die Ver­sio­nen der Quell­codes unse­rer Pipe­line und Kom­po­nen­ten, die aus­ge­führt wurden.
  • Die Ein­ga­be­ar­gu­mente, die an unsere Pipe­line über­ge­ben wurden.
  • Die Artefakte/Ausgaben, die von jeder aus­ge­führ­ten Kom­po­nente unse­rer Pipe­line erzeugt wer­den, wie z. B. der Pfad zu den Roh­da­ten, die trans­for­mier­ten Daten­sätze, die Vali­die­rungs­sta­tis­ti­ken und Anoma­lien, das trai­nierte Modell…
  • Die Metri­ken zur Modell­be­wer­tung und die Ent­schei­dung zur Modell­va­li­die­rung hin­sicht­lich des Modell­ein­sat­zes, die wäh­rend der Kom­po­nente zur Modell­ana­lyse und ‑vali­die­rung erstellt wird…

CI/CD-Pipe­line-Auto­ma­ti­sie­rung

Bis­her haben wir nur dar­über gespro­chen, wie wir die kon­ti­nu­ier­li­che Aus­füh­rung der ML-Pipe­line auto­ma­ti­sie­ren kön­nen, um neue Modelle auf der Grund­lage von Aus­lö­sern wie der Ver­füg­bar­keit neuer Daten oder dem Ver­fall des Modells neu zu trai­nie­ren, um neu ent­ste­hende Mus­ter zu erfassen.

Was aber, wenn wir eine neue Funk­tion, eine neue Modell­archi­tek­tur oder einen neuen Hyper­pa­ra­me­ter tes­ten wol­len? Genau darum geht es bei einer auto­ma­ti­sier­ten CI/CD-Pipe­line. Eine CI/CD-Pipe­line ermög­licht es uns, neue Ideen und Expe­ri­mente schnell zu erfor­schen. Sie ermög­licht die auto­ma­ti­sche Erstel­lung, Prü­fung und Bereit­stel­lung der neuen Pipe­line und ihrer Kom­po­nen­ten in der vor­ge­se­he­nen Umgebung.

So ergänzt die Auto­ma­ti­sie­rung der CI/CD-Pipe­line die Auto­ma­ti­sie­rung der kon­ti­nu­ier­li­chen ML-Pipeline:

  • Bei einer neuen Implementierung/Code (neue Modell­archi­tek­tur, Fea­ture-Engi­nee­ring und Hyper­pa­ra­me­ter …) stellt eine erfolg­rei­che CI/CD-Pipe­line eine neue kon­ti­nu­ier­li­che ML-Pipe­line bereit.
  • Bei Vor­lie­gen neuer Daten (oder eines Aus­lö­sers für den Modell­ver­fall) stellt eine erfolg­rei­che auto­ma­ti­sierte kon­ti­nu­ier­li­che Pipe­line einen neuen Vor­her­sa­ge­dienst bereit. Um ein neues ML-Modell mit neuen Daten zu trai­nie­ren, wird die zuvor bereit­ge­stellte ML-Pipe­line mit den neuen Daten ausgeführt.

Eine voll­stän­dige auto­ma­ti­sierte End-to-End-Pipe­line sollte wie folgt aussehen:

  • Wir pro­bie­ren ite­ra­tiv neue ML-Ideen aus, bei denen einige unse­rer Pipe­line-Kom­po­nen­ten aktua­li­siert wer­den (wenn wir zum Bei­spiel eine neue Funk­tion ein­füh­ren, aktua­li­sie­ren wir die Daten­trans­for­ma­ti­ons­kom­po­nente…). Das Ergeb­nis die­ser Phase ist der Quell­code der neuen ML-Pipe­line-Kom­po­nen­ten, die dann in ein Quell­code-Repo­si­tory der Ziel­um­ge­bung ein­ge­stellt werden.
  • Das Vor­han­den­sein eines neuen Quell­codes löst die CI/CD-Pipe­line aus, die im Gegen­zug die neuen Kom­po­nen­ten und die Pipe­line erstellt, die ent­spre­chen­den Unit- und Inte­gra­ti­ons­tests durch­führt, um sicher­zu­stel­len, dass alles kor­rekt kodiert und kon­fi­gu­riert ist, und schließ­lich die neue Pipe­line in der Ziel­um­ge­bung bereit­stellt, wenn alle Tests bestan­den wur­den. Die Unit- und Inte­gra­ti­ons­tests für ML-Sys­teme ver­die­nen einen eige­nen Artikel.
  • Die neu bereit­ge­stellte Pipe­line wird auto­ma­tisch in der Pro­duk­tion auf der Grund­lage eines Zeit­plans, bei Vor­han­den­sein neuer Trai­nings­da­ten oder als Reak­tion auf einen Aus­lö­ser aus­ge­führt. Das Ergeb­nis die­ser Phase ist ein trai­nier­tes Modell, das in die Modell­re­gis­trie­rung über­tra­gen und kon­ti­nu­ier­lich über­wacht wird.

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.