分散 ML を使用すると、データ サイエンティストや ML エンジニアは、単一マシンのメモリとコンピューティングの制限を超えて ML モデルのトレーニングをスケーリングできます。データ パーティションを分散し、ワーカーノードのクラスタ全体でワークロードを並列化することで、大規模なデータセットでの複雑なモデルのトレーニングを大幅に高速化できます。
Apache Spark は、分散データ処理の業界標準です。ネイティブの ML ライブラリである MLlib は、分類、回帰、クラスタリング、協調フィルタリング用の分散アルゴリズムを提供し、データの取り込みからモデルのデプロイまでを単一の統合環境内で行えるようにします。
Spark ML パイプラインは、複数の ML ワークフローを 1 つのまとまったパイプラインに統合できるように設計された高レベル API です。これにより、構造化された宣言型ワークフロー内で、さまざまなデータ変換(特徴抽出やスケーリングなど)と ML アルゴリズム(モデル トレーニングなど)を連結できます。
パイプラインを使用すると、データ前処理ステップの同じシーケンスが、モデルのトレーニングと予測の両方で一貫して適用されます。これは、データ漏洩を防ぎ、再現可能な結果を確保するうえで重要です。Spark ML パイプラインの主要なコンポーネントは、Transformer と Estimator です。
ML ワークロードをスケーリングしてハードウェア アクセラレーションを適用すると、Spark GPU の複雑な依存関係の管理という課題が生じることがよくあります。VM インスタンスのプロビジョニング、適切な NVIDIA ドライバのインストール、CUDA と cuDNN のバージョンが PyTorch または TensorFlow ライブラリと一致していることの確認により、デベロッパーの生産性が数日間低下する可能性があります。
Google Cloud は、Managed Service for Apache Spark でこの問題を解決します。このサービスは、事前にパッケージ化された ML ランタイムを提供します。安定した Ubuntu ベースのイメージ(バージョン 2.3 以降)を基盤とするこれらのランタイムには、ワークロードに必要な GPU ドライバ(CUDA、cuDNN、NCCL)と業界標準の ML フレームワーク(PyTorch、XGBoost、トークナイザー、トランスフォーマー)がプリインストールされ、事前構成されています。このゼロセットアップ環境により、チームはインフラストラクチャの構成ではなく、コードの作成に集中できます。
Spark MLlib では、Transformer は、ある DataFrame を別の DataFrame に変換するアルゴリズムです(たとえば、テキストを数値ベクトルに変換するなど)。Estimator は、DataFrame に適合させて Transformer を生成できるアルゴリズムです(たとえば、ロジスティック回帰アルゴリズムをトレーニング データに適合させて、トレーニング済みモデルを生成するなど)。
Spark ML パイプラインを利用することで、データ準備ロジックをモデルと厳密に結合できます。これにより、テストデータや推論データがトレーニング データと同じように処理されることが保証されます。
Managed Service for Apache Spark で Google Cloud ML ランタイムを使用すると、依存関係の管理がオフロードされます。カスタムの Ubuntu ベースのイメージは Google によって継続的に更新され、ネイティブに互換性のある正しいバージョンの NVIDIA ドライバ、CUDA ツールキット、分散 ML フレームワークが事前にパッケージ化されています。
Spark MLlib と Google Cloud データツールの構成要素を理解することは、分散 ML を大規模に実行するために不可欠です。
コンポーネント | 説明 | 主なユースケース | 料金に関する考慮事項 |
Spark MLlib | 一般的な学習アルゴリズム、特徴量化ツール、パイプライン ユーティリティを含む、Apache Spark のスケーラブルな ML ライブラリ。 | 単一ノードのライブラリに依存することなく、分散クラスタ全体で大規模な ML モデルのトレーニングを実行する。 | 費用は、Apache Spark の実行に使用される基盤となる Google Cloud サービス(主に Managed Service for Apache Spark)を通じて発生します。料金は、プロビジョニングされた Compute Engine リソース(vCPU、メモリ、GPU、ディスク)とジョブの実行時間によって異なります。 *Managed Service for Apache Spark の料金をご覧ください。 |
ベクトル アセンブラ | 複数の列(連続値、ワンホット エンコードされたカテゴリなど)を 1 つのベクトル列に結合する、Spark MLlib のコア機能 Transformer。 | 未加工の表形式データを、Spark MLlib ML アルゴリズムが想定する特定の密ベクトル形式またはスパース ベクトル形式に変換して準備する。 | Spark MLlib 内のコンポーネントとして、その実行は Managed Service for Apache Spark で Spark ワークロードを実行する際の全体的なコンピューティング費用に影響します。 |
Spark ML パイプライン | DataFrame 上に構築された高レベル API。ユーザーが複数の特徴量エンジニアリング ステップとモデルを連結するのに役立ちます。 | Transformer と Estimator を統合パイプラインにグループ化して、トレーニングと推論で同一のデータ処理を保証します。 | 他の Spark MLlib コンポーネントと同様に、費用は Managed Service for Apache Spark の実行料金に含まれます。 |
BigQuery ML | BigQuery で標準 SQL クエリを使用して ML モデルを作成し実行できるサービス。 | 非常に複雑で反復的な分散ジョブを Spark に移行する前に、データが存在する場所で直接モデルをトレーニングします。 | BigQuery ML には独自の料金モデルがあります。以下に対して料金が発生します。
|
コンポーネント
説明
主なユースケース
料金に関する考慮事項
Spark MLlib
一般的な学習アルゴリズム、特徴量化ツール、パイプライン ユーティリティを含む、Apache Spark のスケーラブルな ML ライブラリ。
単一ノードのライブラリに依存することなく、分散クラスタ全体で大規模な ML モデルのトレーニングを実行する。
費用は、Apache Spark の実行に使用される基盤となる Google Cloud サービス(主に Managed Service for Apache Spark)を通じて発生します。料金は、プロビジョニングされた Compute Engine リソース(vCPU、メモリ、GPU、ディスク)とジョブの実行時間によって異なります。
*Managed Service for Apache Spark の料金をご覧ください。
ベクトル アセンブラ
複数の列(連続値、ワンホット エンコードされたカテゴリなど)を 1 つのベクトル列に結合する、Spark MLlib のコア機能 Transformer。
未加工の表形式データを、Spark MLlib ML アルゴリズムが想定する特定の密ベクトル形式またはスパース ベクトル形式に変換して準備する。
Spark MLlib 内のコンポーネントとして、その実行は Managed Service for Apache Spark で Spark ワークロードを実行する際の全体的なコンピューティング費用に影響します。
Spark ML パイプライン
DataFrame 上に構築された高レベル API。ユーザーが複数の特徴量エンジニアリング ステップとモデルを連結するのに役立ちます。
Transformer と Estimator を統合パイプラインにグループ化して、トレーニングと推論で同一のデータ処理を保証します。
他の Spark MLlib コンポーネントと同様に、費用は Managed Service for Apache Spark の実行料金に含まれます。
BigQuery ML
BigQuery で標準 SQL クエリを使用して ML モデルを作成し実行できるサービス。
非常に複雑で反復的な分散ジョブを Spark に移行する前に、データが存在する場所で直接モデルをトレーニングします。
BigQuery ML には独自の料金モデルがあります。以下に対して料金が発生します。
Google Cloud の Managed Service for Apache Spark は、インフラストラクチャの複雑さを抽象化し、サーバーレス環境またはカスタマイズ可能なマネージド クラスタを使用して、大規模なモデル トレーニング用の Spark ML パイプラインを実行できるようにします。
Spark GPU の複雑な依存関係を排除するため、このサービスでは、ネイティブに互換性のある NVIDIA ドライバ、CUDA ツールキット、分散フレームワークを完備した事前パッケージ化された ML ランタイムを利用しています。これにより、ゼロセットアップでハードウェア アクセラレーション ワークロードをデプロイすることができます。
Transformer を使用してデータを抽出してスケーリングする方法と、Estimator を使用してアルゴリズムをトレーニングする方法を学習します。
基盤となるインフラストラクチャを管理することなく、GPU アクセラレーション Spark クラスタを起動できます。Google Cloud の ML ランタイムは事前構成されているため、複雑な Spark GPU の依存関係を回避できます。