Snowpark ML: Snowflakeにおけるエンドツーエンドの機械学習

注釈

Snowpark ML Modeling API はパッケージバージョン1.1.1の時点で一般公開であり、Snowparkモデルレジストリはパッケージバージョン1.2.0の時点でプレビューとして利用可能です。近日提供予定のSnowpark ML 特徴量のドキュメントをいち早く入手するには、Snowflakeの担当者にお問い合わせください。

Snowpark ML は、モデル開発と運用のためのコンポーネントを含む、Snowflake内にあるエンドツーエンド ML ワークフローのためのPythonライブラリと基になるインフラストラクチャです。Snowpark ML では、前処理、特徴量エンジニアリング、トレーニングに使い慣れたPythonフレームワークを使用できます。データ移動、サイロ化、ガバナンスのトレードオフなしに、モデルを完全にSnowflakeで展開し、管理することができます。

Tip

Snowpark ML でのエンドツーエンドのワークフローの例については、 Snowpark ML を使用した機械学習入門 をご参照ください。

Snowpark ML の主な構成要素

Snowpark ML は、エンドツーエンドの機械学習開発と管理プロセスの各段階をサポートする APIs を提供し、その中には以下の主要な機能が含まれています。

また、Snowpark ML はモデルが データにアクセスする 方法も提供します。

Snowpark ML モデリング

Snowpark ML Modeling は、scikit-learn、xgboost、lightgbmなどの一般的な機械学習フレームワークを使用して、データの前処理、特徴量エンジニアリング、Snowflakeでのモデル学習をサポートします。この API には、Snowparkに最適化されたウェアハウスが提供するコンピューティングリソースを使用して、スケーラブルなデータ変換を提供できる前処理モジュールも含まれています。

Snowpark ML Operations

Snowpark ML Operations(MLOps)は、 Snowpark ML モデルレジストリ を採用しており、Snowpark ML 開発 API を補完します。モデルレジストリは、Snowflakeにおけるモデルのセキュアな展開と管理を可能にし、Snowflakeの内部と外部の両方でトレーニングされたモデルをサポートします。

Snowpark ML Data Access

Snowpark ML Data Accessは、機械学習モデルにデータをフィードするためのシンプルで高性能な方法を提供します。

  • FileSet API は、クエリやSnowpark DataFrame からSnowflake内部ステージにデータを具体化するための、 Python fsspec 準拠の API を提供します。また、データを処理したり、 PyTorch や TensorFlow にフィード したりするための便利なメソッドも提供します。

  • フレームワークコネクタ のセットは、ネイティブデータローダー形式で、PytorchとTensorflowフレームワーク用に最適化された安全で高パフォーマンスのデータプロビジョニングを提供します。

Snowpark ML のインストール

重要

Snowpark Connector for Python ライブラリへの最近の変更により、 PyArrow への依存関係が削除されました。Snowpark ML は PyArrow を必要としますが、Snowpark ML 1.1.2以前では明示的な依存関係はありません。以前のバージョンを使用していて、最近Snowpark Connector for Pythonをアップグレードしている場合は、 PyArrow の手動インストールが必要になる場合があります。これを行うには、プロジェクトでcondaとpipのどちらを使用しているかによって、以下のコマンドのいずれかを使用します。

conda install pyarrow
Copy
python -m pip install pyarrow
Copy

Snowpark ML のすべての特徴量は、単一のパッケージ、 snowflake-ml-python で提供されます。

Snowpark ML は、Snowflake condaチャネルから conda コマンドを使用するか、Python Package Index(PyPI)から pip を使用してインストールすることができます。Condaがお勧めです。

Snowflake condaチャネルからのSnowpark ML のインストール

警告

ARMベースのMac(M1またはM2チップ搭載)上のCondaからSnowpark ML をインストールするには、Conda環境を作成する際にシステムアーキテクチャを指定する必要があります。このためには、 conda create コマンドで CONDA_SUBDIR=osx-arm64CONDA_SUBDIR=osx-arm64 conda create --name snowpark-ml と設定します。

  1. Snowpark MLをインストールするconda環境を作成します。既存の環境を使用する場合は、このステップをスキップします。

    conda create --name snowpark-ml
    
    Copy
  2. Conda環境をアクティブにします。

    conda activate snowpark-ml
    
    Copy
  3. Snowflake condaチャネルからSnowpark MLをインストールします。

    conda install --override-channels --channel https://repo.anaconda.com/pkgs/snowflake/ snowflake-ml-python
    
    Copy

Tip

Snowpark ML を操作する場合は、可能な限りSnowflake Condaチャネルからパッケージをインストールして、Snowpark ML で検証済みのパッケージを確実に受け取れるようにしてください。

PyPI からのSnowpark ML のインストール

標準のPythonパッケージマネージャー、 pip を使用して、Pythonパッケージインデックス(PyPI)からSnowpark ML パッケージをインストールできます。

警告

conda環境を使用している場合は、このインストール手順を使用しないでください。代わりに condaの命令 を使用します。

  1. プロジェクトディレクトリに移動し、Python仮想環境を有効にします。

    cd ~/projects/ml
    source .venv/bin/activate
    
    Copy
  2. Snowpark ML パッケージをインストールします。

    python -m pip install snowflake-ml-python
    
    Copy

オプションのモデリング依存関係のインストール

Snowpark ML Modeling APIs には、Snowpark ML の依存関係としてインストールされていない依存関係を必要とするものがあります。scikit-learnとxgboostパッケージは、Snowpark ML Modelingをインストールするとデフォルトでインストールされますが、lightgbmはオプションの依存関係です。 snowflake.ml.modeling.lightgbm 名前空間のクラスを使う予定の場合は、ご自身でlightgbmをインストールしてください。

以下のコマンドを使用してconda環境をアクティブ化し、Snowflake condaチャンネルからlightgbmをインストールします。

conda activate snowpark-ml
conda install --override-channels --channel https://repo.anaconda.com/pkgs/snowflake/ lightgbm
Copy

以下のコマンドを使用して仮想環境をアクティブ化し、pipを使用してlightgbmをインストールします。

.venv/bin/activate
python -m pip install 'snowflake-ml-python[lightgbm]'
Copy

SnowflakeはSnowpark ML にオプションの依存関係を追加することがあります。pipを使ってオプションの依存関係をすべてインストールするには

.venv/bin/activate
python -m pip install 'snowflake-ml-python[all]'
Copy

Snowpark Pythonの設定

Snowpark PythonはSnowpark ML の依存関係であり、Snowpark ML をインストールすると自動的にインストールされます。ご使用のシステムにSnowpark Pythonが設定されていない場合は、追加の構成ステップが必要になることがあります。Snowpark Pythonの設定手順については、 Snowpark Pythonの開発環境の設定 をご参照ください。

Snowflakeへの接続

Snowpark ML では、Snowpark Session オブジェクトを使用してSnowflakeに接続する必要があります。 snowflake.ml.utils.connection_params モジュールの SnowflakeLoginOptions 関数を使用して、セッションを作成するための構成設定を取得します。この関数は、 SnowSQL 構成ファイル 内の名前付き接続から、または設定した環境変数から、接続設定を読み取ることができます。これらのパラメーターを含むディクショナリを返し、それを使用して接続を作成することができます。

以下の例では、 SnowSQL 構成ファイルの名前付き接続 myaccount から接続パラメーターを読み取っています。Snowpark Pythonセッションを作成するには、 Session クラスのビルダーを作成し、ビルダーの configs メソッドに接続情報を渡します。

from snowflake.snowpark import Session
from snowflake.ml.utils import connection_params

params = connection_params.SnowflakeLoginOptions("myaccount")
sp_session = Session.builder.configs(params).create()
Copy

これで、セッションを必要とするSnowpark ML 関数に渡すことができるようになります。

Tip

既存のPython用Snowflakeコネクタ接続からSnowpark Pythonセッションを作成するには、セッションビルダーに接続オブジェクトを渡します。ここで、 connection はPython用Snowflakeコネクタ接続です。

session = Session.builder.configs({"connection": connection}).create()
Copy

ウェアハウスサイズの指定

モデルのトレーニングや推論の実行など、Snowpark ML の多くの部分はSnowflakeウェアハウスでコードを実行します。これらの操作は、接続に使用したセッションにより指定されたウェアハウスで実行されます。たとえば、 SnowSQL 構成ファイル の名前付き接続からセッションを作成する場合は、名前付き構成の warehousename パラメーターを使用してウェアハウスを指定することができます。

ウェアハウスの設定が構成内に存在しない場合は、ここに示すように、 Session オブジェクトを作成する際にその設定を追加することができます。

from snowflake.snowpark import Session
from snowflake.ml.utils import connection_params
# Get named connection from SnowQSL configuration file
params = connection_params.SnowflakeLoginOptions("myaccount")
# Add warehouse name for model method calls if it's not already present
if "warehouse" not in params:
    params["warehouse"] = "mlwarehouse"
sp_session = Session.builder.configs(params).create()
Copy

セッションでウェアハウスが指定されていない場合や別のウェアハウスを使用する場合は、セッションの use_warehouse メソッドを呼び出します。

sp_session.use_warehouse("mlwarehouse")
Copy

コストの考慮事項

Snowflakeでモデルをトレーニングして使用すると、仮想ウェアハウスでコードを実行することになり、コンピューティングコストが発生します。これらのコストは、モデルの型や学習予測に使用するデータ量によって異なります。Snowflakeのコンピューティングコストに関する一般的な情報については、 コンピューティングコストについて をご参照ください。

参考文献

Snowpark ML ModelingおよびSnowpark ML Opsに関する情報については、以下のリソースをご参照ください。

エンドツーエンド ML ワークフロー

Modeling

データアクセス

ML 操作

Snowflakeの担当者にお問い合わせいただくと、現在開発中の他の特徴量に関するドキュメントをいち早く入手できます。

API 参照情報

Snowpark ML API リファレンス には、一般に公開されているすべての機能に関するドキュメントが含まれています。インタラクティブなPythonセッションでPythonの help 関数を使用すると、どのクラスの API の詳細なドキュメントも取得できます。例:

from snowflake.ml.modeling.preprocessing import OneHotEncoder

help(OneHotEncoder)
Copy