機械学習分散フレームワーク ray が xgboost インスタンスを実行する

        Ray は、高性能機械学習および深層学習アプリケーションを構築するために設計されたオープンソースの分散コンピューティング フレームワークです。その目標は、分散コンピューティングの複雑さを簡素化し、ユーザーがタスクを簡単に並列化して複数のマシンで実行できるようにして、トレーニングと推論を高速化することです。Ray の主な機能には、分散タスク実行、アクター モデル、非同期タスク実行、分散データ セット、ハイパーパラメーターの最適化、およびマルチフレームワークのサポートが含まれます。まず、Ray を使用すると、ユーザーはコンピューティング タスクを複数の小さなタスクに分割し、分散環境でそれらを並行して実行できます。Ray は、複数のマシンのコンピューティング リソースを最大限に活用することで、タスクの実行効率を大幅に向上させます。次に、Ray は、分散アプリケーションの設計とプログラミングを簡素化する同時プログラミング モデルである Actor モデルを採用しています。アクターは、並列実行できる独立した変更可能なオブジェクトであり、分散コンピューティングの効率を高めます。Ray は非同期タスクの実行もサポートしているため、ユーザーはタスクを送信して、タスクの完了を待たずに他の操作を続行できます。このメカニズムにより、柔軟性が向上すると同時に、コンピューティング リソースの使用率が向上します。さらに、Ray は分散データセットのサポートを提供し、複数のマシンにデータを自動的に分散することで、データの並列トレーニングと大規模なデータセットの処理をサポートします。Ray には、ハイパーパラメータの最適化と自動パラメータ調整に使用できる Tune ライブラリが統合されています。モデルのハイパーパラメータ構成を最適化することで、ユーザーは最適なモデルのパフォーマンスをより迅速に見つけることができます。最後に、Ray は一般的な機械学習および深層学習フレームワーク (TensorFlow や PyTorch など) とシームレスに統合し、ユーザーに柔軟な選択肢を提供し、開発者が複雑な分散アプリケーションを簡単に構築できるようにします。つまり、Ray は強力で使いやすい分散フレームワークであり、大規模なデータやリソースを大量に消費する機械学習タスクを処理する必要があるシナリオに特に適しています。ユーザーに高性能の分散コンピューティング機能を提供し、機械学習モデルのトレーニングと推論プロセスを高速化し、分散機械学習アプリケーションの構築に利便性と効率性を提供します。        

        以下は、Ray を使用して XGBoost モデルを並列トレーニングするためのサンプル コードです。これは、Ray を使用してモデルを並列トレーニングするための一般的なガイドとして使用できます。

ステップバイステップのガイドは次のとおりです。

  1. **Ray を初期化する:** Ray を起動して分散コンピューティングを有効にします。

  2. **データのロード:** データセットをロードします。

  3. **データの分割:** データセットをトレーニング セットとテスト セットに分割します。

  4. **XGBoost トレーニング関数を定義します:** 特定のデータセットで XGBoost モデルをトレーニングするための関数を作成します。

  5. **Ray を使用した並列トレーニング:** Ray を使用して、それぞれ異なるデータセットを使用する複数の並列トレーニング タスクを起動します。

  6. ** モデルの収集: ** さまざまなタスクからトレーニング済みの XGBoost モデルを収集します。

  7. **モデル アンサンブル:** 平均予測などのアンサンブル手法を使用して、すべてのモデルの予測を結合します。

  8. **アンサンブル モデルの評価:** テスト セットでのアンサンブル モデルのパフォーマンスを評価します。

  9. **Ray をシャットダウンします:** Ray セッションを閉じてリソースを解放します。

まず、必要なパッケージをインストールする必要があります。

pip install ray[xgboost] xgboost

 以下は、Ray を使用して XGBoost モデルを並列トレーニングする方法を示す簡単な例です。

import ray
import xgboost as xgb
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 在给定数据分割上训练 XGBoost 模型的函数
def train_xgboost(data, labels):
    dtrain = xgb.DMatrix(data, label=labels)
    params = {
        'objective': 'reg:squarederror',
        'eval_metric': 'rmse',
        'max_depth': 3,
        'eta': 0.1,
        'num_boost_round': 100
    }
    model = xgb.train(params, dtrain)
    return model

if __name__ == "__main__":
    # 初始化 Ray(确保有足够的资源可用)
    ray.init(ignore_reinit_error=True)

    # 加载数据集
    data, labels = load_boston(return_X_y=True)

    # 将数据划分为训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)

    # 使用 Ray 进行并行训练
    train_results = ray.get([ray.remote(train_xgboost).remote(X_train, y_train) for _ in range(4)])

    # 使用训练好的模型在测试集上进行预测
    predictions = [model.predict(xgb.DMatrix(X_test)) for model in train_results]

    # 对所有模型的预测结果求平均
    avg_predictions = sum(predictions) / len(predictions)

    # 计算均方根误差(RMSE)
    rmse = mean_squared_error(y_test, avg_predictions, squared=False)
    print(f"Ensemble RMSE: {rmse}")

    # 关闭 Ray
    ray.shutdown()

        このコードは、Ray を使用して XGBoost モデルの並列トレーニングを実装し、モデル統合 (アンサンブル) を通じて予測パフォーマンスを向上させます。コードの動作を 1 行ずつ説明してみましょう。

import ray
import xgboost as xgb
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

rayまず、並列コンピューティング、xgboostXGBoost モデルの構築とトレーニング、load_diabetes糖尿病データセットの読み込み、train_test_splitデータセットのトレーニング セットとテスト セットへの分割、およびmean_squared_error二乗平均平方根誤差の計算に        必要なライブラリをインポートします。

def train_xgboost(data, labels):
    dtrain = xgb.DMatrix(data, label=labels)
    params = {
        'objective': 'reg:squarederror',
        'eval_metric': 'rmse',
        'max_depth': 3,
        'eta': 0.1,
        'num_boost_round': 100
    }
    model = xgb.train(params, dtrain)
    return model

train_xgboostは、XGBoost モデルのトレーニングに使用される という名前の関数        を定義します。関数内のdata特徴データは、labels対応するラベル データです。この関数は、まずフィーチャ データとラベル データをxgb.DMatrixオブジェクトに変換し、次に XGBoost モデルのいくつかのトレーニング パラメーターを定義し、これらのパラメーターを使用して XGBoost モデルをトレーニングします。最後に、関数はトレーニングされたモデルを返します。

if __name__ == "__main__":
    ray.init(ignore_reinit_error=True)

        メイン プログラムで Ray を初期化し、再初期化エラーを無視します。このif __name__ == "__main__":セクションでは、ファイルがメイン プログラムとして実行される場合にのみ次のコードが実行されるようにします。

    data, labels = load_diabetes(return_X_y=True)
    X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)

        糖尿病データセットを読み込み、データセットをトレーニング セットとテスト セットに分割します。テスト セットはデータセット全体の 20% を占めます。

    train_results = ray.get([ray.remote(train_xgboost).remote(X_train, y_train) for _ in range(4)])

        Ray を並列トレーニングに使用し、4 つの並列タスクを開始して 4 つの XGBoost モデルをトレーニングします。各タスクはtrain_xgboostトレーニング用の関数を呼び出し、トレーニング セット データがパラメーターとして関数に渡されます。ray.remoteデコレータは関数呼び出しを Ray タスクとしてカプセル化し、ray.getタスクの結果を収集して返すために使用されます。

    predictions = [model.predict(xgb.DMatrix(X_test)) for model in train_results]

        トレーニングされたモデルを使用してX_testテスト セットに対して予測を行い、予測結果をpredictionsリストに保存します。

    avg_predictions = sum(predictions) / len(predictions)

         すべてのモデルの予測は平均化されます。これは、モデル アンサンブルの 1 つの方法です。複数のモデルの予測を平均化することで、より安定した正確な予測を得ることができます。

    rmse = mean_squared_error(y_test, avg_predictions, squared=False)
    print(f"Ensemble RMSE: {rmse}")

        モデル統合後に二乗平均平方根誤差 (RMSE) を計算します。mean_squared_errorこの関数は二乗平均平方根誤差の計算に使用されます。最後に、モデル アンサンブルの二乗平均平方根誤差が出力されます。

    ray.shutdown()

        Ray セッションを閉じてリソースを解放します。

        このコードの目標は、並列コンピューティングとモデル統合手法を使用して、特に大規模なデータセットでの XGBoost モデルのパフォーマンスを向上させることです。複数のモデルを並行してトレーニングするとトレーニング速度が向上し、モデル統合の向上が期待されます。予測の精度と性別と安定性。

おすすめ

転載: blog.csdn.net/Aresiii/article/details/131976673