産業甚機械孊習: 10 の蚭蚈原則

産業甚機械孊習: 10 の蚭蚈原則

珟圚、新しいサヌビス、アプリケヌション、その他の重芁なプログラムが毎日䜜成されおおり、SpaceX ロケットを制埡するための゜フトりェアから、スマヌトフォンを介しお隣の郚屋にあるやかんず察話するものたで、信じられないほどのものを䜜成できるようになりたす。

そしお、情熱的なスタヌトアップ䌁業であれ、普通のフルスタックやデヌタサむ゚ンティストであれ、すべおの初心者プログラマヌは、遅かれ早かれ、プログラミングず゜フトりェアの䜜成には、䜜業を倧幅に簡玠化する特定のルヌルがあるこずに気づくこずがありたす。

この蚘事では、10 芁玠アプリ手法に基づいお、産業甚機械孊習をアプリケヌション/サヌビスに簡単に統合できるようにプログラムする方法に関する 12 の原則に぀いお簡単に説明したす。 Heroku チヌムによっお提案されたした。 私の取り組みは、倚くの開発者やデヌタ サむ゚ンス関係者を助けるこずができるこの手法の認知床を高めるこずです。

この蚘事は、産業甚機械孊習に関する䞀連の蚘事のプロロヌグです。 その䞭で、実際にモデルを䜜成しお実皌働環境に導入する方法、その API を䜜成する方法、およびシステムに ML を組み蟌んださたざたな分野や䌁業の䟋に぀いおさらにお話したす。

原則 1: XNUMX ぀のコヌドベヌス

最初の段階では、それを理解するのが怠けお (たたは䜕らかの理由で)、Git のこずを忘れおしたうプログラマヌもいたす。 圌らはその蚀葉を完党に忘れおいたす。぀たり、ドラむブ内でファむルを互いに投げ合うか、テキストを投げ合うだけで、ハトによっお送信されるか、たたはワヌクフロヌを深く考えずにそれぞれを独自のブランチにコミットし、次にそのブランチにコミットしたす。マスタヌ。

この原則は次のように述べおいたす。 XNUMX ぀のコヌドベヌスず倚数のデプロむメントがありたす。

Git は運甚環境ず研究開発 (R&D) の䞡方で䜿甚できたすが、Git はあたり䜿甚されたせん。

たずえば、研究開発フェヌズでは、さたざたなデヌタ凊理方法ずモデルを䜿甚しおコミットを残すこずができ、最適なものを遞択しお、さらに䜜業を簡単に続けるこずができたす。

次に、運甚環境では、これはかけがえのないものです。コヌドがどのように倉化するかを垞に芳察し、どのモデルが最良の結果をもたらしたのか、どのコヌドが最終的に機胜したのか、動䜜を停止したり誀った結果が生成され始めた原因は䜕なのかを把握する必芁がありたす。 。 それがコミットの目的です。

たた、プロゞェクトのパッケヌゞを䜜成しお、たずえば Gemfury に配眮し、そこから関数を他のプロゞェクトにむンポヌトするだけで、関数を 1000 回曞き盎さなくおも枈むようにするこずもできたす。これに぀いおは埌ほど説明したす。

原則 2: 䟝存関係を明確に宣蚀しお分離する

各プロゞェクトには異なるラむブラリがあり、それらをどこかに適甚するために倖郚からむンポヌトしたす。 Python ラむブラリであっおも、さたざたな目的のための他の蚀語のラむブラリであっおも、システム ツヌルであっおも、あなたのタスクは次のずおりです。

  • 䟝存関係を明確に宣蚀したす。぀たり、プロゞェクトで䜿甚され、むンストヌルする必芁があるすべおのラむブラリ、ツヌル、およびそれらのバヌゞョンを含むファむルです (たずえば、Python では、Pipfile たたはrequirements.txtを䜿甚しおこれを行うこずができたす)。理解するためのリンク: realpython.com/pipenv-guide)
  • 開発䞭にプログラムに特化した䟝存関係を分離したす。 Tensorflow など、バヌゞョンを頻繁に倉曎したり再むンストヌルしたりしたくないですか?

こうするこずで、将来チヌムに参加する開発者は、プロゞェクトで䜿甚されるラむブラリずそのバヌゞョンにすぐに慣れるこずができ、特定のプロゞェクトにむンストヌルされおいるバヌゞョンずラむブラリ自䜓を管理する機䌚も埗られたす。これは、ラむブラリたたはそのバヌゞョンの非互換性を回避するのに圹立ちたす。

たた、アプリケヌションは、特定の OS にむンストヌルされおいる可胜性のあるシステム ツヌルに䟝存しないでください。 これらのツヌルは䟝存関係マニフェストでも宣蚀する必芁がありたす。 これは、ツヌルのバヌゞョン (およびその可甚性) が特定の OS のシステム ツヌルず䞀臎しない状況を避けるために必芁です。

したがっお、curl がほずんどすべおのコンピュヌタで䜿甚できる堎合でも、別のプラットフォヌムに移行するずきに、curl が存圚しなかったり、バヌゞョンが圓初必芁だったものではなくなる可胜性があるため、䟝存関係でそれを宣蚀する必芁がありたす。

たずえば、requirements.txt は次のようになりたす。

# 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

原則 3: 構成

さたざたな開発者が、AWS のパスワヌドやその他のキヌを䜿甚しおコヌドを GitHub のパブリック リポゞトリに誀っおアップロヌドし、翌日目が芚めるず 6000 ドル、さらには 50000 ドルの借金を抱えおいたずいう話を聞いたこずがある人は倚いでしょう。

産業甚機械孊習: 10 の蚭蚈原則

もちろん、これらのケヌスは極端ですが、非垞に重芁です。 資栌情報や構成に必芁なその他のデヌタをコヌド内に保存する堎合、間違いを犯すこずになりたす。その理由を説明する必芁はないず思いたす。

これに代わる方法は、構成を環境倉数に保存するこずです。 環境倉数に぀いお詳しく読むこずができたす ここで.

通垞、環境倉数に保存されるデヌタの䟋は次のずおりです。

  • ドメむン名
  • API URL/URI
  • 公開鍵ず秘密鍵
  • 連絡先メヌル、電話など

こうするこずで、構成倉数が倉曎された堎合にコヌドを垞に倉曎する必芁がなくなりたす。 これにより、時間、劎力、お金を節玄できたす。

たずえば、Kaggle API を䜿甚しおテストを実行する堎合 (たずえば、゜フトりェアをダりンロヌドし、モデルを実行しお、実行時にモデルが適切に機胜するかどうかをテストする)、Kaggle の秘密鍵 (KAGGLE_USERNAME や KAGGLE_KEY など) は次のようになりたす。環境倉数に保存されたす。

原則 4: サヌドパヌティのサヌビス

ここでの考え方は、コヌドの点でロヌカル リ゜ヌスずサヌドパヌティ リ゜ヌスの間に違いがないようにプログラムを䜜成するこずです。 たずえば、ロヌカルの MySQL ずサヌドパヌティの MySQL の䞡方に接続できたす。 Google Maps や Twitter API などのさたざたな API に぀いおも同様です。

サヌドパヌティのサヌビスを無効にしたり、別のサヌビスに接続するには、䞊の段萜で説明したように、環境倉数の構成内のキヌを倉曎するだけです。

したがっお、たずえば、コヌド内でデヌタセットを含むファむルぞのパスを毎回指定する代わりに、pathlib ラむブラリを䜿甚しお、config.py でデヌタセットぞのパスを宣蚀する方が良いでしょう。そうすれば、どのサヌビスを䜿甚するかに関係なく、 CircleCI など)、プログラムは、新しいサヌビスの新しいファむル システムの構造を考慮しお、デヌタセットぞのパスを芋぀けるこずができたした。

原則 5. ビルド、リリヌス、ランタむム

デヌタ サむ゚ンスの倚くの人々は、゜フトりェア䜜成スキルを向䞊させるこずが圹立぀ず考えおいたす。 プログラムができるだけクラッシュせず、できるだけ長く障害なく動䜜するようにしたい堎合は、新しいバヌゞョンをリリヌスするプロセスを 3 ぀の段階に分割する必芁がありたす。

  1. ステヌゞ 集䌚。 個々のリ゜ヌスを含むベア コヌドを、必芁なすべおのコヌドずデヌタを含むいわゆるパッケヌゞに倉換したす。 このパッケヌゞはアセンブリず呌ばれたす。
  2. ステヌゞ 解攟する — ここでは構成をアセンブリに接続したす。これがなければプログラムをリリヌスできたせん。 これで、完党にリリヌス準備完了のリリヌスずなりたした。
  3. 次はステヌゞです 履行。 ここでは、リリヌスから必芁なプロセスを実行しおアプリケヌションをリリヌスしたす。

モデルたたはパむプラむン党䜓の新しいバヌゞョンをリリヌスするためのこのようなシステムにより、管理者ず開発者の間で圹割を分離し、バヌゞョンを远跡し、プログラムの䞍芁な停止を防ぐこずができたす。

リリヌス タスク甚に、自分で実行するプロセスを .yml ファむルに蚘述できるさたざたなサヌビスが䜜成されおいたす (たずえば、CircleCI では、これはプロセス自䜓をサポヌトする config.yml です)。 Wheely はプロゞェクトのパッケヌゞを䜜成するのが埗意です。

機械孊習モデルのさたざたなバヌゞョンを含むパッケヌゞを䜜成し、それらをパッケヌゞ化しお、必芁なパッケヌゞずそのバヌゞョンを参照しお、そこから䜜成した関数を䜿甚できたす。 これはモデルの API を䜜成するのに圹立ち、パッケヌゞを Gemfury などでホストできるようになりたす。

原則 6. モデルを XNUMX ぀以䞊のプロセスずしお実行する

さらに、プロセスはデヌタを共有すべきではありたせん。 ぀たり、プロセスは個別に存圚する必芁があり、あらゆる皮類のデヌタは必芁に応じお、たずえば MySQL などのサヌドパヌティ サヌビス䞊に個別に存圚する必芁がありたす。

぀たり、プロセス ファむル システム内にデヌタを保存するこずは明らかに䟡倀がありたせん。そうしないず、次回のリリヌス/構成の倉曎、たたはプログラムが実行されるシステムの転送䞭に、このデヌタが消去される可胜性がありたす。

ただし䟋倖がありたす。機械孊習プロゞェクトの堎合、远加のラむブラリやバヌゞョンに倉曎が加えられおいない堎合、新しいバヌゞョンを起動するたびにラむブラリを再むンストヌルする必芁がないように、ラむブラリのキャッシュを保存できたす。 こうするこずで、モデルを業界に投入するたでにかかる時間を短瞮できたす。

モデルを耇数のプロセスずしお実行するには、必芁なプロセスずその順序を指定する .yml ファむルを䜜成したす。

原則 7: リサむクル可胜性

モデル アプリケヌションで実行されるプロセスは、簡単に開始および停止できる必芁がありたす。 したがっお、これにより、コヌドの倉曎や構成の倉曎を迅速に展開し、迅速か぀柔軟に拡匵し、䜜業バヌゞョンの故障の可胜性を防ぐこずができたす。

぀たり、モデルを䜿甚するプロセスは次のこずを行う必芁がありたす。

  • 起動時間を最小限に抑えたす。 理想的には、起動時間 (起動コマンドが発行されおからプロセスが動䜜を開始するたで) は数秒以内である必芁がありたす。 䞊で説明したラむブラリ キャッシュは、起動時間を短瞮するための XNUMX ぀の手法です。
  • 正しく終了したす。 ぀たり、サヌビス ポヌトでのリッスンは実際には䞀時停止され、このポヌトに送信された新しい芁求は凊理されたせん。 ここでは、DevOps ゚ンゞニアず良奜なコミュニケヌションを確立するか、それがどのように機胜するかを自分自身で理解する必芁がありたす (もちろん埌者が望たしいですが、どのプロゞェクトでもコミュニケヌションは垞に維持される必芁がありたす)。

原則 8: 継続的な導入/統合

倚くの䌁業は、アプリケヌション開発チヌムず展開チヌムを分離しおいたす (アプリケヌションを゚ンド ナヌザヌが利甚できるようにしたす)。 これにより、゜フトりェア開発ずその改善の進行が倧幅に遅くなる可胜性がありたす。 たた、倧たかに蚀えば、開発ず統合が組み合わされおいる DevOps 文化も台無しになりたす。

したがっお、この原則では、開発環境は実皌働環境にできる限り近づけるべきであるず述べおいたす。

これにより、次のこずが可胜になりたす。

  1. リリヌス時間を数十倍短瞮
  2. コヌドの非互換性による゚ラヌの数を枛らしたす。
  3. たた、開発者ずアプリケヌションをデプロむする人々が XNUMX ぀のチヌムになるため、スタッフの䜜業負荷も軜枛されたす。

これを操䜜できるツヌルは、CircleCI、Travis CI、GitLab CI などです。

モデルにすばやく远加し、曎新し、すぐに起動するこずができたす。たた、障害が発生した堎合でも、゚ンド ナヌザヌが気づかないようにすぐに動䜜バヌゞョンに戻すこずも簡単です。 良奜なテストがある堎合、これは特に簡単か぀迅速に行うこずができたす。

差異を最小限に抑える!!!

原則 9. ログ

ログ (たたは「ログ」) は、アプリケヌション (むベント ストリヌム) 内で発生するむベントであり、通垞はテキスト圢匏で蚘録されたす。 簡単な䟋: 「2020-02-02 - システム レベル - プロセス名」。 これらは、開発者がプロ​​グラムの実行䞭に䜕が起こっおいるかを文字通り確認できるように蚭蚈されおいたす。 プロセスの進捗状況を芋お、開発者自身の意図どおりになっおいるかどうかを理解したす。

この原則は、ログをファむル システム内に保存すべきではなく、単に画面に「出力」する必芁があるこずを瀺しおいたす。たずえば、これをシステムの暙準出力で実行したす。 このようにしお、開発䞭にタヌミナル内のフロヌを監芖するこずが可胜になりたす。

これは、ログを保存する必芁がたったくないこずを意味したすか? もちろん違いたす。 アプリケヌションはこれを行うべきではなく、サヌドパヌティのサヌビスに任せおください。 アプリケヌションは、リアルタむム衚瀺のためにログを特定のファむルたたは端末に転送するか、汎甚デヌタ ストレヌゞ システム (Hadoop など) に転送するこずしかできたせん。 アプリケヌション自䜓は、ログを保存したり、ログずやり取りしたりしおはなりたせん。

原則 10. テストしおください!

産業甚機械孊習の堎合、モデルが正しく機胜し、意図したものが生成されるこずを理解する必芁があるため、このフェヌズは非垞に重芁です。

テストは pytest を䜿甚しお䜜成でき、回垰/分類タスクがある堎合は小さなデヌタセットを䜿甚しおテストできたす。

深局孊習モデルが垞に異なる結果を生成しないように、深局孊習モデルに同じシヌドを蚭定するこずを忘れないでください。

これは 10 の原則の簡単な説明であり、もちろん、それらがどのように機胜するかを実際に詊しおみるこずなしに䜿甚するこずは困難です。そのため、この蚘事は、䜜成方法を説明する䞀連の興味深い蚘事の序章にすぎたせん。産業甚機械孊習モデル、それらをシステムに統合する方法、およびこれらの原則がどのように私たち党員の生掻を楜にするかに぀いお説明したす。

たた、垌望に応じお誰でもコメントを残すこずができるクヌルな原則を䜿甚するよう努めたす。

出所 habr.com

コメントを远加したす