Ihr Unter­neh­men hat also beschlos­sen, in maschi­nel­les Ler­nen zu inves­tie­ren. Sie haben ein talen­tier­tes Team von Daten­wis­sen­schaft­lern, die Modelle ent­wi­ckeln, um wich­tige Pro­bleme zu lösen, die noch vor ein paar Jah­ren uner­reich­bar waren. Alle Leis­tungs­kenn­zah­len sehen groß­ar­tig aus, die Demos las­sen die Kinn­lade her­un­ter­klap­pen und die Füh­rungs­kräfte fra­gen, wie schnell Sie ein Modell in Pro­duk­tion brin­gen können.

Das sollte ziem­lich schnell gehen, den­ken Sie. Schließ­lich haben Sie bereits alle fort­ge­schrit­te­nen wis­sen­schaft­li­chen und mathe­ma­ti­schen Pro­bleme gelöst, sodass nur noch die rou­ti­ne­mä­ßige IT-Arbeit übrig ist. Wie schwer kann das schon sein?

Ziem­lich schwer, wie sich her­aus­stellt. Deeplearning.ai berich­tet, dass „nur 22 Pro­zent der Unter­neh­men, die maschi­nel­les Ler­nen ein­set­zen, ein Modell erfolg­reich imple­men­tiert haben“. Was macht es so schwie­rig? Und was müs­sen wir tun, um die Situa­tion zu verbessern?

Begin­nen wir damit, die Ursa­chen zu untersuchen.

Her­aus­for­de­run­gen

In der Welt der tra­di­tio­nel­len Soft­ware­ent­wick­lung hat eine Reihe von Prak­ti­ken, die als DevOps bekannt sind, es mög­lich gemacht, Soft­ware inner­halb von Minu­ten in die Pro­duk­tion zu über­füh­ren und sie zuver­läs­sig am Lau­fen zu hal­ten. DevOps stützt sich auf Tools, Auto­ma­ti­sie­rung und Arbeits­ab­läufe, um die zufäl­lige Kom­ple­xi­tät zu besei­ti­gen und es den Ent­wick­lern zu ermög­li­chen, sich auf die eigent­li­chen Pro­bleme zu kon­zen­trie­ren, die gelöst wer­den müs­sen. Die­ser Ansatz ist so erfolg­reich, dass viele Unter­neh­men ihn bereits beherr­schen. Warum kön­nen wir also nicht ein­fach das Glei­che für ML tun?

Der Grund dafür ist, dass es einen grund­le­gen­den Unter­schied zwi­schen ML und her­kömm­li­cher Soft­ware gibt: ML besteht nicht nur aus Code, son­dern aus Code und Daten. Ein ML-Modell, das Arte­fakt, das Sie am Ende in der Pro­duk­tion ein­set­zen, wird durch die Anwen­dung eines Algo­rith­mus auf eine Menge von Trai­nings­da­ten erstellt, die das Ver­hal­ten des Modells in der Pro­duk­tion beein­flus­sen wer­den. Ent­schei­dend ist, dass das Ver­hal­ten des Modells auch von den Ein­ga­be­da­ten abhängt, die es zum Zeit­punkt der Vor­her­sage erhält und die Sie nicht im Vor­aus ken­nen können.

Wäh­rend der Code sorg­fäl­tig in einer kon­trol­lier­ten Ent­wick­lungs­um­ge­bung erstellt wird, stam­men die Daten aus der unend­li­chen Entro­pie­quelle, die als „die reale Welt“ bekannt ist. Sie ver­än­dern sich stän­dig, und man kann nicht kon­trol­lie­ren, wie sie sich ver­än­dern wer­den. Man kann sich ihre Bezie­hung so vor­stel­len, als leb­ten Code und Daten auf getrenn­ten Ebe­nen, die sich die Zeit­di­men­sion tei­len, aber in allen ande­ren Berei­chen unab­hän­gig sind. Die Her­aus­for­de­rung eines ML-Pro­zes­ses besteht darin, auf kon­trol­lierte Weise eine Brü­cke zwi­schen die­sen bei­den Ebe­nen zu schlagen.

Diese grund­le­gende Tren­nung führt zu meh­re­ren wich­ti­gen Her­aus­for­de­run­gen, die von jedem gelöst wer­den müs­sen, der bei­spiels­weise ein ML-Modell erfolg­reich in die Pro­duk­tion brin­gen will:

  • Lang­same, spröde und inkon­sis­tente Bereitstellung
  • Man­gel an Reproduzierbarkeit
  • Leis­tungs­ein­bu­ßen (Ver­zer­rung durch Training)

Da das Wort „Daten“ in die­sem Arti­kel bereits mehr­fach ver­wen­det wurde, den­ken Sie viel­leicht an eine andere Dis­zi­plin, die uns hel­fen könnte: Data Engi­nee­ring. Und Sie hät­ten Recht: Data Engi­nee­ring bie­tet wich­tige Werk­zeuge und Kon­zepte, die für die Lösung des Rät­sels ML in der Pro­duk­tion uner­läss­lich sind. Um das Rät­sel zu lösen, müs­sen wir Prak­ti­ken aus DevOps und Data Engi­nee­ring kom­bi­nie­ren und einige hin­zu­fü­gen, die ein­zig­ar­tig für ML sind.

ML Ops kann also durch diese Schnitt­menge defi­niert werden:

ML Ops kann also durch diese Schnitt­menge defi­niert werden:

ML Ops ist die Schnitt­menge von Machine Lear­ning, DevOps und Data Engineering

Wir könn­ten ML Ops also wie folgt definieren:

ML Ops ist eine Reihe von Prak­ti­ken, die maschi­nel­les Ler­nen, DevOps und Data Engi­nee­ring kom­bi­nie­ren und dar­auf abzie­len, ML-Sys­teme zuver­läs­sig und effi­zi­ent in der Pro­duk­tion ein­zu­set­zen und zu warten.

Schauen wir uns nun an, was dies im Ein­zel­nen bedeu­tet, indem wir die ein­zel­nen Prak­ti­ken unter­su­chen, die zur Errei­chung der Ziele von ML Ops ein­ge­setzt wer­den können.

Prak­ti­ken

Hybride Teams

Da wir bereits fest­ge­stellt haben, dass die Pro­duk­tion eines ML-Modells eine Reihe von Fähig­kei­ten erfor­dert, die bis­her als getrennt betrach­tet wur­den, brau­chen wir, um erfolg­reich zu sein, ein hybri­des Team, das die­ses Spek­trum von Fähig­kei­ten zusam­men abdeckt. Es ist natür­lich mög­lich, dass eine ein­zige Per­son alle diese Fähig­kei­ten gut genug beherrscht, und in die­sem Fall könn­ten wir diese Per­son einen voll­stän­di­gen ML Ops Engi­neer nen­nen. Das wahr­schein­lichste Sze­na­rio ist jedoch, dass ein erfolg­rei­ches Team einen Data Sci­en­tist oder ML Engi­neer, einen DevOps Engi­neer und einen Data Engi­neer umfas­sen würde.

Die genaue Zusam­men­set­zung, Orga­ni­sa­tion und Bezeich­nung des Teams kann vari­ie­ren, aber das Wich­tigste ist die Erkennt­nis, dass ein Data Sci­en­tist allein die Ziele von ML Ops nicht errei­chen kann. Selbst wenn eine Orga­ni­sa­tion alle not­wen­di­gen Fähig­kei­ten umfasst, wird sie nicht erfolg­reich sein, wenn sie nicht eng zusammenarbeiten.

Eine wei­tere wich­tige Ände­rung besteht darin, dass Data Sci­en­tists grund­le­gende Soft­ware-Engi­nee­ring-Fähig­kei­ten wie Code-Modu­la­ri­sie­rung, Wie­der­ver­wen­dung, Tes­ten und Ver­sio­nie­rung beherr­schen müs­sen; es reicht nicht aus, ein Modell in einem unor­dent­li­chen Note­book zum Lau­fen zu brin­gen. Aus die­sem Grund füh­ren viele Unter­neh­men den Titel ML Engi­neer ein, der diese Fähig­kei­ten her­vor­hebt. In vie­len Fäl­len füh­ren ML-Inge­nieure in der Pra­xis viele der Akti­vi­tä­ten aus, die für ML Ops erfor­der­lich sind.

ML-Pipe­lines

Eines der Kern­kon­zepte des Data Engi­nee­ring ist die Daten­pipe­line. Eine Daten­pipe­line ist eine Reihe von Trans­for­ma­tio­nen, die auf Daten zwi­schen ihrer Quelle und einem Ziel ange­wen­det wer­den. Sie wer­den in der Regel als Graph defi­niert, in dem jeder Kno­ten eine Trans­for­ma­tion dar­stellt und die Kan­ten Abhän­gig­kei­ten oder die Aus­füh­rungs­rei­hen­folge reprä­sen­tie­ren. Es gibt viele spe­zia­li­sierte Tools, die bei der Erstel­lung, Ver­wal­tung und Aus­füh­rung die­ser Pipe­lines hel­fen. Daten­pipe­lines kön­nen auch als ETL-Pipe­lines (extract, trans­form and load) bezeich­net werden.

ML-Modelle erfor­dern immer irgend­eine Art von Daten­trans­for­ma­tion, die in der Regel über Skripte oder sogar Zel­len in einem Note­book erfolgt, wodurch sie schwer zu ver­wal­ten und zuver­läs­sig aus­zu­füh­ren sind. Die Umstel­lung auf rich­tige Daten­pipe­lines bie­tet viele Vor­teile bei der Wie­der­ver­wen­dung von Code, der Trans­pa­renz zur Lauf­zeit, der Ver­wal­tung und der Skalierbarkeit.

Da ML-Trai­ning auch als Daten­trans­for­ma­tion betrach­tet wer­den kann, ist es nahe­lie­gend, die spe­zi­fi­schen ML-Schritte in die Daten­pipe­line selbst ein­zu­bin­den und sie in eine ML-Pipe­line zu ver­wan­deln. Für die meis­ten Modelle wer­den zwei Ver­sio­nen der Pipe­line benö­tigt: eine für das Trai­ning und eine für die Ver­ar­bei­tung. Der Grund dafür ist, dass sich die Daten­for­mate und die Art des Zugriffs auf sie in der Regel von einem Moment zum ande­ren stark unter­schei­den, ins­be­son­dere bei Model­len, die in Echt­zeit-Anfra­gen bedient wer­den (im Gegen­satz zu Batch-Vorhersageläufen).

Die ML Pipe­line ist ein rei­nes Code-Arte­fakt, unab­hän­gig von spe­zi­fi­schen Daten­in­stan­zen. Das bedeu­tet, dass es mög­lich ist, ihre Ver­sio­nen in der Ver­si­ons­kon­trolle zu ver­fol­gen und ihre Bereit­stel­lung mit einer regu­lä­ren CI/CD-Pipe­line zu auto­ma­ti­sie­ren, einer Kern­pra­xis von DevOps. Auf diese Weise kön­nen wir die Code- und Daten­ebe­nen auf struk­tu­rierte und auto­ma­ti­sierte Weise mit­ein­an­der verbinden:

Beach­ten Sie, dass es zwei ver­schie­dene ML-Pipe­lines gibt: die Trai­nings-Pipe­line und die Ser­ving-Pipe­line. Sie haben gemein­sam, dass die von ihnen durch­ge­führ­ten Daten­trans­for­ma­tio­nen Daten im glei­chen For­mat erzeu­gen müs­sen, aber ihre Imple­men­tie­run­gen kön­nen sehr unter­schied­lich sein. So läuft die Trai­nings­pipe­line in der Regel über Sta­pel­da­teien, die alle Merk­male ent­hal­ten, wäh­rend die Ser­ving-Pipe­line oft online läuft und nur einen Teil der Merk­male in den Anfra­gen erhält und den Rest aus einer Daten­bank abruft.

Es ist jedoch wich­tig sicher­zu­stel­len, dass diese bei­den Pipe­lines kon­sis­tent sind, wes­halb man ver­su­chen sollte, Code und Daten so oft wie mög­lich wie­der­zu­ver­wen­den. Einige Tools kön­nen bei die­sem Ziel helfen:

  • Trans­for­ma­ti­ons-Frame­works wie Ten­sor­Flow Trans­form kön­nen sicher­stel­len, dass Berech­nun­gen auf der Grund­lage von Trai­nings­men­gen­sta­tis­ti­ken, wie Durch­schnitts­werte und Stan­dard­ab­wei­chun­gen für die Nor­ma­li­sie­rung, kon­sis­tent sind.
  • Fea­ture Stores sind Daten­ban­ken, die Werte spei­chern, die nicht Teil einer Vor­her­sa­ge­an­for­de­rung sind, zum Bei­spiel Fea­tures, die über die His­to­rie eines Nut­zers berech­net werden.

Modell- und Datenversionierung

Um Repro­du­zier­bar­keit zu gewähr­leis­ten, ist eine kon­sis­tente Ver­si­ons­ver­fol­gung uner­läss­lich. In der tra­di­tio­nel­len Soft­ware­welt reicht es aus, den Code zu ver­sio­nie­ren, da das gesamte Ver­hal­ten durch ihn defi­niert wird. Bei ML müs­sen wir auch Modell­ver­sio­nen ver­fol­gen, zusam­men mit den Daten, die zum Trai­ning ver­wen­det wer­den, und eini­gen Meta­in­for­ma­tio­nen wie Trainingshyperparametern.

Modelle und Meta­da­ten kön­nen in einem Stan­dard-Ver­si­ons­kon­troll­sys­tem wie Git nach­ver­folgt wer­den, aber die Daten sind oft zu groß und ver­än­der­lich, als dass dies effi­zi­ent und prak­tisch wäre. Es ist auch wich­tig, den Lebens­zy­klus des Modells nicht an den Lebens­zy­klus des Codes zu bin­den, da die Modell­schu­lung oft nach einem ande­ren Zeit­plan erfolgt. Außer­dem ist es not­wen­dig, die Daten zu ver­sio­nie­ren und jedes trai­nierte Modell mit den genauen Ver­sio­nen des Codes, der Daten und der ver­wen­de­ten Hyper­pa­ra­me­ter zu ver­knüp­fen. Die ideale Lösung wäre ein spe­zi­ell ent­wi­ckel­tes Tool, aber bis­her gibt es kei­nen kla­ren Kon­sens auf dem Markt, und es wer­den viele Sche­mata ver­wen­det, von denen die meis­ten auf Datei-/Ob­jekt­spei­cher-Kon­ven­tio­nen und Meta­da­ten-Daten­ban­ken basieren.

Modell-Vali­die­rung

Eine wei­tere Stan­dard-DevOps-Pra­xis ist die Test­au­to­ma­ti­sie­rung, in der Regel in Form von Ein­heits­tests und Inte­gra­ti­ons­tests. Das Bestehen die­ser Tests ist eine Vor­aus­set­zung dafür, dass eine neue Ver­sion bereit­ge­stellt wer­den kann. Umfas­sende auto­ma­ti­sierte Tests kön­nen einem Team gro­ßes Ver­trauen geben und das Tempo der Pro­duk­ti­ons­be­reit­stel­lung erheb­lich beschleunigen.

ML-Modelle sind schwie­ri­ger zu tes­ten, da kein Modell 100 % kor­rekte Ergeb­nisse lie­fert. Das bedeu­tet, dass die Modell­va­li­die­rungs­tests not­wen­di­ger­weise sta­tis­ti­scher Natur sein müs­sen, anstatt einen binä­ren Pas­s/­Fail-Sta­tus zu haben. Um zu ent­schei­den, ob ein Modell gut genug für den Ein­satz ist, muss man die rich­ti­gen Metri­ken und den Schwel­len­wert ihrer akzep­ta­blen Werte fest­le­gen, in der Regel empi­risch und oft durch Ver­gleich mit frü­he­ren Model­len oder Benchmarks.

Es reicht auch nicht aus, eine ein­zige Metrik für die gesamte Vali­die­rungs­menge zu ver­fol­gen. Genauso wie gute Unit-Tests meh­rere Fälle tes­ten müs­sen, muss die Modell­va­li­die­rung indi­vi­du­ell für rele­vante Seg­mente der Daten, so genannte Sli­ces, durch­ge­führt wer­den. Wenn z. B. das Geschlecht direkt oder indi­rekt ein rele­van­tes Merk­mal eines Modells sein könnte, soll­ten sepa­rate Metri­ken für Män­ner, Frauen und andere Geschlech­ter ver­folgt wer­den. Andern­falls könnte das Modell Pro­bleme mit der Fair­ness haben oder in wich­ti­gen Seg­men­ten unter­durch­schnitt­li­che Ergeb­nisse liefern.

Wenn es Ihnen gelingt, Modelle auf auto­ma­ti­sierte und zuver­läs­sige Weise zusam­men mit dem Rest der ML-Pipe­line zu vali­die­ren, kön­nen Sie den Kreis­lauf sogar schlie­ßen und Online-Modell­trai­ning imple­men­tie­ren, wenn dies für den Anwen­dungs­fall sinn­voll ist.

Daten­va­li­die­rung

Eine gute Daten­pipe­line beginnt in der Regel mit der Vali­die­rung der Ein­ga­be­da­ten. Zu den übli­chen Vali­die­run­gen gehö­ren Datei­for­mat und ‑größe, Spal­ten­ty­pen, Null- oder Leer­werte und ungül­tige Werte. All dies ist für ML-Trai­ning und ‑Vor­her­sa­gen erfor­der­lich, da sonst ein feh­ler­haf­tes Modell auf­taucht und man sich auf der Suche nach dem Grund den Kopf zer­bre­chen muss. Die Daten­va­li­die­rung ist ver­gleich­bar mit dem Unit-Test­ing im Bereich des Codes.

Zusätz­lich zu den grund­le­gen­den Vali­die­run­gen, die jede Daten­pipe­line durch­führt, soll­ten ML-Pipe­lines auch die sta­tis­ti­schen Eigen­schaf­ten der Ein­ga­ben auf höhe­rer Ebene vali­die­ren. Wenn sich bei­spiels­weise der Durch­schnitt oder die Stan­dard­ab­wei­chung eines Merk­mals von einem Trai­nings­da­ten­satz zu einem ande­ren erheb­lich ändert, wird sich dies wahr­schein­lich auf das trai­nierte Modell und seine Vor­her­sa­gen aus­wir­ken. Dies könnte eine tat­säch­li­che Ver­än­de­rung in den Daten wider­spie­geln oder eine Anoma­lie sein, die durch die Art der Daten­ver­ar­bei­tung ver­ur­sacht wird. Daher ist es wich­tig, sys­te­mi­sche Feh­ler, die das Modell ver­un­rei­ni­gen könn­ten, zu über­prü­fen und aus­zu­schlie­ßen und sie gege­be­nen­falls zu beheben.

Über­wa­chung

Die Über­wa­chung von Pro­duk­ti­ons­sys­te­men ist uner­läss­lich, damit sie gut lau­fen. Bei ML-Sys­te­men ist die Über­wa­chung sogar noch wich­ti­ger, da ihre Leis­tung nicht nur von Fak­to­ren abhängt, die wir bis zu einem gewis­sen Grad kon­trol­lie­ren kön­nen, wie z. B. die Infrastruktur und unsere eigene Soft­ware, son­dern auch von Daten, über die wir viel weni­ger Kon­trolle haben. Daher müs­sen wir nicht nur Stan­dard­kenn­zah­len wie Latenz, Daten­ver­kehr, Feh­ler und Sät­ti­gung über­wa­chen, son­dern auch die Leis­tung der Modellvorhersage.

Eine offen­sicht­li­che Her­aus­for­de­rung bei der Über­wa­chung der Modell­leis­tung besteht darin, dass wir in der Regel kein veri­fi­zier­tes Label haben, mit dem wir die Vor­her­sa­gen unse­res Modells ver­glei­chen kön­nen, da das Modell mit neuen Daten arbei­tet. In eini­gen Fäl­len kön­nen wir die Effek­ti­vi­tät des Modells auf indi­rekte Weise bewer­ten, indem wir bei­spiels­weise die Klick­rate für ein Emp­feh­lungs­mo­dell mes­sen. In ande­ren Fäl­len müs­sen wir uns auf Ver­glei­che zwi­schen Zeit­räu­men ver­las­sen, indem wir bei­spiels­weise stünd­lich einen Pro­zent­satz posi­ti­ver Klas­si­fi­zie­run­gen berech­nen und eine War­nung aus­ge­ben, wenn die­ser um mehr als ein paar Pro­zent vom Durch­schnitt für die­sen Zeit­raum abweicht.

Wie bei der Vali­die­rung des Modells ist es auch hier wich­tig, die Metri­ken über Sli­ces hin­weg und nicht nur glo­bal zu über­wa­chen, um Pro­bleme zu erken­nen, die bestimmte Seg­mente betreffen.

Zusam­men­fas­sung

In dem Maße, wie sich ML von der For­schung zu ange­wand­ten Geschäfts­lö­sun­gen ent­wi­ckelt, müs­sen wir auch die Reife der Betriebs­pro­zesse ver­bes­sern. Glück­li­cher­weise kön­nen wir viele Prak­ti­ken aus Dis­zi­pli­nen über­neh­men, die vor ML ent­stan­den sind.

Die fol­gende Tabelle fasst die wich­tigs­ten Prak­ti­ken von ML Ops zusam­men und zeigt, wie sie mit DevOps und Data Engi­nee­ring zusammenhängen:

Es han­delt sich um eine brand­neue und auf­re­gende Dis­zi­plin mit Werk­zeu­gen und Ver­fah­ren, die sich wahr­schein­lich sehr schnell wei­ter­ent­wi­ckeln wer­den. Die Ent­wick­lung und Anwen­dung von Pro­duk­ti­ons­tech­ni­ken auf ML bie­tet zwei­fel­los eine Menge Möglichkeiten.

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.