Gerenciar recursos na fila

Os recursos enfileirados permitem que você solicite recursos do Cloud TPU de maneira enfileirada. Ao solicitar recursos enfileirados, a solicitação é adicionada a uma fila mantida pelo serviço do Cloud TPU. Quando o recurso solicitado fica disponível, ele é atribuído ao projeto Google Cloud para uso exclusivo imediato. Ele vai permanecer atribuído ao seu projeto, a menos que você o exclua ou ele seja substituído. Somente VMs do TPU Spot e TPUs preemptivas estão qualificadas para preempção.

É possível especificar um horário de início e término opcional em uma solicitação de recurso em fila. O horário de início especifica o horário mais cedo em que a solicitação será atendida. Se uma solicitação não for atendida até o horário de término especificado, ela vai expirar. A solicitação permanece na fila após a expiração.

As solicitações de recursos em fila podem estar em um dos seguintes estados:

WAITING_FOR_RESOURCES
A solicitação passou pela validação inicial e foi adicionada à fila. Ele permanece nesse estado até que haja recursos livres suficientes para começar a provisionar sua solicitação ou o intervalo de alocação expirar. Quando a demanda é alta, nem todas as solicitações podem ser provisionadas imediatamente. Se você precisar de uma disponibilidade mais confiável de TPUs, considere comprar uma reserva.
PROVISIONING
A solicitação foi selecionada da fila e os recursos dela estão sendo alocados.
ACTIVE
A solicitação foi alocada. Quando as solicitações de recursos enfileiradas estiverem no estado ACTIVE, você poderá gerenciar as VMs da TPU conforme descrito em Gerenciar TPUs.
FAILED
A solicitação não foi concluída porque há um problema com a solicitação ou os recursos solicitados não estavam disponíveis no intervalo de alocação. A solicitação permanece na fila até ser excluída explicitamente.
SUSPENDING
Os recursos associados à solicitação estão sendo excluídos.
SUSPENDED
Os recursos especificados na solicitação foram excluídos. Quando uma solicitação está no estado SUSPENDED, ela não está mais qualificada para outra alocação.

Pré-requisitos

Antes de executar os comandos neste guia, instale a Google Cloud CLI, crie um projeto Google Cloud e ative a API Cloud TPU. Para instruções, consulte Configurar o ambiente do Cloud TPU.

Solicitar um recurso na fila on demand

Os recursos sob demanda não serão substituídos, mas a cota sob demanda não garante que haverá recursos suficientes do Cloud TPU disponíveis para atender à sua solicitação. Para mais informações sobre recursos sob demanda, consulte Tipos de cota.

gcloud

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project \
    --zone us-central2-b \
    --accelerator-type v4-8 \
    --runtime-version tpu-vm-tf-2.18.0-pjrt

Descrições dos parâmetros de comando

queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID atribuído pelo usuário da TPU, que é criado quando a solicitação de recurso em fila é alocada.
project
Seu Google Cloud projeto.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-8',
        'runtime_version': 'tpu-vm-tf-2.18.0-pjrt',
        }
    }
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID atribuído pelo usuário da TPU, que é criado quando a solicitação de recurso em fila é alocada.
project
Seu Google Cloud projeto.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software da TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. Clique em Criar para criar a solicitação de recurso em fila.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.tpu.v2alpha1.CreateQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.Node;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateQueuedResource {
  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to create a node.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which to create the TPU.
    // For more information about supported TPU types for specific zones,
    // see https://cloud.google.com/tpu/docs/regions-zones
    String zone = "us-central1-f";
    // The name for your TPU.
    String nodeName = "YOUR_NODE_ID";
    // The accelerator type that specifies the version and size of the Cloud TPU you want to create.
    // For more information about supported accelerator types for each TPU version,
    // see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
    String tpuType = "v2-8";
    // Software version that specifies the version of the TPU runtime to install.
    // For more information see https://cloud.google.com/tpu/docs/runtimes
    String tpuSoftwareVersion = "tpu-vm-tf-2.14.1";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";

    createQueuedResource(
        projectId, zone, queuedResourceId, nodeName, tpuType, tpuSoftwareVersion);
  }

  // Creates a Queued Resource
  public static QueuedResource createQueuedResource(String projectId, String zone,
      String queuedResourceId, String nodeName, String tpuType, String tpuSoftwareVersion)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    String resource = String.format("projects/%s/locations/%s/queuedResources/%s",
            projectId, zone, queuedResourceId);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      String parent = String.format("projects/%s/locations/%s", projectId, zone);
      Node node =
          Node.newBuilder()
              .setName(nodeName)
              .setAcceleratorType(tpuType)
              .setRuntimeVersion(tpuSoftwareVersion)
              .setQueuedResource(resource)
              .build();

      QueuedResource queuedResource =
          QueuedResource.newBuilder()
              .setName(queuedResourceId)
              .setTpu(
                  QueuedResource.Tpu.newBuilder()
                      .addNodeSpec(
                          QueuedResource.Tpu.NodeSpec.newBuilder()
                              .setParent(parent)
                              .setNode(node)
                              .setNodeId(nodeName)
                              .build())
                      .build())
              .build();

      CreateQueuedResourceRequest request =
          CreateQueuedResourceRequest.newBuilder()
              .setParent(parent)
              .setQueuedResourceId(queuedResourceId)
              .setQueuedResource(queuedResource)
              .build();

      return tpuClient.createQueuedResourceAsync(request).get(1, TimeUnit.MINUTES);
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# tpu_name = "tpu-name"
# tpu_type = "v2-8"
# runtime_version = "tpu-vm-tf-2.17.0-pjrt"
# queued_resource_name = "resource-name"

node = tpu_v2alpha1.Node()
node.accelerator_type = tpu_type
# To see available runtime version use command:
# gcloud compute tpus versions list --zone={ZONE}
node.runtime_version = runtime_version

node_spec = tpu_v2alpha1.QueuedResource.Tpu.NodeSpec()
node_spec.parent = f"projects/{project_id}/locations/{zone}"
node_spec.node_id = tpu_name
node_spec.node = node

resource = tpu_v2alpha1.QueuedResource()
resource.tpu = tpu_v2alpha1.QueuedResource.Tpu(node_spec=[node_spec])

request = CreateQueuedResourceRequest(
    parent=f"projects/{project_id}/locations/{zone}",
    queued_resource_id=queued_resource_name,
    queued_resource=resource,
)

client = tpu_v2alpha1.TpuClient()
operation = client.create_queued_resource(request=request)

response = operation.result()
print(response.name)
print(response.state.state)
# Example response:
# projects/[project_id]/locations/[zone]/queuedResources/resource-name
# State.WAITING_FOR_RESOURCES

Tamanhos de fatia padrão para recursos em fila sob demanda

Ao usar a cota sob demanda, é necessário solicitar um tamanho de fatia menor que o limite padrão do tipo de acelerador que você está usando. As solicitações que excedem os limites padrão são recusadas pelo sistema.

A tabela a seguir mostra os tipos de TPU e os limites padrão associados.

Tipo de acelerador Limite padrão (em número de TensorCores)
v2 128
v3 128
v4 384
v5 32

Se você precisar de tamanhos de fatia maiores, entre em contato com o suporte do Cloud TPU para mais informações.

Solicitar um recurso na fila usando uma reserva

É possível solicitar um recurso enfileirado usando uma reserva. Para comprar uma reserva, entre em contato com a Google Cloud equipe de conta.

gcloud

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project \
    --zone us-central2-b \
    --accelerator-type v4-8 \
    --runtime-version tpu-vm-tf-2.18.0-pjrt \
    --reserved

Descrições dos parâmetros de comando

queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID atribuído pelo usuário da TPU, que é criado quando a solicitação de recurso em fila é alocada.
project
Seu Google Cloud projeto.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
reserved
Use essa flag ao solicitar recursos enfileirados como parte de uma reserva do Cloud TPU.

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-8',
        'runtime_version': 'tpu-vm-tf-2.18.0-pjrt',
        }
    }
    },
    'guaranteed': {
    'reserved': true,
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID atribuído pelo usuário da TPU, que é criado quando a solicitação de recurso em fila é alocada.
project
Seu Google Cloud projeto.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
reserved
Use essa flag ao solicitar recursos enfileirados como parte de uma reserva do Cloud TPU.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software da TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. Expanda a seção Gerenciamento.

  10. Marque a caixa de seleção Usar reserva atual.

  11. Clique em Criar para criar a solicitação de recurso em fila.

Solicitar um recurso de VM do Spot da TPU na fila

Uma VM spot é um recurso que pode ser interrompido e atribuído a outra carga de trabalho a qualquer momento. Os recursos de VM do Spot têm um custo menor, e você pode ter acesso aos recursos mais rapidamente em comparação com uma solicitação de VM que não seja do Spot. Para mais informações sobre as VMs spot do TPU, consulte Gerenciar VMs spot do TPU.

gcloud

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project-id \
    --zone us-central2-b \
    --accelerator-type v4-8 \
    --runtime-version tpu-vm-tf-2.18.0-pjrt \
    --spot

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
spot
Uma flag booleana que especifica que o recurso na fila é uma VM do Spot.

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-8',
        'runtime_version': 'tpu-vm-tf-2.18.0-pjrt'
        }
    }
    },
    'spot': {}
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
spot
Uma flag booleana que especifica que o recurso na fila é uma VM do Spot.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software da TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. Expanda a seção Gerenciamento.

  10. Marque a caixa de seleção Transformar esta VM em uma spot da TPU.

  11. Clique em Criar.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.tpu.v2alpha1.CreateQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.Node;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.SchedulingConfig;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateSpotQueuedResource {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to create a node.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which to create the TPU.
    // For more information about supported TPU types for specific zones,
    // see https://cloud.google.com/tpu/docs/regions-zones
    String zone = "us-central1-f";
    // The name for your TPU.
    String nodeName = "YOUR_TPU_NAME";
    // The accelerator type that specifies the version and size of the Cloud TPU you want to create.
    // For more information about supported accelerator types for each TPU version,
    // see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
    String tpuType = "v2-8";
    // Software version that specifies the version of the TPU runtime to install.
    // For more information see https://cloud.google.com/tpu/docs/runtimes
    String tpuSoftwareVersion = "tpu-vm-tf-2.14.1";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";

    createQueuedResource(
        projectId, zone, queuedResourceId, nodeName, tpuType, tpuSoftwareVersion);
  }

  // Creates a Queued Resource with --preemptible flag.
  public static QueuedResource createQueuedResource(
      String projectId, String zone, String queuedResourceId,
      String nodeName, String tpuType, String tpuSoftwareVersion)
      throws IOException, ExecutionException, InterruptedException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      String parent = String.format("projects/%s/locations/%s", projectId, zone);
      String resourceName = String.format("projects/%s/locations/%s/queuedResources/%s",
              projectId, zone, queuedResourceId);
      SchedulingConfig schedulingConfig = SchedulingConfig.newBuilder()
          .setPreemptible(true)
          .build();

      Node node =
          Node.newBuilder()
              .setName(nodeName)
              .setAcceleratorType(tpuType)
              .setRuntimeVersion(tpuSoftwareVersion)
              .setSchedulingConfig(schedulingConfig)
              .setQueuedResource(resourceName)
              .build();

      QueuedResource queuedResource =
          QueuedResource.newBuilder()
              .setName(queuedResourceId)
              .setTpu(
                  QueuedResource.Tpu.newBuilder()
                      .addNodeSpec(
                          QueuedResource.Tpu.NodeSpec.newBuilder()
                              .setParent(parent)
                              .setNode(node)
                              .setNodeId(nodeName)
                              .build())
                      .build())
              .build();

      CreateQueuedResourceRequest request =
          CreateQueuedResourceRequest.newBuilder()
              .setParent(parent)
              .setQueuedResourceId(queuedResourceId)
              .setQueuedResource(queuedResource)
              .build();

      return tpuClient.createQueuedResourceAsync(request).get();
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# tpu_name = "tpu-name"
# tpu_type = "v2-8"
# runtime_version = "tpu-vm-tf-2.17.0-pjrt"
# queued_resource_name = "resource-name"

node = tpu_v2alpha1.Node()
node.accelerator_type = tpu_type
# To see available runtime version use command:
# gcloud compute tpus versions list --zone={ZONE}
node.runtime_version = runtime_version

node_spec = tpu_v2alpha1.QueuedResource.Tpu.NodeSpec()
node_spec.parent = f"projects/{project_id}/locations/{zone}"
node_spec.node_id = tpu_name
node_spec.node = node

resource = tpu_v2alpha1.QueuedResource()
resource.tpu = tpu_v2alpha1.QueuedResource.Tpu(node_spec=[node_spec])
# Create a spot resource
resource.spot = tpu_v2alpha1.QueuedResource.Spot()

request = CreateQueuedResourceRequest(
    parent=f"projects/{project_id}/locations/{zone}",
    queued_resource_id=queued_resource_name,
    queued_resource=resource,
)

client = tpu_v2alpha1.TpuClient()
operation = client.create_queued_resource(request=request)
response = operation.result()

print(response.name)
print(response.state.state)
# Example response:
# projects/[project_id]/locations/[zone]/queuedResources/resource-name
# State.WAITING_FOR_RESOURCES

Solicitar que um recurso em fila seja alocado antes ou depois de um horário especificado

É possível especificar um horário de início ou de término opcional em uma solicitação de recurso em fila. O horário de início ou a duração de início especifica o horário mais cedo em que a solicitação pode ser atendida. O horário ou a duração de término especifica por quanto tempo a solicitação permanece válida. Se uma solicitação não for atendida até o horário de término especificado ou dentro da duração especificada, ela vai expirar. Depois que a solicitação expira, ela permanece na fila, mas não está mais qualificada para alocação.

Também é possível especificar um intervalo de alocação especificando um horário de início ou duração e um horário de término ou duração.

Para conferir uma lista de formatos de carimbo de data/hora e duração aceitos, consulte Data e hora.

Solicitar que um recurso na fila seja atendido após um período especificado

Em uma solicitação de recurso em fila, é possível especificar um tempo ou duração após o qual um recurso será alocado.

gcloud

O comando a seguir solicita uma TPU v4-4096 para ser alocada após as 9h do dia 14 de dezembro de 2022.

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project-id \
    --zone us-central2-b \
    --accelerator-type v4-4096 \
    --runtime-version tpu-vm-tf-2.18.0-pod-pjrt \
    --valid-after-time 2022-12-14T09:00:00Z

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-after-time
O tempo após o qual o recurso precisa ser alocado. Para mais informações sobre formatos de duração, consulte Data e hora do tópico da CLI do Google Cloud.

curl

O comando a seguir solicita uma TPU v4-4096 para ser alocada após as 9h do dia 14 de dezembro de 2022.

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-4096',
        'runtime_version': 'tpu-vm-tf-2.18.0-pod-pjrt',
        }
    }
    },
    'queueing_policy': {
    'valid_after_time': {
        'seconds': 2022-12-14T09:00:00Z
    }
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-after-time
O tempo após o qual o recurso precisa ser alocado. Para mais informações sobre formatos de duração, consulte Data e hora do tópico da CLI do Google Cloud.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software de TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. No campo Iniciar solicitação em, insira o horário após o qual o recurso será alocado.

  10. Clique em Criar para criar a solicitação de recurso em fila.

O exemplo a seguir solicita que uma v4-32 seja alocada após seis horas.

gcloud

    gcloud compute tpus queued-resources create your-queued-resource-id \
        --node-id your-node-id \
        --project your-project-id \
        --zone us-central2-b \
        --accelerator-type v4-32 \
        --runtime-version tpu-vm-tf-2.18.0-pod-pjrt \
        --valid-after-duration 6h

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-after-duration
A duração antes da qual a TPU não pode ser provisionada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-32',
        'runtime_version': 'tpu-vm-tf-2.18.0-pod-pjrt',
        }
    }
    },
'queueing_policy': {
    'valid_after_duration': {
        'seconds': 21600
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-after-duration
A duração antes da qual a TPU não pode ser provisionada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.tpu.v2alpha1.CreateQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.Node;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateTimeBoundQueuedResource {

  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to create a node.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which to create the TPU.
    // For more information about supported TPU types for specific zones,
    // see https://cloud.google.com/tpu/docs/regions-zones
    String zone = "us-central2-b";
    // The name of your node.
    String nodeId = "YOUR_NODE_ID";
    // The accelerator type that specifies the version and size of the Cloud TPU you want to create.
    // For more information about supported accelerator types for each TPU version,
    // see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
    String acceleratorType = "v2-8";
    // Software version that specifies the version of the TPU runtime to install.
    // For more information see https://cloud.google.com/tpu/docs/runtimes
    String runtimeVersion = "tpu-vm-tf-2.14.1";
    // The name of your Queued Resource.
    String queuedResourceId = "YOUR_QUEUED_RESOURCE_ID";

    createTimeBoundQueuedResource(projectId, nodeId,
        queuedResourceId, zone, acceleratorType, runtimeVersion);
  }

  // Creates a Queued Resource with time bound configuration.
  public static QueuedResource createTimeBoundQueuedResource(
      String projectId, String nodeId, String queuedResourceId,
      String zone, String acceleratorType, String runtimeVersion)
          throws IOException, ExecutionException, InterruptedException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      String parent = String.format("projects/%s/locations/%s", projectId, zone);
      // Create a Duration object representing 6 hours.
      Duration validAfterDuration = Duration.newBuilder().setSeconds(6 * 3600).build();
      // You could also use timestamps like this:
      // Timestamp validAfterTime = Timestamps.parse("2024-10-14T09:00:00Z");

      Node node =
          Node.newBuilder()
              .setName(nodeId)
              .setAcceleratorType(acceleratorType)
              .setRuntimeVersion(runtimeVersion)
              .setQueuedResource(
                  String.format(
                      "projects/%s/locations/%s/queuedResources/%s",
                      projectId, zone, queuedResourceId))
              .build();

      QueuedResource queuedResource =
          QueuedResource.newBuilder()
              .setName(queuedResourceId)
              .setTpu(
                  QueuedResource.Tpu.newBuilder()
                      .addNodeSpec(
                          QueuedResource.Tpu.NodeSpec.newBuilder()
                              .setParent(parent)
                              .setNode(node)
                              .setNodeId(nodeId)
                              .build())
                      .build())
              .setQueueingPolicy(
                  QueuedResource.QueueingPolicy.newBuilder()
                      .setValidAfterDuration(validAfterDuration)
                      // .setValidAfterTime(validAfterTime)
                      .build())
              .build();

      CreateQueuedResourceRequest request =
          CreateQueuedResourceRequest.newBuilder()
              .setParent(parent)
              .setQueuedResource(queuedResource)
              .setQueuedResourceId(queuedResourceId)
              .build();

      return tpuClient.createQueuedResourceAsync(request).get();
    }
  }
}

Solicitar um recurso em fila que expira após um período especificado

Em uma solicitação de recurso enfileirada, é possível especificar por quanto tempo ela permanece válida. Se a solicitação não for atendida no tempo ou na duração especificados, ela vai expirar.

gcloud

O comando a seguir solicita uma TPU v4-4096. Se a solicitação não for atendida até 14 de dezembro de 2022, às 9h, ela vai expirar.

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project-id \
    --zone us-central2-b \
    --accelerator-type v4-4096 \
    --runtime-version tpu-vm-tf-2.18.0-pod-pjrt \
    --valid-until-time 2022-12-14T09:00:00Z

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-until-time
O tempo após o qual a solicitação é cancelada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.

curl

O comando a seguir solicita uma TPU v4-4096. Se a solicitação não for atendida até 14 de dezembro de 2022, às 9h, ela vai expirar.

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-4096',
        'runtime_version': 'tpu-vm-tf-2.18.0-pod-pjrt',
        }
    }
    },
    'queueing_policy': {
    'valid_until_time': {
        'seconds': 1655197200
    }
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-until-time
O tempo após o qual a solicitação é cancelada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software da TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. No campo Cancelar solicitação em, insira o horário em que a solicitação de recurso em fila precisa expirar se não for atendida.

  10. Clique em Criar para criar a solicitação de recurso em fila.

O exemplo a seguir solicita uma v4-32. A solicitação expira se não for preenchida em seis horas.

gcloud

    gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project-id \
    --zone us-central2-b \
    --accelerator-type v4-32 \
    --runtime-version tpu-vm-tf-2.18.0-pod-pjrt \
    --valid-until-duration 6h

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software do Cloud TPU.
valid-until-duration
O período em que a solicitação é válida. Para mais informações sobre formatos de duração, consulte o tópico Data e hora da CLI do Google Cloud

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-32',
        'runtime_version': 'tpu-vm-tf-2.18.0-pod-pjrt',
        }
    }
    },
'queueing_policy': {
    'valid_until_duration': {
        'seconds': 21600
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-until-duration
O período em que a solicitação é válida. Para mais informações sobre formatos de duração, consulte o tópico Data e hora da CLI do Google Cloud

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# tpu_name = "tpu-name"
# tpu_type = "v2-8"
# runtime_version = "tpu-vm-tf-2.17.0-pjrt"
# queued_resource_name = "resource-name"

node = tpu_v2alpha1.Node()
node.accelerator_type = tpu_type
# To see available runtime version use command:
# gcloud compute tpus versions list --zone={ZONE}
node.runtime_version = runtime_version

node_spec = tpu_v2alpha1.QueuedResource.Tpu.NodeSpec()
node_spec.parent = f"projects/{project_id}/locations/{zone}"
node_spec.node_id = tpu_name
node_spec.node = node

resource = tpu_v2alpha1.QueuedResource()
resource.tpu = tpu_v2alpha1.QueuedResource.Tpu(node_spec=[node_spec])

# Use one of the following queueing policies
resource.queueing_policy = tpu_v2alpha1.QueuedResource.QueueingPolicy(
    # valid_after_duration = "6000s", # Duration after which a resource should be allocated
    valid_until_duration="90s",  # Specify how long a queued resource request remains valid
    # valid_after_time="2024-10-31T09:00:00Z", # Specify a time after which a resource should be allocated
    # valid_until_time="2024-10-29T16:00:00Z",  # Specify a time before which the resource should be allocated
)

request = CreateQueuedResourceRequest(
    parent=f"projects/{project_id}/locations/{zone}",
    queued_resource_id=queued_resource_name,
    queued_resource=resource,
)

client = tpu_v2alpha1.TpuClient()
operation = client.create_queued_resource(request=request)

response = operation.result()
print(resource.queueing_policy)
print(response.queueing_policy.valid_until_time)
# Example response:
# valid_until_duration {
#   seconds: 90
# }
# 2024-10-29 14:22:53.562090+00:00

Solicitar que um recurso em fila seja alocado em um intervalo especificado

É possível especificar um intervalo de alocação definindo o horário de início ou a duração e o horário de término ou a duração.

gcloud

O comando a seguir solicita uma v4-32 em 5 horas e 30 minutos a partir do horário atual para ser criada até 14 de dezembro de 2022, às 9h.

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project-id \
    --zone us-central2-b \
    --accelerator-type v4-32 \
    --runtime-version tpu-vm-tf-2.18.0-pod-pjrt \
    --valid-after-duration 5h30m \
    --valid-until-time 2022-12-14T09:00:00Z

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-until-timw
O tempo após o qual a solicitação é cancelada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.
valid-until-duration
O período em que a solicitação é válida. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.

curl

O comando a seguir solicita uma v4-32 em 5 horas e 30 minutos a partir do horário atual para ser criada até 14 de dezembro de 2022, às 9h.

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-32',
        'runtime_version': 'tpu-vm-tf-2.18.0-pod-pjrt',
        }
    }
    },
'queueing_policy': {
    'validInterval': {
        'startTime': '2022-12-10T14:30:00Z',
        'endTime': '2022-12-14T09:00:00Z'
    }
    },
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
valid-until-timw
O tempo após o qual a solicitação é cancelada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.
valid-until-duration
O período em que a solicitação é válida. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software da TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. No campo Iniciar solicitação em, insira o horário após o qual o recurso será alocado.

  10. No campo Cancelar solicitação em, insira o horário em que a solicitação de recurso em fila precisa expirar se não for atendida.

  11. Clique em Criar para criar a solicitação de recurso em fila.

Solicitar um recurso na fila com um script de inicialização

É possível especificar um script para ser executado em um recurso em fila depois que ele for provisionado.

gcloud

Ao usar o comando gcloud, é possível usar a flag --metadata ou --metadata-from-file para especificar um comando de script ou um arquivo que contenha o código do script, respectivamente. O exemplo a seguir cria uma solicitação de recurso em fila que vai executar o script startup-script.sh.

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project \
    --zone us-central2-b \
    --accelerator-type v4-8 \
    --runtime-version tpu-vm-tf-2.12.0 \
    --metadata-from-file='startup-script=startup-script.sh'

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
validInterval
O tempo em que a solicitação é válida e depois é cancelada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.
metadata-from-file
Especifica um arquivo que contém metadados. Se você não especificar um caminho totalmente qualificado para o arquivo de metadados, o comando vai presumir que ele está localizado no diretório atual. Neste exemplo, o arquivo contém um script de inicialização que é executado quando o recurso em fila é provisionado.
metadata
Especifica metadados para a solicitação. Neste exemplo, os metadados são um comando de script de inicialização executado quando o recurso em fila é provisionado.

curl

Ao usar curl, é necessário incluir o código do script no conteúdo JSON. O exemplo a seguir inclui um script inline no corpo JSON.

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    tpu: {
        node_spec: {
        parent: 'projects/your-project-number/locations/us-central2-b',
        node_id: 'your-node-id',
        node: {
            accelerator_type: 'v2-8',
            runtime_version: 'tpu-vm-tf-2.18.0-pjrt',
            metadata: {
                "startup-script": "#! /bin/bash\npwd > /tmp/out.txt\nwhoami >> /tmp/out.txt"
            }
        }
        }
    },
'queueing_policy': {
    'validInterval': {
        'startTime': '2022-12-10T14:30:00Z',
        'endTime': '2022-12-14T09:00:00Z'
    }
    },
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID definido pelo usuário da TPU criada em resposta à solicitação.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
validInterval
O tempo em que a solicitação é válida e depois é cancelada. Para mais informações sobre formatos de duração, consulte Datatime do tópico da CLI do Google Cloud.
metadata-from-file
Especifica um arquivo que contém metadados. Se você não especificar um caminho totalmente qualificado para o arquivo de metadados, o comando vai presumir que ele está localizado no diretório atual. Neste exemplo, o arquivo contém um script de inicialização que é executado quando o recurso em fila é provisionado.
metadata
Especifica metadados para a solicitação. Neste exemplo, os metadados são um comando de script de inicialização executado quando o recurso em fila é provisionado.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.tpu.v2alpha1.CreateQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.Node;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;

public class CreateQueuedResourceWithStartupScript {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to create a node.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which to create the TPU.
    // For more information about supported TPU types for specific zones,
    // see https://cloud.google.com/tpu/docs/regions-zones
    String zone = "us-central1-a";
    // The name for your TPU.
    String nodeName = "YOUR_TPU_NAME";
    // The accelerator type that specifies the version and size of the Cloud TPU you want to create.
    // For more information about supported accelerator types for each TPU version,
    // see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
    String tpuType = "v2-8";
    // Software version that specifies the version of the TPU runtime to install.
    // For more information see https://cloud.google.com/tpu/docs/runtimes
    String tpuSoftwareVersion = "tpu-vm-tf-2.14.1";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";

    createQueuedResource(projectId, zone, queuedResourceId, nodeName,
        tpuType, tpuSoftwareVersion);
  }

  // Creates a Queued Resource with startup script.
  public static QueuedResource createQueuedResource(
      String projectId, String zone, String queuedResourceId,
      String nodeName, String tpuType, String tpuSoftwareVersion)
      throws IOException, ExecutionException, InterruptedException {
    String parent = String.format("projects/%s/locations/%s", projectId, zone);
    String startupScriptContent = "#!/bin/bash\necho \"Hello from the startup script!\"";
    // Add startup script to metadata
    Map<String, String> metadata = new HashMap<>();
    metadata.put("startup-script", startupScriptContent);
    String queuedResourceForTpu =  String.format("projects/%s/locations/%s/queuedResources/%s",
            projectId, zone, queuedResourceId);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      Node node =
          Node.newBuilder()
              .setName(nodeName)
              .setAcceleratorType(tpuType)
              .setRuntimeVersion(tpuSoftwareVersion)
              .setQueuedResource(queuedResourceForTpu)
              .putAllMetadata(metadata)
              .build();

      QueuedResource queuedResource =
          QueuedResource.newBuilder()
              .setName(queuedResourceId)
              .setTpu(
                  QueuedResource.Tpu.newBuilder()
                      .addNodeSpec(
                          QueuedResource.Tpu.NodeSpec.newBuilder()
                              .setParent(parent)
                              .setNode(node)
                              .setNodeId(nodeName)
                              .build())
                      .build())
              .build();

      CreateQueuedResourceRequest request =
          CreateQueuedResourceRequest.newBuilder()
              .setParent(parent)
              .setQueuedResourceId(queuedResourceId)
              .setQueuedResource(queuedResource)
              .build();
      // You can wait until TPU Node is READY,
      // and check its status using getTpuVm() from "tpu_vm_get" sample.

      return tpuClient.createQueuedResourceAsync(request).get();
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# tpu_name = "tpu-name"
# tpu_type = "v2-8"
# runtime_version = "tpu-vm-tf-2.17.0-pjrt"
# queued_resource_name = "resource-name"

node = tpu_v2alpha1.Node()
node.accelerator_type = tpu_type
# To see available runtime version use command:
# gcloud compute tpus versions list --zone={ZONE}
node.runtime_version = runtime_version
# This startup script updates numpy to the latest version and logs the output to a file.
script = {
    "startup-script": """#!/bin/bash
echo "Hello World" > /var/log/hello.log
sudo pip3 install --upgrade numpy >> /var/log/hello.log 2>&1
"""
}
node.metadata = script
# Enabling external IPs for internet access from the TPU node for updating numpy
node.network_config = tpu_v2alpha1.NetworkConfig(
    enable_external_ips=True,
)

node_spec = tpu_v2alpha1.QueuedResource.Tpu.NodeSpec()
node_spec.parent = f"projects/{project_id}/locations/{zone}"
node_spec.node_id = tpu_name
node_spec.node = node

resource = tpu_v2alpha1.QueuedResource()
resource.tpu = tpu_v2alpha1.QueuedResource.Tpu(node_spec=[node_spec])

request = CreateQueuedResourceRequest(
    parent=f"projects/{project_id}/locations/{zone}",
    queued_resource_id=queued_resource_name,
    queued_resource=resource,
)

client = tpu_v2alpha1.TpuClient()
operation = client.create_queued_resource(request=request)

response = operation.result()
print(response.name)
print(response.tpu.node_spec[0].node.metadata)
# Example response:
# projects/[project_id]/locations/[zone]/queuedResources/resource-name
# {'startup-script': '#!/bin/bash\n    echo "Hello World" > /var/log/hello.log\n
# sudo pip3 install --upgrade numpy >> /var/log/hello.log 2>&1\n    '}

Solicitar um recurso em fila com uma rede e sub-rede especificadas

Em uma solicitação de recurso enfileirada, é possível especificar uma rede e uma sub-rede às quais você quer conectar a TPU.

gcloud

gcloud compute tpus queued-resources create your-queued-resource-id \
    --node-id your-node-id \
    --project your-project \
    --zone us-central2-b \
    --accelerator-type v4-8 \
    --runtime-version tpu-vm-tf-2.18.0-pjrt \
    --network network-name \
    --subnetwork subnetwork-name

Descrições dos parâmetros de comando

queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID atribuído pelo usuário da TPU, que é criado quando a solicitação de recurso em fila é alocada.
project
Seu Google Cloud projeto.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
reserved
Use essa flag ao solicitar recursos enfileirados como parte de uma reserva do Cloud TPU.
network
Uma rede da qual o recurso na fila vai fazer parte.
subnetwork
Uma sub-rede da qual o recurso na fila vai fazer parte.

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "{
    'tpu': {
    'node_spec': {
        'parent': 'projects/your-project-number/locations/us-central2-b',
        'node_id': 'your-node-id',
        'node': {
        'accelerator_type': 'v4-8',
        'runtime_version': 'tpu-vm-tf-2.18.0-pjrt',
        'network_config': {
            'network': 'network-name',
            'subnetwork': 'subnetwork-name',
            'enable_external_ips': true
        }
    }
    },
    'guaranteed': {
    'reserved': true,
    }
}" \
https://tpu.googleapis.com/v2alpha1/projects/your-project-id/locations/us-central2-b/queuedResources?queued_resource_id=your-queued-resource-id

Descrições dos parâmetros de comando

queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
node-id
O ID atribuído pelo usuário da TPU, que é criado quando a solicitação de recurso em fila é alocada.
project
Seu Google Cloud projeto.
zone
A zona em que você planeja criar a Cloud TPU.
accelerator-type
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
runtime-version
A versão do software da Cloud TPU.
reserved
Use essa flag ao solicitar recursos enfileirados como parte de uma reserva do Cloud TPU.
network
Uma rede da qual o recurso na fila vai fazer parte.
subnetwork
Uma sub-rede da qual o recurso na fila vai fazer parte.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique em Criar TPU.

  3. No campo Nome, insira um nome para a TPU.

  4. Na caixa Zona, selecione a zona em que você quer criar a TPU.

  5. Na caixa Tipo de TPU, selecione um tipo de acelerador. O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.

  6. Na caixa Versão do software da TPU, selecione uma versão do software. Ao criar uma VM do Cloud TPU, a versão do software da TPU especifica a versão do ambiente de execução da TPU que será instalada. Para mais informações, consulte Imagens de VM de TPU.

  7. Clique no botão Ativar fila.

  8. No campo Nome do recurso em fila, digite um nome para a solicitação de recurso em fila.

  9. Abra a seção Rede.

  10. Nos campos Rede e Sub-rede, selecione a rede e a sub-rede que você quer usar.

  11. Clique em Criar para criar a solicitação de recurso em fila.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.api.gax.retrying.RetrySettings;
import com.google.cloud.tpu.v2alpha1.CreateQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.NetworkConfig;
import com.google.cloud.tpu.v2alpha1.Node;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import com.google.cloud.tpu.v2alpha1.TpuSettings;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.threeten.bp.Duration;

public class CreateQueuedResourceWithNetwork {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to create a node.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which to create the TPU.
    // For more information about supported TPU types for specific zones,
    // see https://cloud.google.com/tpu/docs/regions-zones
    String zone = "europe-west4-a";
    // The name for your TPU.
    String nodeName = "YOUR_TPU_NAME";
    // The accelerator type that specifies the version and size of the Cloud TPU you want to create.
    // For more information about supported accelerator types for each TPU version,
    // see https://cloud.google.com/tpu/docs/system-architecture-tpu-vm#versions.
    String tpuType = "v2-8";
    // Software version that specifies the version of the TPU runtime to install.
    // For more information see https://cloud.google.com/tpu/docs/runtimes
    String tpuSoftwareVersion = "tpu-vm-tf-2.14.1";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";
    // The name of the network you want the node to connect to.
    // The network should be assigned to your project.
    String networkName = "YOUR_COMPUTE_TPU_NETWORK";

    createQueuedResourceWithNetwork(projectId, zone, queuedResourceId, nodeName,
        tpuType, tpuSoftwareVersion, networkName);
  }

  // Creates a Queued Resource with network configuration.
  public static QueuedResource createQueuedResourceWithNetwork(
      String projectId, String zone, String queuedResourceId, String nodeName,
      String tpuType, String tpuSoftwareVersion, String networkName)
      throws IOException, ExecutionException, InterruptedException {
    // With these settings the client library handles the Operation's polling mechanism
    // and prevent CancellationException error
    TpuSettings.Builder clientSettings =
        TpuSettings.newBuilder();
    clientSettings
        .createQueuedResourceSettings()
        .setRetrySettings(
            RetrySettings.newBuilder()
                .setInitialRetryDelay(Duration.ofMillis(5000L))
                .setRetryDelayMultiplier(2.0)
                .setInitialRpcTimeout(Duration.ZERO)
                .setRpcTimeoutMultiplier(1.0)
                .setMaxRetryDelay(Duration.ofMillis(45000L))
                .setTotalTimeout(Duration.ofHours(24L))
                .build());
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create(clientSettings.build())) {
      String parent = String.format("projects/%s/locations/%s", projectId, zone);
      String region = zone.substring(0, zone.length() - 2);

      // Specify the network and subnetwork that you want to connect your TPU to.
      NetworkConfig networkConfig =
          NetworkConfig.newBuilder()
              .setEnableExternalIps(true)
              .setNetwork(String.format("projects/%s/global/networks/%s", projectId, networkName))
              .setSubnetwork(
                  String.format(
                      "projects/%s/regions/%s/subnetworks/%s", projectId, region, networkName))
              .build();

      // Create a node
      Node node =
          Node.newBuilder()
              .setName(nodeName)
              .setAcceleratorType(tpuType)
              .setRuntimeVersion(tpuSoftwareVersion)
              .setNetworkConfig(networkConfig)
              .setQueuedResource(
                  String.format(
                      "projects/%s/locations/%s/queuedResources/%s",
                      projectId, zone, queuedResourceId))
              .build();

      // Create queued resource
      QueuedResource queuedResource =
          QueuedResource.newBuilder()
              .setName(queuedResourceId)
              .setTpu(
                  QueuedResource.Tpu.newBuilder()
                      .addNodeSpec(
                          QueuedResource.Tpu.NodeSpec.newBuilder()
                              .setParent(parent)
                              .setNode(node)
                              .setNodeId(nodeName)
                              .build())
                      .build())
              .build();

      CreateQueuedResourceRequest request =
          CreateQueuedResourceRequest.newBuilder()
              .setParent(parent)
              .setQueuedResource(queuedResource)
              .setQueuedResourceId(queuedResourceId)
              .build();

      // You can wait until TPU Node is READY,
      // and check its status using getTpuVm() from "tpu_vm_get" sample.

      return tpuClient.createQueuedResourceAsync(request).get();
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# tpu_name = "tpu-name"
# tpu_type = "v2-8"
# runtime_version = "tpu-vm-tf-2.17.0-pjrt"
# queued_resource_name = "resource-name"
# network = "default"

node = tpu_v2alpha1.Node()
node.accelerator_type = tpu_type
node.runtime_version = runtime_version
# Setting network configuration
node.network_config = tpu_v2alpha1.NetworkConfig(
    network=network,  # Update if you want to use a specific network
    subnetwork="default",  # Update if you want to use a specific subnetwork
    enable_external_ips=True,
    can_ip_forward=True,
)

node_spec = tpu_v2alpha1.QueuedResource.Tpu.NodeSpec()
node_spec.parent = f"projects/{project_id}/locations/{zone}"
node_spec.node_id = tpu_name
node_spec.node = node

resource = tpu_v2alpha1.QueuedResource()
resource.tpu = tpu_v2alpha1.QueuedResource.Tpu(node_spec=[node_spec])

request = CreateQueuedResourceRequest(
    parent=f"projects/{project_id}/locations/{zone}",
    queued_resource_id=queued_resource_name,
    queued_resource=resource,
)

client = tpu_v2alpha1.TpuClient()
operation = client.create_queued_resource(request=request)

response = operation.result()
print(response.name)
print(response.tpu.node_spec[0].node.network_config)
print(resource.tpu.node_spec[0].node.network_config.network == "default")
# Example response:
# network: "default"
# subnetwork: "default"
# enable_external_ips: true
# can_ip_forward: true

Excluir uma solicitação de recurso na fila

É possível excluir uma solicitação de recurso na fila e a TPU associada a ela excluindo a solicitação de recurso na fila:

gcloud

Transmita a flag --force para o comando queued-resource delete:

gcloud compute tpus queued-resources delete your-queued-resource-id \
    --project my-project \
    --zone us-central2-b \
    --force \
    --async

Descrições de sinalizações de comando

your-queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona do Cloud TPU a ser excluído.
force
Exclua a VM da TPU e a solicitação de recurso na fila.

curl

Use o parâmetro de consulta force=true na sua solicitação curl:

curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://tpu.googleapis.com/v2/projects/my-project/locations/us-central2-b/queuedResources/your-queued-resource-id?force=true

Descrições de sinalizações de comando

your-queued-resource-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona do Cloud TPU a ser excluído.
force
Exclua a VM da TPU e a solicitação de recurso na fila.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique na guia Recursos em fila.

  3. Marque a caixa de seleção ao lado da solicitação de recurso na fila.

  4. Clique em Excluir.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.api.gax.retrying.RetrySettings;
import com.google.cloud.tpu.v2alpha1.DeleteQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import com.google.cloud.tpu.v2alpha1.TpuSettings;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.threeten.bp.Duration;

public class DeleteForceQueuedResource {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which the TPU was created.
    String zone = "us-central1-f";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";

    deleteForceQueuedResource(projectId, zone, queuedResourceId);
  }

  // Deletes a Queued Resource asynchronously with --force flag.
  public static void deleteForceQueuedResource(
      String projectId, String zone, String queuedResourceId)
          throws ExecutionException, InterruptedException, IOException {
    String name = String.format("projects/%s/locations/%s/queuedResources/%s",
        projectId, zone, queuedResourceId);
    // With these settings the client library handles the Operation's polling mechanism
    // and prevent CancellationException error
    TpuSettings.Builder clientSettings =
        TpuSettings.newBuilder();
    clientSettings
        .deleteQueuedResourceSettings()
        .setRetrySettings(
            RetrySettings.newBuilder()
                .setInitialRetryDelay(Duration.ofMillis(5000L))
                .setRetryDelayMultiplier(2.0)
                .setInitialRpcTimeout(Duration.ZERO)
                .setRpcTimeoutMultiplier(1.0)
                .setMaxRetryDelay(Duration.ofMillis(45000L))
                .setTotalTimeout(Duration.ofHours(24L))
                .build());

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create(clientSettings.build())) {
      DeleteQueuedResourceRequest request =
          DeleteQueuedResourceRequest.newBuilder().setName(name).setForce(true).build();
      // Waiting for updates in the library. Until then, the operation will complete successfully,
      // but the user will receive an error message with UnknownException and IllegalStateException.
      tpuClient.deleteQueuedResourceAsync(request).get();

      System.out.printf("Deleted Queued Resource: %s\n", name);
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# queued_resource_name = "resource-name"

client = tpu_v2alpha1.TpuClient()
request = tpu_v2alpha1.DeleteQueuedResourceRequest(
    name=f"projects/{project_id}/locations/{zone}/queuedResources/{queued_resource_name}",
    force=True,  # Set force=True to delete the resource with tpu nodes.
)

try:
    op = client.delete_queued_resource(request=request)
    op.result()
    print(f"Queued resource '{queued_resource_name}' successfully deleted.")
except TypeError as e:
    print(f"Error deleting resource: {e}")
    print(f"Queued resource '{queued_resource_name}' successfully deleted.")

Se você excluir a TPU diretamente, também precisará excluir o recurso na fila, conforme mostrado no exemplo a seguir. Quando você exclui a TPU, a solicitação de recurso na fila transita para o estado SUSPENDED. Depois disso, a solicitação de recurso na fila pode ser excluída.

gcloud

Exclua a TPU:

$ gcloud compute tpus tpu-vm delete your-node-id \
    --project=your-project \
    --zone=zone \
    --quiet

Descrições de sinalizações de comando

project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona do Cloud TPU a ser excluído.
your-node-id
O nome do TPU que você quer excluir.

Quando você exclui uma TPU, o recurso na fila associado entra no estado SUSPENDING e depois no estado SUSPENDED. Quando o recurso na fila estiver no estado SUSPENDED, será possível excluí-lo:

gcloud compute tpus queued-resources delete your-queued-resource-id \
    --project your-project-id \
    --zone us-central2-b

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona do Cloud TPU a ser excluído.

curl

Exclua a TPU:

curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://tpu.googleapis.com/v2/projects/your-project/locations/us-central2-b/nodes?node_id=your-node-id

Descrições de sinalizações de comando

project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona do Cloud TPU a ser excluído.
your-node-id
O nome do TPU que você quer excluir.

Quando você exclui uma TPU, o recurso na fila associado entra no estado SUSPENDING e depois no estado SUSPENDED. Quando o recurso na fila estiver no estado SUSPENDED, será possível excluí-lo:

curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://tpu.googleapis.com/v2/projects/your-project-id/locations/us-central2-b/queuedResources/your-queued-resource-id

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona do Cloud TPU a ser excluído.

Console

Exclua a TPU:

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Marque a caixa de seleção ao lado do TPU.

  3. Clique em Excluir.

Quando você exclui uma TPU, o recurso na fila associado entra no estado Suspending e depois no estado Suspended. Quando o recurso na fila estiver no estado Suspenso, ele poderá ser excluído:

  1. Clique na guia Recursos em fila.
  2. Marque a caixa de seleção ao lado da solicitação de recurso na fila.
  3. Clique em Excluir.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
import com.google.api.gax.retrying.RetrySettings;
import com.google.cloud.tpu.v2.DeleteNodeRequest;
import com.google.cloud.tpu.v2.NodeName;
import com.google.cloud.tpu.v2.TpuClient;
import com.google.cloud.tpu.v2.TpuSettings;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.threeten.bp.Duration;

public class DeleteTpuVm {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to create a node.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which to create the TPU.
    // For more information about supported TPU types for specific zones,
    // see https://cloud.google.com/tpu/docs/regions-zones
    String zone = "europe-west4-a";
    // The name for your TPU.
    String nodeName = "YOUR_TPU_NAME";

    deleteTpuVm(projectId, zone, nodeName);
  }

  // Deletes a TPU VM with the specified name in the given project and zone.
  public static void deleteTpuVm(String projectId, String zone, String nodeName)
      throws IOException, ExecutionException, InterruptedException {
    // With these settings the client library handles the Operation's polling mechanism
    // and prevent CancellationException error
    TpuSettings.Builder clientSettings =
        TpuSettings.newBuilder();
    clientSettings
        .deleteNodeOperationSettings()
        .setPollingAlgorithm(
            OperationTimedPollAlgorithm.create(
                RetrySettings.newBuilder()
                    .setInitialRetryDelay(Duration.ofMillis(5000L))
                    .setRetryDelayMultiplier(1.5)
                    .setMaxRetryDelay(Duration.ofMillis(45000L))
                    .setInitialRpcTimeout(Duration.ZERO)
                    .setRpcTimeoutMultiplier(1.0)
                    .setMaxRpcTimeout(Duration.ZERO)
                    .setTotalTimeout(Duration.ofHours(24L))
                    .build()));

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create(clientSettings.build())) {
      String name = NodeName.of(projectId, zone, nodeName).toString();

      DeleteNodeRequest request = DeleteNodeRequest.newBuilder().setName(name).build();

      tpuClient.deleteNodeAsync(request).get();
      System.out.println("TPU VM deleted");
    }
  }
}

Quando você exclui uma TPU, o recurso na fila associado entra no estado SUSPENDING e depois no estado SUSPENDED. Quando o recurso na fila estiver no estado SUSPENDED, ele poderá ser excluído:

import com.google.cloud.tpu.v2alpha1.DeleteQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class DeleteQueuedResource {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which the TPU was created.
    String zone = "us-central1-f";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";

    deleteQueuedResource(projectId, zone, queuedResourceId);
  }

  // Deletes a Queued Resource asynchronously.
  public static void deleteQueuedResource(String projectId, String zone, String queuedResourceId)
      throws ExecutionException, InterruptedException, IOException {
    String name = String.format("projects/%s/locations/%s/queuedResources/%s",
        projectId, zone, queuedResourceId);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      // Before deleting the queued resource it is required to delete the TPU VM.
      // For more information about deleting TPU
      // see https://cloud.google.com/tpu/docs/managing-tpus-tpu-vm

      DeleteQueuedResourceRequest request =
              DeleteQueuedResourceRequest.newBuilder().setName(name).build();

      tpuClient.deleteQueuedResourceAsync(request).get();
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# tpu_name = "tpu-name"

client = tpu_v2.TpuClient()
try:
    client.delete_node(
        name=f"projects/{project_id}/locations/{zone}/nodes/{tpu_name}"
    )
    print("The TPU node was deleted.")
except Exception as e:
    print(e)

Quando você exclui uma TPU, o recurso na fila associado entra no estado SUSPENDING e depois no estado SUSPENDED. Quando o recurso na fila estiver no estado SUSPENDED, ele poderá ser excluído:

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# queued_resource_name = "resource-name"

client = tpu_v2alpha1.TpuClient()
name = (
    f"projects/{project_id}/locations/{zone}/queuedResources/{queued_resource_name}"
)

try:
    op = client.delete_queued_resource(name=name)
    op.result()
    print(f"Queued resource '{queued_resource_name}' successfully deleted.")
except TypeError as e:
    print(f"Error deleting resource: {e}")
    print(f"Queued resource '{queued_resource_name}' successfully deleted.")

Extrair informações de estado e diagnóstico sobre uma solicitação de recurso na fila

Extraia o estado e as informações de diagnóstico sobre uma solicitação de recurso na fila:

gcloud

gcloud compute tpus queued-resources describe queued-resource-request-id \
    --project your-project-id \
    --zone us-central2-b

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.

curl

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://tpu.googleapis.com/v2/projects/your-project-id/locations/us-central2-b/queuedResources/your-queued-resource-id

Descrições de sinalizações de comando

queued-resource-request-id
O ID atribuído pelo usuário à solicitação de recurso em fila.
project
O ID do projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique na guia Recursos em fila.

  3. Clique no nome da solicitação de recurso em fila.

Depois que o TPU for provisionado, você também poderá conferir detalhes sobre a solicitação de recurso enfileirada acessando a página TPUs, encontrando seu TPU e clicando no nome da solicitação de recurso enfileirada correspondente.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.tpu.v2alpha1.GetQueuedResourceRequest;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import java.io.IOException;

public class GetQueuedResource {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which the TPU was created.
    String zone = "us-central1-f";
    // The name for your Queued Resource.
    String queuedResourceId = "QUEUED_RESOURCE_ID";

    getQueuedResource(projectId, zone, queuedResourceId);
  }

  // Get a Queued Resource.
  public static QueuedResource getQueuedResource(
      String projectId, String zone, String queuedResourceId) throws IOException {
    String name = String.format("projects/%s/locations/%s/queuedResources/%s",
        projectId, zone, queuedResourceId);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      GetQueuedResourceRequest request =
          GetQueuedResourceRequest.newBuilder().setName(name).build();

      return tpuClient.getQueuedResource(request);
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"
# queued_resource_name = "resource-name"

client = tpu_v2alpha1.TpuClient()
name = (
    f"projects/{project_id}/locations/{zone}/queuedResources/{queued_resource_name}"
)
resource = client.get_queued_resource(name=name)
print("Resource name:", resource.name)
print(resource.state.state)
# Example response:
# Resource name: projects/{project_id}/locations/{zone}/queuedResources/resource-name
# State.ACTIVE

Se a solicitação falhar, a saída vai conter informações de erro. Para uma solicitação que está aguardando recursos, a saída será semelhante a esta:

gcloud

    name: projects/your-project-id/locations/us-central2-b/queuedResources/your-queued-resource-id
    state:
    state: WAITING_FOR_RESOURCES
    tpu:
    nodeSpec:
    - node:
        acceleratorType: v4-8
        bootDisk: {}
        networkConfig:
            enableExternalIps: true
        queuedResource: projects/your-project-number/locations/us-central2-b/queuedResources/your-queued-resource-id
        runtimeVersion: tpu-vm-tf-2.10.0
        schedulingConfig: {}
        serviceAccount: {}
        shieldedInstanceConfig: {}
        useTpuVm: true
        nodeId: your-node-id
        parent: projects/your-project-number/locations/us-central2-b

Console

O campo Status do recurso na fila mostra Aguardando recursos.

Listar solicitações de recursos em fila no seu projeto

Liste as solicitações de recursos em fila no seu projeto:

gcloud

gcloud compute tpus queued-resources list --project your-project-id \
    --zone us-central2-b

Descrições de sinalizações de comando

project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.

curl

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://tpu.googleapis.com/v2/projects/your-project-id/locations/us-central2-b/queuedResources

Descrições de sinalizações de comando

project
O Google Cloud projeto em que o recurso em fila é alocado.
zone
A zona em que você planeja criar a Cloud TPU.

Console

  1. No console do Google Cloud, acesse a página TPUs:

    Acessar TPUs

  2. Clique na guia Recursos em fila.

Java

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.tpu.v2alpha1.ListQueuedResourcesRequest;
import com.google.cloud.tpu.v2alpha1.QueuedResource;
import com.google.cloud.tpu.v2alpha1.TpuClient;
import com.google.cloud.tpu.v2alpha1.TpuClient.ListQueuedResourcesPage;
import java.io.IOException;

public class ListQueuedResources {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project.
    String projectId = "YOUR_PROJECT_ID";
    // The zone in which the TPU was created.
    String zone = "us-central1-a";

    listQueuedResources(projectId, zone);
  }

  // List Queued Resources.
  public static ListQueuedResourcesPage listQueuedResources(
      String projectId, String zone) throws IOException {
    String parent = String.format("projects/%s/locations/%s", projectId, zone);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TpuClient tpuClient = TpuClient.create()) {
      ListQueuedResourcesRequest request =
          ListQueuedResourcesRequest.newBuilder().setParent(parent).build();
      ListQueuedResourcesPage response =  tpuClient.listQueuedResources(request).getPage();

      for (QueuedResource queuedResource : response.iterateAll()) {
        System.out.println(queuedResource.getName());
      }
      return response;
    }
  }
}

Python

Para autenticar no Cloud TPU, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import tpu_v2alpha1

# TODO(developer): Update and un-comment below lines
# project_id = "your-project-id"
# zone = "us-central1-b"

client = tpu_v2alpha1.TpuClient()
parent = f"projects/{project_id}/locations/{zone}"
resources = client.list_queued_resources(parent=parent)
for resource in resources:
    print("Resource name:", resource.name)
    print("TPU id:", resource.tpu.node_spec[0].node_id)
# Example response:
# Resource name: projects/{project_id}/locations/{zone}/queuedResources/resource-name
# TPU id: tpu-name