Gemini API の ファインチューニング を試す
「Gemini API」 の ファインチューニングを試したので、まとめました。
1. Gemini API の ファインチューニング
「ファインチューニング」は、特定タスクにおけるモデル性能を向上させることができます。タスクの多くの例を含む学習データセットをモデルに提供することで機能します。ニッチなタスクの場合、適度な数のサンプルでモデルを調整することで、モデルの性能を大幅に向上させることができます。
2. client_secret.json の取得
「ファインチューニング」や「セマンティック検索」など、「Gemini API」の一部では、認証に「OAuth」を使用します。「OAuth」を使用するには、「Google Cloud Platform」で「client_secret.json」を取得します。
(1) 「Google Cloud Platform」を開く。
(2) 「Google Cloud Platform」の「プロジェクト」の作成。
(3) 「Generative Language API」の有効化。
コンソールで「Generative Language API」を検索して有効化します。
(4) 「OAuth 同意画面」で「ユーザーの種類」で「外部」を選択し、「テストユーザー」を追加。
(5) 「認証情報」で「+認証情報を作成 → OAuthクライアントID」を選択。
(6) 名前を設定して「作成」ボタンを押す。
(7) 「JSONをダウンロード」を押す。
「client_secret.json」が取得できます。
3. gcloud CLI のインストール
「gcloud CLI」をローカルマシンにインストールします。
4. OAuthの認証
ColabでのOAuth認証の手順は、次のとおりです。
(1) 左端の鍵アイコンで「CLIENT_SECRET」に「client_secret.json」の中身をコピー。
(2) シークレットキーから「client_secret.json」を生成
from google.colab import userdata
import pathlib
pathlib.Path("client_secret.json").write_text(userdata.get("CLIENT_SECRET"))
(3) client_secret.json ファイルを使用可能な認証情報に変換。
以下のセルを実行後、指示に従ってローカルマシンでコマンドを実行し、「Google Cloud Platform」にログインし、出力結果をセルのテキストボックスに入力します。
!gcloud auth application-default login \
--no-browser --client-id-file client_secret.json \
--scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning,https://www.googleapis.com/auth/generative-language.retriever'
5. 学習
Colabでの学習の手順は、次のとおりです。
(1) パッケージのインストール。
# パッケージのインストール
!pip install -q -U google-generativeai
(2) ファインチューニング済みモデルの確認。
初回はまだありません。
import google.generativeai as genai
# ファインチューニングモデルの確認
for model in genai.list_tuned_models():
print(model.name)
(3) ファインチューニングモデルの準備。
現在、ファインチューニング可能なモデルは「models/gemini-1.0-pro-001」のみです。
# ファインチューニングモデルの準備
base_model = [
m for m in genai.list_models()
if "createTunedModel" in m.supported_generation_methods][0]
base_model
Model(name='models/gemini-1.0-pro-001',
base_model_id='',
version='001',
display_name='Gemini 1.0 Pro 001 (Tuning)',
description=('The best model for scaling across a wide range of tasks. This is a stable '
'model that supports tuning.'),
input_token_limit=30720,
output_token_limit=2048,
supported_generation_methods=['generateContent', 'countTokens', 'createTunedModel'],
temperature=0.9,
top_p=1.0,
top_k=1)
(4) 学習の開始。
training_dataに学習データを設定します。今回は、数値を1加算するタスクの入出力ペアを準備しました。
import random
# ファインチューニングの開始
name = f'generate-num-{random.randint(0,10000)}'
operation = genai.create_tuned_model(
# チューニングしたモデルも使用可能
# source_model="tunedModels/..."
source_model=base_model.name,
training_data=[
{
'text_input': '1',
'output': '2',
},{
'text_input': '3',
'output': '4',
},{
'text_input': '-3',
'output': '-2',
},{
'text_input': 'twenty two',
'output': 'twenty three',
},{
'text_input': 'two hundred',
'output': 'two hundred one',
},{
'text_input': 'ninety nine',
'output': 'one hundred',
},{
'text_input': '8',
'output': '9',
},{
'text_input': '-98',
'output': '-97',
},{
'text_input': '1,000',
'output': '1,001',
},{
'text_input': '10,100,000',
'output': '10,100,001',
},{
'text_input': 'thirteen',
'output': 'fourteen',
},{
'text_input': 'eighty',
'output': 'eighty one',
},{
'text_input': 'one',
'output': 'two',
},{
'text_input': 'three',
'output': 'four',
},{
'text_input': 'seven',
'output': 'eight',
}
],
id = name,
epoch_count = 100,
batch_size=4,
learning_rate=0.001,
)
(5) 学習状況の確認。
model.stateで状態、operation.metadataでオペレーションのメタデータを確認できます。
# モデルの取得
model = genai.get_tuned_model(f'tunedModels/{name}')
# 学習状況の確認
print(model.state)
print(operation.metadata)
<State.CREATING: 1>
total_steps: 375
tuned_model: "tunedModels/generate-num-6684"
(7) インジケーターの表示。
学習完了までのインジケータを表示します。
import time
# インジケーターの表示
for status in operation.wait_bar():
time.sleep(30)
キャンセルしたい時は、operation.cancel() を呼びます。
(8) 学習結果をグラフで確認。
import pandas as pd
import seaborn as sns
# 学習結果をグラフで確認
model = operation.result()
snapshots = pd.DataFrame(model.tuning_task.snapshots)
sns.lineplot(data=snapshots, x = "epoch", y="mean_loss")
6. 推論
Colabでの推論の手順は、次のとおりです。
(1) モデルの取得。
# モデルの取得
model = genai.GenerativeModel(model_name=f"tunedModels/{name}")
(2) 推論の実行。
result = model.generate_content("55")
result.text
56
(3) 推論の実行。
result = model.generate_content("four")
result.text
five
(4) 推論の実行。
result = model.generate_content("七")
result.text
八
7. 削除
Colabでの削除の手順は、次のとおりです。
(1) ファインチューン済みモデルの削除。
# ファインチューン済みモデルの削除
genai.delete_tuned_model(f"tunedModels/{name}")
この記事が気に入ったらサポートをしてみませんか?