大規模言語モデル(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;
Copy

また、特定のユーザーグループが一般的に使用する既存のロールを使用して、Snowflake Cortex LLM の機能へのアクセスを付与することもできます。(ユーザーのロール を参照。)例えば、組織内のアナリストが既定のロールとして使用する analyst ロールを作成した場合、これらのユーザーにSnowflake Cortex LLM 関数へのアクセスを GRANT ステートメント1つで簡単に付与することができます。

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
Copy

PUBLIC 擬似ロールはすべてのユーザーとロールに自動的に付与されるため、 cortex_user_role を PUBLIC に付与すると、アカウント内のすべてのユーザーがSnowflake Cortex LLM 関数を使用できるようになります。

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE PUBLIC;
Copy

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(mistral-large

5.10

COMPLETE (mixtral-8x7b)

0.50

COMPLETE (llama2-70b-chat)

0.45

COMPLETE (mistral-7b)

0.12

COMPLETE (gemma-7b)

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%';
Copy

注釈

SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY ビューの更新には最大4時間かかることがあります。

使用量のクォータ

すべてのSnowflakeのお客様に高水準のパフォーマンスを保証するために、Snowflake Cortex LLM 関数には使用量のクォータが設定されており、これを超えるとリクエストが制限される場合があります。Snowflakeはこれらのクォータを随時調整する可能性があります。下にある表のクォータはアカウントごとに適用されます。

関数(モデル)

1分あたりの処理トークン数(TPM)

1分あたりの処理行数(RPM)

COMPLETE(mistral-large

200,000

100

COMPLETE (mixtral-8x7b)

300,000

400

COMPLETE (llama2-70b-chat)

300,000

400

COMPLETE (mistral-7b)

300,000

500

COMPLETE (gemma-7b)

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

mistral-large

32,000

mixtral-8x7b

32,000

llama-2-70b-chat

4,096

mistral-7b

32,000

gemma-7b

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-7bgemma-7b は、単純作業を素早く、より優れたコスト効率で実行できます。

    • mistral-7b は、小規模なカスタマイズを必要とする、最も単純な要約や分類のタスクに最適です。その32,000トークン制限により、複数ページのテキストを処理することができます。

    • gemma-7b は、単純なコードやテキストの補完タスクに適しています。コンテキストウィンドウのトークンは8,000ですが、その制限内で驚くほどの能力を発揮し、費用対効果もかなり高いです。

何から始めたらいいかわからない場合は、すでに他のトップクラスのモデルを使用している場合でも、初めて LLMs を使用する場合でも、まずは mistral-large を試してみてください。このモデルは、Snowflake Cortexが提供する最も幅広い能力を持つモデルであり、最先端のモデルで何ができるかを知ることができます。その結果は、他のモデルを評価する際のベースラインとして使うことができます。

以下の表は、人気モデルが各種ベンチマークでどのようなパフォーマンスを発揮するかについての情報を示しており、Snowflake Cortex COMPLETE が提供するモデルや他のいくつかの人気モデルが含まれています。

モデル

コンテキストウィンドウ
(トークン)
MMLU
(推論)
MT -ベンチ
(手順は次のとおりです)
HumanEval
(コーディング)
Spider 1.0
(SQL)

GPT 4 Turbo *

32,000

86.4

8.96

67

86.6

mistral-large

32,000

81.2

-

45.1

81

Claude 2 *

100,000

78.5

8.06

71.2

-

mixtral-8x7b

32,000

70.6

8.30

40.2

-

GPT 3.5 Turbo *

4,097

70

8.39

48.1

-

llama-2-70b-chat

4,096

68.9

6.86

30.5

-

mistral-7b

32,000

62.5

6.84

26.2

-

gemma-7b

8,000

64.3

-

32.3

-

llama2-7b *

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 関数は以下のエラーメッセージを生成する可能性があります。

メッセージ

説明

too many requests

システム負荷が高すぎるため、リクエストは拒否されました。もう一度リクエストしてください。

invalid options object

関数に渡された options オブジェクトに無効なオプションまたは値が含まれています。

budget exceeded

モデルの消費予算を超えました。

unknown model "<モデル名>"

指定されたモデルは存在しません。

invalid language "<言語>"

指定された言語は TRANSLATE 関数ではサポートされていません。

max tokens of <カウント> exceeded

リクエストはモデルがサポートするトークンの最大数を超えました(モデルの制限 を参照)。

all requests were throttled by remote service

リクエスト数が 制限 を超えました。後でもう一度お試しください。

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"))
Copy

以下のように、テーブルの列に対して 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()
Copy

注釈

COMPLETE の高度なチャットスタイル(マルチメッセージ)形式は、Pythonでは現在サポートされていません。