機械学習ツール連携 その2 DVCによるデータバージョニング

Built for Speed: ~10ms Latency, Even Under Load
Blazingly fast way to build, track and deploy your models!
- Handles 350+ RPS on just 1 vCPU — no tuning needed
- Production-ready with full enterprise support
データバージョン管理(DVC)は、機械学習プロジェクトにおける大規模なデータセットとモデルの管理およびバージョン管理のための強力なツールです。
DVCは、ローカルディスク、ネットワークファイルシステム、Amazon S3、Google Cloud Storageなど、幅広いストレージオプションに対応するオープンソースツールです。DVCは、TensorFlow、PyTorch、scikit-learnなどの人気のある機械学習フレームワークと組み合わせて使用できます。
データやモデルの変更を追跡するだけでなく、DVCはコード、データ、モデルなど、機械学習プロジェクトの異なるコンポーネント間の依存関係を管理するのにも役立ちます。これらの依存関係を追跡することで、DVCは機械学習の実験を再現しやすくし、プロジェクトを他の人と共有しやすくします。
機械学習におけるバージョン管理の課題
機械学習におけるバージョン管理は、以下の理由により、ソフトウェアエンジニアリングと比較してより困難なタスクです。
- 大規模で複雑なデータセット:機械学習では、モデルのトレーニングとテストに使用されるデータセットは膨大になる可能性があり、それらを管理し、バージョン管理することが困難になります。さらに、データは非構造化である場合があり、時間の経過とともにデータへの変更を追跡することが難しくなります。
- 複数のコンポーネント:機械学習プロジェクトでは、多くの場合、データ、コード、モデルなど、複数のコンポーネントが関与するため、各コンポーネントへの変更を追跡し、それらが互いにどのように相互作用するかを把握することが困難になります。
- 反復的な開発プロセス:機械学習では、開発プロセスはしばしば反復的であり、開発者は新しいデータに基づいてモデルを頻繁に更新したり、モデルの精度を向上させたりします。これらの変更とバージョンを管理することは、複雑で時間のかかる作業となる可能性があります。
DVCは、機械学習プロジェクトにおけるデータとモデルの両方をバージョン管理するためのシンプルで効率的な方法を提供することで、これらの問題を解決します。DVCを使用すると、コードだけでなく、データやモデルもバージョン管理でき、それらの間の関係を追跡できます。DVCを使えば、以前の実験を簡単に再現し、チームメンバーと共同作業を行い、ワークフローを自動化して開発プロセスを効率化できます。
バージョン管理システムのインストールとセットアップ
DVCを始めるには、ローカルマシンにインストールしてセットアップする必要があります。このセクションでは、DVCをさまざまなクラウドストレージサービスと連携させる方法や、新しいDVCプロジェクトを作成する方法を含め、その方法について段階的な手順を説明します。
- DVCのインストール:最初のステップは、ローカルマシンにDVCをインストールすることです。DVCウェブサイトで、お使いのオペレーティングシステム用のインストール手順に従って実行できます。
- 新しいDVCプロジェクトの作成:DVCがインストールされたら、ターミナルで以下のコマンドを実行することで、新しいDVCプロジェクトを作成できます。
dvc init
これにより、現在のディレクトリに新しいDVCプロジェクトが作成されます。
- DVCをクラウドストレージと連携させる設定: Amazon S3やGoogle Cloud StorageのようなクラウドストレージサービスでDVCを使用したい場合は、これらのサービスと連携するようにDVCを設定する必要があります。これは、以下のコマンドを使用して新しいリモートを追加することで行えます。
dvc remote add -d <remote-name> <storage-url>
例えば、「my-s3-remote」という名前のAmazon S3リモートを追加したい場合は、以下のコマンドを実行します。
dvc remote add -d my-s3-remote s3://my-bucket-name
これにより、DVCプロジェクトに新しいリモートが追加され、Amazon S3と連携するように設定されます。
- DVCプロジェクトにデータを追加する: DVCプロジェクトをセットアップし、クラウドストレージと連携するように設定したら、データの追加を開始できます。これは、以下のコマンドを実行することで行えます。
dvc add <path-to-data-file>
これにより、データファイルがDVCプロジェクトに追加され、そのデータへの変更を追跡する対応するDVCファイルが作成されます。
- リモートストレージに変更をプッシュする: DVCプロジェクトをリモートストレージと連携するように設定している場合、以下のコマンドを実行することで、そのストレージに変更をプッシュできます。
dvc push
これにより、データまたはモデルに加えた変更がリモートストレージにプッシュされます。
バージョン管理を強化するためのDVCコマンドの実行
DVCは、機械学習プロジェクトの管理とバージョン管理に役立つ多くのコマンドを提供します。以下に、最も一般的に使用されるDVCコマンドの一部をリストアップします。
dvc init: 現在のディレクトリに新しいDVCプロジェクトを初期化します。dvc add <path-to-file>: ファイルをDVCに追加し、対応するDVCファイルを作成して、そのファイルへの変更を追跡します。dvc run: DVCトラッキングが有効になっているため、すべての入力と出力がDVCによって追跡されるように、コマンドまたはスクリプトを実行します。dvc repro: DVCで追跡されたコマンドやスクリプトを再現し、すべての依存関係が最新であることを保証します。dvc push: すべてのデータファイルとモデルファイルを、AWS S3やGoogle Cloud Storageなどのリモートストレージにプッシュします。dvc pull: すべてのデータファイルとモデルファイルをリモートストレージからローカルマシンにプルします。dvc status: 追跡されているファイルのステータスを、変更、追加、削除されたかどうかを含めて表示します。dvc log: ファイルのすべてのバージョンのリストを、対応するコミットメッセージやその他のメタデータとともに表示します。
DVCを使ったML実験の再現
DVCを使用する最も重要な利点の1つは、機械学習実験を再現できることです。DVCを使えば、コード、データ、モデル間の依存関係を定義し、追跡できます。そして、 dvc repro コマンドを使って以前の実験を再現できます。
ワークフローの例:
.yamlファイルを使用したsklearn irisデータセットのワークフローの例を以下に示します。
- まず、コマンドを実行して新しいDVCプロジェクトを初期化します
dvc init。 - を作成します
dataプロジェクトフォルダ内にデータセットを保存するディレクトリを作成し、このディレクトリにsklearnのirisデータセットをダウンロードします。 - dvc addコマンドを使用してデータファイルをDVCに追加します。例:
dvc add data/iris.csv。 - を作成します
.yamlファイルを作成します。例として、iris.yaml。このファイルには、モデルの前処理、トレーニング、評価のためのコマンドが含まれます。 - の手順を定義します
.yamlファイルでDVCコマンドを使用して手順を定義します。例:
stages:
preprocess:
cmd: python preprocess.py data/iris.csv data/preprocessed.csv
deps:
- data/iris.csv
outs:
- data/preprocessed.csv
train:
cmd: python train.py data/preprocessed.csv models/model.pkl
deps:
- data/preprocessed.csv
outs:
- models/model.pkl
evaluate:
cmd: python evaluate.py models/model.pkl data/iris.csv
deps:
- models/model.pkl
- data/iris.csv
- `dvc repro` コマンドを使用してパイプラインを実行します。このコマンドは、.yamlファイルで定義されたステップを正しい順序で実行し、すべての依存関係が最新であることを保証します。例:
dvc repro iris.yaml.
パイプラインを .yaml ファイルで定義し、 dvc repro コマンドを使用すると、実験を簡単に再現し、データとモデルのバージョンを追跡し、機械学習プロジェクトでチームメンバーと共同作業を行うことができます。
以下にワークフローの例を示します。
- S3サーバーの適切な認証情報とエンドポイント情報を設定します。
dvc remote add -d s3remote s3://your-s3-bucket-name/path/to/models
- S3サーバーから必要なモデルファイルをローカルマシンに取得します。
dvc pull -r s3remote path/to/models/model.pkl
- ダウンロードしたモデルファイルをターゲットのリモートサーバーにコピーします。
scp path/to/models/model.pkl user@target-remote-server:/path/to/models/
- コピーしたファイルをターゲットのリモートサーバーで推論に使用します。
# モデルをロード
import pickle
with open('/path/to/models/model.pkl', 'rb') as f:
model = pickle.load(f)
# 予測を行う
X_test = [[5.1, 3.5, 1.4, 0.2], [7.7, 3.0, 6.1, 2.3], [6.0, 3.0, 4.8, 1.8]]
y_pred = model.predict(X_test)
print(y_pred)
このワークフローは、S3サーバーに必要な認証情報とエンドポイント情報が設定されており、ローカルサーバーとターゲットのリモートサーバーの両方にアクセスできることを前提としています。特定のニーズや設定に基づいて、ワークフローを変更できます。
TrueFoundryとDVCの連携方法:
TrueFoundryはDVCモデルレジストリとシームレスに統合されており、DVCにログされたモデルをTrueFoundryを使用してKubernetesクラスターにデプロイできます。
📌
モデル管理と実験追跡にDVCを使用する以外に、Truefoundryの実験追跡機能であるMLFoundryも利用できます。
ステップ1 - インストールとセットアップ:
- DVCのセットアップ
# DVCとS3サポートのインストール
pip install dvc dvc-s3
# ローカルディレクトリでGitを初期化
git init
# ローカルディレクトリでDVCを初期化
dvc init
# DVCのリモートストレージをバケットとして設定
dvc remote add s3://<your_bucket_name>
注意: これが機能するためには、s3 CLIを設定する必要があります。
- dvcのインポート
import dvc
x
- servicefoundryのインストール
pip install -U "servicefoundry"
- truefoundryにログイン
sfy login
ステップ2 - モデルのトレーニングとログ記録:
MLモデルをトレーニングし、joblibファイルとして保存します。
次に、モデルと評価指標を **`dvc add`**
次に、joblibファイルをDVCに **`dvc push`**
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
import joblib
import os
# データをロードして前処理する
X, y = load_iris(as_frame=True, return_X_y=True)
X = X.rename(columns={
"sepal length (cm)": "sepal_length",
"sepal width (cm)": "sepal_width",
"petal length (cm)": "petal_length",
"petal width (cm)": "petal_width",
})
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# モデルを初期化
clf = LogisticRegression(solver="liblinear")
# モデルを学習させる
clf.fit(X_train, y_train)
# モデルを評価
preds = clf.predict(X_test)
# joblibとDVCを使ってモデルを保存する
joblib.dump(clf, "model.joblib")
os.system("dvc add model.joblib")
# 評価指標をログに記録する
report = classification_report(y_test, preds, output_dict=True)
with open("classification_report.txt", "w") as f:
f.write(str(report))
# モデルと評価指標をリモートストレージにプッシュする
os.system("dvc push")
ステップ3 - 推論アプリケーションと依存関係ファイルを作成する:
Truefoundryにデプロイするために、2つのファイルを作成する必要があります。それは、 app.py アプリケーションコードを含むファイルと、 requirements.txt 依存関係を含むファイルです。
.
├── app.py
├── deploy.py
└── requirements.txt
- app.py:
import os
import joblib
import pandas as pd
from fastapi import FastAPI
# DVCを使用してS3からモデルを取得
os.system("dvc pull model.joblib.dvc")
# モデルをロード
model = joblib.load("model.joblib")
# モデルをロード
app = FastAPI()
@app.post("/predict")
def predict(
sepal_length: float, sepal_width: float, petal_length: float, petal_width: float
):
data = dict(
sepal_length=sepal_length,
sepal_width=sepal_width,
petal_length=petal_length,
petal_width=petal_width,
)
prediction = int(model.predict(pd.DataFrame([data]))[0])
return {"prediction": prediction}
- requirements.txt:
fastapi
pandas
joblib
dvc
ステップ4 - truefoundryのPython SDKを使用し、デプロイメントを設定します
- deploy.py:
import argparse
import logging
from servicefoundry import Build, PythonBuild, Service, Resources, Port
# ロガーを設定
logging.basicConfig(level=logging.INFO)
# 引数パーサーを設定
parser = argparse.ArgumentParser()
parser.add_argument("--workspace_fqn", required=True, type=str)
args = parser.parse_args()
service = Service(
name="fastapi",
image=Build(
build_spec=PythonBuild(
command="uvicorn app:app --port 8000 --host 0.0.0.0",
requirements_path="requirements.txt",
)
),
ports=[
Port(
port=8000,
host="ml-deploy-aditya-ws-8000.demo.truefoundry.com",
)
],
resources=Resources(
cpu_request=0.25,
cpu_limit=0.5,
memory_request=200,
memory_limit=400,
ephemeral_storage_request=200,
ephemeral_storage_limit=400,
),
)
service.deploy(workspace_fqn=args.workspace_fqn)
ステップ5 - Truefoundry経由でサービスをデプロイする
次のコマンドを実行し、あなたの
- ワークスペースFQN: をダッシュボードで見つけることができます
python deploy.py --workspace_fqn your_workspace_fqn
そして、完了です!ログからデプロイされたサービスのダッシュボードを確認でき、右上隅にはデプロイされたアプリケーションのエンドポイントが表示されます。

TrueFoundry は、Kubernetes上で動作するMLデプロイメントPaaSであり、開発者のワークフローを加速させ、モデルのテストとデプロイにおいて完全な柔軟性を与えつつ、インフラチームには完全なセキュリティと制御を保証します。私たちのプラットフォームを通じて、機械学習チームは デプロイおよび監視 モデルを15分で、100%の信頼性、スケーラビリティ、そして数秒でのロールバック機能を提供し、コストを削減し、モデルをより迅速に本番環境にリリースできるようになり、真のビジネス価値の実現を可能にします。
TrueFoundry AI Gateway delivers ~3–4 ms latency, handles 350+ RPS on 1 vCPU, scales horizontally with ease, and is production-ready, while LiteLLM suffers from high latency, struggles beyond moderate RPS, lacks built-in scaling, and is best for light or prototype workloads.


















.webp)
.webp)


.png)

.png)














