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 Plataforma de agentes do Gemini Enterprise com Saxml.
Neste guia, você vai fazer o download dos pesos e tokenizadores do modelo Llama 3 70B e implantá-los na Gemini Enterprise Agent Platform 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.
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Agent Platform and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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 role
(
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 Agent Platform and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
- Siga a documentação do Artifact Registry para instalar o Docker.
- Verifique se você tem cotas suficientes para 16 chips TPU v5e para a plataforma de agentes do Gemini Enterprise.
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:
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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 Agent Platform Workbench que tem uma VM com otimização de memória M2. Para informações sobre como mudar o tipo de máquina de uma instância do Workbench da Plataforma de Agentes, consulte Mudar o tipo de máquina de uma instância do Workbench da Plataforma de Agentes.
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.shPara 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.
Converter os pesos do modelo para o formato Saxml
Execute este comando para fazer o download do Saxml:
git clone https://github.com/google/saxml.gitExecute os seguintes comandos para configurar um ambiente virtual do Python:
python -m venv . source bin/activateExecute os seguintes comandos para instalar dependências:
pip install --upgrade pip pip install paxml pip install praxis pip install torchPara 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_70bSubstitua:
PATH_TO_META_LLAMA3: o caminho para o diretório que contém os pesos do modelo baixadoPATH_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.modelAdicione um arquivo
commit_success.txtvazio à pasta$PATH_TO_PAX_LLAMA3e as subpastasmetadataestatenessa 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.txtA 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
Produzir um bucket do Cloud Storage
Criar um bucket do Cloud Storage para armazenar os pesos do modelo convertidos.
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_NAMESubstitua 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 Gemini Enterprise Agent Platform 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 plataforma de agentes do Gemini Enterprise. As TPUs só estão disponíveis emus-west1.MODEL_DISPLAY_NAME: o nome de exibição que você quer para o modeloPROJECT_ID: ID do projeto Google Cloud
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 compatíveis da Cloud TPU, consulte Locais da plataforma de agentes do Gemini Enterprise.
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=100Substitua 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_IDSubstitua OPERATION_ID pelo ID da operação retornado. pelo comando anterior.
Receber inferências on-line do modelo implantado
Para receber inferências on-line pelo endpoint da Gemini Enterprise Agent Platform,
execute o comando gcloud ai endpoints predict
comando.
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 "}]} EOFPara 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
Limpar
Para evitar outras cobranças da Gemini Enterprise Agent Platform, exclua os recursos Google Cloud criados durante este tutorial:
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 \ --quietPara 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