pipでSnowpark ML Modeling用のローカル開発環境を準備する
データアナリティクス事業本部 機械学習チームの鈴木です。
現在パブリックプレビュー版のSnowpark ML Modelingですが、既にクイックスタートも公開されております。
今回はローカル環境にpipでJupyter環境を準備する方法について、このクイックスタート実施を題材にしつつ整理してみたのでご紹介します。
この記事の内容
今回はSnowpark MLのローカル開発環境をpipで準備する方法をまとめましたのでご紹介します。
以下の『Intro to Machine Learning with Snowpark ML for Python』はSnowpark MLを使ったデータの前処理〜モデルの作成・デプロイまでが学べるクイックスタートです。Snowpark ML ModelingはSnowpark MLの主要な機能の一つで、クイックスタートでは主にこの機能を使った開発が紹介されています。
今回はこのクイックスタートを行うための準備を目標とします。一部クイックスタート固有の作業が出てきますが、自身の環境を作成したい場合は適宜読み替えて頂ければと思います。
Snowpark MLのローカル開発環境はcondaまたはpipで構築する2つの方法がドキュメントで紹介されており、この記事はpipで構築例になります。
Snowpark MLを使った開発にはSnowpark Pythonも必要ですので、合わせて準備を行いました。
ガイドは以下を参考にしました。
補足事項として、Snowpark Python単体の時はPandasのバージョンは2系で問題なかったのですが、Snowpark MLは1系に依存していることがpipしてみると分かったのでそれを踏まえて環境構築しています。
なお、記事執筆時点ではSnowpark ML Modelingはパブリックプレビューですのでご注意ください。
前提
以下に記載の通り、事前準備をしました。
実行環境
- macOS Ventura バージョン13.6(Apple M1チップ)
- Python 3.10.13
特に自分のローカル環境ではpyenvを使ってPythonのバージョン指定をできるようにしていたので、以下のようにしてバージョン指定をしました。
pyenv local 3.10.13 python --version # Python 3.10.13 pip -V # pip 23.0.1 from ローカルのパス/pip (python 3.10)
クイックスタートから引用するコードについて
以降の内容では、『Intro to Machine Learning with Snowpark ML for Python クイックスタート』のコードを引用します。このコードはApache-2.0 license
です。
引用元のノートブックとライセンス表記については、以下のレポジトリをご確認ください。
やってみた
1. Python環境のセットアップ
まずは作業用ディレクトリを作成しました。
mkdir snowparkml cd snowparkml
次に作業用ディレクトリで仮想環境を作成し、有効化しました。
python -m venv snowparkml source snowparkml/bin/activate
次にrequirements.txt
を準備しました。今回は以下のようにしました。
pandas==1.5.3 pyarrow<10.1.0,>=10.0.1 snowflake-snowpark-python==1.5.1 notebook==7.0.0 snowflake-ml-python==1.0.10
必要なライブラリをインストールしました。
pip install -r requirements.txt
ポイントとしては、requirements.txt
について、使用するsnowflake-ml-python
は記事執筆時点で最新の1.0.10
にしました。依存関係として、snowflake-ml-python/requirements.txtに記載のpandas
を確認すると1.5.3
になっていたため、pandasのバージョンも合わせました。
Seaborn
など、開発を進める中で追加で必要になるライブラリが出てくると思いますので、その時は適宜requirements.txt
に追加してインストールする形になります。
2. Anacondaのサードパーティパッケージの使用への同意
snowflake DOCUMENTATIONのうち、『Anacondaのサードパーティパッケージの使用』に記載の方法でSnowflakeサードパーティ規約に同意する必要があります。
Billing & Terms
を開き、Anaconda
の欄のEnable
をクリックしました。
ポップアップで規約の確認と同意を求められるので、確認の上問題なければAcknowledge & Continue
をクリックしました。
しばらくして画面をリロードすると、以下のようになりました。
3. Jupyter Notebook環境の起動確認
インストールしたライブラリが使えるか確認しました。
ローカルのPython環境から以下のコマンドを実行しました。
jupyter notebook
ブラウザでJupyter Notebookが起動するので、新しいノートブックを作成し、Python 3(ipykernel)を選択しました。
ノートブックが起動したら、以下のようにOneHotEncoder
が読み込めるか確認しました。
from snowflake.ml.modeling.preprocessing import OneHotEncoder help(OneHotEncoder)
処理が成功し、ちゃんと読み込めていそうでした。
4. Snowflake環境の準備(ウェアハウスなど)
Snowflake側のデータベースやウェアハウスの作成をします。これは次に行うロールの作成のため必要になります。(アクセス権限を追加するため)
この記事では具体的にクイックスタートの以下のページの記載のまま、リソースの作成をしました。自分の課題のために作成する場合は、必要な箇所を適宜読み替えてお試しください。
『Intro to Machine Learning with Snowpark ML for Python - 2. Set up the Snowflake environment』のSQLを使いました。
SnowSightよりSQLワークシートを開き、以下のSQLを実行しました。
USE ROLE ACCOUNTADMIN; CREATE OR REPLACE WAREHOUSE ML_HOL_WH; --by default, this creates an XS Standard Warehouse CREATE OR REPLACE DATABASE ML_HOL_DB; CREATE OR REPLACE SCHEMA ML_HOL_SCHEMA; CREATE OR REPLACE STAGE ML_HOL_ASSETS; --to store model assets -- create csv format CREATE FILE FORMAT IF NOT EXISTS ML_HOL_DB.ML_HOL_SCHEMA.CSVFORMAT SKIP_HEADER = 1 TYPE = 'CSV'; -- create external stage with the csv format to stage the diamonds dataset CREATE STAGE IF NOT EXISTS ML_HOL_DB.ML_HOL_SCHEMA.DIAMONDS_ASSETS FILE_FORMAT = ML_HOL_DB.ML_HOL_SCHEMA.CSVFORMAT URL = 's3://sfquickstarts/intro-to-machine-learning-with-snowpark-ml-for-python/diamonds.csv'; -- https://sfquickstarts.s3.us-west-1.amazonaws.com/intro-to-machine-learning-with-snowpark-ml-for-python/diamonds.csv LS @DIAMONDS_ASSETS;
データはステージの作成までにとどめられていますが、これはクイックスタートの中盤でSnowpark Pythonでデータを読み込んで続きの処理を行うためです。
実行すると以下のようになりました。
ウェアハウスも作成されていました。
5. Snowflake環境の準備(ロール・ユーザー)
以下のようにSNOWPARK_ROLE
ロールを付与したSNOWPARK_OPERATOR
ユーザーを作成しました。GRANT ALL PRIVILEGES
で少し広めに権限を与えているところはありますが、ひとまず以下で作成したユーザーでクイックスタートを進めることができました。
-- ROLEの作成 CREATE ROLE SNOWPARK_ROLE; -- ウェアハウスへのUSAGEアクセス権の付与 GRANT USAGE ON warehouse ML_HOL_WH TO ROLE SNOWPARK_ROLE; -- データベースへのUSAGEアクセス権の付与 GRANT USAGE ON DATABASE ML_HOL_DB TO ROLE SNOWPARK_ROLE; -- スキーマへのアクセス権の付与 GRANT ALL PRIVILEGES ON SCHEMA ML_HOL_DB.ML_HOL_SCHEMA TO ROLE SNOWPARK_ROLE; -- SQL操作用の権限の付与 GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA ML_HOL_DB.ML_HOL_SCHEMA TO ROLE SNOWPARK_ROLE; -- ステージへの権限の付与 GRANT ALL PRIVILEGES on STAGE ML_HOL_DB.ML_HOL_SCHEMA.ML_HOL_ASSETS to role SNOWPARK_ROLE; GRANT ALL PRIVILEGES on STAGE ML_HOL_DB.ML_HOL_SCHEMA.DIAMONDS_ASSETS to role SNOWPARK_ROLE; -- スキーマ内でのUDFの作成権限の付与 GRANT CREATE FUNCTION ON SCHEMA ML_HOL_DB.ML_HOL_SCHEMA TO ROLE SNOWPARK_ROLE; -- ユーザーの作成 CREATE USER SNOWPARK_OPERATOR PASSWORD = '任意のパスワード' DEFAULT_ROLE = 'SNOWPARK_ROLE' MUST_CHANGE_PASSWORD = FALSE; -- ユーザーへのロールの付与 GRANT ROLE SNOWPARK_ROLE TO USER SNOWPARK_OPERATOR;
終わりに
以上にてpipでの開発環境の準備は終わりになります。
Snowpark MLの使い心地についてはクイックスタートが非常にわかりやすかったのでぜひお試し頂ければと思います。
クイックスタートを通して分かるSnowpark ML Modelingのポイントについては以下の記事にまとめましたのでご確認ください。
参考になりましたら幸いです。