Disponibilizar modelos abertos Llama 3 usando Cloud TPUs de vários hosts na Vertex AI Prediction com Saxml

Llama 3 é uma biblioteca de código aberto de linguagem grande (LLM) da Meta. Este guia mostra como exibir um LLM Llama 3 usando vários hosts Unidades de Processamento de Tensor (TPUs) no Previsão da Vertex AI com Saxml.

Neste guia, você fará o download dos pesos e tokenizadores do modelo Llama 3 70B e implantá-los na Vertex AI Prediction que executa Saxml em TPUs.

Antes de começar

Recomendamos que você use VM com otimização de memória M2 para fazer o download do modelo e convertê-lo em Saxml. Isso acontece porque o modelo o processo de conversão requer memória significativa e pode falhar se você escolher um sem memória suficiente.

  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. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI and Artifact Registry 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. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI and Artifact Registry APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  9. Siga a documentação do Artifact Registry para instalar o Docker.
  10. Verifique se você tem cotas suficientes para 16 chips TPU v5e para a Previsão da Vertex AI.

Neste tutorial, presumimos que você esteja usando o Cloud Shell para interagir com o Google Cloud. Se você quiser usar um shell diferente em vez do Cloud Shell, execute a seguinte configuração extra:

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init

Se você estiver usando um shell diferente em vez do Cloud Shell para o modelo verifique se a versão da CLI do Google Cloud é depois de 475.0.0. Para atualizar a CLI do Google Cloud, execute o Atualização de componentes da gcloud comando.

Se você estiver implantando seu modelo usando o SDK da Vertex AI, verifique se você tem a versão 1.50.0 ou mais recente.

Acessar o modelo e fazer o download dos respectivos pesos

As etapas a seguir são para uma instância do Vertex AI Workbench que tem um VM com otimização de memória M2. Para informações sobre como alterar o tipo de máquina de um Vertex AI Workbench exemplo, consulte Altere o tipo de máquina de uma instância do Vertex AI Workbench.

  1. Acesse a Página de consentimento do modelo Llama.

  2. Selecione Llama 3, preencha o formulário de consentimento e aceite os termos. as condições.

  3. Verifique na sua caixa de entrada se há um e-mail com um URL assinado.

  4. Faça o download do Script download.sh do GitHub executando o seguinte comando:

    wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh
    chmod +x download.sh
    
  5. Para fazer o download dos pesos do modelo, execute o script download.sh que você baixados do GitHub.

  6. Quando solicitado, insira o URL assinado do e-mail recebido no na seção anterior.

  7. Quando solicitado o download dos modelos, insira 70B.

Converter os pesos do modelo para o formato Saxml

  1. Execute este comando para fazer o download do Saxml:

    git clone https://github.com/google/saxml.git
    
  2. Execute os seguintes comandos para configurar um ambiente virtual do Python:

    python -m venv .
    source bin/activate
    
  3. Execute os seguintes comandos para instalar dependências:

    pip install --upgrade pip
    
    pip install paxml
    
    pip install praxis
    
    pip install torch
    
  4. Para converter os pesos do modelo para o formato Saxml, execute o seguinte comando:

    python3 saxml/saxml/tools/convert_llama_ckpt.py \
        --base PATH_TO_META_LLAMA3 \
        --pax PATH_TO_PAX_LLAMA3 \
        --model-size llama3_70b
    

    Substitua:

    • PATH_TO_META_LLAMA3: o caminho para o diretório que contém os pesos do modelo baixado
    • PATH_TO_PAX_LLAMA3: o caminho para o diretório em que será armazenar os pesos do modelo convertido
    .

    Os modelos convertidos serão colocados no Pasta $PATH_TO_PAX_LLAMA3/checkpoint_00000000.

  5. Copie o arquivo do tokenizador do diretório original em uma subpasta chamada vocabs. da seguinte forma:

    cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
    
  6. Adicione um arquivo commit_success.txt vazio à pasta $PATH_TO_PAX_LLAMA3 e as subpastas metadata e state nessa pasta da seguinte maneira:

    touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt
    touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt
    touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt
    

    A pasta $PATH_TO_PAX_LLAMA3 agora contém as seguintes pastas e :

    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/
    $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt
    $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
    

Produzir um bucket do Cloud Storage

Criar um bucket do Cloud Storage para armazenar os pesos do modelo convertidos.

  1. No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do projeto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Para criar o bucket, execute o comando a seguir:

    gcloud storage buckets create gs://WEIGHTS_BUCKET_NAME
    

    Substitua WEIGHTS_BUCKET_NAME pelo nome que você quer. que serão usados no bucket.

Copie os pesos do modelo para o bucket do Cloud Storage

Para copiar os pesos do modelo para o bucket, execute o seguinte comando:

gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive

Faça o upload do modelo

O contêiner Saxml pré-criado está disponível em us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest.

Para fazer upload de um recurso Model na Vertex AI Prediction usando o método Saxml, execute o Comando gcloud ai models upload da seguinte forma:

gcloud ai models upload \
    --region=LOCATION \
    --display-name=MODEL_DISPLAY_NAME \
    --container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
    --artifact-uri='gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b' \
    --container-args='--model_path=saxml.server.pax.lm.params.lm_cloud.LLaMA3_70BFP16x16' \
    --container-args='--platform_chip=tpuv5e' \
    --container-args='--platform_topology=4x4' \
    --container-args='--ckpt_path_suffix=checkpoint_00000000' \
    --container-deployment-timeout-seconds=2700 \
    --container-ports=8502 \
    --project=PROJECT_ID

Faça as seguintes substituições:

  • LOCATION: a região em que você está usando a Vertex AI. As TPUs só estão disponíveis em us-west1.
  • MODEL_DISPLAY_NAME: o nome de exibição que você quer para o modelo
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
.

Criar um endpoint de previsão on-line

Para criar o endpoint, execute o comando a seguir:

gcloud ai endpoints create \
    --region=LOCATION \
    --display-name=ENDPOINT_DISPLAY_NAME \
    --project=PROJECT_ID

Substitua ENDPOINT_DISPLAY_NAME pelo nome de exibição que você quer. seu endpoint.

Implante o modelo no endpoint

Quando o endpoint estiver pronto, implante o modelo nele.

Neste tutorial, você vai implantar um modelo Llama 3 70B fragmentado por 16 Chips do Cloud TPU v5e usando topologia 4x4. Porém, é possível especificar a seguir as topologias compatíveis com vários hosts do Cloud TPU:

Tipo de máquina Topologia Número de chips do TPU Número de hosts
ct5lp-hightpu-4t 4x4 16 2
ct5lp-hightpu-4t 4x8 32 4
ct5lp-hightpu-4t 8x8 64 8
ct5lp-hightpu-4t 8x16 128 16
ct5lp-hightpu-4t 16x16 256 32

Se você estiver implantando um modelo Llama diferente definido no Repositório GitHub do Saxml (em inglês), confira se ele está particionado para corresponder ao número de dispositivos e se o Cloud TPU tem memória suficiente para carregar o modelo.

Para informações sobre como implantar um modelo em Cloud TPUs de host único, consulte Implantar um modelo.

Para mais informações sobre os tipos de Cloud TPU v5e, consulte TPU v5e.

  1. Consiga o ID do endpoint de previsão on-line:

    ENDPOINT_ID=$(gcloud ai endpoints list \
        --region=LOCATION \
        --filter=display_name=ENDPOINT_NAME \
        --format="value(name)")
    
  2. Acesse o ID do seu modelo:

    MODEL_ID=$(gcloud ai models list \
        --region=LOCATION \
        --filter=display_name=DEPLOYED_MODEL_NAME \
        --format="value(name)")
    
  3. Implante o modelo no endpoint:

    gcloud ai endpoints deploy-model $ENDPOINT_ID \
        --region=LOCATION \
        --model=$MODEL_ID \
        --display-name=DEPLOYED_MODEL_NAME \
        --machine-type=ct5lp-hightpu-4t \
        --tpu-topology=4x4 \
        --traffic-split=0=100
    

    Substitua DEPLOYED_MODEL_NAME por um nome para a implantação. Pode ser igual ao nome de exibição do modelo (MODEL_DISPLAY_NAME).

    A operação de implantação pode expirar.

    O comando deploy-model retorna um ID de operação que pode ser usado para verificar quando a operação for concluída. Pesquise o status da operação até que a resposta inclua "done": true. Use o seguinte comando para consultar o status:

    gcloud ai operations describe \
    --region=LOCATION \
    OPERATION_ID
    

    Substitua OPERATION_ID pelo ID da operação retornado. pelo comando anterior.

Como receber previsões on-line com base no modelo implantado

Para receber previsões on-line pelo endpoint de previsão da Vertex AI, execute o comando gcloud ai endpoints predict comando.

  1. Execute o seguinte comando para criar um arquivo request.json contendo um solicitação de previsão de amostra:

    cat << EOF > request.json
    {"instances": [{"text_batch": "the distance between Earth and Moon is "}]}
    EOF
    
  2. Para enviar a solicitação de previsão on-line ao endpoint, execute este comando: comando:

    gcloud ai endpoints predict $ENDPOINT_ID \
        --project=PROJECT_ID \
        --region=LOCATION \
        --json-request=request.json
    

Limpar

Para evitar outros erros da Vertex AI cobranças, exclua os recursos do Google Cloud que você criou durante este tutorial:

  1. Para desfazer a implantação do modelo e excluir o endpoint, execute os seguintes comandos:

    ENDPOINT_ID=$(gcloud ai endpoints list \
       --region=LOCATION \
       --filter=display_name=ENDPOINT_NAME \
       --format="value(name)")
    
    DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \
       --region=LOCATION \
       --format="value(deployedModels.id)")
    
    gcloud ai endpoints undeploy-model $ENDPOINT_ID \
      --region=LOCATION \
      --deployed-model-id=$DEPLOYED_MODEL_ID
    
    gcloud ai endpoints delete $ENDPOINT_ID \
       --region=LOCATION \
       --quiet
    
  2. Para excluir o modelo, execute os seguintes comandos:

    MODEL_ID=$(gcloud ai models list \
       --region=LOCATION \
       --filter=display_name=DEPLOYED_MODEL_NAME \
       --format="value(name)")
    
    gcloud ai models delete $MODEL_ID \
       --region=LOCATION \
       --quiet