Llama 3 é uma biblioteca de código aberto de linguagem grande (LLM) da Meta. Este guia mostra como disponibilizar um LLM Llama 3 usando vários hosts Unidades de Processamento de Tensor (TPUs) na Vertex AI com Saxml.
Neste guia, você vai fazer o download dos pesos e tokenizadores do modelo Llama 3 70B e implantá-los na Vertex AI 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.
- 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.
- 
    
    
      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
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Vertex AI and Artifact Registry APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 
    
    
      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
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Vertex AI and Artifact Registry APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 
    
    In the Google Cloud console, 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. 
- Siga a documentação do Artifact Registry para instalar o Docker.
- Verifique se você tem cotas suficientes para 16 chips TPU v5e para a Vertex AI.
- 
      Install the Google Cloud CLI. 
- 
          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity. 
- 
        To initialize the gcloud CLI, run the following command: gcloud init
- Acesse a Página de consentimento do modelo Llama. 
- Selecione Llama 3, preencha o formulário de consentimento e aceite os termos. as condições. 
- Verifique na sua caixa de entrada se há um e-mail com um URL assinado. 
- Faça o download do Script - download.shdo GitHub executando o seguinte comando:- wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh chmod +x download.sh
- Para fazer o download dos pesos do modelo, execute o script - download.shque você baixados do GitHub.
- Quando solicitado, insira o URL assinado do e-mail recebido no na seção anterior. 
- Quando solicitado o download dos modelos, insira - 70B.
- Execute este comando para fazer o download do Saxml: - git clone https://github.com/google/saxml.git
- Execute os seguintes comandos para configurar um ambiente virtual do Python: - python -m venv . source bin/activate
- Execute os seguintes comandos para instalar dependências: - pip install --upgrade pip pip install paxml pip install praxis pip install torch
- 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.
- 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
- Adicione um arquivo - commit_success.txtvazio à pasta- $PATH_TO_PAX_LLAMA3e as subpastas- metadatae- statenessa 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_LLAMA3agora 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
- No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do projeto: - projectid=PROJECT_ID gcloud config set project ${projectid}
- 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. 
- 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 projeto Google Cloud
- Consiga o ID do endpoint de inferência on-line: - ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)")
- Acesse o ID do seu modelo: - MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)")
- 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-modelretorna 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. 
- Execute o seguinte comando para criar um arquivo - request.jsoncontendo um pedido de inferência de amostra:- cat << EOF > request.json {"instances": [{"text_batch": "the distance between Earth and Moon is "}]} EOF
- Para enviar a solicitação de inferência on-line ao endpoint, execute este comando: comando: - gcloud ai endpoints predict $ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION \ --json-request=request.json
- 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
- 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
Neste tutorial, presumimos que você esteja usando o Cloud Shell para interagir com Google Cloud. Se você quiser usar um shell diferente em vez do Cloud Shell, execute a seguinte configuração extra:
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.
Converter os pesos do modelo para o formato Saxml
Produzir um bucket do Cloud Storage
Criar um bucket do Cloud Storage para armazenar os pesos do modelo convertidos.
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 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:
Criar um endpoint de inferência 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 uma lista completa de tipos e regiões da Cloud TPU compatíveis, consulte Locais da Vertex AI.
Receber inferências on-line do modelo implantado
Para receber inferências on-line do endpoint da Vertex AI,
execute o comando gcloud ai endpoints predict
comando.
Limpar
Para evitar outras cobranças da Vertex AI, exclua os recursos do Google Cloud que você criou durante este tutorial: