paint-brush
MLFlow と MinIO を使用して開発マシンをセットアップする方法@minio
6,279 測定値
6,279 測定値

MLFlow と MinIO を使用して開発マシンをセットアップする方法

MinIO10m2023/11/03
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

この投稿では、開発マシン上で MLflow と MinIO をセットアップするためのわかりやすいレシピを提供します。
featured image - MLFlow と MinIO を使用して開発マシンをセットアップする方法
MinIO HackerNoon profile picture

MLflowについて

MLflow は、機械学習のライフサイクル全体を管理するために設計されたオープンソース プラットフォームです。 Databricks は、自社の機械学習の開発および展開プロセスで直面する課題に対処するための内部プロジェクトとしてこれを作成しました。 MLflow はその後、2018 年 6 月にオープンソース プロジェクトとしてリリースされました。


ライフサイクル全体を管理するツールとして、MLflow には次のコンポーネントが含まれています。


  • MLflow トラッキング- エンジニアはこの機能を最もよく使用します。これにより、実験を記録したり、クエリしたりすることができます。また、各実験のコード、データ、構成、結果も追跡します。
  • MLflow プロジェクト- コードをプラットフォームに依存しない形式にパッケージ化することで実験を再現できます。
  • MLflow モデル- 機械学習モデルを提供できる環境にデプロイします。
  • MLflow リポジトリ- 中央リポジトリでのモデルの保存、注釈、検出、管理を可能にします。


これらすべての機能を開発マシンにインストールできるため、エンジニアは運用環境のインストールを台無しにすることを心配することなく、思う存分実験できます。

MLflow のインストールとセットアップに使用されるすべてのファイルは、 Github リポジトリにあります。

インストールオプション

MLFlow のドキュメントには、 MLFlow をインストールするための 6 つ以上のオプションがリストされています。これはやりすぎのように思えるかもしれませんが、これらのオプションは、データベースのさまざまな設定やさまざまなレベルのネットワークの複雑さに対応します。


大規模なデータセットを使用し、それ自体が非常に大きくなる可能性のあるモデルを構築する複数のチームがいる組織に最適なオプションを以下に示します。このオプションでは、トラッキング サーバー、PostgreSQL データベース、S3 オブジェクト ストアの 3 つのサーバーのセットアップが必要です。実装では MinIO を使用します。


インストールオプション


Tracking Server は、エンジニアの開発マシンから MLflow 機能にアクセスするための単一のエントリ ポイントです。 (その名前に騙されないでください。これには、上記にリストしたすべてのコンポーネント (トラッキング、モデル、プロジェクト、リポジトリ) が含まれています。) トラッキング サーバーは、PostgreSQL を使用してエンティティを保存します。エンティティは、実行、パラメータ、メトリクス、タグ、メモ、メタデータです。 (詳細については後ほど説明します。) 私たちの実装における追跡サーバーは、MinIO にアクセスしてアーティファクトを保存します。アーティファクトの例としては、モデル、データセット、構成ファイルなどがあります。


最近エンジニアが利用できる最新のツールの優れている点は、コンテナを使用して、ツールの選択やネットワーク接続を含む運用環境をエミュレートできることです。それがこの投稿で説明することです。 Docker Compose を使用して、上記のサーバーをコンテナー内で実行されるサービスとしてインストールする方法を説明します。さらに、MLflow の構成は、必要に応じて MinIO の既存のインスタンスを使用できるように設定されています。この投稿では、MinIO の新しいインスタンスをデプロイする方法を説明しますが、 Github リポジトリ内のファイルには、MinIO の既存のインスタンスに接続する方法を示す `docker-compose` ファイルが含まれています。

インストールするもの

以下は、インストールする必要があるすべてのリストです。このリストには、コンテナー内のサービスとなるサーバー (MinIO、Postgres、および MLFlow) と、必要な SDK (MinIO および MLflow) が含まれています。


  1. Dockerデスクトップ

  2. Docker Compose を介した MLFlow 追跡サーバー

  3. Docker Compose 経由の MinIO サーバー

  4. Docker Compose 経由の PostgresSQL

  5. pip インストールによる MLFlow SDK

  6. pip インストールによる MinIO SDK


まず、Docker Compose サービスのホストとして機能する Docker Desktop から始めましょう。

Dockerデスクトップ

Docker のサイトで、オペレーティング システムに適切なインストールを見つけることができます。 Mac に Docker Desktop をインストールする場合は、Mac が使用しているチップ (Apple または Intel) を知る必要があります。これを確認するには、Mac の左上隅にある Apple アイコンをクリックし、「この Mac について」メニュー オプションをクリックします。


これでサービスをインストールする準備が整いました。

MLFlow サーバー、Postgres、および MinIO

MLFLow Tracking Server、PostgresSQL、および MinIO は、以下に示す Docker Compose ファイルを使用してサービスとしてインストールされます。


 version: "3.3" services: db: restart: always image: postgres container_name: mlflow_db expose: - "${PG_PORT}" networks: - backend environment: - POSTGRES_USER=${PG_USER} - POSTGRES_PASSWORD=${PG_PASSWORD} - POSTGRES_DATABASE=${PG_DATABASE} volumes: - ./db_data:/var/lib/postgresql/data/ healthcheck: test: ["CMD", "pg_isready", "-p", "${PG_PORT}", "-U", "${PG_USER}"] interval: 5s timeout: 5s retries: 3 s3: restart: always image: minio/minio container_name: mlflow_minio volumes: - ./minio_data:/data ports: - "${MINIO_PORT}:9000" - "${MINIO_CONSOLE_PORT}:9001" networks: - frontend - backend environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_ADDRESS=${MINIO_ADDRESS} - MINIO_PORT=${MINIO_PORT} - MINIO_STORAGE_USE_HTTPS=${MINIO_STORAGE_USE_HTTPS} - MINIO_CONSOLE_ADDRESS=${MINIO_CONSOLE_ADDRESS} command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 tracking_server: restart: always build: ./mlflow image: mlflow_server container_name: mlflow_server depends_on: - db ports: - "${MLFLOW_PORT}:5000" networks: - frontend - backend environment: - AWS_ACCESS_KEY_ID=${MINIO_ACCESS_KEY} - AWS_SECRET_ACCESS_KEY=${MINIO_SECRET_ACCESS_KEY} - MLFLOW_S3_ENDPOINT_URL=http://s3:${MINIO_PORT} - MLFLOW_S3_IGNORE_TLS=true command: > mlflow server --backend-store-uri postgresql://${PG_USER}:${PG_PASSWORD}@db:${PG_PORT}/${PG_DATABASE} --host 0.0.0.0 --serve-artifacts --artifacts-destination s3://${MLFLOW_BUCKET_NAME} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${MLFLOW_PORT}/"] interval: 30s timeout: 10s retries: 3 volumes: db_data: minio_data: networks: frontend: driver: bridge backend: driver: bridge


何か問題が発生した場合のトラブルシューティングに役立つ、注目すべき点がいくつかあります。まず、MinIO と PostgreSQL はどちらもローカル ファイル システムを使用してデータを保存しています。 PostgreSQL の場合、これは `db_data` フォルダーであり、MinIO の場合、これは `minio_data` フォルダーです。クリーン インストールをやり直したい場合は、これらのフォルダーを削除してください。


次に、この Docker Compose ファイルは構成主導型です。たとえば、PostgreSQL データベース名を「mlflow」にハードコーディングする代わりに、Docker Compose ファイルの構文「${PG_DATABASE}」を使用して、以下に示す「config.env」ファイルから名前を取得します。


 # Postgres configuration PG_USER=mlflow PG_PASSWORD=mlflow PG_DATABASE=mlflow PG_PORT=5432 # MLflow configuration MLFLOW_PORT=5000 MLFLOW_BUCKET_NAME=mlflow # MinIO access keys - these are needed by MLflow MINIO_ACCESS_KEY=XeAMQQjZY2pTcXWfxh4H MINIO_SECRET_ACCESS_KEY=wyJ30G38aC2UcyaFjVj2dmXs1bITYkJBcx0FtljZ # MinIO configuration MINIO_ROOT_USER: 'minio_user' MINIO_ROOT_PASSWORD: 'minio_pwd' MINIO_ADDRESS: ':9000' MINIO_STORAGE_USE_HTTPS: False MINIO_CONSOLE_ADDRESS: ':9001' MINIO_PORT=9000 MINIO_CONSOLE_PORT=9001


これらのサービスに必要なすべての環境変数は、このファイルに設定されます。この構成ファイルには、これらのサービスが相互に通信するために必要な情報も含まれています。 MLFlow Tracking サーバーに MinIO へのアクセス方法を通知するのは環境変数の使用であることに注意してください。つまり、URL (ポート番号を含む)、アクセス キー、シークレット アクセス キー、およびバケットです。ここから、Docker Compose の使用に関する最後の最も重要な点につながります。これらのサービスを初めて起動するときは、まず MinIO UI に移動し、キーを取得し、バケットを作成する必要があるため、MLflow Tracking サービスは機能しません。追跡サービスがアーティファクトを保存するために使用するもの。


さあ、これをやってみましょう。以下のコマンドを使用してサービスを初めて開始します。


 docker-compose --env-file config.env up -d --build


このコマンドは、Docker Compose ファイルと同じディレクトリで実行してください。


これで、キーを取得し、MinIO UI を使用してバケットを作成できるようになりました。

MinIO コンソール

ブラウザから「localhost:9001」に移動します。 「docker-compose」ファイルで MinIO コンソール アドレスに別のポートを指定した場合は、代わりにそのポートを使用してください。 「config.env」ファイルで指定された root ユーザーとパスワードを使用してサインインします。


サインインしたら、「アクセス キー」タブに移動し、「アクセス キーの作成」ボタンをクリックします。


「アクセスキー」タブ


これにより、「アクセス キーの作成」ページが表示されます。


アクセスキーの作成ページ



アクセス キーと秘密キーは、[作成] ボタンをクリックするまで保存されません。これが完了するまで、このページから移動しないでください。この画面からキーをコピーすることを心配する必要はありません。 [作成] ボタンをクリックすると、キーをファイル システム (JSON ファイル) にダウンロードするオプションが表示されます。 MinIO SDK を使用して生データを管理する場合は、このページを表示している間に別のアクセス キーと秘密キーを作成してください。


アクセスキーの作成


次に、「mlflow」という名前のバケットを作成します。これは簡単です。「バケット」タブに移動し、「バケットの作成」ボタンをクリックします。


キーを取得し、バケットを作成したら、コンテナーを停止し、`config.env` を更新し、コンテナーを再起動することでサービスのセットアップを完了できます。以下のコマンドはコンテナを停止して削除します。


 docker-compose down


再起動します:

 docker-compose --env-file config.env up -d --build


次に MLflow UI を開始して、すべてが機能していることを確認しましょう。

MLflow UIの開始

「localhost:5000」に移動します。 MLflow UI が表示されるはずです。


MLflow UIの開始


時間をかけてすべてのタブを調べてください。 MLflow を初めて使用する場合は、実行と実験の概念に慣れてください。


  • 実行はコードを通過することであり、通常はトレーニングされたモデルが生成されます。
  • 実験は、関連する実行にタグを付けて、MLflow UI でグループ化して確認できるようにする方法です。たとえば、最高の精度 (またはパフォーマンス) を達成するために、異なるパラメーターを使用して複数のモデルをトレーニングした場合があります。これらの実行に同じ実験名をタグ付けすると、[実験] タブにグループ化されます。

MLflow Python パッケージをインストールします。

MLflow Python パッケージは、単純な「pip」インストールです。 Python 仮想環境にインストールすることをお勧めします。


 pip install mlflow


MLflow ライブラリを一覧表示して、インストールを再確認します。


 pip list | grep mlflow


以下のライブラリが表示されるはずです。


 mlflow 2.5.0

MinIO Python パッケージをインストールする

MLflow 機能を利用するために MinIO に直接アクセスする必要はありません。MLflow SDK は、上で設定した MinIO のインスタンスとインターフェイスします。ただし、MLflow に渡される前に、MinIO のこのインスタンスと直接接続してデータを管理することもできます。 MinIO は、あらゆる種類の非構造化データを保存するための優れた方法です。 MinIO は基盤となるハードウェアを最大限に活用するため、規模やパフォーマンスを心配することなく、必要なすべての生データを保存できます。 MinIO には、複数の場所にあるデータの同期を維持するためのバケット レプリケーション機能が含まれています。また、いつか AI も規制されるでしょう。この日が来ると、保管中のデータを保護し、規制当局が要求する可能性のあるものを誤って削除しないようにするために、MinIO のエンタープライズ機能 (オブジェクト ロックバージョニング暗号化法的ロック) が必要になります。


MLflow Python パッケージを仮想環境にインストールした場合は、同じ環境に MinIO をインストールします。


 pip install minio


インストールを再確認してください。

 pip list | grep minio


これにより、Minio ライブラリがインストールされたことが確認され、使用しているバージョンが表示されます。

 minio 7.1.15

まとめ

この投稿では、開発マシン上で MLflow と MinIO をセットアップするためのわかりやすいレシピを提供しました。目標は、MLflow サーバーと docker-compose 構成を調査する時間と労力を節約することでした。


このレシピを正確に保つためにあらゆる努力が払われました。問題が発生した場合は、 [email protected]までご連絡いただくか、一般的な Slack チャネルのディスカッションに参加してお知らせください。


MLflow と MinIO を使用してモデルのコーディングとトレーニングを開始する準備ができました。


ここでも公開されています。