İnce ayar eğiticisi

Bu eğitim, Gemini API ayarlarını kullanmaya başlamanıza yardımcı olacaktır. Python SDK veya REST API kullanarak curl değerine ayarlayın. Örneklerde, arka plandaki metin modelinin nasıl ayarlanacağı gösterilmektedir Gemini API metin oluşturma hizmeti.

ai.google.dev'de görüntüleyin Colab not defterini deneyin GitHub'da not defterini görüntüle

Kimlik doğrulamayı ayarlayın

Gemini API, modelleri kendi verilerinize göre ayarlamanıza olanak tanır. Bu sizin verileriniz ve bu değişiklik, API anahtarlarının sağlayabileceğinden daha katı erişim denetimleri kullanır.

Bu eğiticiyi çalıştırmadan önce Google Ads'de OAuth'u kurmanız kullanıp ardından dosyayı "OAuth İstemci Kimliği" "client_secret.json" olarak değişecektir.

Bu gcloud komutu, client_secret.json dosyasını kimlik bilgilerine dönüştürür. hizmetle kimlik doğrulaması yapmak için kullanılabilir.

gcloud auth application-default login \
    --client-id-file client_secret.json \
    --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'

Değişkenleri ayarlama

CURL

REST API'nin geri kalanında kullanılacak yinelenen değerler için değişkenler ayarlayın çağrısının en iyi yoludur. Kod, ortamı ayarlamak için Python os kitaplığını kullanıyor değişkenlerini ifade eder.

Bu, Colab not defteri ortamına özeldir. Sonraki aşamadaki kod, kod hücresi, aşağıdaki komutları bir bash komutunda çalıştırmakla eşdeğerdir terminal.

export access_token=$(gcloud auth application-default print-access-token)
export project_id=my-project-id
export base_url=https://generativelanguage.googleapis.com
import os

access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)

os.environ['access_token'] = access_token
os.environ['project_id'] = "[Enter your project-id here]"
os.environ['base_url'] = "https://generativelanguage.googleapis.com"

Python

access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)

project = '[Enter your project-id here]'
base_url = "https://generativelanguage.googleapis.com"

requests kitaplığını içe aktarın.

import requests
import json

Hassaslaştırılmış modelleri listeleme

Hassaslaştırılmış modelleri listeleyerek kimlik doğrulama ayarlarınızı doğrulayın.

CURL


curl -X GET ${base_url}/v1beta/tunedModels \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}"

Python

headers={
  'Authorization': 'Bearer ' + access_token,
  'Content-Type': 'application/json',
  'x-goog-user-project': project
}

result = requests.get(
  url=f'{base_url}/v1beta/tunedModels',
  headers = headers,
)
result.json()

Hassaslaştırılmış model oluşturma

Hassaslaştırılmış bir model oluşturmak için veri kümenizi modele training_data alanı boş bırakılamaz.

Bu örnekte, bir sonraki sayıyı oluşturmak için bir modeli tıklayın. Örneğin, giriş 1 ise model 2 çıktısı vermelidir. Öğe giriş one hundred, çıkış one hundred one olmalıdır.

CURL


curl -X POST $base_url/v1beta/tunedModels \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" \
    -d '
      {
        "display_name": "number generator model",
        "base_model": "models/gemini-1.0-pro-001",
        "tuning_task": {
          "hyperparameters": {
            "batch_size": 2,
            "learning_rate": 0.001,
            "epoch_count":5,
          },
          "training_data": {
            "examples": {
              "examples": [
                {
                    "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",
                }
              ]
            }
          }
        }
      }' | tee tunemodel.json
{
"name": "tunedModels/number-generator-model-dzlmi0gswwqb/operations/bvl8dymw0fhw",
"metadata": {
  "@type": "type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata",
  "totalSteps": 38,
  "tunedModel": "tunedModels/number-generator-model-dzlmi0gswwqb"
}
}
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                              Dload  Upload   Total   Spent    Left  Speed
100  2280    0   296  100  1984    611   4098 --:--:-- --:--:-- --:--:--  4720

Python

operation = requests.post(
    url = f'{base_url}/v1beta/tunedModels',
    headers=headers,
    json= {
        "display_name": "number generator",
        "base_model": "models/gemini-1.0-pro-001",
        "tuning_task": {
          "hyperparameters": {
            "batch_size": 4,
            "learning_rate": 0.001,
            "epoch_count":5,
          },
          "training_data": {
            "examples": {
              "examples": [
                {
                    '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',
                }
              ]
            }
          }
        }
      }
)
operation
<Response [200]>
operation.json()
{'name': 'tunedModels/number-generator-wl1qr34x2py/operations/41vni3zk0a47',
'metadata': {'@type': 'type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata',
  'totalSteps': 19,
  'tunedModel': 'tunedModels/number-generator-wl1qr34x2py'} }

Hassaslaştırılmış modelinizin adını içeren ve geri kalan çağrısının en iyi yoludur.

name=operation.json()["metadata"]["tunedModel"]
name
'tunedModels/number-generator-wl1qr34x2py'

Dönem sayısı, grup boyutu ve öğrenme hızı için en uygun değerler bağlıdır veri kümenize ve kullanım alanınızın diğer kısıtlamalarına bağlı kalır. Şu konu hakkında daha fazla bilgi edinmek için: daha fazla bilgi için Gelişmiş ayar ayarları ve Hiperparametreler.

Hassaslaştırılmış model durumunu alın

Modelin durumu, eğitim sırasında CREATING olarak ayarlanır ve şu şekilde değişir: Tamamlandığında ACTIVE.

CURL

Aşağıda, oluşturulan model adını yanıt JSON dosyası. Bunu bir terminalde çalıştırıyorsanız bash kullanarak Yanıtı ayrıştırmak için kullanılan JSON ayrıştırıcısı.

import json

first_page = json.load(open('tunemodel.json'))
os.environ['modelname'] = first_page['metadata']['tunedModel']

print(os.environ['modelname'])
tunedModels/number-generator-model-dzlmi0gswwqb

Model adıyla başka bir GET isteği göndererek eyalet alanını içerir.


curl -X GET ${base_url}/v1beta/${modelname} \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" | grep state
"state": "ACTIVE",
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                              Dload  Upload   Total   Spent    Left  Speed
100  5921    0  5921    0     0  13164      0 --:--:-- --:--:-- --:--:-- 13157

Python

tuned_model = requests.get(
    url = f'{base_url}/v1beta/{name}',
    headers=headers,
)
tuned_model.json()

Aşağıdaki kod, durum alanını işlemden kaldırılana kadar her 5 saniyede bir kontrol eder CREATING durumunda.

import time
import pprint

op_json = operation.json()
response = op_json.get('response')
error = op_json.get('error')

while response is None and error is None:
    time.sleep(5)

    operation = requests.get(
        url = f'{base_url}/v1/{op_json["name"]}',
        headers=headers,
    )

    op_json = operation.json()
    response = op_json.get('response')
    error = op_json.get('error')

    percent = op_json['metadata'].get('completedPercent')
    if percent is not None:
      print(f"{percent:.2f}% - {op_json['metadata']['snapshots'][-1]}")
      print()

if error is not None:
    raise Exception(error)
100.00% - {'step': 19, 'epoch': 5, 'meanLoss': 1.402067, 'computeTime': '2024-03-14T15:11:23.766989274Z'}

Çıkarım yap

Ayarlama işiniz bittikten sonra bunu metin içeren metin oluşturmak için kullanabilirsiniz geliştirmenizi sağlar.

CURL

Bir Roma rakamı girmeye çalışın, örneğin 63 (LXIII):


curl -X POST $base_url/v1beta/$modelname:generateContent \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" \
    -d '{
        "contents": [{
        "parts": [{
          "text": "LXIII"
          }]
        }]
        }' 2> /dev/null
{
"candidates": [
  {
    "content": {
      "parts": [
        {
          "text": "LXIV"
        }
      ],
      "role": "model"
    },
    "finishReason": "STOP",
    "index": 0,
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
],
"promptFeedback": {
  "safetyRatings": [
    {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "probability": "NEGLIGIBLE"
    },
    {
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "probability": "NEGLIGIBLE"
    },
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "probability": "NEGLIGIBLE"
    },
    {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "probability": "NEGLIGIBLE"
    }
  ]
}
}

Modelin çıktısı doğru olabilir veya olmayabilir. Hassaslaştırılmış model istediğiniz standartlara uymuyorsa daha yüksek hiperparametreleri düzenleyebilir veya kampanyanıza önsöz örnekler. Oluşturduğunuz ilk modele dayalı olarak hassaslaştırılmış başka bir model de oluşturuldu.

Ayar rehberine bakın. inceleyin.

Python

Japonca bir rakam girmeye çalışın, örneğin 6 (六):

import time

m = requests.post(
    url = f'{base_url}/v1beta/{name}:generateContent',
    headers=headers,
    json= {
        "contents": [{
            "parts": [{
                "text": "六"
            }]
          }]
    })
import pprint
pprint.pprint(m.json())
{'candidates': [{'content': {'parts': [{'text': '七'}], 'role': 'model'},
                'finishReason': 'STOP',
                'index': 0,
                'safetyRatings': [{'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
                                    'probability': 'NEGLIGIBLE'},
                                  {'category': 'HARM_CATEGORY_HATE_SPEECH',
                                    'probability': 'NEGLIGIBLE'},
                                  {'category': 'HARM_CATEGORY_HARASSMENT',
                                    'probability': 'LOW'},
                                  {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT',
                                    'probability': 'NEGLIGIBLE'}]}],
'promptFeedback': {'safetyRatings': [{'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
                                      'probability': 'NEGLIGIBLE'},
                                      {'category': 'HARM_CATEGORY_HATE_SPEECH',
                                      'probability': 'NEGLIGIBLE'},
                                      {'category': 'HARM_CATEGORY_HARASSMENT',
                                      'probability': 'NEGLIGIBLE'},
                                      {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT',
                                      'probability': 'NEGLIGIBLE'}]} }

Modelin çıktısı doğru olabilir veya olmayabilir. Hassaslaştırılmış model istediğiniz standartlara uymuyorsa daha yüksek hiperparametreleri düzenleyebilir veya kampanyanıza önsöz örnekler.

Sonuç

Eğitim verilerinde Latin Amerika'ya veya Japoncaya atıfta bulunmasa da sonra, model ince ayardan sonra genelleme yapabildi. Bu şekilde projenin kullanım alanlarınıza uygun şekilde modeller.

Sonraki adımlar

Python SDK'sı yardımıyla ince ayar hizmetinin nasıl kullanılacağını öğrenmek için Gemini API için ayarlama hızlı başlangıç kılavuzunu ziyaret edin: Python'da kullanılabilir. Nasıl yapıldığını Gemini API'deki diğer hizmetleri kullanmak için REST'i kullanmaya başlama eğiticisi.