なぜ重要か
従来は複数インスタンスでの処理実行に必要なトポロジー確認や、単一のhead resultを持たないジョブの結果判定を個別に実装する必要がありました。今回の変更により、parallel=Trueで各インスタンスに処理を配布し、preflightで実行前の疎通や短いDDPステップを確認できます。distributed_result()を使うことで、成功時の各インスタンスの状態や失敗時の例外を一貫して取得できます。
対象となるチーム
- 分散学習・大規模推論を担当するMLエンジニア
- Snowflake ML Jobsの実行基盤を管理するデータプラットフォームチーム
- PyTorch c10dを利用する機械学習基盤チーム
- Feature Storeのオンライン提供を設計するデータエンジニア
提供条件
- 対象バージョンはsnowflake-ml-python 1.53.0(2026-08-24)です。
- 提供ステータスの記載はありません。
- 必要なエディションの記載はありません。
- 対応リージョンの記載はありません。
- preflightはPyTorch c10d rendezvous backendのみを対象とします。
ユースケース
- 複数ノードでの分散学習を実行する。各インスタンスはSNOWFLAKE_JOB_INDEXやSNOWFLAKE_JOBS_COUNTなどの環境変数で自身の役割とジョブ構成を取得できます。
- 分散推論やバッチ処理を各インスタンスで並列実行する。単一のhead resultを前提にせず、distributed_result()で全インスタンスの終了状態を確認できます。
- 本番実行前に分散ジョブの接続設定を検証する。preflight='wiring'でrendezvousと小規模collectiveを確認し、エントリポイントを実行せずに問題を検出できます。
- DDP実行性能の初期確認を行う。preflight='reference'では短い合成DDPステップを計測し、instance 0からステップ時間を報告します。
- Iceberg-backed feature viewをPostgres online storeへ連携する。OnlineConfig(store_type=OnlineStoreType.POSTGRES)を指定した場合にオンラインストレージを有効化できます。
仕組みと使い方
ML Jobのsubmit_file、submit_directory、submit_from_stageにparallel=Trueを指定します。エントリポイントは各インスタンスで直接実行され、SNOWFLAKE_JOB_INDEX、SNOWFLAKE_JOBS_COUNT、MLRS_HEAD_IP、MLRS_RDZV_PORT、MLRS_NODE_IPSなどの環境変数からジョブトポロジーを参照できます。実行前検証はparallel=Trueと同時にpreflight='wiring'またはpreflight='reference'を指定します。ジョブ完了後はMLJob.distributed_result()を呼び出し、成功時はDistributedResultを取得します。いずれかのインスタンスが失敗した場合はDistributedJobErrorが発生し、例外の.resultにDistributedResult、causeに最初に失敗したインスタンスの再構成例外が格納されます。Iceberg-backed feature viewでは、OnlineConfig(store_type=OnlineStoreType.POSTGRES)を指定してPostgres online storeを有効化します。
導入ステップ
- snowflake-ml-pythonを1.53.0へ更新し、既存ジョブと依存関係の互換性を確認します。
- submit_file、submit_directory、またはsubmit_from_stageの呼び出しにparallel=Trueを追加し、エントリポイントが複数インスタンスで安全に動作するよう実装します。
- エントリポイントでジョブインデックスやノード情報を環境変数から読み取り、分散処理の割り当てを検証します。
- 本実行前にpreflight='wiring'を実行し、必要に応じてpreflight='reference'でDDPステップ時間を確認します。
- distributed_result()で全インスタンスの終了コード、失敗インスタンス、instance 0の戻り値を記録します。
- Feature StoreでIceberg-backed feature viewを使う場合は、Postgres online storeを指定した検証環境でオンラインアクセスを確認します。
運用上の注意
- parallelのデフォルト値はFalseです。既存ジョブは自動的に分散実行へ変更されません。
- preflightはparallel=Trueと併用する必要があります。チェックに失敗するとエントリポイントは実行されず、失敗はdistributed_result()経由で表面化します。
- referenceチェックがCPUプールまたは単一インスタンスに適用されない場合は、skippedとして扱われジョブは継続します。
- Feature Storeのregister_feature_viewは、managed batch feature viewでsource_refsが未指定の場合、feature_dfのスキーマからFV_SOURCE_REFSメタデータを記録するようになりました。
- FileSet、CamelCase形式のsnowflake.ml.cortex関数、partitioned_inference_api、MLJob.submit_*のadditional_payloads、HuggingfacePipelineModelは非推奨です。
制約事項
- parallel=Trueはcallable(@remote)payloadではサポートされません。
- preflightが対象とするのはPyTorch c10d rendezvous backendのみです。
- Iceberg-backed feature viewのオンラインストレージはPostgres online storeでのみ対応し、その他のstore typeではサポートされません。
- 提供ステータス、エディション、リージョン、必要権限の詳細はリリースノートに記載されていません。
- 分散ジョブには単一のhead resultがないため、通常の単一結果取得ではなくdistributed_result()を利用する必要があります。
次に確認すること
- Snowflake ML Jobsの公式ドキュメントで、parallel実行時のジョブトポロジー、環境変数、compute pool要件を確認する。
- 検証用ジョブでwiringとreferenceを実行し、利用するcompute poolやPyTorch構成での適用結果を記録する。
- distributed_result()の成功・失敗時の例外処理と、各インスタンスのexit_codesの監視方法をテストする。
- Feature Storeの公式ドキュメントでIceberg-backed feature viewとPostgres online storeの権限、構成、サポート条件を確認する。
公式情報
仕様・提供条件は更新される可能性があります。導入前に必ず公式リリースノートを確認してください。
https://docs.snowflake.com/release-notes/clients-drivers/snowpark-ml-2026