大規模言語モデル(LLM)関数(Snowflake Cortex)¶
Snowflake Cortexは、Mistral、Meta、Googleといった企業の研究者によってトレーニングされた、業界をリードする大規模言語モデル(LLMs)に即座にアクセスすることができます。また、Snowflakeが特定のユースケース向けに微調整したモデルも提供しています。
これらの LLMs はSnowflakeによって完全にホストされ管理されているため、これらを使用するのにセットアップは必要ありません。お客様のデータはSnowflake内に留まり、お客様が期待するパフォーマンス、スケーラビリティ、ガバナンスを実現します。
Snowflake Cortexの特徴量は SQL 関数として提供され、 Python でも利用可能です。利用可能な機能を以下にまとめました。
COMPLETE: プロンプトを与えると、プロンプトを完了する応答を返します。この関数は、単一のプロンプト、または複数のプロンプトと応答を含む対話のいずれかを受け付けます。
EXTRACT_ANSWER: 質問と構造化されていないデータを与えると、その質問に対する答えがデータ内に見つかる場合にそれを返します。
SENTIMENT: 与えられたテキストのポジティブまたはネガティブセンチメントを表わす、-1から1までのセンチメントスコアを返します。
SUMMARIZE: 与えられたテキストの要約を返します。
TRANSLATE: 与えられたテキストをサポートされている言語から他の言語に翻訳します。
必要な権限¶
SNOWFLAKE データベースの CORTEX_USER データベースロールには、ユーザーがSnowflake Cortex LLM 関数を呼び出すことを許可する権限が含まれています。デフォルトでは、このデータベースロールは ACCOUNTADMIN ロールにのみ付与されます。ユーザーがCortex LLM 関数にアクセスできるようにするには、ACCOUNTADMIN がこのロールをユーザーロールに伝播させる必要があります。
SNOWFLAKE.CORTEX_USER データベースロールをユーザーに直接付与することはできません。ACCOUNTADMIN ロールを持つユーザーは、まずアカウントロールにそのロールを付与し、次にそのアカウントロールをユーザーに付与する必要があります。詳細については、 SNOWFLAKE データベースの使用 をご参照ください。
以下の例では、 ACCOUNTADMIN を想定し、この目的のために作成したアカウントロール cortex_user_role
を介して、ユーザー some_user
に CORTEX_USER データベースロールを付与します。
USE ROLE ACCOUNTADMIN;
CREATE ROLE cortex_user_role;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE cortex_user_role;
GRANT ROLE cortex_user_role TO USER some_user;
また、特定のユーザーグループが一般的に使用する既存のロールを使用して、Snowflake Cortex LLM の機能へのアクセスを付与することもできます。(ユーザーのロール を参照。)例えば、組織内のアナリストが既定のロールとして使用する analyst
ロールを作成した場合、これらのユーザーにSnowflake Cortex LLM 関数へのアクセスを GRANT ステートメント1つで簡単に付与することができます。
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
PUBLIC 擬似ロールはすべてのユーザーとロールに自動的に付与されるため、 cortex_user_role
を PUBLIC に付与すると、アカウント内のすべてのユーザーがSnowflake Cortex LLM 関数を使用できるようになります。
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE PUBLIC;
Tip
アクセスを付与するユーザーの数と、そのユーザーによるSnowflake Cortex LLM 関数の使用がコンピュート消費に与える影響に注意してください。これらの特徴量へのアクセスを広く許可する前に、(特に最も高価なモデルの)使用目的に関するポリシーを確立します。
ユーザーが新しい特徴量を調べると、一時的にコストが急上昇する可能性がありますが、その後はより安定した使用パターンに落ち着くことが期待されます。
可用性¶
Snowflake Cortex LLM 関数は、現在以下のリージョンで利用可能です。
関数
(モデル)
|
AWSUS 東部
(N.バージニア)
|
AWSUS 西部
(オレゴン)
|
AWS ヨーロッパ
(フランクフルト)
|
Azure東部 US 2
(バージニア)
|
Azure西ヨーロッパ
(オランダ)
|
---|---|---|---|---|---|
COMPLETE
(
mistral-large ) |
✔ |
||||
COMPLETE
(
mixtral-8x7b ) |
✔ |
✔ |
|||
COMPLETE
(
llama2-chat-70b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
COMPLETE
(
mistral-7b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
COMPLETE
(
gemma-7b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
EXTRACT_ANSWER |
✔ |
✔ |
✔ |
✔ |
✔ |
SENTIMENT |
✔ |
✔ |
✔ |
✔ |
✔ |
SUMMARIZE |
✔ |
✔ |
✔ |
✔ |
✔ |
TRANSLATE |
✔ |
✔ |
✔ |
✔ |
✔ |
コストの考慮事項¶
Snowflake Cortex LLM 関数は、処理されたトークンの数に基づいてコンピュートコストが発生します。以下の表は、各関数の100万トークンあたりのクレジットコストを示しています。
注釈
トークンは、Snowflake Cortex LLM 関数で処理されるテキストの最小単位で、テキストの4文字にほぼ同じです。トークンに相当する生の入力または出力テキストは、モデルによって異なる場合があります。
レスポンスで新しいテキストを生成する関数(COMPLETE、SUMMARIZE、TRANSLATE)では、入力と出力の両方のトークンがカウントされます。
入力から情報を抽出するだけの関数(EXTRACT_ANSWERとSENTIMENT)では、入力トークンのみがカウントされます。
EXTRACT_ANSWER の場合、請求可能トークン数は
from_text
フィールドとquestion
フィールドのトークン数の合計です。
コンピュートコストに関する一般情報については、 コンピューティングコストについて をご参照ください。
注釈
大規模のウェアハウスはパフォーマンスを向上しないため、Snowflakeでは小規模のウェアハウス(MEDIUM 以下)でSnowflake Cortex LLM 関数を呼び出すクエリの実行を推奨しています。ウェアハウスをアクティブに保つことに関連するコストは、Snowflake Cortex LLM 関数を呼び出すクエリを実行するときにも適用されます。
関数(モデル) |
100万トークン当たりのSnowflakeクレジット |
---|---|
COMPLETE( |
5.10 |
COMPLETE ( |
0.50 |
COMPLETE ( |
0.45 |
COMPLETE ( |
0.12 |
COMPLETE ( |
0.12 |
EXTRACT_ANSWER |
0.08 |
SENTIMENT |
0.08 |
SUMMARIZE |
0.10 |
TRANSLATE |
0.33 |
Snowflake Cortex LLM 関数の使用は、Snowflake Organization使用状況の METERING_DAILY_HISTORY ビューに AI_SERVICES のサービスタイプで表示されます。組織内の全アカウントの AI サービスのクレジット消費量を表示するには、以下のクエリを使用します。
SELECT * FROM SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY
WHERE service_type ILIKE '%ai_services%';
注釈
SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY ビューの更新には最大4時間かかることがあります。
使用量のクォータ¶
すべてのSnowflakeのお客様に高水準のパフォーマンスを保証するために、Snowflake Cortex LLM 関数には使用量のクォータが設定されており、これを超えるとリクエストが制限される場合があります。Snowflakeはこれらのクォータを随時調整する可能性があります。下にある表のクォータはアカウントごとに適用されます。
関数(モデル) |
1分あたりの処理トークン数(TPM) |
1分あたりの処理行数(RPM) |
---|---|---|
COMPLETE( |
200,000 |
100 |
COMPLETE ( |
300,000 |
400 |
COMPLETE ( |
300,000 |
400 |
COMPLETE ( |
300,000 |
500 |
COMPLETE ( |
300,000 |
500 |
EXTRACT_ANSWER |
1,000,000 |
3,000 |
SENTIMENT |
1,000,000 |
5,000 |
SUMMARIZE |
300,000 |
500 |
TRANSLATE |
1,000,000 |
2,000 |
注釈
有効な支払い方法のないオンデマンドSnowflakeアカウント(トライアルアカウントなど)では、Snowflake Cortex LLM 関数の使用は1日あたりおよそ1クレジットに制限されます。この制限を解除するには、 トライアルアカウントを有料アカウントに変更 してください。
コスト管理とスロットリング¶
このプレビュー期間中、SnowflakeではSnowflake Cortex LLM 関数を呼び出す際に、MEDIUM 以下のウェアハウスサイズを使用することを推奨します。必要以上に大規模なウェアハウスを使用してもパフォーマンスは向上しませんが、不必要なコストがかかり、スロットリングのリスクも高くなります。この推奨事項は、今後の製品アップデートにより適用されなくなる可能性があります。
モデルの制限¶
Snowflake Cortexで使用されるモデルには、以下の表に示すようにサイズに制限があります。サイズはトークンで表示されています。トークンは一般的に単語に対応しますが、すべてのトークンが単語になるわけではないため、制限に対応する単語数はトークンの数より若干少なくなります。制限値を超える入力はエラーになります。
関数 |
モデル |
コンテキストウィンドウ(トークン) |
---|---|---|
COMPLETE |
|
32,000 |
|
32,000 |
|
|
4,096 |
|
|
32,000 |
|
|
8,000 |
|
EXTRACT_ANSWER |
Snowflake管理モデル |
2,048のテキスト
64の質問
|
SENTIMENT |
Snowflake管理モデル |
512 |
SUMMARIZE |
Snowflake管理モデル |
32,000 |
TRANSLATE |
Snowflake管理モデル |
1,024 |
モデルの選択¶
Snowflake Cortex COMPLETE 関数は、能力、遅延、コストの異なる複数のモデルをサポートしています。これらのモデルは、一般的な顧客のユースケースに合わせて慎重に選択されています。 クレジットあたりのパフォーマンス で最高の状態を達成するには、コンテンツのサイズとタスクの複雑さに適したモデルを選択します。以下は、利用可能なモデルの簡単な概要です。
mistral-large
は、さまざまな指標(下表参照)で高得点を獲得するトップクラスのモデルです。これは32,000トークン(約24,000語)のコンテキストウィンドウを備えており、長時間の会話でも複雑な推論を行うことができます。また、Snowflake Cortexが提供するモデルの中で最もコンピュートの負荷が高く、そのため実行コストも最も高くなります。mixtral-8x7b
は、32,000トークンのコンテキスト長をサポートしながら、低遅延で高品質な結果を提供します。これは、多くの企業での実稼働ユースケースに最適です。llama2-70b-chat
は、データの抽出や職務内容の作成など、適度な推論を必要とする複雑で大規模なタスクに適してます。mistral-7b
とgemma-7b
は、単純作業を素早く、より優れたコスト効率で実行できます。mistral-7b
は、小規模なカスタマイズを必要とする、最も単純な要約や分類のタスクに最適です。その32,000トークン制限により、複数ページのテキストを処理することができます。gemma-7b
は、単純なコードやテキストの補完タスクに適しています。コンテキストウィンドウのトークンは8,000ですが、その制限内で驚くほどの能力を発揮し、費用対効果もかなり高いです。
何から始めたらいいかわからない場合は、すでに他のトップクラスのモデルを使用している場合でも、初めて LLMs を使用する場合でも、まずは mistral-large
を試してみてください。このモデルは、Snowflake Cortexが提供する最も幅広い能力を持つモデルであり、最先端のモデルで何ができるかを知ることができます。その結果は、他のモデルを評価する際のベースラインとして使うことができます。
以下の表は、人気モデルが各種ベンチマークでどのようなパフォーマンスを発揮するかについての情報を示しており、Snowflake Cortex COMPLETE が提供するモデルや他のいくつかの人気モデルが含まれています。
モデル |
コンテキストウィンドウ
(トークン)
|
MMLU
(推論)
|
MT -ベンチ
(手順は次のとおりです)
|
HumanEval
(コーディング)
|
Spider 1.0
(SQL)
|
---|---|---|---|---|---|
32,000 |
86.4 |
8.96 |
67 |
86.6 |
|
32,000 |
81.2 |
- |
45.1 |
81 |
|
Claude 2 * |
100,000 |
78.5 |
8.06 |
71.2 |
- |
32,000 |
70.6 |
8.30 |
40.2 |
- |
|
4,097 |
70 |
8.39 |
48.1 |
- |
|
4,096 |
68.9 |
6.86 |
30.5 |
- |
|
32,000 |
62.5 |
6.84 |
26.2 |
- |
|
8,000 |
64.3 |
- |
32.3 |
- |
|
4,096 |
45.3 |
6.27 |
12.2 |
- |
*比較のために提供。Snowflake Cortex COMPLETE では利用できません。
LLM 関数概要¶
COMPLETE¶
プロンプトが与えられると、指示に従う COMPLETE 関数は選択した言語モデルを使用して応答を生成します。最も単純なユースケースでは、プロンプトは単一の文字列です。また、インタラクティブなチャット形式で使用するために、複数のプロンプトと応答を含む会話を提供することもできます。この形式の関数では、出力のスタイルとサイズをカスタマイズするハイパーパラメーターオプションを指定することもできます。
COMPLETE 関数は以下のモデルをサポートしています。異なるモデルでは、 コスト と クォータ が異なる可能性があります。
mistral-large
mixtral-8x7b
llama2-70b-chat
mistral-7b
gemma-7b
構文と例については、 COMPLETE (SNOWFLAKE.CORTEX) をご参照ください。
EXTRACT_ANSWER¶
EXTRACT_ANSWER 関数は、テキストドキュメントから指定された質問に対する回答を抽出します。ドキュメントは、平易な英語のドキュメントの場合も、半構造化(JSON)データオブジェクトの文字列表現の場合もあります。
構文と例については、 EXTRACT_ANSWER (SNOWFLAKE.CORTEX) をご参照ください。
SENTIMENT¶
SENTIMENT 関数は、与えられた英語の入力テキストに対して、センチメントを-1から1(-1が最も否定的、1が最も肯定的で、0近辺の値は中立)のスコアで返します。
構文と例については、 SENTIMENT (SNOWFLAKE.CORTEX) をご参照ください。
SUMMARIZE¶
SUMMARIZE 関数は、与えられた英語のテキストの要約を返します。
構文と例については、 SUMMARIZE (SNOWFLAKE.CORTEX) をご参照ください。
TRANSLATE¶
TRANSLATE 関数は、指示または検出されたソース言語のテキストをターゲット言語に翻訳します。
構文と例については、 TRANSLATE (SNOWFLAKE.CORTEX) をご参照ください。
エラー条件¶
Snowflake Cortex LLM 関数は以下のエラーメッセージを生成する可能性があります。
メッセージ |
説明 |
---|---|
|
システム負荷が高すぎるため、リクエストは拒否されました。もう一度リクエストしてください。 |
|
関数に渡された |
|
モデルの消費予算を超えました。 |
|
指定されたモデルは存在しません。 |
|
指定された言語は TRANSLATE 関数ではサポートされていません。 |
|
リクエストはモデルがサポートするトークンの最大数を超えました(モデルの制限 を参照)。 |
|
リクエスト数が 制限 を超えました。後でもう一度お試しください。 |
PythonでのSnowflake Cortex LLM 関数の使用¶
Snowflake Cortex LLM 関数は、 Snowpark ML バージョン1.1.2以降で使用できます。Snowpark ML の設定方法については、 Snowpark ML のインストール をご参照ください。
PythonスクリプトをSnowflakeの外で実行する場合、これらの関数を使用するにはSnowparkセッションを作成する必要があります。手順については、 Snowflakeへの接続 をご参照ください。
次のPythonの例では、単一の値に対してSnowflake Cortex LLM 関数を呼び出しています。
from snowflake.cortex import Complete, ExtractAnswer, Sentiment, Summarize, Translate
text = """
The Snowflake company was co-founded by Thierry Cruanes, Marcin Zukowski,
and Benoit Dageville in 2012 and is headquartered in Bozeman, Montana.
"""
print(Complete("llama2-70b-chat", "how do snowflakes get their unique patterns?"))
print(ExtractAnswer(text, "When was snowflake founded?"))
print(Sentiment("I really enjoyed this restaurant. Fantastic service!"))
print(Summarize(text))
print(Translate(text, "en", "fr"))
以下のように、テーブルの列に対して LLM 関数を呼び出すこともできます。この例では、セッションオブジェクト(session
に格納)と、テキスト列 abstract_text
を含むテーブル articles
を必要とし、要点の抜粋を含む新しい列 abstract_summary
を作成します。
from snowflake.cortex import Summarize
from snowflake.snowpark.functions import col
article_df = session.table("articles")
article_df = article_df.withColumn(
"abstract_summary",
Summarize(col("abstract_text"))
)
article_df.collect()
注釈
COMPLETE の高度なチャットスタイル(マルチメッセージ)形式は、Pythonでは現在サポートされていません。
法的通知¶
Snowflake Cortex LLM 関数には、Metaの LLaMA 2を含む、機械学習テクノロジーが搭載されています。基礎 LLaMA 2モデルは、 LLaMA 2コミュニティライセンス の下にライセンスされています。Copyright (c) Meta Platforms, Inc.All Rights Reserved.LLama 2モデルに基づくいかなる LLM 関数の使用も、Metaの 利用規定 に従うものとします。
機械学習技術と提供される結果は、不正確、不適切であったり、偏っていたりする可能性があります。自動パイプラインに組み込まれたものも含め、機械学習の出力に基づく決定には、モデルが生成したコンテンツが正確であることを保証するために、人間によるモニタリングとレビュープロセスが必要です。
LLM 関数クエリは他の SQL クエリと同様に扱われ、 メタデータ とみなされる可能性があります。
詳細については、 Snowflake AI の信頼と安全 FAQ をご参照ください。