Como usar VMs ou reservas do Spot para implantar um endpoint da Vertex AI Llama-3.1 em GPUs do Cloud

Este tutorial orienta você a implantar o modelo Meta-Llama-3.1-8B na Vertex AI. Você vai aprender a implantar endpoints e otimizar para suas necessidades específicas. Se você tiver cargas de trabalho tolerantes a falhas, use as VMs do Spot para otimizar os custos. Se você quiser garantir a disponibilidade, use as reservas do Compute Engine. Você vai aprender a implantar endpoints que usam:

  • VMs spot:use instâncias provisionadas por spot para economizar custos.
  • Reservas:garanta a disponibilidade de recursos para um desempenho previsível, especialmente para cargas de trabalho de produção. Este tutorial demonstra como usar reservas automáticas (ANY_RESERVATION) e específicas (SPECIFIC_RESERVATION).

Saiba mais em VMs do Spot ou Reservas de recursos do Compute Engine.

Pré-requisitos

Antes de começar, conclua os seguintes pré-requisitos:

  • Um Google Cloud projeto com faturamento ativado.
  • As APIs Vertex AI e Compute Engine ativadas.
  • Cota suficiente para o tipo de máquina e o acelerador que você pretende usar, como GPUs NVIDIA L4. Para verificar suas cotas, consulte Cotas e limites do sistema no Google Cloud console.
  • Uma conta do Hugging Face e um token de acesso do usuário com acesso de leitura.
  • Se você estiver usando reservas compartilhadas, conceda permissões do IAM entre projetos. Essas permissões são abordadas no notebook.

Implantar em VMs do Spot

As seções a seguir orientam você no processo de configuração do projeto Google Cloud , na configuração da autenticação Hugging Face, na implantação do modelo Llama-3.1 usando VMs do Spot ou reservas e no teste da implantação.

1. Configurar o Google Cloud projeto e a reserva compartilhada

Abra o bloco do Colab Enterprise.

Na primeira seção, defina as variáveis PROJECT_ID, SHARED_PROJECT_ID (se aplicável), BUCKET_URI e REGION no notebook do Colab.

O notebook concede o papel compute.viewer à conta de serviço de ambos os projetos.

Se você pretende usar uma reserva criada em um projeto diferente na mesma organização, conceda o papel compute.viewer à conta de serviço principal (P4SA) de ambos os projetos. O código do notebook vai automatizar isso, mas verifique se SHARED_PROJECT_ID está definido corretamente. Essa permissão entre projetos permite que o endpoint da Vertex AI no seu projeto principal consulte e use a capacidade de reserva no projeto compartilhado.

2. Configurar a autenticação do Hugging Face

Para fazer o download do modelo Llama-3.1, você precisa fornecer seu token de acesso do usuário do Hugging Face na variável HF_TOKEN no notebook do Colab. Se você não fornecer um, vai receber o seguinte erro: Cannot access gated repository for URL.

Configurações do token de acesso do Hugging Face Figura 1: configurações do token de acesso do Hugging Face

3. Implantar com a VM do Spot

Para implantar o modelo Llama em uma VM do Spot, navegue até a seção "Implantação de endpoint da Vertex AI da VM do Spot" no notebook do Colab e defina is_spot=True.

base_model_name = "Meta-Llama-3.1-8B"
hf_model_id = "meta-llama/" + base_model_name

if "8b" in base_model_name.lower():
    accelerator_type = "NVIDIA_L4"
    machine_type = "g2-standard-12"
    accelerator_count = 1
    max_loras = 5
else:
    raise ValueError(
        f"Recommended GPU setting not found for: {accelerator_type} and {base_model_name}."
    )

common_util.check_quota(
    project_id=PROJECT_ID,
    region=REGION,
    accelerator_type=accelerator_type,
    accelerator_count=accelerator_count,
    is_for_training=False,
)

gpu_memory_utilization = 0.95
max_model_len = 8192

models["vllm_gpu_spotvm"], endpoints["vllm_gpu_spotvm"] = deploy_model_vllm(
    model_name=common_util.get_job_name_with_datetime(prefix="llama3_1-serve-spotvm"),
    model_id=hf_model_id,
    base_model_id=hf_model_id,
    service_account=SERVICE_ACCOUNT,
    machine_type=machine_type,
    accelerator_type=accelerator_type,
    accelerator_count=accelerator_count,
    gpu_memory_utilization=gpu_memory_utilization,
    max_model_len=max_model_len,
    max_loras=max_loras,
    enforce_eager=True,
    enable_lora=True,
    use_dedicated_endpoint=False,
    model_type="llama3.1",
    is_spot=True,
)

Implantar em instâncias de reserva compartilhada

As seções a seguir orientam você no processo de criação de uma reserva compartilhada, configuração das configurações de reserva, implantação do modelo Llama-3.1 usando ANY_RESERVATION ou SPECIFIC_RESERVATION e teste da implantação.

1. Criar uma reserva compartilhada

Para configurar suas reservas, acesse a seção "Configurar reservas para previsões da Vertex AI" do notebook. Defina as variáveis necessárias para a reserva, como RES_ZONE, RESERVATION_NAME, RES_MACHINE_TYPE, RES_ACCELERATOR_TYPE e RES_ACCELERATOR_COUNT.

É necessário definir RES_ZONE como {REGION}-{availability_zone}.

RES_ZONE = "a"
RES_ZONE = f"{REGION}-{RES_ZONE}"

RESERVATION_NAME = "shared-reservation-1"
RESERVATION_NAME = f"{PROJECT_ID}-{RESERVATION_NAME}"
RES_MACHINE_TYPE = "g2-standard-12"
RES_ACCELERATOR_TYPE = "nvidia-l4"
RES_ACCELERATOR_COUNT = 1
rev_names.append(RESERVATION_NAME)

create_reservation(
    res_project_id=PROJECT_ID,
    res_zone=RES_ZONE,
    res_name=RESERVATION_NAME,
    res_machine_type=RES_MACHINE_TYPE,
    res_accelerator_type=RES_ACCELERATOR_TYPE,
    res_accelerator_count=RES_ACCELERATOR_COUNT,
    shared_project_id=SHARED_PROJECT_ID,
)

2. Compartilhar suas reservas

Há dois tipos de reservas: de projeto único (padrão) e compartilhadas. As reservas de projeto único só podem ser usadas por VMs no mesmo projeto da reserva. As reservas compartilhadas, por outro lado, podem ser usadas pelas VMs no projeto em que a reserva está localizada, bem como em qualquer outro projeto com que a reserva foi compartilhada. O uso de reservas compartilhadas pode melhorar a utilização dos recursos reservados e reduzir o número total de reservas que você precisa criar e gerenciar. Este tutorial se concentra em reservas compartilhadas. Saiba mais em Como funcionam as reservas compartilhadas.

Antes de continuar, selecione "Compartilhar com outros Serviços do Google" no console Google Cloud , conforme mostrado na figura:

Compartilhar a reserva com outros Serviços do Google Figura 2: compartilhar a reserva com outros Serviços do Google

3. Implantar com ANY_RESERVATION

Para implantar o endpoint usando ANY_RESERVATION, acesse a seção "Deploy Llama-3.1 Endpoint with ANY_RESERVATION" do notebook. Defina as configurações de implantação e reservation_affinity_type="ANY_RESERVATION". Em seguida, execute a célula para implantar o endpoint.

hf_model_id = "meta-llama/Meta-Llama-3.1-8B"

models["vllm_gpu_any_reserve"], endpoints["vllm_gpu_any_reserve"] = deploy_model_vllm(
    model_name=common_util.get_job_name_with_datetime(
        prefix=f"llama3_1-serve-any-{RESERVATION_NAME}"
    ),
    model_id=hf_model_id,
    base_model_id=hf_model_id,
    service_account=SERVICE_ACCOUNT,
    machine_type=MACHINE_TYPE,
    accelerator_type=ACCELERATOR_TYPE,
    accelerator_count=ACCELERATOR_COUNT,
    model_type="llama3.1",
    reservation_affinity_type="ANY_RESERVATION",
)

4. Testar o endpoint ANY_RESERVATION

Com o endpoint implantado, teste alguns comandos para garantir que ele foi implantado corretamente.

5. Implantar com SPECIFIC_RESERVATION

Para implantar o endpoint usando SPECIFIC_RESERVATION, acesse a seção "Deploy Llama-3.1 Endpoint with SPECIFIC_RESERVATION" do notebook. Especifique os seguintes parâmetros: reservation_name, reservation_affinity_type="SPECIFIC_RESERVATION", reservation_project e reservation_zone. Em seguida, execute a célula para implantar o endpoint.

hf_model_id = "meta-llama/Meta-Llama-3.1-8B"

MACHINE_TYPE = "g2-standard-12"
ACCELERATOR_TYPE = "NVIDIA_L4"
ACCELERATOR_COUNT = 1

(
    models["vllm_gpu_specific_reserve"],
    endpoints["vllm_gpu_specific_reserve"],
) = deploy_model_vllm(
    model_name=common_util.get_job_name_with_datetime(
        prefix=f"llama3_1-serve-specific-{RESERVATION_NAME}"
    ),
    model_id=hf_model_id,
    base_model_id=hf_model_id,
    service_account=SERVICE_ACCOUNT,
    machine_type=MACHINE_TYPE,
    accelerator_type=ACCELERATOR_TYPE,
    accelerator_count=ACCELERATOR_COUNT,
    model_type="llama3.1",
    reservation_name=RESERVATION_NAME,
    reservation_affinity_type="SPECIFIC_RESERVATION",
    reservation_project=PROJECT_ID,
    reservation_zone=RES_ZONE,
)

6. Testar o endpoint SPECIFIC_RESERVATION

Com o endpoint implantado, verifique se a reserva é usada pela previsão on-line da Vertex AI e teste alguns comandos para garantir que ela seja implantada corretamente.

Verifique se a reserva é usada pela previsão on-line da Vertex Figura 3: a reserva de verificação é usada pela previsão on-line da Vertex

7. Limpar

Para evitar cobranças contínuas, exclua os modelos, endpoints e reservas criados durante este tutorial. O notebook do Colab fornece código na seção "Limpeza" para automatizar esse processo.

Solução de problemas

  • Erros no token do Hugging Face:verifique se o token do Hugging Face tem permissões read e se ele está definido corretamente no notebook.
  • Erros de cota:verifique se você tem cota de GPU suficiente na região em que está fazendo a implantação. Solicite um aumento de cota, se necessário.
  • Conflitos de reserva:verifique se o tipo de máquina e a configuração do acelerador da implantação do endpoint correspondem às configurações da reserva. Verifique se as reservas podem ser compartilhadas com os Serviços do Google

Próximas etapas