Compartilhar uma reserva do Cloud TPU

Neste documento, explicamos como ativar o compartilhamento de reservas. Com ele, é possível criar VMs de TPU em um projeto (projeto de consumidor) e usar uma reserva de outro (projeto proprietário). O compartilhamento de reservas também permite executar jobs de treinamento ou previsão personalizados na Vertex AI usando uma reserva de TPU.

O projeto proprietário é aquele em que você criou a reserva. Os projetos consumidores aqueles que compartilham a reserva. É possível criar VMs de TPU tanto no projeto de proprietário quanto nos de consumidor usando a reserva do projeto de proprietário.

Para saber como fazer uma reserva de TPU, consulte Sobre as reservas do Cloud TPU.

Limitações

Antes de compartilhar uma reserva de TPU, considere o seguinte:

  • Só é possível modificar uma reserva compartilhada no projeto proprietário em que ela foi feita.

  • É possível modificar uma reserva de curta duração no modo de calendário. Para as de longa duração:

    • Só é possível modificar a reserva após o horário de início.

    • Só é possível modificar a reserva para permitir ou impedir que jobs na Vertex AI a consumam.

Compartilhar uma reserva do Cloud TPU

As seções a seguir descrevem os diferentes métodos para compartilhar uma reserva.

Ativar o compartilhamento de uma reserva de TPU

É possível criar VMs de TPU em um projeto de consumidor usando uma reserva de outro projeto. Todos os projetos que compartilham uma reserva de TPU precisam fazer parte da mesma organização.

Para ativar o compartilhamento de uma reserva de TPU, faça o seguinte:

  1. Conceda permissão ao projeto proprietário para criar e modificar reservas compartilhadas usando o comando gcloud resource-manager org-policies allow:

    gcloud resource-manager org-policies allow \
        compute.sharedReservationsOwnerProjects \
        projects/OWNER_PROJECT_NUMBER --organization=ORGANIZATION_ID

    Substitua:

  2. Ative o compartilhamento de CUDs no console do Google Cloud . Para instruções, consulte Ativar o compartilhamento de CUDs para compromissos baseados em recursos.

  3. Para ativar o compartilhamento, use o comando gcloud beta compute reservations update com as flags --share-setting=projects e --share-with:

    gcloud beta compute reservations update RESERVATION_NAME \
        --project=OWNER_PROJECT_ID \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --zone=ZONE

    Substitua:

    • RESERVATION_NAME: o nome da reserva.
    • OWNER_PROJECT_ID: o ID do projeto que contém a reserva.
    • CONSUMER_PROJECT_IDS: uma lista separada por vírgulas de IDs de projetos que podem consumir essa reserva. Por exemplo, project-1,project-2. É possível incluir até 100 projetos de consumidor. Esses projetos precisam estar na mesma organização do projeto de proprietário. Não inclua o projeto de proprietário. Por padrão, o projeto de proprietário já pode consumir a reserva.
    • ZONE: a zona em que está a reserva.

Desativar o compartilhamento de uma reserva de TPU

Para desativar o compartilhamento de uma reserva de TPU com uma lista de projetos de consumidor, use o comando gcloud beta compute reservations update com as flags --share-setting=projects e --remove-share-with:

gcloud compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --share-setting=projects \
    --remove-share-with=CONSUMER_PROJECT_IDS \
    --zone=ZONE

Substitua:

  • RESERVATION_NAME: o nome da reserva.
  • OWNER_PROJECT_ID: o ID do projeto que contém a reserva.
  • CONSUMER_PROJECT_IDS: uma lista separada por vírgulas de IDs de projetos com os quais você quer parar de compartilhar a reserva. Por exemplo, project-1,project-2.
  • ZONE: a zona em que está a reserva.

Para desativar o compartilhamento de uma reserva de TPU com todos os projetos de consumidor, mude a reserva para uma reserva local usando o comando gcloud beta compute reservations update com a flag --share-setting=local:

gcloud beta compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --share-setting=local \
    --zone=ZONE

Substitua:

  • RESERVATION_NAME: o nome da reserva.
  • OWNER_PROJECT_ID: o ID do projeto que contém a reserva.
  • ZONE: a zona em que está a reserva.

Permitir que a Vertex AI use uma reserva de TPU

É possível permitir que jobs de treinamento ou de previsão na Vertex AI consumam uma reserva de curta duração no modo de calendário. Para as de longo prazo, só é possível fazer a mudança após o horário de início.

Para permitir que a Vertex AI consuma uma reserva de TPU, use o comando gcloud beta compute reservations update com a flag --reservation-sharing-policy=ALLOW_ALL:

gcloud beta compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --zone=ZONE \
    --reservation-sharing-policy=ALLOW_ALL

Substitua:

  • RESERVATION_NAME: o nome da reserva.
  • OWNER_PROJECT_ID: o ID do projeto que contém a reserva.
  • ZONE: a zona da reserva.

Não permitir que a Vertex AI use uma reserva de TPU

Antes de impedir que a Vertex AI consuma uma reserva de TPU, pare todos os jobs da Vertex AI que a usam. Caso contrário, erros serão gerados.

Para impedir que a Vertex AI consuma uma reserva de TPU, use o comando gcloud beta compute reservations update com a flag --reservation-sharing-policy=DISALLOW_ALL:

gcloud beta compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --zone=ZONE \
    --reservation-sharing-policy=DISALLOW_ALL

Substitua:

  • RESERVATION_NAME: o nome da reserva.
  • OWNER_PROJECT_ID: o ID do projeto que contém a reserva.
  • ZONE: a zona da reserva.

Receber informações sobre uma reserva compartilhada

Só é possível receber informações sobre uma reserva compartilhada do projeto proprietário associado a ela.

Para receber informações sobre uma reserva compartilhada, use o comando gcloud compute reservations describe:

gcloud compute reservations describe RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --zone=ZONE

Substitua:

  • RESERVATION_NAME: o nome da reserva.
  • OWNER_PROJECT_ID: o ID do projeto que contém a reserva.
  • ZONE: a zona da reserva.

O resultado parecido com este:

aggregateReservation:
[...]
name: RESERVATION_NAME
reservationSharingPolicy:
  serviceShareType: ALLOW_ALL
resourceStatus: {}
selfLink: https://www.googleapis.com/compute/v1/projects/OWNER_PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME
shareSettings:
  projectMap:
    'CONSUMER_PROJECT_1':
      projectId: 'CONSUMER_PROJECT_1'
    'CONSUMER_PROJECT_2':
      projectId: 'CONSUMER_PROJECT_2'
  shareType: SPECIFIC_PROJECTS
specificReservationRequired: true
status: READY
zone: https://www.googleapis.com/compute/v1/projects/OWNER_PROJECT_ID/zones/ZONE

A seguir