はじめに
2024年6月の年次カンファレンス Snowflake Summit にて、そのとき既に多くの革新的な LLM 適応を果たしていたプロダクトの方向性として、以前まで標榜していた DATA CLOUD というテーマを、AI DATA CLOUD と改めました。
それまでの DATA CLOUD、すなわち Snowflake は、クラウドサービスのように便利にデータ製品が利用できる状態であり、実際にほぼ管理不要に大規模データの分析を容易に行えることで親しまれていました。
そんな AI DATA CLOUD という幅広い領域のキャッチアップのため、AI DATA CLOUD 勉強グループが発足されることとなりました。この勉強会では月に1回、特徴的な Snowflake の機能の利便性や特徴、活用可能性をディスカッションしています。
本記事では、その中で触れた機能をはじめとして、最近リリースされた便利な機能について紹介していきたいと思います!
AI DATA CLOUD 勉強会で触れた機能
Cortex AISQL
Cortex AISQL は、Cortex LLM という SQL で Snowflake にホスティングされている LLM を呼び出すことができる機能を中心とした LLM 機能群です。中心機能として、Complete 関数と呼ばれる機能があり、GPT や Claude、その他様々な LLM モデルを呼び出すことができます。また、構造化出力オプションという機能により、簡単にテキスト情報を分類したり、スコアリングしたりすることもできます。
一方で、そういったチューニングは一般的に難しく、適切なプロンプトを保管しておくことも難しい面があります。そこで、より具体的な用途に絞った AISQL が種々提供されていることもポイントです。
例えば、
SELECT AI_CLASSIFY('One day I will see the world', ['travel', 'cooking']);
というようにテキストと分類したいラベルを入力して実行すると、
'{
"labels": ["travel"]
}';
指定されたラベルに応じた結果が得られるAI_CLASSIFYといった機能があります。
この機能は、テーブルとして複数の行に格納されているテキスト・画像・音声情報に対して一括で実行できる点も非常に興味深い点です。API 等で複数の項目を実行しようとすると、for 文を記述する必要があったりして腰が重くなってしまいがちですが、AISQL であればこのようにサクッと実行してしまえます。
他にも AISQL 関数は色々なタイプが存在しています。
- AI_SENTIMENT: テキストから感情分析を行う
- AI_TRANSLATE: テキストを翻訳する
- AI_REDACT: テキストから個人情報を除外する
- AI_TRANSCRIBE: 音声を文字起こしする
- AI_EMBED: テキストをベクトル埋め込みする
- AI_FILTER: テキストを TRUE/FALSE 判定し、WHERE 句や JOIN 句で利用する
このように、便利な機能が多様に提供されており、実際に業務で使えそうかも?と思われる機能もいくつかあったのではないでしょうか?
試しにタスク限定の AISQL を使ってみて価値検証を行った上で、大規模には Complete 関数を使ってカスタマイズしながら実装する、なども行えます。
Snowflake Trail
Snowflake は、Snowpark for Python を皮切りに、様々なアプリケーション機能を展開してきました。その管理機能の一つとして、ログ・トレース機能が拡充されました。
私の環境でも Snowpark for Python のストアドプロシージャを定期実行しているのですが、テスト実行時のデバッグ作業や本番実行時のログ確認、ボトルネック確認などに便利に利用しています。
ちなみに、権限付与も容易で、下記のアプリケーションロールをロールに付与するだけで良いです。
GRANT APPLICATION ROLE SNOWFLAKE.EVENTS_VIEWER TO ROLE my_analysis_role;
ただし、上記の権限付与によりアカウント内の全てのログが見えてしまうため、必要に応じてデータベースごとに設定できるカスタムイベントテーブルの利用も検討できます。
Cortex LLM Observability
Snowflake が買収した TruLens という会社のサービスを元に構築されている機能です。Cortex Search といった RAG サービスや Cortex LLM 自体を TruLens ライブラリでラッピング(デコレート)してあげるだけで、Snowflake の UI 上で簡単に RAG や LLM の応答状況を可視化・評価することができます。

引用元:(https://www.snowflake.com/en/developers/guides/getting-started-with-ai-observability/)
Snowflake MCP サーバー
Snowflake Labs という公式リポジトリ内に公開されている Snowflake MCP サーバーについてです。
データ分析を自然言語で行える機能で、非常に精度高く分析やデータベースの探索などが行えます。Snowflake Intelligence でも同等の機能を実現できますが、ローカルで利用したい、クロスリージョンを有効化できないが ChatGPT は使えるといった要望に応えることができます。
どの LLM モデルとの相性も良いのですが、多くの方が使われている ChatGPT の有料プランに含まれている Codex から追加の課金なく利用できるため、利用者との相性が良かったです。
特に、実行できる SQL の構文を細かく設定できるため、安心して利用できる点が素晴らしいです。具体的には、通常のロールベースの権限制御に加えて、DESCRIBE、SELECT、UPDATE、DELETE といった単位で構文実行の制御を行えます。DESCRIBE 構文だけでも、SQL の組み立てを適切に行なってくれるため、非常に強力なパートナーとして活躍してくれています。
内部的には、sqlglotというライブラリを使って LLM が実行しようとしている SQL 構文を確認しているようです。
最近リリースされた便利な機能
Streamlit in Snowflake on Container
Streamlit in Snowflake をウェアハウスではなく、コンピュートプールで実行できるようになるリリースです。コンピュートプールとは、様々なサイズの CPU/GPU をウェアハウスのようにシームレスに起動・停止、管理、スケールアウトさせられる機能です。また、アプリケーションに最適化されているリソースのため、非常に安価に利用できます。例えば、CPU_X64_XS という最小のリソース(1CPU, 6GiBメモリ)であれば、1時間あたり 0.06 クレジットで利用できます。
実際の利用イメージとしてはこのようになっており、従来の操作感と全く相違ありません。
いくつか理解しておきたい点として、Streamlit が1つのノードのみで動く点、ライブラリのインポート方法が異なる点、呼び出し元の権限を利用できる点となります。それぞれ簡単に解説を加えます。
Streamlit が1つのノードのみで動く
このため、Compute pool のサイズを大きく(XS→S)しても、メモリ不足などの場合を除き挙動が変わらないどころか、コスパが悪くなってしまいます。どのサイズの Compute pool であっても1つのノードで1つの Streamlit しか起動しないので、サイズの分コストが上がってしまう形です。
そのため、まずは Compute pool のノード(オートスケール)を変更することが推奨されています。そうすると、一つの Compute pool で最大10種類の Streamlit アプリケーションが動作するという、非常にコストパフォーマンスに優れるアプリケーション公開が実現できるようになります。
なお、1つのノードで1種類の Streamlit しか起動できないだけであって、複数の人がアクセスすることは可能です。
ライブラリのインポート方法が異なる
コンテナランタイム上の Streamlit in Snowflake では、ライブラリのインポート方法が現状外部リソースへのアクセスのみとなっています。これはつまり、PYPI などのパッケージリポジトリへの外部通信を許可する External Access Integration を作成し、その利用権限をアプリ作成者に付与しておく必要があるということです。
制限付き呼び出し元の権限を利用できる
ウェアハウス上で動作する Streamlit in Snowflake は、所有者の権限と呼ばれる、アプリケーション作成者の持つ権限でデータにアクセスできるという特徴がありました。そのため、様々なユーザーにアプリケーションを配布して、各々の権限でアプリケーションを操作してもらう、といったことが行いづらかったです。
しかし、コンテナ上で動作する Streamlit in Snowflake においては、「制限付き呼び出し元の権限」により柔軟な権限制御が行えるようになります。基本的には、呼び出し元の権限、つまりアプリケーションの利用者の権限によってアプリケーションを通じたデータ操作が行えるようになるということです。
この制限付き呼び出し元権限は、GRANT CALLER <権限> という構文で、アプリケーションの作成者ロール(つまりのアプリケーションのロール)に付与します。すると、アプリケーションの設定に、制限付き呼び出し元権限で動作させるかどうかの UI が現れるようになっているようです(私の環境では見当たりませんでした)。
下記、試しにやってみた操作です。
USE ROLE ACCOUNTADMIN;
GRANT MANAGE CALLER GRANTS ON ACCOUNT TO ROLE SYSADMIN;
USE ROLE SYSADMIN;
CREATE OR REPLACE TABLE T1 (ID INT, VAL STRING);
INSERT INTO T1 VALUES (1,'a'),(2,'b'),(3,'c');
GRANT CALLER SELECT ON TABLE T1 TO ROLE SYSADMIN;
その後、GUI から Streamlit in Snowflake を作成してみましたが、特に設定箇所はありませんでした。また、CREATE STREAMLIT のリファレンスも見てみましたが、特にそういった設定はないようです。こちらは、今後に期待ですね!
https://docs.snowflake.com/en/sql-reference/sql/create-streamlit
Notebooks in Workspaces
これまでも、Snowsight 上で Notebooks が扱えるということで、非常に便利に利用していました。しかし、Worksheet ページから画面遷移が必要で、若干使いづらさがありました。また、SQL クエリと Notebooks や Streamlit の管理体系が違うことから管理者はもちろん、利用者にも負担をかけていた面もありました。
そこで登場したのが本機能です。これは、Snowflake の Web UI 上で統合開発環境のように扱える Workspaces という新しい機能上で、Notebooks を簡単に作成・利用できる機能です。
ドキュメントを見て特徴的だと感じたポイントは以下です。
- Jupyter ベースになっているため、操作感が Jupyter に近い(マジックコマンド(!pip, %time 等)やショートカットキー(dd, a, b 等)が使える)
- コーディングや Python 処理、結果の確認などがコンピュートプールのコストだけで行えるため、コスパよく使える
- Anaconda パッケージではなく、外部の PYPI 等のパッケージを利用する
- Terminal 操作が行えるため、Git やファイル操作などが簡単に行える
また、Notebooks 自体は、サービスというオブジェクトの上で動作します。このサービスは、ユーザーごとにユーザーが作成する必要があります。ただし、使用するコンピュートプールは共有することができるため、コスト最適化は行えそうです。
設定画面はこのようになっており、一度作成してしまえばすぐに再利用できるようにもなっています。ただし、設定項目で見えている Idle timeout という項目は、デフォルトでは24時間の設定になっていたので、注意が必要です。アカウントパラメータなどもざっと見てみましたが、デフォルト値の設定項目は見当たりませんでした。
また、上図の外部アクセス統合(EAI)は別途作成し、権限付与をしています。この設定項目では、自分が使える EAI が簡単に選択できるようになっています。
利用のためには、SiS on Container と同様に、コンピュートプールの利用権限、PYPI 等への EAI の利用権限、あたりが追加で必要になってきそうです。サービスは、ユーザーのパーソナルデータベース内に作成されるため、特段権限を付与する必要はないようです。必要な権限が Notebooks と SiS で全く同じである点も、権限管理の都合上非常に助かりますね!
おわりに
Snowflake は革新的な機能を多く提供してきましたが、それをより使いやすく、管理しやすく進化させてきたことが理解できたことと思います。
ここまでで紹介してきた機能は、ほぼ全て AI DATA CLOUD 勉強会で学習した内容です。 AI DATA CLOUD 勉強会では、本記事で触れたように、比較的深い部分まで一機能について参加者でワイワイと学習し、実際に活用できそうな領域の共有や、実運用時で困りそうな部分のディスカッションを行っています。一人では中々腰を据えて勉強できなかったり、どう使えばいいんだろう?と思ったりすることがある中、毎月オンラインでまったりと学習できる時間は、非常に貴重な時間でした。
今後、触れていきたい機能として、Snowflake Postgres や、Snowflake Notebooks 上での ML 開発、Snowflake Openflow などがあります。Snowflake は月に1回の勉強会では追いつかないほど大きなリリースを繰り広げています。しっかりとユーザー側としてもついていき、フィードバックなどを送り、より快適に Snowflake を使えるように頑張っていきたいです!



