Snowpark Container Services をさわってみた
📜 この記事は
Snowflake Advent Calendar 2023 Series 2 - Day 21 の記事になります。Snowflake で Sales Engineer をしております、@tmasuo がお届けします。
前日も Snowflake の中の人 @sakudata がお送りしておりました。SiS の裏ワザ的な話ということで、アプリネタでしたが、今回も懲りずに中の人からアプリネタをお送りいたします。
🎉 Snowpark Container Services (SPCS) PuPr!!
Snowflake Summit 2023 で鳴り物入りで登場した Snowpark Container Services、略して SPCS ですが、なんと年明けを待たずに Public Preview しました!!🥳
早い!!ということでドキュメントを開いた方も多いと思います。
しかし、注意点がありまして、、なんと現時点(2023 年 12 月 23 日)でサポートされるリージョンが AWS London と Mumbai のみとなります。
詳細はこちらをご確認頂きたいですが、一応 AWS Tokyo も近々 PuPr が予定されています。また直近の展開予定は AWS のいくつかのリージョンに制限されるのでご注意ください。
私もいくつか Snowflake アカウントを持っていますが、、London も Mumbai も作ったことないぞ!!ということでサクッと払い出して(レイテンシ的に Mumbai をチョイス)以下の Quickstart コンテンツで動かして見ました、という記事になります。
注: こちらの Quickstart 内にいくつかタイポがあり修正依頼中ですので、動かしてみる方は修正されるまで寛大な心でお試しいただけると幸いです 😇
🫙 コンセプトと 3 つの要素
SPCS は Snowflake でアプリケーションを開発するための新たな選択肢となります。
コンテナベースで開発したアプリを Snowflake が管理するインフラ上に展開できるため、Snowflake の堅牢なセキュリティのメリットを享受しながら今まで選択できなかった言語や処理の柔軟性を得ることができます。
この Quickstart では SPCS を構成する 3 つの要素を利用しながらアプリ(Jupyter Notebook、API)を作成しています。3 つの要素はそれぞれ以下の役割を果たしています。
- コンテナを置く場所 - Image Repository
- コンテナを動かすリソース - Compute Pool
- コンテナの展開 - Services
Code Snippet を用いながらこれらの要素を確認してみましょう。
コンテナを置く場所 - Image Repository
コンテナイメージを Snowflake 上に管理するために Image Repository というコンポーネントが追加されています。
2. Set up the Snowflake environment で以下のコマンドを発行しています。
CREATE IMAGE REPOSITORY CONTAINER_HOL_DB.PUBLIC.IMAGE_REPO;
SHOW IMAGE REPOSITORIES IN SCHEMA CONTAINER_HOL_DB.PUBLIC;
SHOW コマンドの結果に repository_url
が含まれており、こちらに作成したコンテナイメージを Push することで、後のコンテナの展開時に参照できるようになります。
コンテナを動かすリソース - Compute Pool
コンテナイメージを動かすためのリソースです。
こちらも 2. Set up the Snowflake environment で以下のコマンドを発行しています。
CREATE COMPUTE POOL IF NOT EXISTS CONTAINER_HOL_POOL
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = standard_1;
MIN_NODES
や MAX_NODES
といった設定により、マルチクラスタウェアハウスのようなシンプルなスケールアウト設定が可能になっています。
また、INSTANCE_FAMILY
の設定により、いままで Snowflake が提供できなかった様々のコンピューティングオプションが提供できるようになっています。
詳細はこちらのドキュメントにありますが、
- CPU
- High-Memory CPU
- GPU
といったオプションを提供しています。ついに Snowflake で GPU が、、活用の幅が拡がりますね!
コンテナの展開 - Services
最後に Image Repository に配備されたコンテナを展開してゆきます。ここでは Spec ファイルと呼ばれる YAML ファイルを定義し、そしてサービスを起動します。
たとえば Jupyter Notebook を起動する際の YAML は 4. Build, Push, and Run the Jupyter Service で見ることができます。
spec:
containers:
- name: jupyter-snowpark
image: <repository_hostname>/CONTAINER_hol_db/public/image_repo/python-jupyter-snowpark:dev
volumeMounts:
- name: jupyter-home
mountPath: /home/jupyter
endpoints:
- name: jupyter-snowpark
port: 8888
public: true
volumes:
- name: jupyter-home
source: "@volumes/jupyter-snowpark"
uid: 1000
gid: 1000
networkPolicyConfig:
allowInternetEgress: true
この Spec の image: <repository_hostname>/CONTAINER_hol_db/public/image_repo/python-jupyter-snowpark:dev
で Image Repository に配備されたイメージをポイントしています。
Services の起動は同一セクションで、以下のコマンドで実行しています。
create service CONTAINER_HOL_DB.PUBLIC.jupyter_snowpark_service
in compute pool CONTAINER_HOL_POOL
from @specs
spec='jupyter-snowpark.yaml';
この in compute pool CONTAINER_HOL_POOL
部分で Compute Pool を指定していますね。
これにより、Snowflake 上にでコンテナを指定した処理エンジンで実行できるようになっています。
💻 開発者体験
SPCS を動かす上で、いくつかの開発者向けツールセットをこの Quickstart では利用しています。2023 年にリリースされたものも多いのでこちらも少しカバーしてみたいと思います。
Snowflake VS Code Extension
6 月に GA した Snowflake VS Code Extension をこのコンテンツ内では使用しています。
これはあまり気持ち良いものではありません。
この Snowflake VS Code Extension により、VS Code 上に開発作業を集約することができるので、より良い開発者体験を提供できるようになっています。
Snowflake Developer CLI
また、Spec ファイルをステージ上に配備したり、ちょっとしたローカルと Snowflake のやり取りを行う際もサクッとコマンド実行できたほうがよいです。
SnowSQL も優れたツールですが、Snowflake Developer CLI はより使いやすく、拡張された新たなコマンドラインツールになります。
現在 Private Preview 中ですが、GitHub に公開されているためお試しいただけます。詳細やコマンドリファレンスは ReadMe をご確認ください。
こちらを利用すると Snowpark のコード(UDF/SProc)や SiS、そして今回触れている SPCS も操作することができます。
また、GitHub Actions と連携して CI/CD するといったソリューションも実現できます。詳細は以下の Quickstart コンテンツが参考になります。
また今回は触れられていませんが、開発者ツール観点ですと Snowpark のローカルテストも Public Preview になっています。
✅ さいごに
待望の SPCS PuPr により、Snowflake で実現できることが大きく拡がってゆきます。
アプリはもちろん、GPU 提供による生成 AI/LLM を Snowflake 上で、といったことも今後実現できるようになっていきます。
そしてアプリ開発者がより開発しやすいようなツールセットの提供も進んでいます。
ぜひいろいろとお試しください!!
❄️ Happy BUILDing on Snowflake !!! ❄️
Discussion