O Llama 3 é um grande modelo de linguagem (GML) de código aberto da Meta. Este guia mostra como publicar um LLM Llama 3 usando unidades de processamento de tensores (TPUs) de vários anfitriões no Vertex AI com Saxml.
Neste guia, transfere os pesos e o tokenizador do modelo Llama 3 70B e implementa-os no Vertex AI que executa o Saxml em TPUs.
Antes de começar
Recomendamos que use uma VM otimizada para memória M2 para transferir o modelo e convertê-lo em Saxml. Isto deve-se ao facto de o processo de conversão do modelo exigir uma quantidade significativa de memória e poder falhar se escolher um tipo de máquina que não tenha 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.create
permission. 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.enable
permission. 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.create
permission. 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.enable
permission. 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.
- Certifique-se de que tem quotas suficientes para 16 chips de TPU v5e para o 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
Selecione o Llama 3, preencha o formulário de consentimento e aceite os termos e condições.
Verifique se recebeu um email com um URL assinado na sua caixa de entrada.
Transfira o 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 transferir os pesos do modelo, execute o script
download.sh
que transferiu do GitHub.Quando lhe for pedido, introduza o URL assinado do email que recebeu na secção anterior.
Quando lhe for pedido para transferir os modelos, introduza
70B
.Execute o seguinte comando para transferir o 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 as 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 o seguinte:
PATH_TO_META_LLAMA3
: o caminho para o diretório que contém as ponderações do modelo transferidasPATH_TO_PAX_LLAMA3
: o caminho para o diretório no qual armazenar os pesos do modelo convertido
Os modelos convertidos são colocados na pasta
$PATH_TO_PAX_LLAMA3/checkpoint_00000000
.Copie o ficheiro do tokenizador do diretório original para uma subpasta com o nome
vocabs
da seguinte forma:cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
Adicione um ficheiro
commit_success.txt
vazio na pasta$PATH_TO_PAX_LLAMA3
e nas subpastasmetadata
estate
nessa pasta da seguinte forma: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
contém agora as seguintes pastas e ficheiros:$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 seu projeto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Para criar o contentor, execute o seguinte comando:
gcloud storage buckets create gs://WEIGHTS_BUCKET_NAME
Substitua WEIGHTS_BUCKET_NAME pelo nome que quer usar para o contentor.
LOCATION
: a região onde está a usar o Vertex AI. Tenha em atenção que as TPUs só estão disponíveis emus-west1
.MODEL_DISPLAY_NAME
: o nome a apresentar que quer para o seu modeloPROJECT_ID
: o ID do seu Google Cloud projetoObtenha o ID do ponto final do ponto final de inferência online:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)")
Obtenha o ID do modelo:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)")
Implemente o modelo no ponto final:
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 o elemento implementado. Pode ser igual ao nome a apresentar do modelo (MODEL_DISPLAY_NAME).
A operação de implementação pode exceder o tempo limite.
O comando
deploy-model
devolve um ID da operação que pode ser usado para verificar quando a operação estiver concluída. Pode sondar o estado da operação até que a resposta inclua"done": true
. Use o seguinte comando para consultar o estado:gcloud ai operations describe \ --region=LOCATION \ OPERATION_ID
Substitua OPERATION_ID pelo ID da operação devolvido pelo comando anterior.
Execute o seguinte comando para criar um ficheiro
request.json
que contenha um pedido de inferência de exemplo:cat << EOF > request.json {"instances": [{"text_batch": "the distance between Earth and Moon is "}]} EOF
Para enviar o pedido de inferência online para o ponto final, execute o seguinte comando:
gcloud ai endpoints predict $ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION \ --json-request=request.json
Para anular a implementação do modelo a partir do ponto final e eliminar o ponto final, 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 eliminar 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
Este tutorial pressupõe que está a usar o Cloud Shell para interagir com o Google Cloud. Se quiser usar uma shell diferente em vez do Cloud Shell, faça a seguinte configuração adicional:
Se estiver a usar uma shell diferente da Cloud Shell para a implementação do modelo, certifique-se de que a versão da CLI Google Cloud é posterior à 475.0.0
. Pode atualizar a CLI gcloud executando o comando
gcloud components update.
Se estiver a implementar o seu modelo através do SDK do Vertex AI, certifique-se de que tem a versão 1.50.0
ou posterior.
Aceda ao modelo e transfira as ponderações do modelo
Os passos seguintes destinam-se a uma instância do Vertex AI Workbench que tenha uma VM otimizada para memória M2. Para obter informações sobre como alterar o tipo de máquina de uma instância do Vertex AI Workbench, consulte o artigo Alterar o tipo de máquina de uma instância do Vertex AI Workbench.
Converta as ponderações do modelo para o formato Saxml
Crie um contentor do Cloud Storage
Crie um contentor do Cloud Storage para armazenar os pesos do modelo convertido.
Copie os pesos do modelo para o contentor do Cloud Storage
Para copiar as ponderações do modelo para o seu contentor, execute o seguinte comando:
gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive
Carregue o modelo
Está disponível um contentor Saxml pré-criado em
us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest
.
Para carregar um recurso Model
para o Vertex AI usando o contentor Saxml pré-criado, 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:
Crie um ponto final de inferência online
Para criar o ponto final, execute o seguinte comando:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_DISPLAY_NAME \
--project=PROJECT_ID
Substitua ENDPOINT_DISPLAY_NAME
pelo nome a apresentar que quer para o seu ponto final.
Implemente o modelo no ponto final
Quando o ponto final estiver pronto, implemente o modelo no ponto final.
Neste tutorial, implementa um modelo Llama 3 70B fragmentado para 16 chips Cloud TPU v5e com uma topologia 4x4. No entanto, pode especificar qualquer uma das seguintes topologias de Cloud TPU com vários anfitriões suportadas:
Tipo de máquina | Topologia | Número de chips de TPU | Número de anfitriões |
---|---|---|---|
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 estiver a implementar um modelo Llama diferente definido no repositório do GitHub do Saxml, certifique-se de que está particionado para corresponder ao número de dispositivos que está a segmentar e que o Cloud TPU tem memória suficiente para carregar o modelo.
Para obter informações sobre a implementação de um modelo em Cloud TPUs de anfitrião único, consulte o artigo Implemente um modelo.
Para ver uma lista completa dos tipos e regiões de TPU na nuvem suportados, consulte as localizações do Vertex AI.
Obtenha inferências online do modelo implementado
Para obter inferências online a partir do ponto final do Vertex AI, execute o comando gcloud ai endpoints predict
.
Limpar
Para evitar incorrer em mais custos do Vertex AI, elimine os Google Cloud recursos que criou durante este tutorial: