電動車向けのZenML:データから効率予測へ

電動車に最適なZenML:データから効率予測への道

はじめに

電気自動車の効率を予測し、ユーザーがそのシステムを簡単に使用できるシステムがあると思ったことはありますか?電気自動車の世界では、電気自動車の効率を非常に高い精度で予測することができます。このコンセプトは現実の世界にも導入され、私たちはZenmlとMLflowに非常に感謝しています。このプロジェクトでは、技術的な深いダイブを探求し、データサイエンス、機械学習、およびMLOpsの組み合わせがこのテクノロジーを美しく作り上げる方法を見ていきます。また、電気自動車にどのようにZenMLを使用するかも見ていきます。

学習目標

この記事では、以下のことを学びます。

  • Zenmlとは何か、エンドツーエンドの機械学習パイプラインでの使用方法を学ぶ。
  • MLFlowの役割を理解し、機械学習モデルの実験トラッカーを作成する。
  • 機械学習モデルの展開プロセスと予測サービスの設定方法を探索する。
  • 機械学習モデルの予測との対話に使用するユーザーフレンドリーなStreamlitアプリの作成方法を発見する。

この記事はデータサイエンスブログマラソンの一環として公開されました。

電気自動車の効率を理解する

  • 電気自動車(EV)の効率は、バッテリーからの電気エネルギーを走行距離にどれだけ効率よく変換できるかを示します。通常、kWh(キロワット時)あたりのマイルで測定されます。
  • モーター効率、バッテリー効率、重量、空力、および補助負荷などの要素がEVの効率に影響を与えます。したがって、これらの領域を最適化すると、EVの効率を改善することができます。消費者にとっては、より効率の高いEVを選ぶことで、より良い運転体験が得られます。
  • このプロジェクトでは、実際のEVデータを使用して電気自動車の効率を予測するエンドツーエンドの機械学習パイプラインを構築します。効率を正確に予測することで、EVメーカーは設計を最適化することができます。
  • ZenMLというMLOpsフレームワークを使用して、機械学習モデルのトレーニング、評価、展開のワークフローを自動化します。ZenMLは、MLライフサイクルの各ステージでのメタデータの追跡、アーティファクトの管理、モデルの再現性の機能を提供します。

データ収集

このプロジェクトでは、Kaggleからデータを収集します。かわいいは、データサイエンスや機械学習プロジェクトのための多くのデータセットを提供するオンラインプラットフォームです。必要な場所からデータを収集することができます。このデータセットを収集することで、モデルへの予測を行うことができます。以下は、すべてのファイルやテンプレートが含まれている私のGitHubリポジトリです: https://github.com/Dhrubaraj-Roy/Predicting-Electric-Vehicle-Efficiency.git

問題の設定

効率的な電気自動車は未来ですが、その走行範囲を正確に予測することは非常に困難です。

解決策

私たちのプロジェクトは、データサイエンスとMLOpsを組み合わせて、電気自動車の効率予測のための正確なモデルを作成し、消費者とメーカーの両方に利益をもたらします。

仮想環境の設定

なぜ仮想環境を設定したいのでしょうか?

プロジェクトを他のプロジェクトとの競合せずに目立たせるためです。

仮想環境の作成

  • Windowsの場合:
python -m venv myenv#then for activationmyenv\Scripts\activate
  • Linux/macOSの場合:
python3 -m venv myenv#then for activationsource myenv/bin/activate

環境を清潔に保つのに役立ちます。

プロジェクトの作業

準備が整ったら、Zenmlをインストールする必要があります。では、Zenmlとは何でしょうか?Zenmlは、エンドツーエンドの機械学習パイプラインの管理における機械学習オペレーション(MLOps)フレームワークです。私たちは、機械学習パイプラインの効率的な管理のためにZenmlを選択しました。したがって、Zenmlサーバーをインストールする必要があります。

次のコマンドをターミナルで使用して、Zenmlサーバーをインストールします。

 pip install ‘zenml[server]’

これで終わりではありません。Zenmlサーバーをインストールした後、Zenmlリポジトリを作成する必要があります。

zenml init

なぜ「zenml init」を使用するのか:「zenml init」は、ZenMLリポジトリを初期化するために使用されます。これにより、機械学習パイプラインと実験を効果的に管理するために必要な構造が作成されます。

要件のインストール

プロジェクトの依存関係を満たすために、 ‘requirements.txt’ファイルを使用しました。このファイルには、それらの依存関係が含まれている必要があります。

catboost==1.0.4joblib==1.1.0lightgbm==3.3.2optuna==2.10.0streamlit==1.8.1xgboost==1.5.2markupsafe==1.1.1zenml==0.35.1

プロジェクトの整理

データサイエンスのプロジェクトに取り組む場合、すべてを適切に整理する必要があります。プロジェクトでの構造を説明しましょう:

フォルダの作成

プロジェクトはフォルダに整理されています。作成する必要のあるいくつかのフォルダがあります。

  • モデルフォルダ:最初にモデルフォルダを作成する必要があります。これには、機械学習モデルに必要な重要なファイルが含まれています。このフォルダの中には、 ‘data_cleaning.py’、 ‘evaluation.py’、および ‘model_dev.py’などのファイルがあります。これらのファイルは、プロジェクト全体で役立つさまざまなツールのようなものです。
  • ステップフォルダ:このフォルダはプロジェクトの制御センターとして機能します。 ‘Steps’フォルダ内には、データサイエンスプロセスのさまざまな段階に必要な重要なファイルが含まれています。次に、 ‘Ingest_data.py’などのいくつかのファイルをステップフォルダに作成する必要があります。このファイルは、プロジェクトのデータ入力をサポートするものであり、プロジェクトに必要な素材を集めるような役割を果たします。次に、 ‘Cleaning_data.py’です。主要な作業に必要な素材をクリーニングおよび準備するプロジェクトの一部のようなものです。Model_train.py:このファイルは機械学習モデルをトレーニングする場所であり、素材を最終製品に形成するようなものです。Evaluation.py:このevaluation.pyファイルは、最終製品のパフォーマンスを評価する場所です。

パイプラインフォルダ

ここでプロジェクトのパイプラインを組み立てます。プライプラインは、プロジェクトのための生産ラインの設定に似ています。 ‘Pipelines’フォルダ内には、 ‘Training_pipeline.py’が主要な製造機として機能します。このファイルでは、 ‘Ingest_data.py’と ‘ingest_df’クラスをインポートしてデータの準備、クリーニング、モデルのトレーニング、およびパフォーマンスの評価を行います。プロジェクト全体を実行するためには、 ‘run_pipeline.py’を使用します。これは、コマンドを使用して生産ラインの開始ステージを押すのと同様です:

python run_pipeline.py

ここでは、プロジェクトのファイル構造が表示されます –

この構造により、プロジェクトをスムーズに実行できます。まるで整理されたワークスペースが効果的なプロジェクトの作成を助けるようにです。

3.パイプラインの設定

出典:zenml

プロジェクトを整理し、パイプラインを設定した後、次のステップはパイプラインを実行することです。さて、あなたはおそらく疑問に思うかもしれません:パイプラインとは何ですか?パイプラインは、開発から本番までの機械学習モデルの展開、監視、管理を効率化するための自動化されたステップのセットです。これは ‘zenml up’コマンドを実行することによって実現されます。このコマンドは、プロジェクトのデータサイエンスステップの実行順序が正しく実行されることを保証し、データの取り込みとクリーニングからモデルのトレーニングと評価までのワークフローを開始します。

データのクリーニング

「モデル」フォルダ内に、「data_cleaning」というファイルがあります。このファイルはデータのクリーニングを担当しています。このファイル内には、以下のものが見つかります:

class DataDivideStrategy(DataStrategy):
    """
    データをトレーニングデータとテストデータに分割するデータ分割戦略
    """
    def handle_data(self, data: pd.DataFrame) -> Union[pd.DataFrame, pd.Series]:
        """
        データをトレーニングデータとテストデータに分割する
        """
        try:
            # 「Efficiency」を目的変数と仮定する
            # データセットから特徴量(X)と目的変数(y)を分離する
            X = data.drop("Efficiency", axis=1)
            y = data["Efficiency"]
            # データをトレーニングセットとテストセットに 80-20 の比率で分割する
            X_train, X_test, y_train, y_test = train_test_split(
                X, y, test_size=0.2, random_state=42
            )
            # 分割されたデータを返す
            return X_train, X_test, y_train, y_test
        except Exception as e:
            # 例外が発生した場合はエラーメッセージをログに記録する
            logging.error("データの分割中にエラーが発生しました。".format(e))
            raise e
  • このクラスはデータセットをトレーニングデータとテストデータに分割し、分割されたデータセットを返します(80-20 の比率)。このプロセス中にエラーが発生した場合はエラーメッセージをログに記録します。
  • DataCleaning クラス:「DataCleaning」クラスは、データが最適な状態であることを確認するためのルールとメソッドのセットです。handle_data メソッド:このメソッドは、データをさまざまな方法で管理・操作することができる多目的なツールのようなもので、次のプロジェクトのステップに備えるための準備を整える役割を担います。
  • 主要なクラスは、データのクリーニングを担当する DataPreProcessStrategy です。このクラスでデータをクリーニングします。

そして、次は「Steps」フォルダに進みます。「clean_data.py」というファイルがあります。このファイルはデータのクリーニングに専念しています。以下は、このファイルで行われることです:

  • 「data_cleaning」から「DataCleaning」、「DataDivideStrategy」、「DataPreProcessStrategy」という3つのモジュールをインポートします。これは、プロジェクトを効果的に進めるための適切なツールと素材をツールボックスから取得するようなものです。
import logging
from typing import Tuple
import pandas as pd
from model.data_cleaning import DataCleaning, DataDivideStrategy, DataPreProcessStrategy
from zenml import step
from typing_extensions import Annotated

@step
def clean_df(data: pd.DataFrame) -> Tuple[
    Annotated[pd.DataFrame, 'X_train'],
    Annotated[pd.DataFrame, 'X_test'],
    Annotated[pd.Series, 'y_train'],
    Annotated[pd.Series, 'y_test'],
]:
    """
    データクリーニングクラスでデータを前処理し、トレーニングデータとテストデータに分割します。
    Args:
        data: pd.DataFrame
    """
    try:
        preprocess_strategy = DataPreProcessStrategy()
        data_cleaning = DataCleaning(data, preprocess_strategy)
        preprocessed_data = data_cleaning.handle_data()
        divide_strategy = DataDivideStrategy()
        data_cleaning = DataCleaning(preprocessed_data, divide_strategy)
        X_train, X_test, y_train, y_test = data_cleaning.handle_data()
        logging.info(f"データクリーニングが完了しました")
        return X_train, X_test, y_train, y_test
    except Exception as e:
        logging.error(e)
        raise e
  1. 必要なライブラリやモジュールをインポートします(logging、pandas、データクリーニング戦略など)。
  2. @step デコレータは、機械学習パイプライン内のステップとして関数をマークします。このステップはDataFrame を受け取り、前処理を行い、トレーニングデータとテストデータに分割します。
  3. このステップでは、データのクリーニングや分割戦略を使用し、プロセスをログに記録し、指定されたデータ型で分割データを返します。たとえば、X_train と X_test は DataFrame であり、y_test と y_train は Series です。

単純な線形回帰モデルの作成

さて、「model」フォルダ内にある「model_dev」について話しましょう。このファイルでは、主に機械学習モデルの構築に取り組んでいます。

  • 単純な線形回帰モデル:このファイルでは、単純な線形回帰モデルを作成します。私たちの主な目標は、複雑なモデルの構築ではなく、MLOpsに焦点を当てることです。これは、あなたのMLOpsプロジェクトの基本的なプロトタイプを構築するようなものです。

この構造化されたアプローチにより、クリーンで整理されたデータクリーニングプロセスが確保され、モデル開発が明確なブループリントに従い、複雑なモデルの構築ではなくMLOpsの効率に焦点が当てられます。将来的にはモデルを更新します。

import logging
from abc import ABC, abstractmethod
import pandas as pd
from sklearn.linear_model import LinearRegression
from typing import Dict
import optuna  # optunaライブラリをインポートする
# あなたのコードの残り...
class Model(ABC):
    """全てのモデルの抽象基底クラス"""
    @abstractmethod
    def train(self, X_train, y_train):
        """与えられたデータでモデルを訓練する"""
        pass
class LinearRegressionModel(Model):
    """モデルインターフェースを実装するLinearRegressionModel"""
    def train(self, X_train, y_train, **kwargs):
        try:
            reg = LinearRegression(**kwargs)  # 線形回帰モデルを作成する
            reg.fit(X_train, y_train)  # トレーニングデータにモデルを適合させる
            logging.info('Training complete')  # トレーニング完了を示すメッセージをログに記録する
            return reg  # 訓練済みモデルを返す
        except Exception as e:
            logging.error("モデルのトレーニング中にエラーが発生しました: {}".format(e))  # 例外が発生した場合はエラーメッセージをログに記録する
            raise e  # 例外を発生させてさらなる処理に移す

モデル開発のための ‘model_train.py’ の改善点

‘model_train.py’ ファイルでは、プロジェクトにいくつか重要な追加を行っています:

線形回帰モデルのインポート:’model.mode_dev’ から ‘LinearRegressionModel’ をインポートします。これはプロジェクトの構築に役立ちます。’model_train.py’ ファイルは、この特定のタイプの機械学習モデルと連携するように設定されています。

def train_model(
    X_train: pd.DataFrame,
    X_test: pd.DataFrame,
    y_train: pd.Series,
    y_test: pd.Series,
    config: ModelNameConfig,
) -> RegressorMixin:
    """指定された設定に基づいて回帰モデルを訓練する
    Args:
        X_train (pd.DataFrame): 訓練データの特徴量
        X_test (pd.DataFrame): テストデータの特徴量
        y_train (pd.Series): 訓練データの目的変数
        y_test (pd.Series): テストデータの目的変数
        config (ModelNameConfig): モデルの設定
    Returns:
        RegressorMixin: 訓練済み回帰モデル
    """
    try:
        model = None
        # 設定で指定されたモデルをチェックする
        if config.model_name == "linear_regression":
            # MLflowの自動記録を有効にする
            autolog()
            # LinearRegressionModelのインスタンスを作成する
            model = LinearRegressionModel()
            # トレーニングデータでモデルを訓練する
            trained_model = model.train(X_train, y_train)
            # 訓練済みモデルを返す
            return trained_model
        else:
            # モデル名がサポートされていない場合はエラーを発生させる
            raise ValueError("モデル名がサポートされていません")
    except Exception as e:
        # モデルの訓練中に発生した例外をログに記録して発生させる
        logging.error(f"訓練モデルでエラーが発生しました:{e}")
        raise e

このコードは、選択した設定に基づいて回帰モデル(たとえば、線形回帰)を訓練します。選択したモデルがサポートされているかどうかを確認し、ログ記録のためにMLflowを使用し、提供されたデータでモデルを訓練し、訓練済みモデルを返します。選択したモデルがサポートされていない場合はエラーを発生させます。

メソッド ‘Train Model’:’model_train.py’ファイルでは、’train_model’というメソッドを定義しており、’LinearRegressionModel’を返します。

RegressorMixinのインポート:’sklearn.base’から’RegressorMixin’をインポートします。RegressorMixinは、回帰推定器の共通インターフェースを提供するscikit-learnのクラスです。’sklearn.base’は、機械学習モデルの構築と操作に使用されるScikit-Learnライブラリの一部です。

モデル設定とパフォーマンス評価の構成

‘Steps’フォルダに ‘config.py’ を作成する:’steps’フォルダに ‘config.py’ というファイルを作成します。このファイルには、’ModelNameConfig’というクラスが含まれています。 ‘ModelNameConfig’は、機械学習モデルの設定ガイドとして機能し、モデルのさまざまな設定とオプションを指定します。

# 必要なクラスをZenMLからインポートしてモデルパラメータを設定します。
from zenml.steps import BaseParameters

# BaseParametersを継承したModelNameConfigという名前のクラスを定義します。
class ModelNameConfig(BaseParameters):
    """モデルの設定:"""
    
    # デフォルト値を持つモデル構成の属性を定義します。
    model_name: str = "線形回帰"  # 機械学習モデルの名前
    fine_tuning: bool = False  # ファインチューニングを有効にするフラグ
  • この設定では、モデルの名前とファインチューニングの有無を選択することができます。ファインチューニングは、既に動作している機械学習モデルを微調整することで、特定のタスクでのパフォーマンスを向上させることができます。
  • 評価:「src」または「model」フォルダに「evaluation.py」というファイルを作成します。このファイルには、「evaluation」という抽象クラスと、「calculate_score」というメソッドが含まれています。これらは、機械学習モデルのパフォーマンスを測定するためのツールです。
  • 評価戦略:MSE(平均二乗誤差)などの特定の評価戦略を紹介します。各戦略クラスには、モデルのパフォーマンスを評価するための「calculate_score」というメソッドが含まれています。
  • 「ステップ」での評価の実装:これらの評価戦略を「steps」フォルダ内の「evaluation.py」に実装します。これは、プロジェクトの品質管理プロセスを設定することに似ています。

「Evaluate Model」メソッドを使ったモデルのパフォーマンス評価

メソッド「「Evaluate Model」」:「evaluation.py」内の「steps」フォルダに、「evaluate_model」という名前のメソッドを作成します。このメソッドは、R2スコアやRMSE(平均二乗誤差の平方根)などのパフォーマンス指標を返します。

@step(experiment_tracker=experiment_tracker.name)
def evaluate_model(
    model: RegressorMixin, X_test: pd.DataFrame, y_test: pd.Series
) -> Tuple[Annotated[float, "r2"], Annotated[float, "rmse"],]:
    """さまざまなメトリクスを使用して機械学習モデルのパフォーマンスを評価し、結果をログに記録します。
    Args:
        model: RegressorMixin - 評価する機械学習モデル。
        X_test: pd.DataFrame - テストデータセットの特徴量の値。
        y_test: pd.Series - テストデータセットの実際のターゲット値。
    Returns:
        Tuple[float, float] - R2スコアとRMSEを含むタプル。
    """
    try:
        # モデルを使用して予測を行います。
        prediction = model.predict(X_test)
        
        # 平均二乗誤差(MSE)をMSEクラスを使用して計算します。
        mse_class = MSE()
        mse = mse_class.calculate_score(y_test, prediction)
        mlflow.log_metric("mse", mse)
        
        # R2スコアをR2Scoreクラスを使用して計算します。
        r2_class = R2()
        r2 = r2_class.calculate_score(y_test, prediction)
        mlflow.log_metric("r2", r2)
        
        # 平均二乗誤差の平方根(RMSE)をRMSEクラスを使用して計算します。
        rmse_class = RMSE()
        rmse = rmse_class.calculate_score(y_test, prediction)
        mlflow.log_metric("rmse", rmse)
        
        return r2, rmse  # R2スコアとRMSEを返します。
    except Exception as e:
        logging.error("評価中にエラーが発生しました。".format(e))
        raise e

「model_train.py」、「config.py」、「evaluation.py」のこれらの追加により、機械学習モデルのトレーニング、設定、徹底的な評価が導入され、プロジェクトが高品質の基準を満たすことが保証されます。

パイプラインの実行

次に、パイプラインを正常に実行するために「training_pipeline」ファイルを更新します。ZenMLは、機械学習ワークフローの管理を効率化し、標準化するためのオープンソースのMLOpsフレームワークです。パイプラインを表示するには、このコマンド「zenml up」を使用できます。

さて、実験トラッカーの実装とモデルのデプロイに進みます。

  • MLflowのインポート:「model_train.py」ファイルで「mlflow」をインポートします。MLflowは、機械学習モデルのライフサイクルを管理し、実験の追跡を行い、各プロジェクトの詳細な記録を保持するための多目的なツールです。
  • 実験トラッカー:実験トラッカーとは何かという疑問が生じるかもしれません。実験トラッカーは、実験の監視と組織化を行うためのシステムであり、プロジェクトの進捗状況を記録することができます。コードでは、「zenml.client」と「mlflow」を介して実験トラッカーにアクセスし、効果的に実験を管理します。より詳細な理解には、model_train.pyのコードをご覧ください。
  • MLflowによる自動ログ記録:「mlflow.sklearn」の「autolog」という機能を使用して、機械学習モデルのさまざまな側面を自動的にログ記録します。これにより、モデルのパフォーマンスがどれほど良いかについて貴重な洞察を得ることができます。
  • メトリクスの記録:「evaluation.py」ファイルで、「mlflow.log_metric」を使用して平均二乗誤差(MSE)などの特定のメトリクスを記録します。これにより、プロジェクトの中でモデルのパフォーマンスを追跡することができます。

「run_deployment.py」スクリプトを実行している場合、ZenMLを使用していくつかの統合をインストールする必要があります。統合は、モデルをデプロイ環境に接続し、モデルをデプロイするための環境に接続するのに役立ちます。

Zenmlの統合

Zenmlは、MLOpsツールとの統合を提供します。次のコマンドを実行することで、ZenmlのMLflowとの統合をインストールする必要があります。これは非常に重要なステップです:

この統合を作成するには、次のコマンドを使用する必要があります:

zenml integration install mlflow -y

この統合を使用することで、実験を効率的に管理することができます。

実験のトラッキング

実験のトラッキングは、MLOpsの重要な側面です。ZenmlとMLflowを使用して、機械学習の実験のすべての側面を監視、記録、管理し、効率的な実験と再現性を実現します。

実験トラッカーを登録:

zenml experiment-tracker register mlflow_tracker --flavor=mlflow

モデルデプロイヤーを登録:

zenml model-deployer register mlflow --flavor=mlflow

スタック:

 zenml stack register mlflow_stack -a default -o default -d mlflow -e mlflow_tracker --set

デプロイメント

デプロイメントはパイプラインの最終ステップであり、プロジェクトの重要な部分です。私たちの目標は、モデルを構築するだけでなく、モデルをインターネット上にデプロイし、ユーザーが使用できるようにすることです。

デプロイメントパイプラインの設定: Pythonファイル「deployment_pipeline.py」に定義されたデプロイメントパイプラインがあります。このパイプラインは、デプロイメントタスクを管理します。

デプロイメントトリガー:「deployment_trigger」という名前のステップがあります

class DeploymentTriggerConfig(BaseParameters):    min_accuracy = 0 @step(enable_cache=False)def dynamic_importer() -> str:    """Downloads the latest data from a mock API."""    data = get_data_for_test()    return data

このコードは、最小精度パラメータを持つ「DeploymentTriggerConfig」というクラスを定義しています。この場合、最小精度はゼロです。また、このコードは、データをモックAPIからダウンロードする「dynamic_importer」というパイプラインステップも定義しています。このステップでは、キャッシュは無効にされます。

予測サービスローダー

「prediction_service_loader」ステップは、デプロイメントパイプラインによって開始された予測サービスを取得します。これは、デプロイされたモデルの管理および操作に使用されます。

def prediction_service_loader(        pipeline_name: str,    pipeline_step_name: str,    running: bool = True,    model_name: str = "model",) -> MLFlowDeploymentService:    """デプロイメントパイプラインによって開始された予測サービスを取得します。    Args:        pipeline_name: MLflow予測サーバーをデプロイしたパイプラインの名前        step_name: MLflow予測サーバーをデプロイしたステップの名前        running: このフラグが設定されている場合、ステップは実行中のサービスのみを返します        model_name: デプロイされているモデルの名前    """    # MLflowモデルデプロイヤースタックコンポーネントを取得         mlflow_model_deployer_component = MLFlowModelDeployer.get_active_model_deployer()        # 同じパイプライン名、ステップ名、モデル名を持つ既存のサービスを取得    existing_services = mlflow_model_deployer_component.find_model_server(        pipeline_name=pipeline_name,        pipeline_step_name = pipeline_step_name,        model_name=model_name,        running=running,    )    if not existing_services:        raise RuntimeError(            f"{pipeline_name}パイプラインの{pipeline_step_name}ステップによって"            f"デプロイされたMLflow予測サービスは現在実行中ではありません。"        )    return existing_services[0]

このコードは、デプロイメントパイプラインによって開始された予測サービスを取得する「prediction_service_loader」という関数を定義しています。

  • パイプライン名、ステップ名、モデル名などの入力を受け取ります。
  • 関数は、これらのパラメータに一致する既存のサービスをチェックし、最初に見つかったサービスを返します。見つからない場合はエラーが発生します。

予測モジュール

「予測」ステップは予測サービスに対して推論リクエストを実行します。入力データを処理して予測を返します。

@stepdef predictor(    service: MLFlowDeploymentService,    data: str,) -> np.ndarray:    """予測サービスに対して推論リクエストを実行します。"""    service.start(timeout=10)  # すでに起動済みの場合はNOPになるはず    data = json.loads(data) # 入力データをJSON文字列からPythonの辞書に変換する    data.pop("columns")    data.pop("index")    columns_for_df = [   # DataFrameを作成するためのカラム名のリストを定義する        "加速度",        "最高速度",        "走行距離",        "急速充電速度",        "イギリスの価格",        "ドイツの価格",    ]    df = pd.DataFrame(data["data"], columns=columns_for_df)    json_list = json.loads(json.dumps(list(df.T.to_dict().values())))     data = np.array(json_list) # JSONリストをNumPy配列に変換する    prediction = service.predict(data)    return prediction
  • このコードは`predictor`という関数を定義し、MLFlowを介してデプロイされたMLモデルで予測を行うために使用されます。サービスを起動し、JSON形式の入力データを処理し、NumPy配列に変換し、モデルの予測を返します。この関数は、電気自動車に関連する特定の特徴を持つデータに対して操作を行います。

デプロイの実行: ‘run_deployment.py’というスクリプトがあり、デプロイプロセスをトリガーできます。このスクリプトは‘-config’パラメータを受け取ります。`-config`パラメータは、プログラムの設定情報や設定ファイルをコマンドラインで指定するために使用されます。デプロイモデルの場合は、‘deploy’を設定し、予測実行の場合は‘predict’を設定し、両者を実行する場合は‘deploy_and_predict’を設定します。

デプロイのステータスとインタラクション: スクリプトはMLflowの予測サーバーのステータスに関する情報も提供し、それを起動および停止する方法も示します。モデルのデプロイにはMLFlowが使用されます。

最小正確度のしきい値: ‘min_accuracy’パラメータは、モデルのデプロイのための最小正確度のしきい値を設定するために指定できます。その値を満たした場合、モデルはデプロイされます。

Dockerの設定: Dockerはデプロイ環境の管理に使用され、デプロイパイプラインでDockerの設定を定義しています。

このデプロイプロセスは、機械学習モデルのデプロイと予測を制御可能で設定可能な方法で行うことに焦点を当てたもののようです。

  • モデルのデプロイは‘run_deployment.py’スクリプトを実行するだけです。次のように使用してください:
 python3 run_deployment.py --config deploy

予測

モデルがデプロイされると、モデルは予測のために準備ができます。

  • 予測を実行するには、次のコマンドを使用して予測を実行します:
 python3 run_deployment.py --config predict

Streamlitアプリ

Streamlitアプリは、モデルの予測とのインタラクションのためのユーザーフレンドリーなインターフェースを提供します。Streamlitは、インタラクティブなWebベースのデータサイエンスアプリケーションの作成を簡素化し、ユーザーがモデルの予測を探索し理解することを容易にします。また、StreamlitアプリのコードはGitHubで確認できます。

  • 以下のコマンドを使用してStreamlitアプリを起動します: streamlit run streamlit_app.py

これにより、モデルの予測を探索しインタラクションすることができます。

  • Streamlitアプリにより、モデルの予測がユーザーフレンドリーでオンラインで利用可能になり、ユーザーは結果を簡単に操作して理解することができます。以下の画像では、StreamlitアプリがWeb上でどのように表示されるかを見ることができます:

結論

本記事では、MLOpsの力を示すエキサイティングなプロジェクトについて探求しました。エンドツーエンドの機械学習パイプラインの作成において重要なZenmlとMLFlowについて学びました。データ収集プロセス、問題の設定、電気自動車の効率的な予測のための解決策についても探求しました。

このプロジェクトは、効率的な電気自動車の重要性と、MLOpsが効率予測モデルの作成にどのように活用されるかを強調しています。仮想環境の設定、モデルの開発、モデルの設定、モデルのパフォーマンス評価など、重要なステップをカバーしました。記事は、実験のトラッキング、デプロイ、Streamlitアプリを介したユーザーとのインタラクションの重要性を強調して結びます。このプロジェクトにより、電気自動車の未来を形作る手助けができる一歩を踏み出しました。

重要なポイント

  • シームレスな統合:「Zenmlを用いたエンドツーエンドの電気自動車の効率性を予測するパイプラインプロジェクト」は、データの収集、モデルのトレーニング、評価、展開のシームレスな統合を示しています。これは、MLOpsが電気自動車業界を再構築するという大きな可能性を強調しています。
  • GitHubプロジェクト:さらなる探求のために、以下のGitHubプロジェクトにアクセスできます:GitHubプロジェクト
  • MLOpsコース:MLOpsの理解を深めるために、以下の包括的なコースを視聴することをおすすめします:MLOpsコース
  • このプロジェクトは、MLOpsの可能性を示すだけでなく、貴重なインサイトを提供し、より環境に優しい未来に貢献しています。

よくある質問

この記事で表示されているメディアはAnalytics Vidhyaの所有物ではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more