微調整 (Snowflake Cortex)¶
Snowflake Cortex Fine-tuning 関数は、特定のタスクのために大規模な言語モデルをカスタマイズする方法を提供します。このトピックでは、この機能がどのように機能するのか、また、独自の微調整モデルの作成を開始する方法について説明します。
概要¶
Cortex Fine-tuning を使用すると、パラメーター効率の良い微調整(PEFT)を活用して、より専門的なタスクで事前に訓練されたモデルを使用するためのカスタマイズされたアダプタを作成することができます。大規模なモデルをゼロからトレーニングする高いコストはかけたくないが、プロンプトエンジニアリングや検索拡張世代 (RAG) メソッドよりも優れたレイテンシーと結果が必要な場合、既存の大規模モデルを微調整することも選択肢の1つです。微調整では、例を使ってモデルの動作を調整し、ドメイン固有のタスクに関するモデルの知識を向上させることができます。
Cortex Fine-tuning はフルマネージドサービスであり、Snowflake内でお客様のデータを使用して人気のある LLMs を微調整することができます。
Cortex Fine-tuning 機能は、以下の引数を持つSnowflake Cortex関数、 FINETUNE として提供されます。
コストの考慮事項¶
Snowflake Cortex Snowflake Cortex Fine-tuning 関数は、処理されたトークンの数に基づいてコンピューティングコストが発生します。さらに、微調整されたモデルで COMPLETE 関数を実行すると、処理されるトークン数に応じたコンピューティングコストが発生します。100万トークンあたりのクレジット単位での各コストについては、 Snowflakeサービス利用テーブル をご参照ください。
トークンとは、 Snowflake Cortex Fine-tuning 関数で処理されるテキストの最小単位のことで、およそ4文字のテキストに相当します。トークンに相当する生の入力または出力テキストは、モデルによって異なる場合があります。
レスポンスに新しいテキストを生成する COMPLETE 関数では、入力と出力の両方のトークンがカウントされます。
微調整されたトークンは次のように計算されます。
Fine-tuning trained tokens = number of input tokens * number of epochs trained
FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX) を使用して、微調整ジョブのトレーニング済みトークンの数を確認します。
その他の考慮事項¶
アクセス制御の要件¶
微調整ジョブを実行するには、微調整ジョブを作成するロールに以下の権限が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
USAGE |
DATABASE |
トレーニング (および検証) データがクエリされるデータベース。 |
(CREATEMODELおよびUSAGE) またはOWNERSHIP |
SCHEMA |
モデルが保存されるスキーマ。 |
以下の SQL は、 my_schema
上のロール(my_role
)に CREATE MODEL 権限を付与する例です。
GRANT CREATE MODEL ON SCHEMA my_schema TO ROLE my_role;
さらに、FINETUNE関数を使用するには、ACCOUNTADMINロールは、SNOWFLAKECORTEX_USERデータベースロールを関数を呼び出せるユーザーに付与する必要があります。詳細については、 LLM関数で必要な権限 のトピックをご参照ください。
他のロールに微調整されたモデルの使用権を与えるには、そのモデルに対して使用権を与えなければなりません。詳細については、 モデル権限 をご参照ください。
微調整が可能なモデル¶
微調整が可能なベースモデルは以下の通りです。微調整が可能なモデルは、今後追加または削除される可能性があります。
名前 |
説明 |
---|---|
|
テキスト分類、要約、感情分析など、 |
|
チャットアプリケーション、コンテンツ作成、エンタープライズアプリケーションに理想的な最先端のパフォーマンスを提供するMetaのLLM。 |
|
低~中程度の推論を必要とするタスクに最適なMeta社の大規模な言語モデル。軽量で超高速のモデルで、コンテキストウィンドウは128Kです。 |
|
チャットアプリケーション、コンテンツ作成、エンタープライズアプリケーションに理想的な最先端のパフォーマンスを発揮するオープンソースモデル。128Kのコンテキストウィンドウで多様なユースケースを可能にする、高いパフォーマンスとコスト効率を備えたモデルです。 |
|
Mistral AI が提供する70億パラメータの大規模言語モデルは、最も単純な要約、構造化、迅速に終わらせる必要がある質問応答タスクに最適です。32Kのコンテキストウィンドウにより、複数ページのテキストを低レイテンシで高スループットに処理します。 |
|
Mistral AIの大規模な言語モデルは、テキスト生成、分類、質問応答などに最適です。Mistralのモデルは、低レイテンシ、低メモリ要件に最適化されており、企業のユースケースにおいて高いスループットを実現します。 |
モデルを微調整する方法¶
モデル調整の全体的なワークフローは以下の通りです。
トレーニングが完了したら、 Cortex Fine-tuning によって提供されたモデル名を使って、モデルの推論を実行することができます。
トレーニングデータを準備する¶
トレーニングデータはSnowflakeテーブルまたは表示から取得する必要があり、クエリ結果には prompt
と completion
という名前の列が含まれている必要があります。テーブルやビューに必要な名前の列がない場合は、クエリで列エイリアスを使用して名前を付けます。このクエリはFINETUNE関数のパラメータとして渡されます。結果に prompt
、 completion
列名が含まれていないとエラーになります。
注釈
プロンプト列と完了列以外の列は、FINETUNE関数によって無視されます。Snowflakeでは、必要な列のみを選択するクエリの使用を推奨しています。
以下のコードでは、 FINETUNE 関数を呼び出し、 SELECT ... AS
構文を使用して、クエリ結果の2つの列を prompt
と completion
に設定します。
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'my_tuned_model',
'mistral-7b',
'SELECT a AS prompt, d AS completion FROM train',
'SELECT a AS prompt, d AS completion FROM validation'
);
プロンプトはLLMへの入力であり、完了はLLMからの応答です。トレーニングデータには、特定のプロンプトに対してモデルがどのように反応するかを示すプロンプトと完了のペアを含める必要があります。
微調整することで最適なパフォーマンスを得るために、トレーニングデータに関する推奨事項と必要条件を以下に示します。
数百の例から始めてください。あまりに多くの例から始めると、調整にかかる時間が大幅に増加し、パフォーマンスの向上は最小限にとどまる可能性があります。
各例では、調整するベースモデルに割り当てられたコンテキストウィンドウの一部だけを使用する必要があります。コンテキストウィンドウはトークンで定義されます。トークンは、Snowflake Cortex関数で処理されるテキストの最小単位で、テキストの4文字とほぼ同じです。
各ベースモデルの
prompt
とcompletion
に割り当てられるコンテキストウィンドウの部分は、次の表に定義されています。モデル
コンテキストウィンドウ
入力コンテキスト(プロンプト)
出力コンテキスト(完了)
llama3-8b
8k
6k
2k
llama3-70b
8k
6k
2k
llama3.1-8b
128k
120k
8k
llama3.1-70b
128k
120k
8k
mistral-7b
32k
28k
4k
mixtral-8x7b
32k
28k
4k
微調整ジョブの開始¶
SNOWFLAKE.CORTEX.FINETUNE 関数を呼び出して、 「CREATE」 を最初の引数として渡すか、 Snowsight を使用して微調整ジョブを開始できます。
SQL を使用する¶
この例では、 mistral-7b
モデルをベースモデルとして使用し、 my_tuned_model
というモデル出力名と、 my_training_data
と my_validation_data
のテーブルからそれぞれトレーニングデータと検証データをクエリするジョブを作成します。
USE DATABASE mydb;
USE SCHEMA myschema;
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'my_tuned_model',
'mistral-7b',
'SELECT prompt, completion FROM my_training_data',
'SELECT prompt, completion FROM my_validation_data'
);
モデルやデータなどのデータベースオブジェクトごとに異なるデータベースやスキーマを使用したい場合は、それぞれに絶対パスを使用することができます。次の例では、 mydb2.myschema2
データベースとスキーマからデータを使用して微調整ジョブを作成し、微調整されたモデルを mydb.myschema
データベースとスキーマに保存しています。
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'mydb.myschema.my_tuned_model',
'mistral-7b',
'SELECT prompt, completion FROM mydb2.myschema2.my_training_data',
'SELECT prompt, completion FROM mydb2.myschema2.my_validation_data'
);
SNOWFLAKE.CORTEX.FINETUNE関数の第一引数 に「CREATE」を指定すると、出力として微調整されたモデルIDを返します。 SNOWFLAKE.CORTEX.FINETUNE関数を使用し、「DESCRIBE」を第一引数 として、ステータスやジョブの進捗状況を取得するには、このIDを使用します。
Snowsight を使用する¶
Snowsight で微調整ジョブを作成するには、以下の手順に従ってください。
Snowsight にサインインします。
SNOWFLAKE.CORTEX_USER データベースロールが付与されているロールを選択します。
ナビゲーションメニューで AI & ML » Studio を選択します。
Create Custom LLM ボックスから Fine-tune を選択します。
ドロップダウンメニューでベースモデルを選択します。
微調整ジョブを実行するロールと実行するウェアハウスを選択します。このロールには、 SNOWFLAKE.CORTEX_USER データベースロールが付与されていなければならなりません。
微調整したモデルを保存するデータベースを選択します。
微調整したモデルの名前を入力し、 Let's go を選択します。
トレーニングデータを含むテーブルまたはビューを選択し、 Next を選択します。トレーニングデータは、そのロールがアクセスできるデータベースやスキーマから得ることができます。
トレーニングデータのプロンプトを含む列を選択し、 Next を選択します。
トレーニングデータの完了を含む列を選択し、 Next を選択します。
検証データセットがある場合は、検証データを含むテーブルまたはビューを選択し、 Next を選択します。個別の検証データがない場合は、 Skip this option を選択します。
選択を認証し、 Start training を選択します。
最後のステップは、微調整ジョブの開始を確認し、 Job ID を表示します。 SNOWFLAKE.CORTEX.FINETUNE関数を使用し、「DESCRIBE」を第一引数 として、ステータスやジョブの進捗状況を取得するには、このIDを使用します。
微調整されたモデルの管理¶
微調整ジョブは長時間実行されるため、ワークシートセッションに関連付けられません。 「SHOW」 または 「DESCRIBE」 を第一引数とし、 SNOWFLAKE.CORTEX.FINETUNE 関数を使用して調整ジョブのステータスを確認できます。
微調整ジョブが不要になった場合は、 「CANCEL」を最初の引数に使用した SNOWFLAKE.CORTEX.FINETUNE 関数 を使用して微調整ジョブを終了させることができます。2番目の引数には、ジョブ ID を指定します。
微調整したモデルを推論に使用します。¶
COMPLETE LLM関数 を、微調整したモデルの名前と一緒に使って推論してください。
この例では、微調整したモデルの名前で COMPLETE 関数を呼び出しています。
SELECT SNOWFLAKE.CORTEX.COMPLETE(
'my_tuned_model',
'How to fine-tune mistral models'
);
以下は呼び出し例からの出力のスニペットです。
Mistral models are a type of deep learning model used for image recognition and classification. Fine-tuning a Mistral model involves adjusting the model's parameters to ...
制限事項と既知の問題¶
微調整ジョブはアカウントレベルでのみリスト可能です。
FINETUNE ('SHOW') (SNOWFLAKE.CORTEX) から返される微調整ジョブは永続的なものではなく、定期的に廃棄処分される可能性があります。
ベースモデルがCortex LLM 関数から削除された場合、微調整したモデルは機能しなくなります。
モデルの複製¶
クロスリージョン推論 は微調整モデルをサポートしていません。推論は、モデルオブジェクトがあるのと同じ領域で行われなければなりません。モデルが学習されたリージョンと異なる場合は、データベースの複製を使用して、推論を行いたいリージョンに微調整されたモデルオブジェクトを複製することができます。
たとえば、 AWS US 西部2リージョンのアカウントで、 mistral-7b
に基づいて微調整されたモデルを作成した場合、データ共有を使用してこのリージョンの別のアカウントと共有したり、データベースレプリケーションを使用して、 AWS ヨーロッパ西部など、 mistral-7b
モデルをサポートする別のリージョンにある組織の別のアカウントにモデルを複製したりすることができます。オブジェクトの複製に関する詳細は、 複数のアカウント間にわたるデータベースとアカウントオブジェクトの複製 をご参照ください。
法的通知¶
インプットとアウトプットのデータ分類は以下の表の通りです。
入力データの分類 |
出力データの分類 |
指定 |
---|---|---|
Usage Data |
Customer Data |
Preview AI Features [1] |
詳細については、 Snowflake AI と ML をご参照ください。