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.
-
Verify 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.
-
Verify 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 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.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
.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
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 emus-west1
.MODEL_DISPLAY_NAME
: o nome de exibição que você quer para o modeloPROJECT_ID
: o ID do seu Google Cloud projetoConsiga 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-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.
Execute o seguinte comando para criar um arquivo
request.json
contendo 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: