Snowpark Pythonによる機械学習モデル開発をはじめるための足掛かりのご紹介(2023年8月版)

2023年8月時点での、Snowflakeのデータを使った機械学習モデル開発に必要な要素について、主にDevelopersIOの記事を中心にまとめました。
2023.08.21

データアナリティクス事業本部 機械学習チームの鈴木です。

2023年8月時点で、Snowpark MLのプレビューをはじめとして、Snowflakeを中心とする機械学習モデル開発や機械学習システム構築のサポートが強化されつつあります。

直近で、Snowpark Pythonを中心にSnowflakeの機械学習用途での利用方法についてキャッチアップを進めており、その中で執筆したり参考にしたりしたDevelopersIOの記事やSnowflakeのリソースについてご紹介します。

この記事の内容

Snowpark Pythonによる機械学習モデル開発をはじめるために、参考にするとよかった以下の観点について資料をまとめました。

  1. Snowpark Python用の開発環境
  2. Snowpark PythonのAPI
  3. 探索的データ分析
  4. 機械学習モデル開発
  5. リソース作成のためのIaCツール

これらの観点を通して資料を確認することで、記事執筆時点でプレビュー中のSnowpark MLを使うために必要なノウハウ習得の足掛かりになればと思います。

1. Snowpark Python用の開発環境

Python3.8を利用できる環境にSnowpark Pythonをインストールすることで、Pythonを使ってSnowflakeのデータを操作することができました。

以下の記事ではSnowflakeのドキュメントを参考に、Jupyter NotebookをインターフェースとしてインタラクティブにSnowpark Pythonを使い、Snowflakeのデータを操作するための環境構築例をご紹介しました。

SnowsightのPythonワークシートもありますが、現状ではSnowparkを使ったアプリケーション開発のための道具というよりは、SnowparkのDataFrameを使ってSnowflakeに格納したデータを検索・加工するためのものという印象でした。

また、Python3.9および3.10をサポートしたSnowpark Pythonも現在プレビュー中となっています。

2. Snowpark PythonのAPI

機械学習モデル開発の用途で特に押さえておきたいAPIを2つピックアップします。

DataFrameとその操作

DataFrameはSnowpark PythonによるSnowflakeのデータ操作の中心的なAPIです。

DataFrameを操作し、collectなどのアクションを実行すると、評価された対応するSQLがSnowflakeに送信されます。

以下の記事ではDataFrameの操作を紹介しつつ、Snowflakeのクエリ履歴からどのようなSQLに変換されたのかまでを確認しました。

UDF作成

UDFはSnowpark MLを使わない従来の機械学習モデルのデプロイで使用します。Snowpark PythonのAPIを使ってUDFを作成することができます。

以下の記事で、Snowpark PythonによるUDFの作成と、Snowflakeに送信されたSQLの確認を行いました。

3. 探索的データ分析

性能の良い機械学習モデルを作るためには探索的データ分析(Exploratory data analysis、以降EDA)によりデータにどのような傾向があるのかを探り、効果的な特徴量を作成することが重要です。

以下の記事ではAWS環境がある前提で、EDAをどのような環境で行うとよさそうかをご紹介しました。

特にSageMaker Studioノートブックを使う例として、Snowpark PythonでDataFrameを使ってデータを取得し、分析しました。

Snowflakeの公式ページの『DATA ANALYTICAL TOOLS』では、データから洞察を引き出すためのパートナーエコシステムとして、4つの製品を紹介しているため、ほかの選択肢を知りたい方は一度ご確認ください。

4. 機械学習モデル開発

Snowpark MLを使う方法

Snowpark ML APIの発表により、Snowflakeのリソースと仕組みを使って、機械学習モデルの開発とモデルの展開ができるようになりました。

※ 記事執筆時点ではプレビュー中の機能です。

現時点で、以下の『Snowpark ML: Machine Learning Toolkit for Snowflake』開発者ガイドに、Snowpark MLの2つの主となるコンポーネントが記載されています。

  • Snowpark ML Development
  • Snowpark ML Ops

同ガイドより利用イメージを引用します。以下はDecisionTreeClassifierクラスのモデルを利用する例です。

# 2023/08/21に以下のリソースより引用
# https://docs.snowflake.com/en/developer-guide/snowpark-ml/snowpark-ml-modeling

from snowflake.ml.modeling.tree import DecisionTreeClassifier

model = DecisionTreeClassifier(
    input_cols=feature_column_names, label_cols=label_column_names, sample_weight_col=weight_column_name,
    output_cols=expected_output_column_names
)

宣言したモデルはscikit-learnなど使い慣れたAPIと同様に、fitでモデルの訓練を行うことができます。

# 2023/08/21に以下のリソースより引用
# https://docs.snowflake.com/en/developer-guide/snowpark-ml/snowpark-ml-modeling

model.fit(df)

例から、Snowpark Pythonの使い方が分かる開発者であれば、人気のある機械学習ライブラリと同じようなインターフェースで利用できることが伺えます。

機械学習モデルは上記に記載の決定木のようなものから、LightGBMXGBoostも利用できます。

デプロイしたモデルはSnowflakeに格納したデータに対して推論を行うこととなります。

以下のQuickStartでは、具体的にサンプルのノートブックを使ってSnowpark MLのAPIをどのように使えばいいか学ぶことができましたのでご紹介します。

UDFを使う方法

これまでのSnowpark MLを使わない従来のSnowflakeでの機械学習モデルのデプロイは、以下のQuickStartに例があります。Amazon SageMakerにて、SnowparkによりDataFrameをSnowflakeからデータを取得し、学習したモデルを含めてUDFを作成し、UDFの呼び出しにより推論を実行します。

以下はQuickStartで紹介されている『1_prepare_build_deploy_model.ipynb』に記載の、機械学習モデルを含んだUDFの例です。先に紹介したUDFに関するブログを併せて読んで頂くと仕組みが分かりやすいと思います。

# 2023/08/21に以下のリソースより引用
# https://github.com/Snowflake-Labs/sfguide-getting-started-snowpark-python-sagemaker/blob/main/1_prepare_build_deploy_model.ipynb

@udf(name='predict_failure',session=session,replace=True,is_permanent=True,stage_location='@maint_stage')
def predict_failure(df: PandasDataFrame[int, int, int, int, int, int]) -> PandasSeries[float]:
    import sklearn
    import pandas as pd
    df.columns = ['AIR_TEMPERATURE_K', 'PROCESS_TEMPERATURE', 'ROTATIONAL_SPEED_RPM','TORQUE_NM','TOOL_WEAR_MIN','HUMIDITY_RELATIVE_AVG']
    model = load_model('model.pkl')
    return model.predict_proba(df)[:,1]

このようにUDFとしてデプロイすることでSnowflakeに格納したデータに対して推論を行うことができますが、単純に機械学習のアプリケーションとして利用したい場合は、例えばAmazon SageMakerで推論エンドポイントとしてデプロイしてもいいかもしれません。

5. リソース作成のためのIaCツール

データベースやデータウェアハウスなど、Snowflakeのリソースを作成するため、IaCツールを利用することが可能です。ここではTerraformおよびPulumiをご紹介します。

Terraform

以下のQuickstartでは、データベース・データウェアハウス・ユーザーなどのリソースを、Terraformを使って作成する例が紹介されていました。

Terraformでリソースをデプロイするときの認証には、ユーザー・パスワードおよびキーペアを使用することが可能です。

DevelopersIOでは少し前のものになりますが、以下の記事でご紹介していました。

Pulumi

TypeScriptとPulumiを使った方法も、DevelopersIOでご紹介していました。

以下の記事ではユーザーとデータベースを作成しています。ロールなどほかのリソースの記事についても、記事内にリンクが紹介されています。

DevelopersIOのSnowflakeのブログ

DevelopersIOでは#SnowflakeタグでSnowflakeに関するブログ記事を公開しているので、ぜひご確認ください。

最後に

Snowflakeの機械学習用途での利用方法について、関連するDevelopersIOの記事やSnowflakeのリソースをまとめてご紹介しました。

Snowpark MLの一般提供に向けて、関連する技術要素のキャッチアップの参考になりましたら幸いです。