Rayを使用してアプリケーションを拡張する¶
Snowflakeコンテナランタイムは、 AIおよびPythonアプリケーションをスケーリングするためのオープンソースの統一フレームワークである Ray と統合しています。 この統合により、機械学習ワークロードに関してSnowflake上でRayの分散コンピューティング機能を使用することができます。
Rayはプリインストールされており、Snowflake MLコンテナランタイム内のバックグラウンドプロセスとして実行されます。コンテナランタイムのRayには、以下の方法でアクセスできます。
Snowflake Notebooks :Rayに接続し、タスクを定義し、クラスターを動的にスケーリングできるインタラクティブな環境で、開発や実験を行うことができます。
Snowflake ML Jobs :構造化された反復可能なジョブとして、Rayのアプリケーションを送信します。実稼働ワークロードのジョブ構成の一部として、クラスターサイズを指定できます。
Snowflake Notebookまたは ML Job内でコンテナランタイムを実行すると、そのコンテナの一部としてRayプロセスが自動的に開始されます。
以下のPythonコードを使用してクラスターに接続します。
重要
Rayクラスターに接続する際は、必ず "auto" アドレスを使用してください。"auto" アドレスで初期化すると、Snowflakeがセッション用にプロビジョニングしたRayクラスターのヘッドノードにアプリケーションが誘導されます。
Rayクラスターのスケーリング¶
Rayクラスターに接続した後、ワークロードの計算需要に合わせてクラスターのサイズを調整することができます。
Rayクラスターをスケールするには、以下のアプローチを使用します。
ノートブック内では、 scale_cluster 関数を使用してクラスターを動的にスケールアップまたはスケールダウンできます。これは、リソースのニーズが変化する可能性のあるインタラクティブなワークフローに最適です。
expected_cluster_size=5 を指定すると、1つのヘッドノードと4つのワーカーノードになります。
ML Jobsでは、ジョブ定義内でクラスターサイズを宣言的に定義します。ジョブ定義でクラスターサイズを指定すると、ジョブの開始時に必要なノード数がプロビジョニングされます。
例えば、ジョブデコレーターには以下が含まれる場合があります。
クラスターを使い終わったら、スケールダウンすることができます。詳細については、 クリーンアップ をご参照ください。
Ray Dashboardによるモニタリング¶
Snowflake Notebookからジョブを実行している場合、Ray Dashboardを使用してクラスターをモニタリングできます。ダッシュボードは、クラスターのリソース、ジョブ、タスク、およびパフォーマンスを表示できるウェブインターフェースです。ダッシュボード URLを取得するには、次のコードを使用してください。
新しいブラウザのタブで URLを開き、Snowflakeの認証情報でログインします。
高度な使用例¶
このセクションでは、複雑なワークロードや既存のアプリケーションを移行するための高度なRayの機能について説明します。
Rayによる分散ワークロードの作成と運用¶
Rayは、分散ワークロードの作成と運用を可能にするコンポーネントを提供します。これらには、ワークロードの構築とスケーリングに不可欠なプリミティブを備えたRay Coreによる基礎コンポーネントが含まれます。
また、データ前処理、 MLトレーニング、ハイパーパラメーターチューニング、モデル推論のための独自のワークフローを構築できる以下のライブラリも含まれています。
Ray Data :スケーラブルなデータ処理と変換
Ray Train :MLモデルの分散学習と微調整
Ray Tune :高度な探索アルゴリズムによるハイパーパラメーター最適化
Ray Serve :モデルサービングと推論
以下のセクションでは、これらのライブラリを直接使用する方法について説明します。一方、Ray上に構築されたSnowflakeネイティブインターフェースは、Rayベースのアプリケーションを構築、デプロイ、運用するための追加ツールを提供します。
Ray Core:タスクとアクター¶
Rayは以下の分散コンピューティングプリミティブを提供します。
タスク :リモートで実行され値を返すステートレス関数
アクター :リモートでインスタンス化し、複数回呼び出すことができるステートフルなクラス
オブジェクト :Rayの分散オブジェクトストアに保存された不変の値
リソース :タスクおよびアクター用の CPU、 GPU、カスタムリソース要件
次の例は、基本的なRayタスクとアクターを使って線形回帰を行う方法を示しています。
Ray Train:分散トレーニング¶
Ray Trainはモデルの分散トレーニングと微調整を可能にするライブラリです。トレーニングコードは、1台のマシンでもクラスター全体でも実行できます。
Ray Trainは、シングルノードとマルチノードの両方の実行に使用できます。
マルチノードトレーニングの場合は、以下を処理する必要があります。
チェックポイント用の分散ストレージ(ノード間でファイルシステムが共有されない)
カスタムデータのロード
データの取り込みとトレーニングリソースの使用状況を調整するための手動リソース構成
合理化されたエクスペリエンスを得るには、XGBoost、LightGBM、およびPyTorch用に最適化されたトレーニング関数を使用してください。同じRayクラスター上で、これらの関数は以下を処理します。
Snowflakeステージベースのチェックポイント
Snowflakeネイティブデータの取り込み
データの取り込みとトレーニングのための組み込みリソース割り当て
Ray Data:スケーラブルなデータ処理¶
Ray Dataは、 MLワークロードのためのスケーラブルな分散データ処理を提供します。ストリーミング実行と遅延評価によって、クラスターメモリより大きなデータセットを扱うことができます。
注釈
Snowflakeは、あらゆるSnowflakeデータソースをRay Dataに変換するネイティブ統合を提供します。詳細については、Data ConnectorとRay Data Ingestionのページを参照してください。
Ray Dataは以下に使用します。
シングルノードメモリに収まらない大規模データセットの処理
分散データ前処理と特徴量エンジニアリング
他のRayライブラリと統合するデータパイプラインの構築
Ray Tune:分散ハイパーパラメーターチューニング¶
Ray Tuneは、高度な探索アルゴリズムと早期停止機能を備えた分散ハイパーパラメーター最適化を提供します。Snowflakeデータソースからの読み取りをより統合的かつ最適化するには、ネイティブのハイパーパラメーター最適化(HPO)APIを使用します。HPO最適化の詳細については、 モデルのハイパーパラメーターの最適化 をご参照ください。
分散 HPO の実装にもっとカスタマイズ可能なアプローチをお探しなら、Ray Tuneをお使いください。
Ray Tuneは以下のような用途に使用できます。
複数のトライアルを並行して行うハイパーパラメーターの最適化
高度な探索アルゴリズム(ベイズ最適化、集団ベースのトレーニング)
分散実行を必要とする大規模ハイパーパラメーターのスイープ
使用中のモデル¶
モデルサービングには、Snowflakeのネイティブ機能を使用できます。詳細については、 リアルタイム推論のためのモデルの展開( REST API ) をご参照ください。
Rayクラスター上の分散アプリケーションの送信と管理¶
Rayジョブを使って、Rayクラスター上に分散アプリケーションを投入・管理し、リソースの分離とライフサイクル管理を改善します。Rayクラスターへのアクセスが必要なジョブベースの実行には、Snowflakeでは MLジョブの使用を推奨しています。それにより、Rayのアプリケーションロジックを定義できます。既存の実装を移行する場合など、Rayジョブインターフェースへの直接アクセスが必要な場合には、 Rayドキュメント に記載されているRayジョブプリミティブを使用することができます。
以下の目的でRayジョブを使用します。
実稼働 MLパイプラインとスケジュールされたワークフロー
フォールトトレランスを必要とする長時間稼働のワークロード
バッチ処理と大規模データ処理
オプションによるRayクラスターのスケーリング¶
Snowflakeノートブックから、計算需要に合わせてRayクラスターを正確にスケールすることができます。クラスターは、ヘッドノード(コーディネーター)とワーカーノード(タスク実行用)から構成されます。
リソースモニター¶
クリーンアップ¶
クラスターを使い終わった後は、追加料金が発生しないようにスケールダウンすることができます。スケールダウンするには以下のコードを使用します。