Administra recursos en cola

Los recursos en cola te permiten solicitar recursos de Cloud TPU en colas. Cuando se solicitan recursos en cola, la solicitud se agrega a una cola que mantiene el servicio de Cloud TPU. Cuando el recurso solicitado esté disponible, se asignará a tu Google Cloud proyecto para que lo uses de forma exclusiva de inmediato. Permanecerá asignado a tu proyecto, a menos que lo borres o se le quite la prioridad. Solo las VMs Spot de TPU y las TPU interrumpibles son aptas para la preempción.

Puedes especificar una hora de inicio y de finalización opcional en una solicitud de recursos en cola. La hora de inicio especifica la hora más temprana en la que se debe completar la solicitud. Si una solicitud no se completa antes de la hora de finalización especificada, esta vencerá. La solicitud permanece en la cola después de que venza.

Las solicitudes de recursos en cola pueden estar en uno de los siguientes estados:

WAITING_FOR_RESOURCES
La solicitud pasó la validación inicial y se agregó a la cola. Permanece en este estado hasta que haya recursos libres suficientes para comenzar a aprovisionar tu solicitud o hasta que transcurra el intervalo de asignación. Cuando la demanda es alta, no se pueden aprovisionar todas las solicitudes de inmediato. Si necesitas una disponibilidad más confiable de las TPU, considera comprar una reserva.
PROVISIONING
Se seleccionó la solicitud de la cola y se están asignando sus recursos.
ACTIVE
Se asignó la solicitud. Cuando las solicitudes de recursos en cola están en el estado ACTIVE, puedes administrar tus VMs de TPU como se describe en Administra TPUs.
FAILED
No se pudo completar la solicitud, ya sea porque hay un problema con la solicitud o porque los recursos solicitados no estaban disponibles dentro del intervalo de asignación. La solicitud permanece en la fila hasta que se borra de forma explícita.
SUSPENDING
Se están borrando los recursos asociados con la solicitud.
SUSPENDED
Se borraron los recursos especificados en la solicitud. Cuando una solicitud está en el estado SUSPENDED, ya no es apta para una asignación adicional.

Requisitos previos

Antes de ejecutar los comandos de esta guía, debes instalar Google Cloud CLI, crear un proyecto de Google Cloud y habilitar la API de Cloud TPU. Para obtener instrucciones, consulta Configura el entorno de Cloud TPU.

Cómo solicitar un recurso en cola a pedido

No se usurparán los recursos on demand, pero la cuota on demand no garantiza que haya suficientes recursos de Cloud TPU disponibles para satisfacer tu solicitud. Para obtener más información sobre los recursos on demand, consulta Tipos de cuotas.

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

Descripciones de los parámetros de comando

queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
project
Tu Google Cloud proyecto.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de 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

Descripciones de los parámetros de comando

queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
project
Tu Google Cloud proyecto.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. Haz clic en Crear para crear tu solicitud de recursos en cola.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Tamaños de fragmento predeterminados para recursos en cola según demanda

Cuando usas la cuota on demand, debes solicitar un tamaño de fragmento inferior al límite predeterminado del tipo de acelerador que usas. El sistema rechaza las solicitudes que superan los límites predeterminados.

En la siguiente tabla, se muestran los tipos de TPU y sus límites predeterminados asociados.

Tipo de acelerador Límite predeterminado (en cantidad de TensorCores)
v2 128
v3 128
v4 384
v5 32

Si necesitas tamaños de porciones más grandes, comunícate con el equipo de asistencia de Cloud TPU para obtener información adicional.

Cómo solicitar un recurso en cola con una reserva

Puedes solicitar un recurso en cola con una reserva. Para comprar una reserva, comunícate con tu Google Cloud equipo de cuentas.

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

Descripciones de los parámetros de comando

queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
project
Tu Google Cloud proyecto.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
reserved
Usa esta marca cuando solicites recursos en cola como parte de una reserva de 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

Descripciones de los parámetros de comando

queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
project
Tu Google Cloud proyecto.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
reserved
Usa esta marca cuando solicites recursos en cola como parte de una reserva de Cloud TPU.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. Expande la sección Administración.

  10. Selecciona la casilla de verificación Usar la reserva existente.

  11. Haz clic en Crear para crear tu solicitud de recursos en cola.

Solicita un recurso en cola de VM Spot con TPU

Una VM Spot es un recurso que se puede interrumpir y asignar a otra carga de trabajo en cualquier momento. Los recursos de las VMs Spot cuestan menos y es posible que obtengas acceso a los recursos antes en comparación con una solicitud de VM que no sea Spot. Para obtener más información sobre las VMs Spot de TPU, consulta Administra VMs Spot de 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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
spot
Es una marca booleana que especifica que el recurso en cola es una VM 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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
spot
Es una marca booleana que especifica que el recurso en cola es una VM Spot.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. Expande la sección Administración.

  10. Selecciona la casilla de verificación Convierte esta VM en una VM Spot con TPU.

  11. Haz clic en Crear.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Solicita que se asigne un recurso en cola antes o después de un horario específico

Puedes especificar una hora de inicio o una hora de finalización opcional en una solicitud de recursos en cola. La hora de inicio o la duración de inicio especifican la hora más temprana en la que se debe completar la solicitud. La hora de finalización o la duración de finalización especifican por cuánto tiempo la solicitud sigue siendo válida. Si una solicitud no se completa antes de la hora de finalización o dentro de la duración especificada, esta vencerá. Una vez que venza la solicitud, esta permanecerá en la cola, pero ya no será apta para la asignación.

También puedes especificar un intervalo de asignación si especificas una hora de inicio o una duración, y una hora de finalización o una duración.

Para obtener una lista de los formatos de marca de tiempo y duración compatibles, consulta Fecha y hora.

Solicita que se entregue un recurso en cola después de un tiempo especificado

En una solicitud de recursos en cola, puedes especificar un tiempo o una duración después de los cuales se debe asignar un recurso.

gcloud

El siguiente comando solicita una TPU v4-4096 que se asignará después de las 9 a.m. del 14 de diciembre 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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-after-time
Es la hora después de la cual se debe asignar el recurso. Para obtener más información sobre los formatos de duración, consulta gcloud topic datetime.

curl

El siguiente comando solicita una TPU v4-4096 que se asignará después de las 9 a.m. del 14 de diciembre 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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-after-time
Es la hora después de la cual se debe asignar el recurso. Para obtener más información sobre los formatos de duración, consulta gcloud topic datetime.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. En el campo Iniciar solicitud el, ingresa la hora después de la cual se debe asignar el recurso.

  10. Haz clic en Crear para crear tu solicitud de recursos en cola.

En el siguiente ejemplo, se solicita que se asigne un v4-32 después de 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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-after-duration
Es la duración antes de la cual no se debe aprovisionar la TPU. Para obtener más información sobre los formatos de duración, consulta el tema de Google Cloud CLI fecha y hora

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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-after-duration
Es la duración antes de la cual no se debe aprovisionar la TPU. Para obtener más información sobre los formatos de duración, consulta el tema de Google Cloud CLI fecha y hora

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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();
    }
  }
}

Solicita un recurso en cola que vence después de un tiempo especificado

En una solicitud de recursos en cola, puedes especificar durante cuánto tiempo permanece válida. Si la solicitud no se cumple en el tiempo o la duración que especificas, esta vencerá.

gcloud

El siguiente comando solicita una TPU v4-4096. Si la solicitud no se completa antes del 14 de diciembre de 2022 a las 9:00 a.m., vencerá.

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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-until-time
Es la hora después de la cual se cancela la solicitud. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de los temas de Google Cloud CLI.

curl

El siguiente comando solicita una TPU v4-4096. Si la solicitud no se completa antes del 14 de diciembre de 2022 a las 9:00 a.m., vencerá.

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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-until-time
Es la hora después de la cual se cancela la solicitud. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de los temas de Google Cloud CLI.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. En el campo Cancelar solicitud el, ingresa la hora en la que vencerá la solicitud de recursos en fila si no se completa.

  10. Haz clic en Crear para crear tu solicitud de recursos en cola.

En el siguiente ejemplo, se solicita un v4-32. La solicitud vencerá si no se completa en 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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-until-duration
Es la duración de la validez de la solicitud. Para obtener más información sobre los formatos de duración, consulta el tema de Google Cloud CLI fecha y hora

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

Descripciones de los parámetros de comando

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-until-duration
Es la duración de la validez de la solicitud. Para obtener más información sobre los formatos de duración, consulta el tema de Google Cloud CLI fecha y hora

Python

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Solicita que se asigne un recurso en cola dentro de un intervalo especificado

Para especificar un intervalo de asignación, especifica la hora de inicio o la duración, y la hora de finalización o la duración.

gcloud

El siguiente comando solicita una v4-32 en 5 horas y 30 minutos a partir de la hora actual, que se creará a más tardar el 14 de diciembre de 2022 a las 9:00 a.m.

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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-until-timw
Es la hora después de la cual se cancela la solicitud. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de los temas de Google Cloud CLI.
valid-until-duration
Es la duración de la validez de la solicitud. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de los temas de Google Cloud CLI.

curl

El siguiente comando solicita una v4-32 en 5 horas y 30 minutos a partir de la hora actual, que se creará a más tardar el 14 de diciembre de 2022 a las 9:00 a.m.

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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
valid-until-timw
Es la hora después de la cual se cancela la solicitud. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de temas de Google Cloud CLI.
valid-until-duration
Es la duración de la validez de la solicitud. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de los temas de Google Cloud CLI.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. En el campo Iniciar solicitud el, ingresa la hora después de la cual se debe asignar el recurso.

  10. En el campo Cancelar solicitud el, ingresa la hora en la que debe vencer la solicitud de recursos en fila si no se completa.

  11. Haz clic en Crear para crear tu solicitud de recursos en cola.

Cómo solicitar un recurso en cola con una secuencia de comandos de inicio

Puedes especificar una secuencia de comandos para que se ejecute en un recurso en cola después de que se aprovisione.

gcloud

Cuando usas el comando gcloud, puedes usar la marca --metadata o --metadata-from-file para especificar un comando de secuencia de comandos o un archivo que contiene el código de la secuencia de comandos, respectivamente. En el siguiente ejemplo, se crea una solicitud de recurso en fila que ejecutará la secuencia de comandos 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'

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
validInterval
Es el tiempo durante el cual la solicitud es válida y, luego, se cancela. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de temas de Google Cloud CLI.
metadata-from-file
Especifica un archivo que contiene metadatos. Si no especificas una ruta de acceso completamente calificada al archivo de metadatos, el comando supone que se encuentra en el directorio actual. En este ejemplo, el archivo contiene una secuencia de comandos de inicio que se ejecuta cuando se aprovisiona el recurso en fila.
metadata
Especifica los metadatos de la solicitud. En este ejemplo, los metadatos son un comando de secuencia de comandos de inicio que se ejecuta cuando se aprovisiona el recurso en fila.

curl

Cuando uses curl, debes incluir el código de la secuencia de comandos en el contenido JSON. En el siguiente ejemplo, se incluye una secuencia de comandos intercalada en el cuerpo 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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID definido por el usuario de la TPU creada en respuesta a la solicitud.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
validInterval
Es el tiempo durante el cual la solicitud es válida y, luego, se cancela. Para obtener más información sobre los formatos de duración, consulta Fecha y hora de temas de Google Cloud CLI.
metadata-from-file
Especifica un archivo que contiene metadatos. Si no especificas una ruta de acceso completamente calificada al archivo de metadatos, el comando supone que se encuentra en el directorio actual. En este ejemplo, el archivo contiene una secuencia de comandos de inicio que se ejecuta cuando se aprovisiona el recurso en fila.
metadata
Especifica los metadatos de la solicitud. En este ejemplo, los metadatos son un comando de secuencia de comandos de inicio que se ejecuta cuando se aprovisiona el recurso en fila.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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    '}

Solicita un recurso en cola con una red y una subred especificadas

En una solicitud de recursos en cola, puedes especificar una red y una subred a las que deseas conectar tu 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

Descripciones de los parámetros de comando

queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
project
Tu Google Cloud proyecto.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
reserved
Usa esta marca cuando solicites recursos en cola como parte de una reserva de Cloud TPU.
network
Es una red de la que formará parte el recurso en cola.
subnetwork
Una subred de la que formará parte el recurso en cola.

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

Descripciones de los parámetros de comando

queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
node-id
El ID asignado por el usuario de la TPU que se crea cuando se asigna la solicitud de recurso en fila.
project
Tu Google Cloud proyecto.
zone
Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
runtime-version
La versión del software de Cloud TPU.
reserved
Usa esta marca cuando solicites recursos en cola como parte de una reserva de Cloud TPU.
network
Es una red de la que formará parte el recurso en cola.
subnetwork
Una subred de la que formará parte el recurso en cola.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPU

  2. Haz clic en Crear TPU.

  3. En el campo Nombre, ingresa un nombre para tu TPU.

  4. En el cuadro Zona, selecciona la zona en la que deseas crear la TPU.

  5. En el cuadro Tipo de TPU, selecciona un tipo de acelerador. El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.

  6. En el cuadro Versión de software de TPU, selecciona una versión de software. Cuando se crea una VM de Cloud TPU, la versión del software de TPU especifica la versión del entorno de ejecución de TPU que se instalará. Para obtener más información, consulta Imágenes de VM de TPU.

  7. Haz clic en el botón de activación Habilitar colas.

  8. En el campo Nombre del recurso en cola, ingresa un nombre para tu solicitud de recurso en cola.

  9. Expande la sección Red.

  10. En los campos Red y Subred, selecciona la red y la subred que deseas usar.

  11. Haz clic en Crear para crear tu solicitud de recursos en cola.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Cómo borrar una solicitud de recursos en cola

Para borrar una solicitud de recursos en cola y la TPU asociada con ella, sigue estos pasos:

gcloud

Pasa la marca --force al comando queued-resource delete:

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

Descripciones de las marcas de comandos

your-queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
La zona de la Cloud TPU que se borrará.
force
Borra la VM de TPU y la solicitud de recursos en cola.

curl

Usa el parámetro de consulta force=true en tu solicitud 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

Descripciones de las marcas de comandos

your-queued-resource-id
El ID asignado por el usuario de la solicitud de recursos en cola.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
La zona de la Cloud TPU que se borrará.
force
Borra la VM de TPU y la solicitud de recursos en cola.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en la pestaña Recursos en cola.

  3. Selecciona la casilla de verificación junto a tu solicitud de recursos en cola.

  4. Haz clic en Borrar.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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.")

Si borras la TPU directamente, también debes borrar el recurso en cola, como se muestra en el siguiente ejemplo. Cuando borras la TPU, la solicitud de recurso en cola cambia al estado SUSPENDED, después del cual se puede borrar.

gcloud

Borra la TPU:

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

Descripciones de las marcas de comandos

project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
La zona de la Cloud TPU que se borrará.
your-node-id
El nombre de la TPU que quieres borrar.

Cuando borras tu TPU, el recurso en cola asociado pasa al estado SUSPENDING y, luego, al estado SUSPENDED. Cuando el recurso en fila está en estado SUSPENDED, puedes borrarlo:

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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
La zona de la Cloud TPU que se borrará.

curl

Borra la 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

Descripciones de las marcas de comandos

project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
La zona de la Cloud TPU que se borrará.
your-node-id
El nombre de la TPU que quieres borrar.

Cuando borras tu TPU, el recurso en cola asociado pasa al estado SUSPENDING y, luego, al estado SUSPENDED. Cuando el recurso en fila está en estado SUSPENDED, puedes borrarlo:

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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
La zona de la Cloud TPU que se borrará.

Console

Borra tu TPU:

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Selecciona la casilla de verificación junto a tu TPU.

  3. Haz clic en Borrar.

Cuando borras tu TPU, el recurso en cola asociado pasa al estado Suspending y, luego, al estado Suspended. Cuando el recurso en cola esté en el estado Suspendido, puedes borrarlo:

  1. Haz clic en la pestaña Recursos en cola.
  2. Selecciona la casilla de verificación junto a tu solicitud de recursos en cola.
  3. Haz clic en Borrar.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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");
    }
  }
}

Cuando borras tu TPU, el recurso en cola asociado pasa al estado SUSPENDING y, luego, al estado SUSPENDED. Cuando el recurso en cola esté en el estado SUSPENDED, puedes borrarlo:

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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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)

Cuando borras tu TPU, el recurso en cola asociado pasa al estado SUSPENDING y, luego, al estado SUSPENDED. Cuando el recurso en cola esté en el estado SUSPENDED, puedes borrarlo:

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.")

Cómo recuperar información de estado y diagnóstico sobre una solicitud de recursos en cola

Recupera el estado y la información de diagnóstico de una solicitud de recursos en cola:

gcloud

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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la 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

Descripciones de las marcas de comandos

queued-resource-request-id
El ID asignado por el usuario de la solicitud de recursos en cola.
project
Es el ID del proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en la pestaña Recursos en cola.

  3. Haz clic en el nombre de tu solicitud de recursos en cola.

Después de aprovisionar tu TPU, también puedes ver los detalles de tu solicitud de recurso en cola. Para ello, ve a la página TPUs, busca tu TPU y haz clic en el nombre de la solicitud de recurso en cola correspondiente.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Si la solicitud falla, el resultado contendrá información de error. Para una solicitud que está esperando recursos, el resultado es similar al siguiente:

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

El campo Queued resource status muestra Waiting for resources.

Enumera las solicitudes de recursos en cola en tu proyecto

Enumera las solicitudes de recursos en cola de tu proyecto:

gcloud

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

Descripciones de las marcas de comandos

project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la 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

Descripciones de las marcas de comandos

project
El Google Cloud proyecto en el que se asigna el recurso en cola.
zone
Es la zona en la que deseas crear la Cloud TPU.

Console

  1. En la consola de Google Cloud, ve a la página TPUs:

    Ve a TPUs

  2. Haz clic en la pestaña Recursos en cola.

Java

Para autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en Cloud TPU, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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