Pangajaran Mesin Industri: 10 Prinsip Desain

Pangajaran Mesin Industri: 10 Prinsip Desain

Ayeuna, jasa anyar, aplikasi sareng program penting sanésna didamel unggal dinten anu ngamungkinkeun anjeun nyiptakeun hal-hal anu luar biasa: tina parangkat lunak pikeun ngatur rokét SpaceX dugi ka berinteraksi sareng ketel di kamar hareup via smartphone.

Na, sakapeung, unggal programmer novice, naha anjeunna mangrupakeun startupper gairah atawa hiji Full tumpukan biasa atawa Data Élmuwan, sooner atanapi engké datang ka realisasi nu aya aturan nu tangtu pikeun programming sarta nyieun software nu greatly simplify hirup.

Dina artikel ieu, kuring bakal ngajelaskeun sakeudeung 10 prinsip kumaha program learning mesin industri meh bisa gampang terpadu kana hiji aplikasi / jasa, dumasar kana metodologi App 12-faktor. disarankeun ku tim Heroku. Inisiatif kuring nyaéta pikeun ningkatkeun kasadaran téknik ieu, anu tiasa ngabantosan seueur pamekar sareng jalma élmu data.

Tulisan ieu mangrupikeun prolog tina séri tulisan ngeunaan Pembelajaran Mesin industri. Dina éta kuring bakal ngobrol salajengna ngeunaan kumaha sabenerna nyieun modél sarta ngajalankeun kana produksi, nyieun hiji API pikeun eta, kitu ogé conto ti sagala rupa wewengkon jeung pausahaan nu geus diwangun-di ML dina sistem maranéhanana.

Prinsip 1: Hiji basis kode

Sababaraha programer dina tahap kahiji, kaluar tina hoream pikeun manggihan eta kaluar (atawa pikeun sababaraha alesan sorangan), poho ngeunaan Git. Aranjeunna boh sagemblengna hilap kecap, nyaeta, aranjeunna buang file ka silih dina drive / ngan buang téks / ngirim ku japati, atawa maranéhna teu mikir ngaliwatan workflow maranéhna, sarta bunuh unggal cabang sorangan, lajeng ka tuan.

Prinsip ieu nyatakeun: gaduh hiji basis kode sareng seueur panyebaran.

Git tiasa dianggo dina produksi sareng dina panalungtikan sareng pamekaran (R&D), dimana éta henteu sering dianggo.

Salaku conto, dina fase R&D anjeun tiasa ngantunkeun komitmen sareng metode sareng modél ngolah data anu béda-béda, supados teras milih anu pangsaéna sareng gampang teras damel sareng éta.

Kadua, dina produksi ieu mangrupikeun hal anu teu tiasa diganti - anjeun kedah teras-terasan ningali kumaha kode anjeun robih sareng terang modél mana anu ngahasilkeun hasil anu pangsaéna, kode mana anu didamel dina tungtungna sareng naon anu kajantenan anu nyababkeun éta lirén damel atanapi ngamimitian ngahasilkeun hasil anu salah. . Éta naon commits pikeun!

Anjeun oge bisa nyieun hiji pakét proyék anjeun, nempatkeun eta, contona, dina Gemfury, lajeng saukur ngimpor fungsi ti dinya pikeun proyék-proyék séjén, ku kituna teu nulis balik aranjeunna 1000 kali, tapi nu langkung lengkep ihwal nu engké.

Prinsip 2: Jelas nyatakeun sareng ngasingkeun kagumantungan

Unggal proyék ngagaduhan perpustakaan anu béda-béda anu anjeun impor ti luar pikeun nerapkeunana di mana waé. Naha éta perpustakaan Python, atanapi perpustakaan basa sanés pikeun sababaraha tujuan, atanapi alat sistem - tugas anjeun nyaéta:

  • Jelas nyatakeun katergantungan, nyaéta, file anu ngandung sadaya perpustakaan, alat, sareng versina anu dianggo dina proyék anjeun sareng anu kedah dipasang (contona, dina Python ieu tiasa dilakukeun nganggo Pipfile atanapi requirements.txt. A link anu ngamungkinkeun alus ngartos: realpython.com/pipenv-guide)
  • Ngasingkeun kagumantungan khusus pikeun program anjeun salami pangwangunan. Anjeun teu hoyong terus-terusan ngarobah vérsi sareng pasang deui, contona, Tensorflow?

Ku cara ieu, pamekar anu bakal gabung tim anjeun dina mangsa nu bakal datang bakal bisa gancang jadi akrab jeung perpustakaan jeung versi maranéhanana anu dipaké dina proyék anjeun, sarta anjeun ogé bakal boga kasempetan pikeun ngatur versi jeung perpustakaan sorangan dipasang pikeun husus. proyék, anu bakal ngabantosan anjeun ngahindarkeun sauyunan perpustakaan atanapi versina.

Aplikasi anjeun ogé henteu kedah ngandelkeun alat sistem anu tiasa dipasang dina OS khusus. Alat-alat ieu ogé kedah dinyatakeun dina manifest dependencies. Ieu dipikabutuh pikeun ngahindarkeun kaayaan dimana versi alat (sareng kasadiaanna) henteu cocog sareng alat sistem tina OS tinangtu.

Janten, sanaos curl tiasa dianggo dina ampir sadaya komputer, anjeun kedah tetep nyatakeun dina katergantungan, sabab nalika migrasi ka platform anu sanés tiasa waé henteu aya atanapi versina moal janten anu anjeun peryogikeun.

Contona, requirements.txt Anjeun bisa kasampak kawas kieu:

# 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

Prinsip 3: Konfigurasi

Seueur anu parantos ngupingkeun carita ngeunaan rupa-rupa pamekar anu ngahaja ngunggah kode ka GitHub kana repositori umum nganggo kecap konci sareng konci sanés ti AWS, hudang isukna kalayan hutang $ 6000, atanapi bahkan $ 50000.

Pangajaran Mesin Industri: 10 Prinsip Desain

Tangtu, kasus ieu ekstrim, tapi pohara signifikan. Lamun nyimpen Kapercayaan anjeun atanapi data sejenna diperlukeun pikeun konfigurasi jero kode, anjeun nyieun kasalahan, sarta Jigana teu perlu ngajelaskeun naha.

Alternatif pikeun ieu nyaéta nyimpen konfigurasi dina variabel lingkungan. Anjeun tiasa maca langkung seueur ngeunaan variabel lingkungan di dieu.

Conto data anu biasana disimpen dina variabel lingkungan:

  • Ngaran domain
  • URL API / URI urang
  • Konci umum jeung swasta
  • Kontak (mail, telepon, jsb.)

Ku cara ieu anjeun henteu kedah terus-terusan ngarobih kode upami variabel konfigurasi anjeun robih. Ieu bakal ngabantosan anjeun ngahémat waktos, usaha sareng artos.

Contona, upami anjeun nganggo API Kaggle pikeun ngalaksanakeun tés (contona, unduh parangkat lunak sareng jalankeun modél éta pikeun nguji nalika ngajalankeun modél éta tiasa dianggo saé), teras konci pribadi tina Kaggle, sapertos KAGGLE_USERNAME sareng KAGGLE_KEY, kedahna disimpen dina variabel lingkungan.

Prinsip 4: Jasa Pihak Katilu

Gagasan di dieu nyaéta nyiptakeun program ku cara anu henteu aya bédana antara sumber lokal sareng pihak katilu dina hal kode. Salaku conto, anjeun tiasa nyambungkeun MySQL lokal sareng pihak katilu. Sami lumaku pikeun sagala rupa API kayaning Google Maps atawa Twitter API.

Pikeun nganonaktipkeun jasa pihak katilu atanapi nyambungkeun anu sanés, anjeun ngan ukur kedah ngarobih konci dina konfigurasi dina variabel lingkungan, anu kuring nyarioskeun dina paragraf di luhur.

Ku kituna, contona, tinimbang nangtukeun jalur ka file kalawan datasets di jero kode unggal waktu, eta leuwih hade migunakeun perpustakaan pathlib sarta nyatakeun jalur ka datasets di config.py, ku kituna euweuh urusan naon jasa anjeun ngagunakeun (pikeun Contona, CircleCI), program éta bisa manggihan jalur ka datasets nyokot kana akun struktur sistem file anyar dina layanan anyar.

Prinsip 5. Ngawangun, ngaleupaskeun, runtime

Seueur jalma dina Data Science mendakan mangpaat pikeun ningkatkeun kamampuan nyerat parangkat lunak. Upami urang hoyong program urang jarang-jarang mungkin sareng tiasa dianggo tanpa gagal salami mungkin, urang kedah ngabagi prosés ngaleupaskeun versi énggal kana 3 tahap:

  1. Panggung majelis. Anjeun transformasi kode bulistir anjeun kalawan sumberdaya individu kana disebut pakét nu ngandung sakabéh kode perlu jeung data. pakét ieu disebut assembly.
  2. Panggung ngabebaskeun - di dieu urang sambungkeun config urang ka assembly, tanpa nu urang moal bisa ngaleupaskeun program urang. Ayeuna ieu mangrupikeun pelepasan anu siap-siap diluncurkeun.
  3. Salajengna asalna panggung minuhan. Di dieu urang ngaleupaskeun aplikasi ku ngajalankeun prosés nu diperlukeun ti release urang.

Sistem sapertos ngaleupaskeun vérsi énggal tina modél atanapi sadayana pipa ngamungkinkeun anjeun pikeun misahkeun peran antara pangurus sareng pamekar, ngamungkinkeun anjeun ngalacak versi sareng nyegah lirén program anu teu dihoyongkeun.

Pikeun tugas release, geus dijieun loba jasa béda nu bisa nulis prosés ngajalankeun diri dina file .yml (Contona, dina CircleCI ieu config.yml ngarojong prosés sorangan). Wheely hébat dina nyiptakeun bungkusan pikeun proyék-proyék.

Anjeun tiasa nyiptakeun pakét sareng vérsi anu béda tina modél pembelajaran mesin anjeun, teras ngarangkep sareng ngarujuk kana bungkusan anu diperyogikeun sareng versina pikeun ngagunakeun fungsi anu anjeun tulis ti dinya. Ieu bakal ngabantosan anjeun nyiptakeun API pikeun modél anjeun, sareng pakét anjeun tiasa di-host dina Gemfury, contona.

Prinsip 6. Jalankeun modél anjeun salaku hiji atanapi langkung prosés

Leuwih ti éta, prosés teu kudu dibagi data. Nyaéta, prosés kedah aya nyalira, sareng sadaya jinis data kedah aya nyalira, contona, dina jasa pihak katilu sapertos MySQL atanapi anu sanésna, gumantung kana naon anu anjeun peryogikeun.

Hartina, éta pasti teu patut nyimpen data di jero sistem file prosés, disebutkeun ieu bisa ngakibatkeun clearing data ieu salila release salajengna / robah tina konfigurasi atawa mindahkeun tina sistem nu program dijalankeun.

Tapi aya pengecualian: pikeun proyék pembelajaran mesin, anjeun tiasa nyimpen cache perpustakaan supados henteu dipasang deui unggal waktos anjeun ngaluncurkeun vérsi énggal, upami teu aya perpustakaan tambahan atanapi parobihan anu dilakukeun pikeun versina. Ku cara ieu, anjeun bakal ngirangan waktos anu diperyogikeun pikeun ngaluncurkeun modél anjeun di industri.

Pikeun ngajalankeun model sakumaha sababaraha prosés, Anjeun bisa nyieun file .yml nu Anjeun nangtukeun prosés perlu jeung runtuyan maranéhanana.

Prinsip 7: Daur Ulang

Prosés anu dijalankeun dina aplikasi modél anjeun kedah gampang pikeun ngamimitian sareng ngeureunkeun. Ku kituna, ieu bakal ngidinan Anjeun pikeun gancang nyebarkeun parobahan kode, parobahan konfigurasi, gancang sarta flexibly skala, sarta nyegah mungkin breakdowns tina versi gawé.

Nyaéta, prosés anjeun sareng modél kedah:

  • Ngaleutikan waktos ngamimitian. Ideally, waktos ngamimitian (ti momen paréntah ngamimitian ieu dikaluarkeun pikeun momen prosés asalna kana operasi) teu kudu leuwih ti sababaraha detik. Caching perpustakaan, anu dijelaskeun di luhur, mangrupikeun téknik pikeun ngirangan waktos ngamimitian.
  • Tungtung bener. Nyaéta, ngadengekeun dina port jasa sabenerna ditunda, sarta requests anyar dikintunkeun ka port ieu moal diolah. Di dieu anjeun kedah nyetél komunikasi anu saé sareng insinyur DevOps, atanapi ngartos kumaha jalanna nyalira (preferably, tangtosna, anu terakhir, tapi komunikasi kedah salawasna dijaga, dina proyék naon waé!)

Prinsip 8: Panyebaran Kontinyu/Integrasi

Seueur perusahaan nganggo pamisahan antara pamekaran aplikasi sareng tim panyebaran (ngajantenkeun aplikasi sayogi pikeun pangguna akhir). Ieu tiasa pisan ngalambatkeun pamekaran parangkat lunak sareng kamajuan dina ningkatkeunana. Éta ogé ngarusak budaya DevOps, dimana pamekaran sareng integrasi, kasarna diomongkeun, digabungkeun.

Ku alatan éta, prinsip ieu nyatakeun yén lingkungan pamekaran anjeun kedah sacaket mungkin sareng lingkungan produksi anjeun.

Ieu bakal ngidinan:

  1. Ngurangan waktu pelepasan ku puluhan kali
  2. Ngurangan jumlah kasalahan alatan incompatibility kode.
  3. Ieu ogé ngirangan beban kerja pikeun staf, sabab pamekar sareng jalma anu nyebarkeun aplikasi ayeuna janten hiji tim.

Alat anu ngamungkinkeun anjeun damel sareng ieu nyaéta CircleCI, Travis CI, GitLab CI sareng anu sanésna.

Anjeun tiasa gancang nyieun tambahan kana model, ngamutahirkeun eta, sarta ngajalankeun eta langsung, bari eta bakal gampang, bisi gagal, balik pisan gancang ka versi gawé, ku kituna pamaké tungtung malah teu aya bewara eta. Ieu bisa dipigawé utamana gampang jeung gancang mun anjeun boga tés alus.

Ngaleutikan bédana!!!

Prinsip 9. log Anjeun

Log (atanapi "Log") mangrupikeun kajadian, biasana dirékam dina format téks, anu lumangsung dina aplikasi (aliran acara). Conto basajan: "2020-02-02 - tingkat sistem - ngaran prosés." Éta dirancang supados pamekar sacara harfiah tiasa ningali naon anu lumangsung nalika programna dijalankeun. Anjeunna ningali kamajuan prosés sareng ngartos naha éta sakumaha anu dimaksud ku pamekar sorangan.

Prinsip ieu nyatakeun yén anjeun henteu kedah nyimpen log anjeun di jero sistem file anjeun - anjeun kedah "ngaluarkeun" kana layar, contona, ngalakukeun ieu dina kaluaran standar sistem. Sareng ku cara ieu bakal tiasa ngawas aliran dina terminal nalika pangwangunan.

Naha ieu hartosna teu kedah nyimpen log sadayana? Nya kantenan henteu. Aplikasi anjeun henteu kedah ngalakukeun ieu - serahkeun ka jasa pihak katilu. Aplikasi anjeun ngan ukur tiasa neraskeun log ka file atanapi terminal khusus pikeun ditingali sacara real-time, atanapi diteruskeun ka sistem panyimpenan data tujuan umum (sapertos Hadoop). Aplikasi anjeun sorangan henteu kedah nyimpen atanapi berinteraksi sareng log.

Prinsip 10. Uji!

Pikeun pembelajaran mesin industri, fase ieu penting pisan, sabab anjeun kedah ngartos yén modél tiasa dianggo leres sareng ngahasilkeun naon anu anjeun pikahoyong.

Tés bisa dijieun maké pytest, sarta diuji maké dataset leutik lamun boga regression / tugas klasifikasi.

Tong hilap netepkeun bibit anu sami pikeun modél pangajaran jero supados henteu terus-terusan ngahasilkeun hasil anu béda.

Ieu mangrupikeun pedaran ringkes ngeunaan 10 prinsip, sareng, tangtosna, sesah ngagunakeunana tanpa nyobian sareng ningali kumaha jalanna, janten tulisan ieu ngan ukur prolog kana séri tulisan anu pikaresepeun anu kuring bakal ngungkabkeun kumaha cara nyiptakeun. model pembelajaran mesin industri, kumaha ngahijikeun kana sistem, sareng kumaha prinsip ieu tiasa ngagampangkeun kahirupan urang sadayana.

Kuring ogé bakal nyobian nganggo prinsip anu saé anu tiasa di tinggalkeun ku saha waé dina koméntar upami aranjeunna hoyong.

sumber: www.habr.com

Tambahkeun komentar