OpenAI platform : ガイド : 微調整 1. イントロダクション (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/29/2023
* 本ページは、以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
OpenAI platform : ガイド : 微調整 1. イントロダクション
貴方のアプリケーション用にモデルをカスタマイズする方法を学習します。
イントロダクション
微調整は以下を提供することで API を使用して利用可能なモデルからより多くを貴方に取得させます :
- プロンプト設計よりも高品質な結果
- プロンプト内に収まるよりも多くのサンプルで訓練する機能
- より短いプロンプトによるトークンの節約
- より低いレイテンシーのリクエスト
GPT-3 はオープンなインターネットからの膨大な量のテキスト上で事前訓練されています。幾つかのサンプルを含むプロンプトが与えられたとき、多くの場合、どのようなタスクを実行しようとしているかを直感的に理解して尤もらしい補完を生成することができます。これは “few-shot learning” としばしば呼称されます。
微調整はプロンプトに収まることができないより多くのサンプル上で訓練することにより、few-shot learning 上で向上し、幅広いタスクでより良い結果を達成させることができます。モデルが微調整されれば、プロンプトでサンプルを提供する必要はもはやなくなります。これはコストを節約して低レイテンシーなリクエストを可能にします。
高いレベルでは、微調整は以下のステップを含みます :
- 訓練データの準備とアップロード
- 新しい微調整されるモデルの訓練
- 微調整済みモデルの使用
Visit our pricing page to learn more about how fine-tuned model training and usage are billed.
どのモデルが微調整できますか?
We are working on safely enabling fine-tuning for GPT-4 and GPT-3.5 Turbo and expect this feature to be available later this year.
微調整は現在以下のベースモデル: davinci, curie, babbage と ada だけで利用可能です。これらは訓練に続いてどのようなインストラクションも持たないオリジナルモデルです (例えば text-davinci-003 がそうであるように)。ゼロから開始する必要もなく、追加データを追加するために 微調整済みモデルを続けて微調整する ことも可能です。
インストール
OpenAI コマンドライン・インターフェイス (CLI) を使用することを勧めます。これをインストールするには、以下を実行します :
pip install --upgrade openai
(The following instructions work for version 0.9.4 and up. Additionally, the OpenAI CLI requires python 3.)
以下の行をシェル初期化スクリプト (e.g. .bashrc, zshrc, 等) に追加するか、微調整コマンドの前にコマンドラインで実行することで OPENAI_API_KEY 環境変数を設定します :
export OPENAI_API_KEY="<OPENAI_API_KEY>"
訓練データの準備
訓練データは GPT-3 にそれに言わせたいことをどのように教えるかです。
貴方のデータは JSONL ドキュメントである必要があります、そこでは各行は訓練サンプルに対応したプロンプト-補完ペアです。CLI データ準備ツール を使用すればデータをこのファイル形式に簡単に変換できます。
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...
微調整用のプロンプトと補完の設計はベースモデル (Davinci, Curie, Babbage, Ada) での使用のためのプロンプトの設計とは異なります。特に、ベースモデル用のプロンプトは複数のサンプル (“few-shot learning”) からしばしば構成されますが、微調整用には、各訓練サンプル一般的には単一の入力サンプルと関連する出力で構成され、詳細なインストラクションを与えたり同じプロンプトに複数のサンプルを含める必要はありません。
多様なタスクに対して訓練データを準備する方法の詳細なガイダンスについては、preparing your dataset ベストプラクティスを参照してください。
訓練サンプルが多いほど、ベターです。少なくとも 200 サンプル (a couple hundred examples) を持つことを勧めます。一般に、データセットサイズが 2 倍になるごとにモデル品質が線形で向上することを私たちは見出しました。
CLI データ準備ツール
データを検証し、提案を与え、そして再フォーマットするツールを私たちは開発しました :
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
このツールは様々な形式を受け入れますが、唯一の要件はそれらが prompt と completion のカラム/キーを含むことです。CSV, TSV, XLSX, JSON or JSONL ファイルを渡すことができて、ツールは提案された変更の過程をガイドした後に、出力を微調整のために準備できた JSONL ファイルにセーブします。
微調整済みモデルの作成
以下では、上記の手順に従って訓練データを既に準備したものと仮定しています。
OpenAI CLI を使用して微調整ジョブを開始します :
openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>
ここで BASE_MODEL は貴方がそこから開始しようとしているベースモデルの名前 (ada, babbage, curie または davinci) です。suffix パラメータを使用して微調整されるモデルの名前をカスタマイズできます。
上記のコマンドの実行は幾つかのことを行ないます :
- ファイル API を使用してファィルをアップロードする (あるいは既にアップロードされているファイルを使用する)
- 微調整ジョブの作成
- ジョブが完了するまでイベントをストリームする (これはしばしば数分かかりますが、キューに多くのジョブがあったりデータセットが大きい場合には数時間かかる可能性があります)
すべての微調整ジョブはベースモデルから開始されます、そのデフォルトは curie です。モデルの選択はモデルのパフォーマンスと微調整済みモデルの実行のコストに影響します。モデルは ada, babbage, curie または davinci の一つになります。Visit our pricing page for details on fine-tune rates.
微調整ジョブを開始した後、それは完了するまである程度時間がかかるかもしれません。貴方のジョブは私たちのシステムの他のジョブの後ろにキューイングされる可能性があり、モデルの訓練はモデルとデータセットのサイズに依存して数分あるいは数時間かかる可能性があります。イベント・ストリームが何らかの理由で中断された場合は、それを以下を実行することで再開できます :
openai api fine_tunes.follow -i <YOUR_FINE_TUNE_JOB_ID>
ジョブが完了するとき、微調整済みモデルの名前が表示されるはずです。
微調整ジョブを作成することに加えて、既存のジョブをリストアップして、ジョブのステータスを取得したり、ジョブをキャンセルすることもできます。
# List all created fine-tunes
openai api fine_tunes.list
# Retrieve the state of a fine-tune. The resulting object includes
# job status (which can be one of pending, running, succeeded, or failed)
# and other information
openai api fine_tunes.get -i <YOUR_FINE_TUNE_JOB_ID>
# Cancel a job
openai api fine_tunes.cancel -i <YOUR_FINE_TUNE_JOB_ID>
微調整済みモデルの使用
ジョブが成功したとき、fine_tuned_model フィールドはモデルの名前で埋められます。このモデルを 補完 API へのパラメータとして指定して、Playground を使用してそれにリクエストすることができるようになります。
最初にジョブが完了した後、モデルがリクエストを処理する準備ができるようになるまで数分かかるかもしれません。モデルへの補完リクエストがタイムアウトする場合、それはモデルがまだロードされているためである可能性があります。これが発生した場合、数分後に再度試してください。
補完リクエストのモデルパラメータとしてモデル名を渡すことによりリクエストの作成を始めることができます。
OpenAI CLI:
openai api completions.create -m <FINE_TUNED_MODEL> -p <YOUR_PROMPT>
cURL:
curl https://api.openai.com/v1/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": YOUR_PROMPT, "model": FINE_TUNED_MODEL}'
Python:
import openai
openai.Completion.create(
model=FINE_TUNED_MODEL,
prompt=YOUR_PROMPT)
Node.js:
const response = await openai.createCompletion({
model: FINE_TUNED_MODEL
prompt: YOUR_PROMPT,
});
微調整済みモデルへのこれらのリクエストにおいて、temperature, frequency_penalty, presence_penalty 等のような他の 補完 パラメータすべてを使用し続けることができます。
微調整済みモデルの削除
微調整済みモデルを削除するには、貴方は組織内で “owner” として指名されている必要があります。
OpenAI CLI:
openai api models.delete -i <FINE_TUNED_MODEL>
cURL:
curl -X "DELETE" https://api.openai.com/v1/models/ \
-H "Authorization: Bearer $OPENAI_API_KEY"
Python:
import openai
openai.Model.delete(FINE_TUNED_MODEL)
以上