Régler un modèle ouvert

Cette page explique comment effectuer un affinage supervisé sur des modèles ouverts tels que Llama 3.1.

Modes de réglage compatibles

  • 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. Elle est plus rentable 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.

Modèles compatibles

  • Gemma 3 27B IT (google/gemma-3-27b-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 32B (qwen/qwen3@qwen3-32b)
  • Llama 4 Scout 17B 16E Instruct (meta/llama4@llama-4-scout-17b-16e-instruct)

Régions où le service est disponible

  • Iowa (us-central1)
  • Pays-Bas (europe-west4)

Limites

Modèle Spécification Valeur
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
Llama 3.1 8B Modes de réglage Affinage d'un sous-ensemble de paramètres
Affinage complet
Longueur maximale de la séquence 4 096 (affinage d'un sous-ensemble de paramètres)
8 192 (affinage complet)
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 4 096 (affinage d'un sous-ensemble de paramètres)
8 192 (affinage complet)
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 4 096 (affinage d'un sous-ensemble de paramètres)
8 192 (affinage complet)
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 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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 Vertex AI 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 Vertex AI 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

  8. Installer et initialiser le SDK Vertex AI pour Python
  9. 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
    
  10. Préparer l'ensemble de données pour le réglage

    Un ensemble de données d'entraînement est nécessaire 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 ajusté.

    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 au 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 multimodales

    Format de chat au 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 IAM Utilisateur d'objets Storage (roles/storage.objectUser) aux 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 stations suivantes :

    • Un modèle de base compatible, tel que Llama 3.1
    • Modèle dont l'architecture est identique à celle d'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 ajusté à partir d'un job d'ajustement Vertex AI. Cela vous permet de continuer à régler un modèle qui l'a déjà été.

    Console Cloud

    1. Vous pouvez lancer un affinement de différentes manières :

      • Accédez à la fiche du 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.

    Une tâche de réglage démarre. Vous pouvez la consulter sur la page "Réglage", dans 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 Vertex AI pour Python

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

    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}",
    )
    

    Une fois le job terminé, les artefacts du modèle réglé sont stockés dans le dossier <output_uri>/postprocess/node-0/checkpoints/final.

    Déployer le modèle réglé

    Vous pouvez déployer le modèle ajusté sur un point de terminaison Vertex AI. 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 Vertex AI :

    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"

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

    SDK Vertex AI 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.

    Tarifs

    Le réglage vous est facturé en fonction de la tarification du réglage de modèles.

    Vous êtes également facturé pour les services associés, tels que Cloud Storage et Vertex AI Prediction.

    Découvrez les tarifs de Vertex AI et les tarifs 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