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.
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI and Artifact Registry APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI and Artifact Registry APIs.
-
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 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:
- Install the Google Cloud CLI.
-
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.
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.sh
do 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.sh
que 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.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 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.model
Adicione um arquivo
commit_success.txt
vazio à pasta$PATH_TO_PAX_LLAMA3
e as subpastasmetadata
estate
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.
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.
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 emus-west1
.MODEL_DISPLAY_NAME
: o nome de exibição que você quer para o modeloPROJECT_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.
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)")
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-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.
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
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:
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