機械学習の開発を試みた人は誰でも、それがいかに難しいかを理解しています。 ソフトウェア開発における標準的な問題とは別に、機械学習(ML)開発は、多くの追加の障害をもたらします。
データの準備からモデルのトレーニングまで、MLライフサイクルのすべての段階を支援するために何百ものオープンソースツールが利用可能です。
従来のソフトウェア開発とは異なり、チームがステップごとにXNUMXつのツールを選択する場合、MLを使用すると、通常、使用可能なすべてのツール(アルゴリズムなど)を調べて、結果が改善されるかどうかを確認します。
その結果、ML開発者は何百ものライブラリを使用および作成する必要があります。
機械学習アルゴリズムには何千ものカスタマイズ可能なパラメーターが含まれており、単独で作業する場合でもチームで作業する場合でも、モデルを生成するために各実験に使用されたパラメーター、コード、データを特定することは困難です。
適切な監視がないと、チームは同じコードを再び機能させるのに苦労することがよくあります。 データサイエンティストが本番環境で使用するためにトレーニングコードをエンジニアに転送する場合でも、前の作業に戻って問題を診断する場合でも、MLワークフローのステップを撤回することが重要です。
使用する必要のあるデプロイメント方法と環境が多数あるため(RESTサービング、バッチ推論、モバイルアプリなど)、モデルを本番環境に移行するのは難しい場合があります。 モデルをライブラリからこれらのツールに移動するための一般的な方法はありません。したがって、新しい展開のたびにリスクが発生します。
これらの問題があるため、従来のソフトウェア開発と同じように安定し、予測可能で、広く使用されるようになるには、ML開発を大幅に改善する必要があることは明らかです。
MLの課題
- 多種多様なツールがたくさんあります。 データの準備からモデルのトレーニングまで、機械学習のライフサイクルのすべての段階を支援するために、何百ものソフトウェアソリューションが利用可能です。 さらに、従来のソフトウェア開発とは異なり、チームが各ステップにXNUMXつのツールを選択する場合、機械学習(ML)では、利用可能なすべてのツール(アルゴリズムなど)を調べて、結果が改善されるかどうかを確認することがよくあります。 その結果、ML開発者は何百ものライブラリを使用および作成する必要があります。
- 実験を追跡することは困難です。 機械学習アルゴリズムには何千ものカスタマイズ可能なパラメーターが含まれており、単独で作業する場合でもチームで作業する場合でも、モデルを生成するために各実験に使用されたパラメーター、コード、データを特定することは困難です。
- 機械学習を実装することは困難です。 使用する必要のあるデプロイメント方法と環境が多数あるため(RESTサービング、バッチ推論、モバイルアプリなど)、モデルを本番環境に移行するのは難しい場合があります。 ライブラリからこれらのツールにモデルを移動するための一般的な方法はありません。 したがって、新しい展開ごとにリスクが発生します。
何ですか MLフロー?
MLflowは、機械学習のライフサイクルのためのオープンソースプラットフォームです。 これはオープンインターフェースの概念に基づいており、現在のインフラストラクチャと機械学習アルゴリズムをシステムと容易に統合できるようにする多くの重要な抽象化を提案しています。
これは、MLflowを使用したいが、サポートされていないフレームワークを使用している開発者の場合、オープンインターフェイス設計により、そのフレームワークを統合してプラットフォームでの作業を開始するのが比較的簡単になることを意味します。 実際には、これはMLflowが任意の機能で機能することを目的としていることを意味します 機械学習 ライブラリまたは言語。
さらに、MLflowは再現性を促進します。つまり、同じトレーニングまたは本番機械学習コードは、クラウド、ローカルワークステーション、ノートブックのいずれであっても、環境に関係なく同じ結果で実行されることを目的としています。
最後に、MLflowはスケーラビリティを重視して構築されているため、データサイエンティストの小さなチームだけでなく、数百人の機械学習の実践者がいる大企業でも使用できます。
MLflowは、あらゆる機械学習ライブラリ、アルゴリズム、デプロイツール、または言語と互換性があります。 また、次の利点もあります。
- あらゆるクラウドサービスで動作するように設計されています。
- ApacheSparkを使用して巨大なデータにスケーリングします。
- MLflowは、ApacheSparkを含むさまざまなオープンソースの機械学習フレームワークと互換性があります。 TensorFlow, SciKit 学習.
すでにコードがある場合は、MLflowを使用できます。 フレームワークとモデルを企業間で共有することもできます。 オープンソースの.
MLflowコンポーネント:どのように機能しますか?
MLflowは、MLライフサイクルを管理するための無料のオープンソースプラットフォームであり、実験、再現性、デプロイ、単一のモデルレジストリが含まれます。 現在、MLflowにはXNUMXつのコンポーネントがあります。
1. MLflowトラッキング
MLflowトラッキングから始めます。 MLflowは、一元化されたトレーニングメタデータ追跡リポジトリにリンクされたさまざまな重要な概念のコレクションをサポートします。 最初の概念は、モデルのパフォーマンスに影響を与える重要なハイパーパラメーターまたは構成ノブのコレクションです。 MLflowのAPIと一元化された追跡サービスを使用すると、これらすべてを保持できる場合があります。
ユーザーは、パフォーマンスデータを記録して、機械学習モデルの成功についての洞察を得ることができます。 さらに、再現性のために、MLflowでは、Gitと緊密に統合してすべてのモデルを特定のコミットハッシュに結び付けることにより、モデルの作成に使用された特定のソースコードとそのバージョンをログに記録できます。
MLflowを使用して、アーティファクトをログに記録できます。アーティファクトは、トレーニング、テストデータ、再現性のあるモデル自体など、任意のファイルです。
つまり、私がモデルをトレーニングしたばかりの開発者であれば、それを集中追跡サービスに永続化でき、同僚のXNUMX人が後でそれをロードして、特定のニーズを満たすためにそのモデルのトレーニングと実験または作成を続けることができます。 。
機械学習コードを実行し、後で結果を表示する場合、トラッキングは、パラメーター、コードバージョン、メトリック、および出力ファイルをログに記録できるようにするAPIです。 Python、R、Javaなどの言語で書かれています。 また、REST APIとしてもアクセスでき、その上にアプリを構築するために使用できます。
主な機能
- 多くの開発者は、バックエンドとアーティファクトストレージがディスク上のディレクトリを共有するローカルPCでMLflowを使用しています。
- 多くのユーザーは、SQLAlchemy互換データベースであるSQLiteを使用して、ローカルPCでMLflowを実行しています。
- MLflowは、分散アーキテクチャもサポートしています。 追跡サーバー、バックエンドストア、およびアーティファクトストアはすべて、これらの異なるサーバーでホストされます。
- 実行がMLflowプロジェクトによって開始された場合、gitcommitハッシュが利用されました。 MLflow Python、R、Java、およびREST APIを使用して、実行するデータをログに記録できます。
詳細については、公式をチェックすることができます ドキュメント.
2. MLFlowプロジェクト
追跡コンポーネントについて説明した後、MLflowプロジェクトについて説明します。これは、実行コンテキストに関係なく、モデルトレーニングセッションの繰り返し可能なパッケージ構造です。
企業は幅広い機械学習トレーニングテクノロジーを使用していますが、さまざまなコンテキストでこれらのトレーニングツールも使用しています。 たとえば、クラウド、ローカルPC、またはノートブックでトレーニングコードを実行している可能性があります。
これは、機械学習の結果を再現するのが難しいという問題につながります。 多くの場合、同じ同じトレーニングコードは、XNUMXつの別々の場所で同じ結果を実行または生成しません。
MLflowが提供するソリューションは、すべての機械学習トレーニングコード、バージョンライブラリの依存関係、設定、トレーニングおよびテストデータを含む自己完結型のトレーニングコードプロジェクト定義です。
MLflowは、機械学習トレーニングプロセスの要件のセット全体を明確に説明することにより、実行コンテキスト全体での再現性を保証します。 これらのライブラリをすべてインストールし、コードが実行されているのと同じシステム状態を実現することで、これを実現します。
MLflowプロジェクトは、単なるディレクトリにすぎません。 これは、トレーニングコード、ライブラリ依存関係の定義、トレーニングセッションに必要なその他のデータ、およびこのオプションの構成ファイルを含むディレクトリです。
これらのライブラリ要件は、さまざまな方法で定義できます。 たとえば、ユーザーはYAML形式のanaconda環境仕様を提供して、トレーニングコードライブラリの要件を一覧表示できます。 MLflowは、コンテナ内でトレーニングコードを実行します。 このような場合、Dockerコンテナを含めることもできます。
最後に、MLflowには、これらのプロジェクト、Python、およびJava APIを実行するためのコマンドラインインターフェイス(CLI)があります。 これらのプロジェクトは、ユーザーのローカルシステムだけでなく、DatabricksジョブスケジューラやKubernetesなどのさまざまなリモート設定でも実行できます。 MLflowプロジェクトを使用すると、主に標準に基づいて、繰り返し可能で再利用可能な方法でデータサイエンスコードをパッケージ化できます。
プロジェクトコンポーネントには、プロジェクトを管理するためのAPIとコマンドラインユーティリティが含まれています。 これらの機能により、プロジェクトを連鎖させて機械学習プロセスを形成できることが保証されます。
主な機能
- MLflowは、Dockerコンテナ環境、Conda環境、システム環境などのプロジェクト環境をサポートします。
- あらゆる Git リポジトリまたはローカル ディレクトリを MLflow プロジェクトと見なすことができます。 デフォルトでは; 任意のシェルを使用することも、 Pythonスクリプト プロジェクトのエントリ ポイントとしてディレクトリに追加します。
- JavaライブラリなどのPython以外の依存関係は、Dockerコンテナを使用してキャプチャできます。
- YAML構文のテキストファイルであるプロジェクトファイルをプロジェクトのルートディレクトリに追加することで、MLflowプロジェクトをより細かく制御できます。
詳細については、公式をチェックすることができます ドキュメント.
3. MLflowモデル
ここで、幅広い本番環境をサポートする汎用モデル形式であるMLflowモデルについて説明します。 MLflowモデルの理由は、プロジェクトの理由とかなり似ています。
繰り返しになりますが、モデルはさまざまなツールを使用して生成できますが、トレーニング環境とは対照的に、さまざまな状況で作成または展開することもできます。
これらの設定には、KubernetesやAmazon SageMakerなどのリアルタイム配信用のツールや、Sparkなどのストリーミングおよびバッチスコアリングが含まれます。 さらに、一部の企業は、事前構成されたクラウドインスタンスで実行されるRESTfulWebサービスとしてモデルをデプロイすることを選択する場合があります。
MLflowモデルは、プロジェクトと同様に、ディレクトリ構造です。 これには、構成ファイルと、今回はトレーニングコードではなく、シリアル化されたモデルアーティファクトが含まれています。 また、プロジェクトとしての再現性のためのこの一連の依存関係も含まれています。 今回は、Conda環境のコンテキストでの評価の依存関係を調べます。
さらに、MLflowには、さまざまな一般的なフレームワークからMLflow形式でモデルをシリアル化するためのモデル生成ツールが含まれています。 最後に、MLflowは、デプロイ、MLflowモデルを生成してさまざまなサービスに接続するためのAPIを追加します。これらのAPIは、Python、Java、R、およびCLI形式でアクセスできます。
モデルは、推論サーバーや データブリック バッチ推論プラットフォーム。 このコンポーネントを使用すると、生産用にモデルをパッケージ化する際に特注のコードを何時間も節約できます。
MLflowモデルは、「フレーバー」と呼ばれるさまざまな形式の機械学習モデルをパッキングするための標準です。 MLflowは、さまざまなタイプのモデルの展開に役立つ多くのツールを提供します。 各MLflowモデルは、任意のファイルと、それが使用される可能性のあるフレーバーのリストを含むMLモデル記述子ファイルを含むディレクトリとして保持されます。
主な機能
- MLflowのすべての組み込みデプロイメントツールは、モデルをPython関数として実行する方法を説明する「Python関数」フレーバーなど、複数の「標準」フレーバーを提供します。
- 各MLflowモデルは、任意のファイルを含むディレクトリと、モデルの多数のフレーバーを定義するディレクトリのルートにあるMLモデルファイルで構成されます。
- モデルを保存するとき、MLflowではモデルの依存関係を含むConda環境パラメーターを指定できます。 Conda環境が指定されていない場合、モデルのフレーバーに基づいたデフォルト環境が構築されます。 その後、Conda環境はconda.yamlに保存されます。
詳細については、公式をチェックすることができます ドキュメント.
4. MLflowモデルレジストリ
モデルレジストリは、学習した機械学習(ML)モデルのリポジトリです。 モデルレジストリは、APIと、チームとしてさまざまなフェーズでモデルを維持するために使用されるWebベースのアプリケーションで構成されています。 モデルの系統、モデルのバージョン管理、簡単なステージ遷移、および注釈は、モデルレジストリで使用できる機能のほんの一部です。
モデルレジストリには、モデル自体に加えて、モデルの構築に使用されるデータとトレーニングタスクに関する情報(メタデータ)が含まれています。 MLモデルの系統を作成するには、これらの必要な入力を追跡することが重要です。 この点で、モデルレジストリは従来のソフトウェアと同様に機能します バージョン管理 システム(Git、SVNなど)とアーティファクトリポジトリ(Artifactory、PyPIなど)。
モデルレジストリは、データサイエンティストと機械学習エンジニアが、他のチームと協力するためにモデルを公開、テスト、監視、管理、および配布できるようにするフレームワークです。 基本的に、モデルレジストリは、テストフェーズが完了し、調査結果をチームや利害関係者と共有する準備ができたときに使用されます。
MLflowモデルレジストリは、モデルとその寿命を中央の場所から管理するためのAPIとユーザーインターフェイスを提供します。 モデルの系統、モデルのバージョン管理、注釈、およびステージ遷移はすべて、レジストリから利用できます。
MLflowでは、登録されたモデルは、一意の名前とメタデータ、モデルバージョン、移行フェーズ、およびモデル系統を持つモデルです。 登録されたモデルには、1つまたは複数のモデルバージョンがあります。 新しいモデルは、レジストリに登録されている場合、バージョンXNUMXと見なされます。 次のバージョンは、同じ名前の新しいモデルに追加されます。
いつでも任意のモデルバージョンにXNUMXつのステップを割り当てることができます。 ただし、ステージング、本番、アーカイブなど、正式に指定されたMLflowフェーズでステージを割り当てる必要があります。 モデルバージョンは、あるステージから別のステージに移行できます。
MLflowを使用すると、マークダウンを使用して、トップレベルモデルと各特定のバージョンの両方に注釈を付けることができます。 説明だけでなく、アルゴリズムの説明、方法論、使用されたデータセットなどの他の関連情報を含めることができます。
主な機能
- 独自のMLflowサーバーをホストしているときにUIまたはAPIを介してモデルレジストリにアクセスするには、データベースでバックアップされたバックエンドストアを使用する必要があります。
- モデルレジストリには、MLflowモデルフレーバーまたはMLflowクライアントトラッキングAPIインターフェイスを介してアクセスすることもできます。 たとえば、MLflow実験の実行中、またはすべての実験の実行後にモデルを登録できます。
- 誰もがMLflowを使用してモデルのトレーニングを開始するわけではありません。 その結果、MLflowを使用する前に一部のモデルをトレーニングする場合があります。 モデルを再トレーニングするのではなく、保存したモデルをモデルレジストリに登録するだけです。
詳細については、公式をチェックすることができます ドキュメント.
まとめ
MLflowは、優れた、絶えず成長しているMLライフサイクルツールです。 現在のツールやプラットフォームと一緒に使用できます。
Python、Java、Rなど、いくつかのプログラミング言語をサポートしています。ユーザーフレンドリーな設計により、さまざまなモデルバージョンをすばやく追跡、保存、比較することもできます。
MLflowを試してみて、あなたの経験を教えてください!
コメントを残す