第4章. 効果的な依存マネジメントの実践
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
前の章では、効果的な依存関係管理の原則(4つの原則を思い出せるだろうか)と、それをサポートするツールについて説明した。この章では、それらを楽しみながら実践してみよう。
この章では、次のことを学ぶ:
-
チェックアウト&ゴー」の実際とは?
-
Docker、batect、Poetryを使用して、MLのデリバリーライフサイクルの各ステップにおいて、一貫性があり、再現性があり、本番に近い実行環境を作成する方法。
-
依存関係のセキュリティ脆弱性を自動的に検出し、依存関係のアップデートを自動化する方法
この章のテクニックは、MLコードのための再現可能で、一貫性があり、分離された、本番のような実行環境を作成するために、実際のプロジェクトで使っているものである。これらのテクニックは、効果的かつ安全に依存関係を管理し、依存性地獄を避けるのに役立つ。
始めよう!
文脈の中でML開発ワークフロー
このセクションでは、"check out and go "を実際に見ることができる。コード・エクササイズでは、ローン不履行の可能性を予測するモデルをトレーニングし、提供することを目標に、以下のステップを実行する:
-
goスクリプトを実行して、ホストマシンに前提条件の依存関係をインストールする。
-
Docker化されたローカル開発環境を作成する。
-
プロジェクトのバーチャル環境を理解するようにコード・エディターを設定し、コーディング・アシスタントを使えるようにする。
-
ML開発ライフサイクルにおける一般的なタスクを実行する(モデルのトレーニング、テストを実行する、APIを開始するなど)。
-
クラウド上でモデルをトレーニングし、デプロイする。
この章を最大限に活用するために、フォークしてクローンし、ハンズオン・エクササイズ(ローンの貸し倒れの可能性を予測する分類器の訓練とテスト)に沿ってコードを書いてみよう。リポジトリをフォークすることをお勧めする。フォークしたリポジトリの GitHub Actions CI パイプラインで Docker と batect が作業しているのを、変更をコミットしてプッシュするときに見ることができるからだ。
コードを説明する前に、典型的なMLワークフローで何をコンテナ化しているかを明確に描いておこう。
何をコンテナ化するかを見極める
プロジェクトをDocker化する最初の、そして最も重要なステップは、何をコンテナ化しているのかを明確にすることだ。これは一部のML実践者を混乱させ、混同された共有状態を引き起こす可能性がある。例えば、MLモデルの開発とMLモデルの提供という2つの異なるタスクの間でイメージを共有すると、本番コンテナ(例えばモデルのWeb API)の中に不必要な開発依存関係(例えばJupyterやPylint)が発見されるかもしれない。これはコンテナのビルドと起動時間を不必要に長くし、APIの攻撃対象領域を拡大する。
ソフトウェア開発において、コンテナ化する最も一般的なものは、ウェブアプリケーションやウェブAPIである。これは、コマンド(例えば、python manage.py runserver )を実行した後に開始される、単に寿命の長いプロセスである。MLでは、API経由でモデルの予測(推論)を提供するために、コンテナ化されたWebアプリケーションを使うこともできる。しかし、我々は通常、単なるウェブ・アプリケーション以上のものを実行していることを発見する。例えば、MLソリューションを作成する際に実行する一般的なMLタスクやプロセスを以下に示す: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access