Affinage supervisé et par distillation pour les modèles ouverts

Cette page explique comment effectuer un affinage supervisé et par distillation sur des modèles ouverts tels que Llama 3.1. Sauf indication contraire, les instructions de cette page s'appliquent à l'affinage supervisé et à l'affinage par distillation. La distillation vous permet d'ajuster un modèle élève plus petit à l'aide des sorties d'un modèle enseignant plus grand.

Modes de réglage compatibles

  • Affinage supervisé :
    • Affinage complet
    • Low-Rank Adaptation (LoRA) : LoRA est un mode de réglage des paramètres avec optimisation qui n'ajuste qu'un sous-ensemble de paramètres. Il est plus économique et nécessite moins de données d'entraînement que l'affinage complet. En revanche, l'affinage complet a un potentiel de qualité plus élevé en ajustant tous les paramètres.
  • Finetuning par distillation : le finetuning par distillation utilise le SDK GenAI, dans lequel vous spécifiez un modèle enseignant pour générer des réponses qui sont ensuite utilisées pour ajuster un modèle élève plus petit.

Cas d'utilisation recommandés pour l'affinage par distillation

L'affinage par distillation est plus efficace lorsque le modèle enseignant est beaucoup plus performant que le modèle élève pour la tâche cible. Il est recommandé pour transférer des capacités de raisonnement complexes et en plusieurs étapes d'un grand modèle enseignant vers un petit modèle élève, y compris :

  • Raisonnement mathématique et quantitatif
  • Systèmes de questions-réponses scientifiques, médicaux et autres systèmes spécifiques à un domaine nécessitant un raisonnement par étapes
  • Autres tâches pour lesquelles un modèle enseignant performant avec un comportement de "réflexion" ou de chaîne de pensée produit systématiquement des réponses de meilleure qualité que l'élève.

La distillation offre des gains plus faibles pour les tâches où le modèle élève est déjà proche de celui de l'enseignant, ou pour les tâches de récupération de forme courte où la trace de raisonnement de l'enseignant n'apporte aucune valeur ajoutée.

Modèles compatibles

Modèles compatibles avec l'affinage supervisé

  • Gemma 3 1B-it (google/gemma3@gemma-3-1b-it)
  • Gemma 3 4B-it (google/gemma3@gemma-3-4b-it)
  • Gemma 3 12B IT (google/gemma3@gemma-3-12b-it)
  • Gemma 3 27B IT (google/gemma3@gemma-3-27b-it)
  • Medgemma 1.5 4B IT (google/medgemma@medgemma-4b-it)
  • Llama 3.1 8B (meta/llama3_1@llama-3.1-8b)
  • Llama 3.1 8B Instruct (meta/llama3_1@llama-3.1-8b-instruct)
  • Llama 3.2 1B Instruct (meta/llama3-2@llama-3.2-1b-instruct)
  • Llama 3.2 3B Instruct (meta/llama3-2@llama-3.2-3b-instruct)
  • Llama 3.3 70B Instruct (meta/llama3-3@llama-3.3-70b-instruct)
  • Qwen 3 4B (qwen/qwen3@qwen3-4b)
  • Qwen 3 8B (qwen/qwen3@qwen3-8b)
  • Qwen 3 14B (qwen/qwen3@qwen3-14b)
  • Qwen 3 32B (qwen/qwen3@qwen3-32b)
  • Llama 4 Scout 17B 16E Instruct (meta/llama4@llama-4-scout-17b-16e-instruct)

Modèles compatibles avec le réglage par distillation

Modèles enseignants compatibles :

  • DeepSeek R1 0528 MaaS (deepseek-ai/deepseek-r1-0528-maas)
  • DeepSeek V3.2 MaaS (deepseek-ai/deepseek-v3.2-maas)
  • Qwen 3 Next 80B A3B Thinking MaaS (qwen/qwen3-next-80b-a3b-thinking-maas)

Modèles élèves compatibles :

  • Qwen 3 4B (qwen/qwen3@qwen3-4b)
  • Qwen 3 8B (qwen/qwen3@qwen3-8b)
  • Qwen 3 14B (qwen/qwen3@qwen3-14b)
  • Qwen 3 32B (qwen/qwen3@qwen3-32b)
  • Gemma 3 1B-it (google/gemma3@gemma-3-1b-it)
  • Gemma 3 4B-it (google/gemma3@gemma-3-4b-it)
  • Gemma 3 12B IT (google/gemma3@gemma-3-12b-it)
  • Gemma 3 27B IT (google/gemma3@gemma-3-27b-it)

Régions où le service est disponible

  • Iowa (us-central1)
  • Pays-Bas (europe-west4)
  • Oregon (us-west1)
  • Columbus (us-east5)
  • Singapour (asia-southeast1)

Limites

Modèle Spécification Valeur
Gemma 3 1B-it Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Gemma 3 4B-it Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Gemma 3 12B-it Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Gemma 3 27B IT Modes de réglage Affinage d'un sous-ensemble de paramètres
Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Medgemma 1.5 4B IT Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Llama 3.1 8B Modes de réglage Affinage d'un sous-ensemble de paramètres
Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Llama 3.1 8B Instruct Modes de réglage Affinage d'un sous-ensemble de paramètres
Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Llama 3.2 1B Instruct Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Llama 3.2 3B Instruct Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Llama 3.3 70B Instruct Modes de réglage Affinage d'un sous-ensemble de paramètres
Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Llama 4 Scout 17B 16E Instruct Modes de réglage Affinage d'un sous-ensemble de paramètres
Longueur maximale de la séquence 2 048
Modalités Texte
Images*

* Les ensembles de données mixtes contenant à la fois des exemples de texte uniquement et d'images ne sont pas acceptés. S'il existe au moins un exemple d'image dans l'ensemble de données, tous les exemples de texte uniquement seront filtrés.
Qwen 3 4B Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Qwen 3 8B Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Qwen3 14B Modes de réglage Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte
Qwen 3 32B Modes de réglage Affinage d'un sous-ensemble de paramètres
Affinage complet
Longueur maximale de la séquence 8 192
Modalités Texte

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Gemini Enterprise Agent Platform and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Gemini Enterprise Agent Platform and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Installez le SDK et importez les bibliothèques pour votre méthode d'optimisation.

Affinage supervisé

Installez et initialisez le SDK Vertex AI pour Python, puis importez les bibliothèques suivantes :

import os
import time
import uuid
import vertexai

vertexai.init(project=PROJECT_ID, location=REGION)

from google.cloud import aiplatform
from vertexai.tuning import sft, SourceModel

Réglage de la distillation

Installez le SDK suivant :

pip install google-genai

Importez ensuite les bibliothèques suivantes :

import os
import time
import uuid

from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project=PROJECT_ID, location=REGION)

Préparer l'ensemble de données pour le réglage

Un ensemble de données d'entraînement est requis pour le réglage. Nous vous recommandons de préparer un ensemble de données de validation facultatif si vous souhaitez évaluer les performances de votre modèle réglé.

Votre ensemble de données doit être dans l'un des formats JSON Lines (JSONL) acceptés suivants, où chaque ligne contient un seul exemple de réglage.

Importez vos fichiers JSONL dans Cloud Storage.

Ensembles de données textuelles uniquement

Finalisation de l'invite

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

Format de chat tour par tour

{"messages": [
  {"content": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles.",
    "role": "system"},
  {"content": "Summarize the paper in one paragraph.",
    "role": "user"},
  {"content": " Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ...",
    "role": "assistant"}
]}

GenerateContent

{
"systemInstruction": {
  "parts": [{ "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles." }]},
"contents": [
  {"role": "user",
    "parts": [{ "text": "Summarize the paper in one paragraph." }]},
  {"role": "assistant",
    "parts": [{ "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..." }]}
]}

Ensembles de données multimodaux

Format de chat tour par tour

{"messages": [
  {"role": "user", "content": [
    {"type": "text", "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles."},
    {"type": "image_url", "image_url": {
      "url": "gs://your-gcs-bucket/your-image.jpeg",
      "detail": "low"}}]
  },
  {"role": "assistant", "content": [
    {"type": "text", "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..."}]
  },
  {"role": "user", "content": [
    {"type": "text", "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles."},
    {"type": "image_url", "image_url": {
      "url": "data:image/jpeg;base64,<base64 image>",
      "detail": "low"}}]
  },
  {"role": "assistant", "content": [
    {"type": "text", "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..."}]
  },
]}

GenerateContent

{
"systemInstruction": {
  "parts": [{ "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles." }]},
"contents": [
  {"role": "user",
    "parts": [
      {"text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles." },
      {"file_data": {
        "mime_type": "image/jpeg", "file_uri": "gs://your-gcs-bucket/your-image.jpeg"}}]
  },
  {"role": "assistant",
    "parts": [{ "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..." }]}
]}

Les formats acceptés sont JPEG, PNG, WEBP et les images encodées en base64.

Notez que si vos images sont stockées dans un bucket Cloud Storage différent de celui de vos fichiers JSONL, assurez-vous d'avoir attribué le rôle Utilisateur d'objets Storage (roles/storage.objectUser) IAM sur les deux buckets pour ces deux comptes de service :

  • service-PROJECT_NUMBER@gcp-sa-vertex-moss-ft.iam.gserviceaccount.com
  • service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

Créer un job de réglage

Vous pouvez écouter les chaînes suivantes :

  • Un modèle de base compatible, tel que Llama 3.1
  • Modèle dont l'architecture est identique à celle de l'un des modèles de base compatibles. Il peut s'agir d'un point de contrôle de modèle personnalisé provenant d'un dépôt tel que Hugging Face ou d'un modèle précédemment réglé à partir d'un job de réglage Gemini Enterprise Agent Platform. Cela vous permet de continuer à régler un modèle qui l'a déjà été.

Console Cloud (supervisée)

  1. Vous pouvez lancer le réglage précis de différentes manières :

    • Accédez à la fiche de modèle, cliquez sur Affiner, puis sélectionnez Réglage géré.

    Accéder à la fiche de modèle Llama 3.1

    ou

    • Accédez à la page Réglage, puis cliquez sur Créer un modèle réglé.

    Accéder à "Réglage"

  2. Renseignez les paramètres, puis cliquez sur Commencer l'optimisation.

Cela lance une tâche de réglage, que vous pouvez voir sur la page "Réglage" sous l'onglet Réglage géré.

Une fois le job de réglage terminé, vous pouvez afficher les informations sur le modèle réglé dans l'onglet Détails.

SDK Agent Platform (supervisé)

Remplacez les valeurs des paramètres par les vôtres, puis exécutez le code suivant pour créer un job d'optimisation :

sft_tuning_job = sft.train(
    source_model=SourceModel(
      base_model="meta/llama3_1@llama-3.1-8b",
      # Optional, folder that is either a custom model checkpoint or previously tuned model
      custom_base_model="gs://{STORAGE-URI}",
    ),
    tuning_mode="FULL", # FULL or PEFT_ADAPTER
    epochs=3,
    train_dataset="gs://{STORAGE-URI}", # JSONL file
    validation_dataset="gs://{STORAGE-URI}", # JSONL file
    output_uri="gs://{STORAGE-URI}",
)

SDK GenAI (distillation)

Remplacez les valeurs des paramètres par les vôtres, puis exécutez le code suivant pour créer un job d'optimisation de la distillation :

tuning_job = client.tunings.tune(
    base_model="qwen/qwen3@qwen3-4b",
    training_dataset=types.TuningDataset(
        gcs_uri="gs://{STORAGE-URI}"
    ),
    config=types.CreateTuningJobConfig(
        method="DISTILLATION",
        base_teacher_model="qwen/qwen3-next-80b-a3b-thinking-maas",
        epoch_count=3,
        validation_dataset=types.TuningValidationDataset(
            gcs_uri="gs://{STORAGE-URI}"
        ),
        output_uri="gs://{STORAGE-URI}",
    ),
)

Artefacts de modèle ajusté

Une fois le job de réglage terminé, les artefacts du modèle réglé sont stockés dans votre répertoire de sortie Cloud Storage.

gs://<output_dir>/
    # (Distillation tuning only) The labeled dataset from teacher model's inference
    -> distillation_labelled_dataset.jsonl

gs://<output_dir>/postprocess/node-0/checkpoints/
    # Final checkpoint
    -> final/
        -> model-00001-of-000xx.safetensors
        -> model-000yy-of-000xx.safetensors

    # Intermediate checkpoints
    -> checkpoint-M/
        -> model-00001-of-000xx.safetensors
        -> model-000yy-of-000xx.safetensors
        -> checkpoint-N/
        -> model-00001-of-000xx.safetensors
        -> model-000yy-of-000xx.safetensors
  • Un maximum de 10 points de contrôle sont stockés.
  • Si le nombre d'époques (E) est inférieur à 10, exactement E points de contrôle sont stockés (un pour chaque époque).
  • Les points de contrôle intermédiaires de la plage M à N sont ordonnés. Notez que les points de contrôle intermédiaires ne sont pas toujours numérotés de manière consécutive. Par exemple, les points de contrôle peuvent être numérotés 1, 3, 5, 10 au lieu de 1, 2, 3, 4.

Déployer le modèle réglé

Vous pouvez déployer le modèle réglé sur un point de terminaison Gemini Enterprise Agent Platform. Vous pouvez également exporter le modèle ajusté depuis Cloud Storage et le déployer ailleurs.

Pour déployer le modèle ajusté sur un point de terminaison Gemini Enterprise Agent Platform :

Console Cloud

  1. Accédez à la page Model Garden, puis cliquez sur Déployer un modèle avec des pondérations personnalisées.

    Accéder à la page "Jardin de modèles"

  2. Renseignez les paramètres, puis cliquez sur Déployer.

SDK Agent Platform pour Python

Déployez un G2 machine à l'aide d'un conteneur prédéfini :

from vertexai.preview import model_garden

MODEL_ARTIFACTS_STORAGE_URI = "gs://{STORAGE-URI}/postprocess/node-0/checkpoints/final"

model = model_garden.CustomModel(
    gcs_uri=MODEL_ARTIFACTS_STORAGE_URI,
)

# deploy the model to an endpoint using GPUs. Cost will incur for the deployment
endpoint = model.deploy(
  machine_type="g2-standard-12",
  accelerator_type="NVIDIA_L4",
  accelerator_count=1,
)

Obtenir une inférence

Une fois le déploiement réussi, vous pouvez envoyer des requêtes au point de terminaison avec des requêtes textuelles. Notez que l'exécution des premières requêtes prendra plus de temps.

# Loads the deployed endpoint
endpoint = aiplatform.Endpoint("projects/{PROJECT_ID}/locations/{REGION}/endpoints/{endpoint_name}")

prompt = "Summarize the following article. Article: Preparing a perfect risotto requires patience and attention to detail. Begin by heating butter in a large, heavy-bottomed pot over medium heat. Add finely chopped onions and minced garlic to the pot, and cook until they're soft and translucent, about 5 minutes. Next, add Arborio rice to the pot and cook, stirring constantly, until the grains are coated with the butter and begin to toast slightly. Pour in a splash of white wine and cook until it's absorbed. From there, gradually add hot chicken or vegetable broth to the rice, stirring frequently, until the risotto is creamy and the rice is tender with a slight bite.. Summary:"

# Define input to the prediction call
instances = [
    {
        "prompt": "What is a car?",
        "max_tokens": 200,
        "temperature": 1.0,
        "top_p": 1.0,
        "top_k": 1,
        "raw_response": True,
    },
]

# Request the prediction
response = endpoint.predict(
    instances=instances
)

for prediction in response.predictions:
    print(prediction)

Pour en savoir plus sur l'obtention d'inférences à partir d'un modèle déployé, consultez Obtenir une inférence en ligne.

Notez que les modèles ouverts gérés utilisent la méthode chat.completions au lieu de la méthode predict utilisée par les modèles déployés. Pour savoir comment obtenir des inférences à partir de modèles gérés, consultez Appeler un modèle Llama.

Limites et quotas

Le quota est appliqué au nombre de jobs de réglage simultanés. Chaque projet est associé à un quota par défaut pour exécuter au moins un job de réglage. Il s'agit d'un quota mondial, partagé entre toutes les régions disponibles et tous les modèles compatibles. Si vous souhaitez exécuter plus de jobs simultanément, vous devez demander un quota supplémentaire pour Global concurrent managed OSS model fine-tuning jobs per project.

En plus du quota de tâches de réglage, le fine-tuning de distillation utilise le modèle enseignant. Votre projet doit donc disposer d'un quota suffisant pour le modèle enseignant spécifié. Les modèles ouverts fournis en tant que service (MaaS) utilisent un quota partagé dynamique. Lorsqu'un job de réglage appelle un modèle enseignant, il consomme le quota partagé du projet pour ce modèle. Pour en savoir plus sur les quotas des modèles ouverts gérés, consultez Modèles gérés Gemini Enterprise Agent Platform pour MaaS.

Tarifs

La mise au point vous est facturée en fonction des tarifs de la mise au point de modèles. Le nombre de jetons d'entraînement est calculé en multipliant le nombre de jetons dans votre ensemble de données d'entraînement par le nombre d'époques. Pour la mise au point par distillation, les appels d'API effectués au modèle maître pour générer des réponses vous sont également facturés, en fonction des tarifs des modèles gérés.

Vous êtes également facturé pour les services associés, tels que Cloud Storage et Gemini Enterprise Agent Platform Prediction.

Découvrez les tarifs de Gemini Enterprise Agent Platform et de Cloud Storage, puis utilisez le simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue.

Étapes suivantes