Ajustar um modelo aberto

Nesta página, descrevemos como realizar o ajuste supervisionado em modelos abertos, como o Llama 3.1.

Métodos de ajuste com suporte

  • Ajuste de detalhes completo

  • Adaptação de baixo escalão (LoRA): a LoRA é um método de ajuste eficiente de parâmetros que ajusta apenas um subconjunto de parâmetros. Ele é mais econômico e exige menos dados de treinamento do que o ajuste de detalhes completo. Por outro lado, o ajuste fino completo tem um potencial de qualidade maior porque ajusta todos os parâmetros.

Modelos compatíveis

  • meta/llama3_1@llama-3.1-8b
  • meta/llama3_1@llama-3.1-8b-instruct
  • meta/llama3-2@llama-3.2-1b-instruct: só oferece suporte ao ajuste fino completo
  • meta/llama3-2@llama-3.2-3b-instruct: só oferece suporte ao ajuste fino completo
  • meta/llama3-3@llama-3.3-70b-instruct

Antes de começar

  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.

    Go to project selector

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

  4. Enable the Vertex AI and Cloud Storage APIs.

    Enable the APIs

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

    Go to project selector

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

  7. Enable the Vertex AI and Cloud Storage APIs.

    Enable the APIs

  8. Instalar e inicializar o SDK da Vertex AI para Python
  9. Importe as bibliotecas a seguir:
    import os
    import time
    import uuid
    import vertexai
    
    vertexai.init(project=PROJECT_ID, location=REGION)
    
    from google.cloud import aiplatform
    from vertexai.preview.tuning import sft, SourceModel
    
  10. Preparar o conjunto de dados para ajuste

    Um conjunto de dados de treinamento é necessário para o ajuste. Recomendamos que você prepare um conjunto de dados de validação opcional se quiser avaliar a performance do modelo ajustado.

    O conjunto de dados precisa estar em um dos seguintes formatos JSON Lines (JSONL) compatíveis, em que cada linha contém um único exemplo de ajuste.

    Formato de chat baseado em turnos

    {"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"}
    ]}
    

    Faça upload dos arquivos JSONL para o Cloud Storage.

    Criar job de ajuste

    Você pode ajustar em:

    • Um modelo de base compatível, como o Llama 3.1
    • Um modelo com a mesma arquitetura de um dos modelos de base compatíveis. Pode ser um ponto de verificação de modelo personalizado de um repositório como o Hugging Face ou um modelo ajustado anteriormente de um trabalho de ajuste da Vertex AI. Isso permite continuar ajustando um modelo que já foi ajustado.

    Console do Cloud

    1. É possível iniciar o ajuste refinado das seguintes maneiras:

    2. Preencha os parâmetros e clique em Iniciar ajuste.

    Isso inicia um job de ajuste, que pode ser visto na página "Ajuste", na guia Ajuste gerenciado.

    Quando o job de ajuste terminar, você poderá conferir as informações sobre o modelo ajustado na guia Detalhes.

    SDK da Vertex AI para Python

    Substitua os valores de parâmetro pelos seus e execute o código a seguir para criar um job de ajuste:

    sft_tuning_job = sft.preview_train(
        source_model=SourceModel(
          base_model="meta/llama3_1@llama-3.1-8b",
          # Optional, folder that 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}",
    )
    

    Quando o job termina, os artefatos do modelo ajustado são armazenados na pasta <output_uri>/postprocess/node-0/checkpoints/final.

    Implantar o modelo ajustado

    É possível implantar o modelo ajustado em um endpoint da Vertex AI. Também é possível exportar o modelo ajustado do Cloud Storage e implantá-lo em outro lugar.

    Para implantar o modelo ajustado em um endpoint da Vertex AI:

    Console do Cloud

    1. Acesse a página Model Garden e clique em Implantar modelo com ponderações personalizadas.

      Acessar o Model Garden

    2. Preencha os parâmetros e clique em Implantar.

    SDK da Vertex AI para Python

    Implante um G2 machine usando um contêiner pré-criado:

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

    Receber uma inferência

    Depois que a implantação for concluída, você poderá enviar solicitações ao endpoint com comandos de texto. As primeiras solicitações vão levar mais tempo para serem executadas.

    # 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)
    

    Para mais detalhes sobre como receber inferências de um modelo implantado, consulte Receber uma inferência on-line.

    Os modelos abertos gerenciados usam o método chat.completions em vez do predict usado pelos modelos implantados. Para mais informações sobre como receber inferências de modelos gerenciados, consulte Fazer uma chamada para um modelo do Llama.

    Limites e cotas

    A cota é aplicada ao número de jobs de ajuste simultâneos. Todo projeto tem uma cota padrão para executar pelo menos um job de ajuste. Essa é uma cota global compartilhada por todas as regiões disponíveis e modelos compatíveis. Se você quiser executar mais jobs simultaneamente, solicite uma cota extra para Global concurrent managed OSS model fine-tuning jobs per project.

    Preços

    A cobrança pelo ajuste é feita com base nos preços do ajuste de modelo.

    Você também recebe cobranças por serviços relacionados, como o Cloud Storage e a previsão da Vertex AI.

    Saiba mais sobre os preços do Vertex AI e do Cloud Storage e use a calculadora de preços para gerar uma estimativa de custo com base no uso projetado.

    A seguir