【Snowflake】Snowflake CortexのLLM関数についてまとめてみた

【Snowflake】Snowflake CortexのLLM関数についてまとめてみた | Tableau-id Press -タブロイド-
snowflake-logo-1200x630-960x504-1 (1)

こんにちは。Ozawaです。

今回はSnowflake Cortexサービスのうち、LLM(Large Language Model)関数について、出来ること・コスト感・自社データの安全性を基準にまとめていきたいと思います。

 

早速ですが、ここでいくつか固有名詞が出てきたので整理します。(下図を参照)

・Snowflake Cortex:Snowflake上で自然言語処理を使ったサービスの総称。

・LLM関数:Snowflake Cortexのうちの1つのサービスで、自然言語処理をクエリ上で実行できます。

画像元:Snowflake CortexでAIを数秒で使用

 

※ ちなみに、Snowflake Cortexサービスには、他にも3点ありますが、今回は割愛します。

Document AI:画像から取り出したい情報を抽出。
Universal Search:テーブルやロール等のSnowflake上のすべてのオブジェクトを一斉で検索。
Snowflake Copilot:ユーザの要望文から、それに沿ったSQLを自動で作成してくれる。

1. できること

自然言語タスクをSnowflake上のLLM関数で行うことができます。

COMPLETE:汎用的な会話(ChaoGPTのイメージ)。使用するモデルを複数の候補から選択できます。
EXTRACT_ANSWER:文章とそれに関する質問を入力し、答えを出力(読解問題のイメージ)
SENTIMENT:文章のネガポジ判定
SUMMARIZE:文章の要約
TRANSLATE:文章の翻訳
CLASSIFY_TEXT:文章の分類

また、追加で次の処理を行うことができます。

EMBED_TEXT:単語や文章をベクトル化し、機械学習に入れるデータに変換する。
FINETUNE:Snowflakeデフォルトのモデルをファインチューニング(ある分野に最適化するように微調整)してくれる。

 

試しに、Snowflake LLM関数をいくつか実行してみました。

TRANSLATE関数で日本語から英語に翻訳

リンゴを説明した文章を日本語から英語に変換してみます。

「丸く、通常は赤または緑の果物で、甘くてシャキシャキした味があり、よく生で食べられたり料理に使われたりします。」という文章が、「Round, usually red or green fruit with a sweet and shaky taste that is often eaten raw or used in cooking.」と翻訳されました。

-- リンゴを説明した文章を日本語から英語に変換
SELECT SNOWFLAKE.CORTEX.TRANSLATE('丸く、通常は赤または緑の果物で、甘くてシャキシャキした味があり、よく生で食べられたり料理に使われたりします。', 'ja', 'en');

--> Round, usually red or green fruit with a sweet and shaky taste that is often eaten raw or used in cooking

② TRANSLATE関数で翻訳した文章をCLASSIFY_TEXTで分類

次に、「リンゴ」「バナナ」というカテゴリのうち、リンゴを説明する英語文章がどちらに分類されるかを検証します。

結果、リンゴを説明する文章は、「リンゴ」カテゴリに分類され、想定通りの翻訳→分類を行うことができました。

-- リンゴを説明した文章を日本語から英語に変換し、
-- 英語の説明文が、「リンゴ」「バナナ」のどちらのカテゴリに分類されるかを調査
select SNOWFLAKE.CORTEX.CLASSIFY_TEXT(
    SNOWFLAKE.CORTEX.TRANSLATE('丸く、通常は赤または緑の果物で、甘くてシャキシャキした味があり、よく生で食べられたり料理に使われたりします。', 'ja', 'en') //翻訳関数
,['Apple', 'Banana']
);

-->
-- {
-- "label": "Apple"
-- }

※ ちなみに残念なことに、まだ日本リージョンではEMBED_TEXTのみしかLLM関数を使用することができません。

現在使用できるリージョンはこちらを参照ください。筆者はAWS US WEST(オレゴン)を使用

2. コスト

SnowflakeのLLM関数を使用する場合、クエリの実行時間の代わりに、処理されるトークン数に比例します。

精度の良いCOMPLETE(会話)をする場合、mistral-largeモデルを使用し、5.1クレジット/100万トークンとなります。

1トークンが約4文字(WordではなくCharacter)なので、さらにイメージしやすくしやすいように、100万文字あたりのコスト(円)を求めます。

// Enterprise Aws Tokyoの場合の料金検証。(今後Tokyoリージョンで使用できると仮定する)
・5.1クレジット * 約7ドル/クレジット * 約150ドル/円  → 約5300円

・100万トークン * 4文字/1トークン → 400万文字

⇒ 1300円 / 100万文字

100万文字あたりの1300円となりました。

注意として、例えばレコード1つにつき100文字の英語の場合、1万レコードを処理すると1300円となります。100文字は先ほどのリンゴの英語文章の文字数に匹敵するので、コストの膨れ上がりには要警戒です。

また、英語はスペースにより単語を分けていますが、日本語は1文字ごとにどこまでが文節かを把握する必要があり、その影響から日本語1文字は英語1文字よりもLLM使用コストが高くなる可能性に注意してください。

 

次にLLM使用コストの確認方法ですが、CORTEX_FUNCTIONS_USAGE_HISTORY関数で確認することができます。

SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_USAGE_HISTORY;

// LLMを使用したクエリのLLM使用コンピュートコストが表示される。(TOKEN_CREDITS)
-- START_TIME END_TIME FUNCTION_NAME MODEL_NAME WAREHOUSE_ID TOKEN_CREDITS TOKENS
-- 2024-09-22 05:00:00.000 -0700 2024-09-22 06:00:00.000 -0700 CLASSIFY_TEXT 4 0.000236300 170
-- 2024-09-22 06:00:00.000 -0700 2024-09-22 07:00:00.000 -0700 CLASSIFY_TEXT 4 0.000472600 340
-- 2024-09-22 06:00:00.000 -0700 2024-09-22 07:00:00.000 -0700 TRANSLATE 4 0.000044220 134

また、Cost ManagementのConsumption上では、LLM関数のコストは、クエリ実行時のウェアハウスの料金として表示されるようです。

・ウェアハウスコストとなっているが、ウェアハウス実行コストが二重にかかっているわけではない。

・LLM関数コストが消えているわけではないので使い過ぎに注意!

この2点だけ抑えておいてください!

参照:Cost considerations

3. 自社データの安全性

LLM関数を使用した時に、Snowflake上に搭載されている自社データが、Snowflake他社ユーザーに見られることはありません。

・LLM関数で使用される入出力データは他のSnowflakeユーザーには共有されません。

・また、SnowflakeのデフォルトのMLのモデルの学習データとして入出力データは使用されません。
ファインチューニングする場合は、ファインチューニングされたモデルをテーブルと同じ階層に格納するため、そのモデルを他のユーザに使用されることはありません。

 

したがって、自社データが入出力を介して他社に見られたり、モデルの学習を経由して他社に流出することはありません。

参照:Snowflake AI の信頼性と安全性に関するよくある質問

おわりに

truestarでは、Snowflake導入検討、導入支援や環境構築まで幅広くサポート可能です。

Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!

また、truestarではSnowflake Marketplaceにて、加工済みオープンデータを無償提供するPrepper Open Data Bank、全国の飲食店の情報を集めたデータセットの販売を行っております。(サービスリンク

これまでのSnowflakeに関する記事はこちら