Industriell Maschinn Léieren: 10 Design Prinzipien
Hautdesdaags ginn all Dag nei Servicer, Applikatiounen an aner wichteg Programmer erstallt, déi et méiglech maachen onheemlech Saachen ze kreéieren: vu Software fir eng SpaceX Rakéit ze kontrolléieren bis zum Interaktioun mat engem Kettel am nÀchste Raum iwwer e Smartphone.
An, heiansdo, all UfÀnger Programméierer, egal ob hien e passionéierte Startupper ass oder e gewéinleche Full Stack oder Data Scientist, fréier oder spéider kënnt zu der Erkenntnis datt et bestëmmte Reegele gëtt fir ze programméieren a Software ze kreéieren déi d'Liewen immens vereinfachen.
An dësem Artikel wÀert ech kuerz beschreiwen 10 Prinzipien vun wéi industriell Maschinn Léieren programméiere sou datt et einfach an eng Applikatioun / Service integréiert ka ginn, baséiert op der 12-Faktor App Methodik. . Meng Initiativ ass d'Sensibiliséierung vun dëser Technik ze erhéijen, wat vill Entwéckler an Datenwëssenschaftsleit hëllefe kann.
Dësen Artikel ass e Prolog zu enger Serie vun Artikelen iwwer industriell Machine Learning. An hinnen wÀert ech weider schwÀtzen iwwer wéi een eigentlech e Modell mécht an en an d'Produktioun lancéiert, eng API dofir erstellt, souwéi Beispiller vu verschiddene BerÀicher a Firmen, déi ML an hire Systemer agebaut hunn.
Prinzip 1: Ee Code Basis
E puer Programméierer an den éischten Etappen, aus Faulegkeet fir et erauszefannen (oder aus iergendengem Grond vun hiren eegene), vergiessen Git. Entweder vergiessen se d'Wuert ganz, dat heescht, si geheien Dateien uneneen an den Drive / werfen einfach Text / schécken vun Dauwen, oder se denken net duerch hiren Workflow, a verpflichte jidderee fir seng eegen Branche, an dann op d' Meeschtesch.
Dëse Prinzip seet: hunn eng Codebase a vill Détachementer.
Git ka souwuel an der Produktioun wéi an der Fuerschung an der Entwécklung (R&D) benotzt ginn, an dÀr et net sou dacks benotzt gëtt.
Zum Beispill, an der R&D Phase kënnt Dir Verpflichtungen mat verschiddenen Dateveraarbechtungsmethoden a Modeller hannerloossen, fir dann déi bescht auszewielen an einfach weider domat weider ze schaffen.
Zweetens, an der Produktioun ass dĂ«st eng irreplaceable Saach - Dir musst dauernd kucken wĂ©i Ăre Code Ă€nnert a wĂ«sse wĂ©i ee Modell dĂ©i bescht Resultater produzĂ©iert huet, wĂ©i ee Code um Enn geschafft huet a wat geschitt ass, wat dozou bruecht huet datt et ophalen ze schaffen oder falsch Resultater ze produzĂ©ieren. . Dat ass wat Verpflichtungen sinn fir!
Dir kĂ«nnt och e Package vun Ărem Projet erstellen, en zum Beispill op Gemfury setzen, an dann einfach Funktiounen dovunner fir aner Projeten importĂ©ieren, fir se net 1000 Mol Ă«mzeschreiwen, awer mĂ©i spĂ©it mĂ©i doriwwer.
Prinzip 2: OfhÀngegkeeten kloer deklaréieren an isoléieren
All Projet huet verschidde BibliothĂ©iken dĂ©i Dir vu baussen importĂ©iert fir se iergendwou anzesetzen. Egal ob et Python BibliothĂ©ike sinn, oder BibliothĂ©ike vun anere Sprooche fir verschidden Zwecker, oder System Tools - Ăr Aufgab ass:
- Kloer OfhĂ€ngegkeeten erklĂ€ren, dat heescht, e Fichier deen all d'BibliothĂ©iken, Tools an hir Versiounen enthĂ€lt, dĂ©i an Ărem Projet benotzt ginn an dĂ©i installĂ©iert musse ginn (zum Beispill am Python kann dĂ«st mat Pipfile oder requirements.txt gemaach ginn. A Link deen et erlaabt gutt ze verstoen: )
- IsolĂ©iert OfhĂ€ngegkeete speziell fir Ăre Programm wĂ€rend der EntwĂ©cklung. Dir wĂ«llt net permanent Versiounen Ă€nneren an nei installĂ©ieren, zum Beispill, Tensorflow?
Op dĂ«s ManĂ©ier kĂ«nnen d'EntwĂ©ckler, dĂ©i an Zukunft mat Ărem Team bĂ€itrieden, sĂ©ier mat de BibliothĂ©iken an hir Versioune vertraut ginn, dĂ©i an Ărem Projet benotzt ginn, an Dir wĂ€ert och d'MĂ©iglechkeet hunn d'Versioune a BibliothĂ©ike selwer ze verwalten, dĂ©i fir eng spezifesch installĂ©iert sinn. Projet, deen Iech hĂ«lleft InkompatibilitĂ©it vu BibliothĂ©iken oder hir Versiounen ze vermeiden.
Ăr Applikatioun soll och net op System Tools vertrauen, dĂ©i op engem spezifeschen OS installĂ©iert kĂ«nne ginn. DĂ«s Tools mussen och an den OfhĂ€ngegkeetsmanifest deklarĂ©iert ginn. DĂ«st ass nĂ©ideg fir Situatiounen ze vermeiden wou d'Versioun vun den Tools (wĂ©i och hir DisponibilitĂ©it) net mat de System Tools vun engem bestĂ«mmten OS entsprĂ©cht.
Also, och wann Curl op bal all Computer benotzt ka ginn, sollt Dir et ëmmer nach an OfhÀngegkeeten deklaréieren, well wann Dir op eng aner Plattform migréiert, ass et vlÀicht net do oder d'Versioun ass net déi, déi Dir ursprénglech gebraucht hutt.
Zum Beispill, Ăre requirements.txt kĂ©int esou ausgesinn:
# Model Building Requirements
numpy>=1.18.1,<1.19.0
pandas>=0.25.3,<0.26.0
scikit-learn>=0.22.1,<0.23.0
joblib>=0.14.1,<0.15.0
# testing requirements
pytest>=5.3.2,<6.0.0
# packaging
setuptools>=41.4.0,<42.0.0
wheel>=0.33.6,<0.34.0
# fetching datasets
kaggle>=1.5.6,<1.6.0
Prinzip 3: Konfiguratiounen
Vill hunn d'Geschichte vu verschiddenen Entwéckler héieren, déi zoufÀlleg Code op GitHub an ëffentleche Repositories mat Passwierder an aner Schlësselen vun AWS eropluede, den nÀchsten Dag erwÀchen mat enger Schold vu $6000, oder souguer $50000.

Natierlech sinn dĂ«s FĂ€ll extrem, awer ganz bedeitend. Wann Dir Ăr Umeldungsinformatiounen oder aner DonnĂ©eĂ«n, dĂ©i fir d'Konfiguratioun am Code nĂ©ideg sinn, spĂ€ichert, maacht Dir e Feeler, an ech mengen et ass net nĂ©ideg ze erklĂ€ren firwat.
Eng Alternativ zu dĂ«sem ass Konfiguratiounen an Ămfeldvariablen ze spĂ€icheren. Dir kĂ«nnt mĂ©i iwwer Ămweltvariablen liesen .
Beispiller vun Daten dĂ©i typesch an Ămfeldvariablen gespĂ€ichert ginn:
- Domain Nimm
- API URLen/URIs
- Ăffentlech a privat SchlĂ«sselen
- Kontakter (Mail, Telefon, etc.)
Op dĂ«s ManĂ©ier musst Dir de Code net konstant Ă€nneren wann Ăr Konfiguratiounsvariablen Ă€nneren. DĂ«st hĂ«lleft Iech ZĂ€it, Effort a Suen ze spueren.
Zum Beispill, wann Dir de Kaggle API benotzt fir Tester auszefĂ©ieren (zum Beispill d'Software eroflueden an de Modell duerch et lafen fir ze testen wann Dir leeft datt de Modell gutt funktionnĂ©iert), da sollten privat SchlĂ«sselen vu Kaggle, wĂ©i KAGGLE_USERNAME a KAGGLE_KEY, sinn an Ămweltvariablen gespĂ€ichert.
Prinzip 4: Drëtt Partei Services
D'Iddi hei ass de Programm esou ze kreĂ©ieren datt et keen Ănnerscheed tĂ«scht lokalen an DrĂ«tt-Partei Ressourcen a punkto Code ass. Zum Beispill kĂ«nnt Dir souwuel lokal MySQL an DrĂ«tt Partei verbannen. Datselwecht gĂ«lt fir verschidde APIen wĂ©i Google Maps oder Twitter API.
Fir en DrĂ«tt Partei Service auszeschalten oder en aneren ze verbannen, musst Dir just d'SchlĂ«sselen an der Konfiguratioun an den Ămfeldvariablen Ă€nneren, iwwer dĂ©i ech am Paragraph hei uewen geschwat hunn.
Also, zum Beispill, amplaz de Wee fir Dateien mat DatesĂ€tz am Code all KĂ©ier ze spezifizĂ©ieren, ass et besser d'pathlib BibliothĂ©ik ze benotzen an de Wee zu den Datesets an config.py ze deklarĂ©ieren, sou datt egal wĂ©i ee Service Dir benotzt (fir zum Beispill CircleCI), konnt de Programm de Wee fir d'DatesĂ€tz erausfannen, andeems d'Struktur vum neie Dateiesystem am neie Service berĂŒcksichtegt gĂ«tt.
Prinzip 5. Bauen, FrÀisetzung, Runtime
Vill Leit an Data Science fannen et nëtzlech fir hir Software SchreiffÀegkeeten ze verbesseren. Wa mir wëllen datt eise Programm sou selten wéi méiglech crasht an esou laang wéi méiglech ouni Feeler funktionnéiert, musse mir de Prozess vun der Verëffentlechung vun enger neier Versioun an 3 Etappen opdeelen:
- BĂŒhn Versammlungen. Dir transformĂ©iert Ăre bloe Code mat individuellen Ressourcen an e sougenannte Package deen all dĂ©i nĂ©ideg Coden an Daten enthĂ€lt. DĂ«se Package gĂ«tt eng Versammlung genannt.
- BĂŒhn FrĂ€isetzung - hei verbannen mir eis Configuratioun un d'AssemblĂ©e, ouni dĂ©i mir eise Programm net kĂ«nnen erausginn. Elo ass dĂ«st eng komplett prett-fir-lancĂ©iere VerĂ«ffentlechung.
- Als nĂ€chst kĂ«nnt d'BĂŒhn ErfĂ«llung. Hei befreien mir d'Applikatioun andeems Dir dĂ©i nĂ©ideg Prozesser aus eiser VerĂ«ffentlechung ausfĂ©iert.
Sou e System fir nei Versioune vun engem Modell oder der ganzer Pipeline ze verëffentlechen erlaabt Iech Rollen tëscht Administrateuren an Entwéckler ze trennen, erlaabt Iech Versiounen ze verfolgen a verhënnert ongewollte Stopp vum Programm.
Fir d'Verëffentlechungsaufgab gi vill verschidde Servicer erstallt, an deenen Dir Prozesser schreift fir Iech selwer an enger .yml Datei ze lafen (zum Beispill, am CircleCI ass dëst config.yml fir de Prozess selwer z'ënnerstëtzen). Wheely ass super fir Packagen fir Projeten ze kreéieren.
Dir kĂ«nnt Pakete mat verschiddene Versioune vun Ărem MaschinnlĂ©iermodell erstellen, a packen se dann a verweisen op dĂ©i nĂ©ideg Packagen an hir Versioune fir d'Funktiounen ze benotzen, dĂ©i Dir vun do geschriwwen hutt. DĂ«st hĂ«lleft Iech eng API fir Ăre Modell ze kreĂ©ieren, an Ăre Package kann zum Beispill op Gemfury gehost ginn.
Prinzip 6. Run Ăre Modell als een oder mĂ©i Prozesser
Ausserdeem sollten Prozesser keng gedeelt Daten hunn. Dat ass, Prozesser musse getrennt existéieren, an all Zort vun Daten musse separat existéieren, zum Beispill op Drëtt-Partei Servicer wéi MySQL oder anerer, jee no wat Dir braucht.
Dat ass, et ass definitiv net derwĂ€ert DonnĂ©eĂ«n am Prozess Dateiesystem ze spĂ€icheren, soss kann dĂ«st zu der LĂ€schung vun dĂ«sen DonnĂ©eĂ«n wĂ€hrend der nĂ€chster VerĂ«ffentlechung / Ănnerung vun de Konfiguratiounen oder Transfer vum System fĂ©ieren, op deem de Programm leeft.
Awer et gĂ«tt eng Ausnahm: fir MaschinnlĂ©iereprojeten kĂ«nnt Dir e Cache vu BibliothĂ©ike spĂ€icheren fir se net all KĂ©ier wann Dir eng nei Versioun lancĂ©iert nei installĂ©iere wĂ«llt, wa keng zousĂ€tzlech BibliothĂ©iken oder Ănnerunge fir hir Versioune gemaach goufen. Op dĂ«s ManĂ©ier reduzĂ©iert Dir d'ZĂ€it dĂ©i et brauch fir Ăre Modell an der Industrie ze lancĂ©ieren.
Fir de Modell als verschidde Prozesser auszeféieren, kënnt Dir eng .yml Datei erstellen, an dÀr Dir déi néideg Prozesser an hir Sequenz uginn.
Prinzip 7: Recycling
D'Prozesser, dĂ©i an Ărer Modellapplikatioun lafen, sollten einfach sinn ze starten an ze stoppen. Also, dĂ«st erlaabt Iech sĂ©ier Code Ănnerungen z'installĂ©ieren, KonfiguratiounsĂ€nnerungen, sĂ©ier a flexibel Skala, a mĂ©iglech Decompte vun der Aarbechtsversioun ze vermeiden.
Dat ass, Ăre Prozess mam Modell soll:
- Miniméiere StartzÀit. Idealerweis sollt d'StartzÀit (vum Moment vum Startbefehl erausginn bis de Moment wou de Prozess a Betrib kommt) net méi wéi e puer Sekonnen sinn. Bibliothéik Caching, uewen beschriwwen, ass eng Technik fir d'StartzÀit ze reduzéieren.
- Enn richteg. Dat ass, d'Nolauschteren um Serviceport ass tatsÀchlech suspendéiert, an nei Ufroe, déi op dësen Hafen ofginn ginn, ginn net veraarbecht. Hei musst Dir entweder eng gutt Kommunikatioun mat DevOps Ingenieuren opbauen, oder verstoen wéi et selwer funktionnéiert (am léifsten, natierlech, dat lescht, awer d'Kommunikatioun sollt ëmmer erhale bleiwen, an all Projet!)
Prinzip 8: Kontinuéierlech Détachement / Integratioun
Vill Firmen benotzen eng Trennung tĂ«scht ApplikatiounsentwĂ©cklung an Deploymentteams (d'Applikatioun fir Endbenotzer verfĂŒgbar ze maachen). DĂ«st kann d'Software EntwĂ©cklung staark verlangsamen a FortschrĂ«tter fir se ze verbesseren. Et verwinnt och d'DevOps Kultur, wou EntwĂ©cklung an Integratioun sinn, ongefĂ©ier geschwat, kombinĂ©iert.
Dofir seet dĂ«se Prinzip datt Ăert EntwĂ©cklungsĂ«mfeld sou no wĂ©i mĂ©iglech un Ărem ProduktiounsĂ«mfeld sollt sinn.
Dëst erlaabt:
- Reduzéiert d'VerëffentlechungszÀit ëm zéng Mol
- Reduzéieren d'Zuel vu Feeler wéinst Code Inkompatibilitéit.
- Dëst reduzéiert och d'Aarbechtslaascht op d'Personal, well d'Entwéckler an d'Leit, déi d'Applikatioun ofsetzen, elo een Team sinn.
Tools déi Iech erlaben mat dësem ze schaffen sinn CircleCI, Travis CI, GitLab CI an anerer.
Dir kënnt séier ErgÀnzunge fir de Modell maachen, aktualiséieren an direkt starten, wÀrend et einfach ass, am Fall vu Feeler, ganz séier an d'Aarbechtsversioun zréckzekommen, sou datt den Endbenotzer et net emol bemierkt. Dëst kann besonnesch einfach a séier gemaach ginn wann Dir gutt Tester hutt.
Differenzen minimiséieren!!!
Prinzip 9. Ăr Logbicher
Logbicher (oder "Logbicher") sinn Eventer, normalerweis am Textformat opgeholl, déi an der Applikatioun optrieden (Event Stream). En einfacht Beispill: "2020-02-02 - Systemniveau - Prozessnumm." Si sinn entworf sou datt den Entwéckler wuertwiertlech gesinn wat geschitt wann de Programm leeft. Hie gesÀit de Fortschrëtt vu Prozesser a versteet ob et ass wéi den Entwéckler selwer geduecht huet.
DĂ«se Prinzip seet datt Dir Ăr Logbicher net an Ărem Dateiesystem spĂ€ichere sollt - Dir sollt se just op den Ecran "output" maachen, zum Beispill, dĂ«st op der Standardoutput vum System maachen. An op dĂ«s ManĂ©ier wĂ€ert et mĂ©iglech sinn de Flow am Terminal wĂ€hrend der EntwĂ©cklung ze iwwerwaachen.
Heescht dat datt et guer net nĂ©ideg ass Logbicher ze spĂ€icheren? Natierlech net. Ăr Applikatioun sollt dat just net maachen - lĂ©isst et op DrĂ«tt Partei Servicer. Ăr Applikatioun kann nĂ«mme Logbicher op eng spezifesch Datei oder Terminal weiderginn fir EchtzĂ€it ze gesinn, oder weider op en allgemeng Zweck Datelagerungssystem (wĂ©i Hadoop) weiderginn. Ăr Applikatioun selwer soll net mat Logbicher spĂ€icheren oder interagĂ©ieren.
Prinzip 10. Test!
Fir industriell Maschinnléieren ass dës Phase extrem wichteg, well Dir musst verstoen datt de Modell richteg funktionnéiert a produzéiert wat Dir wollt.
Tester kënne mat pytest erstallt ginn, a getest mat engem klengen Dataset wann Dir eng Regressioun / Klassifikatioun Aufgab hutt.
Vergiesst net déi selwecht Som fir déif Léiermodeller ze setzen, sou datt se net stÀnneg verschidde Resultater produzéieren.
Dëst war eng kuerz Beschreiwung vun den 10 Prinzipien, an natierlech ass et schwéier se ze benotzen ouni ze probéieren a kucken wéi se funktionnéieren, also ass dësen Artikel just e Prolog zu enger Serie vun interessanten Artikelen an deenen ech wÀert verroden wéi een erstellt industriell Maschinn Léieren Modeller , wéi se a Systemer integréieren, a wéi dës Prinzipien d'Liewe méi einfach fir eis all kënne maachen.
Ech probéieren och cool Prinzipien ze benotzen déi jidderee kann an de Kommentarer hannerloossen wa se wëllen.
Source: will.com
