Apprendimentu Machine Industriale: 10 Principi di Design

Apprendimentu Machine Industriale: 10 Principi di Design

Oghje, novi servizii, applicazioni è altri prugrammi impurtanti sò creati ogni ghjornu chì facenu pussibule di creà cose incredibili: da u software per cuntrullà un cohete SpaceX à interagisce cù un bollitore in a stanza vicinu via un smartphone.

È, qualchì volta, ogni programatore principiante, ch'ellu sia un startupper appassiunatu o un ordinariu Full Stack o Data Scientist, prima o dopu vene à a realizazione chì ci sò certe regule per a prugrammazione è a creazione di software chì simplificà assai a vita.

In issu articulu, I vi discriva brevemente 10 principii di quantu à prugrammà machine learning industriali cusì chì si pò esse facilmente integrata in una dumanda / serviziu, basatu nantu à a metodulugia App 12-factor. suggeritu da a squadra Heroku. A mo iniziativa hè di aumentà a cuscenza di sta tecnica, chì pò aiutà à parechji sviluppatori è persone di scienza di dati.

Questu articulu hè un prologu à una seria di articuli nantu à l'Apprendimentu Machine Industriale. In elli, parraraghju più in più di cumu fà veramente un mudellu è lanciallu in a pruduzzione, creanu una API per questu, è ancu esempi di diversi spazii è cumpagnie chì anu integratu ML in i so sistemi.

Principiu 1: Una basa di codice

Certi programatori in i primi tappe, per pigrizia per capiscenu (o per una certa ragione propria), scurdate di Git. O si scurdanu cumplettamente a parolla, vale à dì, si ghjittanu i schedari à l'altri in u drive / ghjustu u testu / mandatu da i piccioni, o ùn pensanu micca à u so flussu di travagliu, è impegnanu ognunu à u so ramu, è dopu à u maestru.

Stu principiu dice: avè una basa di codice è parechje implementazioni.

Git pò esse usatu in a produzzione è in a ricerca è u sviluppu (R&D), in quale ùn hè micca usatu cusì spessu.

Per esempiu, in a fase di R & D, pudete lascià impegni cù diversi metudi è mudelli di trasfurmazioni di dati, per selezziunà u megliu è facilmente cuntinuà à travaglià cun ellu.

Siconda, in a pruduzzione hè una cosa insustituibile - avete bisognu di guardà constantemente cumu cambia u vostru codice è sapè quale mudellu hà pruduttu u megliu risultati, quale codice hà travagliatu à a fine è ciò chì hè accadutu chì l'hà causatu à piantà di travaglià o cumincià à pruduce risultati sbagliati. . Hè per quessa chì l'impegni !

Pudete ancu creà un pacchettu di u vostru prughjettu, mettendulu, per esempiu, nantu à Gemfury, è dopu solu impurtà funzioni da ellu per altri prughjetti, per ùn esse micca riscrivite 1000 volte, ma più nantu à questu dopu.

Principiu 2: Dichjarà chjaramente è isolà e dipendenze

Ogni prughjettu hà diverse biblioteche chì importate da l'esternu per applicà in qualchì locu. Ch'ella sia biblioteche Python, o biblioteche di altre lingue per diversi scopi, o strumenti di sistema - u vostru compitu hè:

  • Dichjarà chjaramente dipendenze, vale à dì, un schedariu chì cuntene tutte e librerie, arnesi è e so versioni chì sò usati in u vostru prughjettu è chì deve esse installatu (per esempiu, in Python questu pò esse fattu cù Pipfile o requirements.txt. A ligame chì permette di capisce bè: realpython.com/pipenv-guide)
  • Isolate dipendenze specificamente per u vostru prugramma durante u sviluppu. Ùn vulete micca cambià constantemente e versioni è reinstallà, per esempiu, Tensorflow?

In questu modu, i sviluppatori chì si uniscenu à a vostra squadra in u futuru puderanu familiarizà rapidamente cù e biblioteche è e so versioni chì sò aduprate in u vostru prughjettu, è averà ancu l'uppurtunità di gestisce e versioni è e biblioteche stesse installate per un specificu. prughjettu, chì vi aiuterà a evitari incompatibilità di biblioteche o di e so versioni.

A vostra applicazione ùn deve ancu micca di basa di l'arnesi di u sistema chì ponu esse installati in un OS specificu. Questi arnesi anu da esse ancu dichjarati in u manifestu di dipendenze. Questu hè necessariu per evità situazioni induve a versione di l'arnesi (cum'è a so dispunibilità) ùn currisponde micca à l'arnesi di u sistema di un OS particulari.

Cusì, ancu s'ellu curl pò esse usatu in quasi tutti l'urdinatori, duvete sempre dichjarà in dipendenze, postu chì quandu migrate à una altra piattaforma ùn pò esse micca quì, o a versione ùn serà micca quella chì avete bisognu originale.

Per esempiu, u vostru requirements.txt puderia vede cusì:

# 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

Principiu 3: Cunfigurazioni

Parechje anu intesu storie di diversi sviluppatori chì caricanu accidentalmente u codice in GitHub in repositori publichi cù password è altre chjave da AWS, svegliendu u ghjornu dopu cù un debitu di $ 6000, o ancu $ 50000.

Apprendimentu Machine Industriale: 10 Principi di Design

Di sicuru, sti casi sò estremi, ma assai significativu. Se guardate e vostre credenziali o altre dati necessarii per a cunfigurazione in u codice, fate un sbagliu, è pensu chì ùn ci hè bisognu di spiegà perchè.

Una alternativa à questu hè di almacenà cunfigurazioni in variabili di l'ambiente. Pudete leghje più nantu à e variabili ambientali ccà.

Esempii di dati chì sò tipicamenti almacenati in variabili di l'ambiente:

  • Nomi di duminiu
  • URL/URI API
  • Chjave publica è privata
  • Cuntatti (mail, telefoni, etc.)

In questu modu ùn avete micca bisognu di cambià constantemente u codice se e vostre variabili di cunfigurazione cambianu. Questu vi aiuterà à salvà tempu, sforzu è soldi.

Per esempiu, se aduprate l'API Kaggle per fà teste (per esempiu, scaricate u software è eseguite u mudellu attraversu per pruvà quandu u mudellu funziona bè), allora e chjave private da Kaggle, cum'è KAGGLE_USERNAME è KAGGLE_KEY, deve esse almacenatu in variabili di l'ambiente.

Principiu 4: servizii di terzu

L'idea quì hè di creà u prugramma in tale manera chì ùn ci hè nisuna differenza trà e risorse lucali è di terzu in termini di codice. Per esempiu, pudete cunnette sia MySQL locale sia quelli di terzu. U stessu passa per diverse API cum'è Google Maps o Twitter API.

Per disattivà un serviziu di terzu o cunnetta un altru, basta à cambià i chjavi in ​​a cunfigurazione in e variabili di l'ambiente, chì aghju parlatu in u paràgrafu sopra.

Cusì, per esempiu, invece di specificà u percorsu à i schedari cù datasets in u codice ogni volta, hè megliu aduprà a libreria pathlib è dichjarà u percorsu à i datasets in config.py, perchè ùn importa ciò chì u serviziu utilizate (per esempiu, CircleCI), u prugramma hà sappiutu truvà fora u percorsu à i datasets piglià in contu a struttura di u novu sistema di schedari in u novu serviziu.

Principiu 5. Custruite, liberate, runtime

Parechje persone in Data Science trovanu utile per migliurà e so cumpetenze di scrittura di software. Se vulemu chì u nostru prugramma caderà u più raramente pussibule è per travaglià senza fiaschi per u più longu pussibule, avemu bisognu di dividisce u prucessu di liberazione di una nova versione in 3 tappe:

  1. Stage assemblee. Trasfurmà u vostru codice nudu cù risorse individuali in un pacchettu chjamatu chì cuntene tuttu u codice è e dati necessarii. Stu pacchettu hè chjamatu assemblea.
  2. Stage liberazione - quì avemu cunnette a nostra cunfigurazione à l'assemblea, senza quale ùn puderemu micca liberà u nostru prugramma. Avà questu hè una liberazione cumplettamente pronta à lancià.
  3. Dopu vene u palcuscenicu cumpiimentu. Quì liberamu l'applicazione eseguendu i prucessi necessarii da a nostra liberazione.

Un tali sistema per a liberazione di novi versioni di un mudellu o di u pipeline sanu vi permette di separà roli trà amministratori è sviluppatori, permette di seguità e versioni è impedisce stop indesiderati di u prugramma.

Per u compitu di liberazione, sò stati creati parechji servizii diffirenti in quale pudete scrive prucessi per eseguisce in un schedariu .yml (per esempiu, in CircleCI questu hè config.yml per sustene u prucessu stessu). Wheely hè grande per creà pacchetti per prughjetti.

Pudete creà pacchetti cù diverse versioni di u vostru mudellu d'apprendimentu di macchina, è dopu imballate è riferite à i pacchetti necessarii è e so versioni per utilizà e funzioni chì avete scrittu da quì. Questu vi aiuterà à creà una API per u vostru mudellu, è u vostru pacchettu pò esse ospitu in Gemfury, per esempiu.

Principiu 6. Eseguite u vostru mudellu cum'è unu o più prucessi

Inoltre, i prucessi ùn deve micca avè dati spartuti. Questu hè, i prucessi devenu esse separati, è ogni tipu di dati deve esse separatamente, per esempiu, nantu à i servizii di terzu cum'è MySQL o altri, secondu ciò chì avete bisognu.

Vale à dì, ùn hè certamente micca degne di almacenà e dati in u sistema di u schedariu di prucessu, altrimenti questu pò purtà à sguassate di sti dati durante a prossima liberazione / cambiamentu di cunfigurazione o trasferimentu di u sistema nantu à quale u prugramma corre.

Ma ci hè una eccezzioni: per i prughjetti di l'apprendimentu di a macchina, pudete almacenà una cache di biblioteche per ùn reinstallà ogni volta chì lanciate una nova versione, se ùn ci sò micca biblioteche supplementari o cambiamenti in e so versioni. In questu modu, riducerete u tempu chì ci vole à lancià u vostru mudellu in l'industria.

Per eseguisce u mudellu cum'è parechji prucessi, pudete creà un schedariu .yml in quale specificate i prucessi necessarii è a so sequenza.

Principiu 7: Riciclabilità

I prucessi chì eseguite in a vostra applicazione di mudellu duveranu esse faciuli per inizià è piantà. Cusì, questu vi permetterà di implementà rapidamente cambiamenti di codice, cambiamenti di cunfigurazione, scala rapida è flessibile, è prevene eventuali rotture di a versione di travagliu.

Questu hè, u vostru prucessu cù u mudellu deve:

  • Minimizà u tempu di partenza. Ideale, u tempu d'iniziu (da u mumentu chì u cumandamentu di partenza hè statu datu à u mumentu chì u prucessu entra in opera) ùn deve esse più di uni pochi seconde. A cache di a biblioteca, descritta sopra, hè una tecnica per riduce u tempu di startup.
  • Finisce bè. Vale à dì, l'ascolta nantu à u portu di serviziu hè in realtà sospesa, è e novi richieste sottumesse à stu portu ùn saranu micca trattate. Quì avete bisognu di stabilisce una bona cumunicazione cù l'ingegneri DevOps, o capisce cumu si travaglia (preferibile, sicuru, l'ultimi, ma a cumunicazione deve esse sempre mantenuta, in ogni prughjettu!)

Principiu 8: Impiegazione / Integrazione Continuu

Parechje cumpagnie utilizanu una separazione trà e squadre di sviluppu di l'applicazioni è di implementazione (fendu l'applicazione dispunibule per l'utilizatori finali). Questu pò rallentà assai u sviluppu di u software è u prugressu in a migliurà. Sguassà ancu a cultura DevOps, induve u sviluppu è l'integrazione sò, in generale, cumminati.

Dunque, stu principiu dichjara chì u vostru ambiente di sviluppu deve esse u più vicinu pussibule à u vostru ambiente di produzzione.

Questu permetterà:

  1. Reduce u tempu di liberazione da decine di volte
  2. Reduce u numeru di errori per via di incompatibilità di codice.
  3. Questu reduce ancu a carica di travagliu nantu à u persunale, postu chì i sviluppatori è e persone chì implementanu l'applicazione sò avà una squadra.

Strumenti chì permettenu di travaglià cù questu sò CircleCI, Travis CI, GitLab CI è altri.

Pudete fà rapidamente aghjunte à u mudellu, aghjurnà, è lanciallu subitu, mentre chì serà faciule, in casu di fallimentu, di vultà assai rapidamente à a versione di travagliu, per chì l'utilizatore finale ùn l'avvisa mancu. Questu pò esse fattu sopratuttu facilmente è rapidamente se avete boni testi.

Minimizà e differenze !!!

Principiu 9. I vostri logs

I logs (o "Logs") sò avvenimenti, di solitu arregistrati in forma di testu, chì si trovanu in l'applicazione (stream avvenimentu). Un esempiu simplice: "2020-02-02 - livellu di sistema - nome di prucessu". Sò pensati per chì u sviluppatore pò literalmente vede ciò chì succede quandu u prugramma hè in esecuzione. Vede u prugressu di i prucessi è capisce s'ellu hè cum'è u sviluppatore stessu hà intesu.

Stu principiu dice chì ùn deve micca almacenà i vostri logs in u vostru sistema di fugliale - duvete solu "pruduce" à u screnu, per esempiu, fate questu nantu à l'output standard di u sistema. È in questu modu serà pussibule di monitorà u flussu in u terminal durante u sviluppu.

Questu significa chì ùn ci hè micca bisognu di salvà logs in tuttu? Di sicuru micca. A vostra applicazione ùn deve micca fà questu - lascià à i servizii di terzu. A vostra applicazione pò solu trasmette logs à un schedariu specificu o terminale per a visualizazione in tempu reale, o trasmette à un sistema di almacenamentu di dati di scopu generale (cum'è Hadoop). A vostra applicazione stessa ùn deve micca almacenà o interagisce cù i logs.

Principiu 10. Pruva !

Per l'apprendimentu di a macchina industriale, sta fase hè estremamente impurtante, postu chì avete bisognu di capisce chì u mudellu funziona bè è pruduce ciò chì vulete.

I testi ponu esse creati cù pytest, è pruvati cù un picculu dataset si avete un compitu di regressione / classificazione.

Ùn vi scurdate di stabilisce a listessa sumente per i mudelli di apprendimentu prufonda per ùn avè micca sempre risultati diffirenti.

Questa era una breve descrizzione di i principii 10, è, sicuru, hè difficiule di usà senza pruvà è vede cumu si travaglianu, cusì questu articulu hè solu un prologu à una seria d'articuli interessanti in quale vi revelà cumu creà. mudelli industriali di apprendimentu di macchine, cumu integralli in sistemi, è cumu questi principii ponu fà a vita più faciule per tutti noi.

Pruvaraghju ancu d'utilizà principii cool chì qualcunu pò lascià in i cumenti se vulete.

Source: www.habr.com

Cumprate un hosting affidabile per i siti cù prutezzione DDoS, servitori VPS VDS 🔥 Cumprate un hosting di siti web affidabile cù prutezzione DDoS, servitori VPS VDS | ProHoster