Use o Vertex AI TensorBoard com a preparação personalizada

Quando usa a preparação personalizada para preparar modelos, pode configurar a tarefa de preparação para carregar automaticamente os registos do Vertex AI TensorBoard para o Vertex AI TensorBoard.

Pode usar esta integração para monitorizar a sua preparação quase em tempo real à medida que o Vertex AI TensorBoard transmite os registos do Vertex AI TensorBoard à medida que são escritos no Cloud Storage.

Para a configuração inicial, consulte o artigo Configure o Vertex AI TensorBoard.

Alterações ao seu script de preparação

O seu script de preparação tem de ser configurado para escrever registos do TensorBoard no contentor do Cloud Storage, cuja localização o serviço Vertex AI Training disponibiliza automaticamente através de uma variável de ambiente predefinida AIP_TENSORBOARD_LOG_DIR.

Normalmente, pode fazê-lo fornecendo os.environ['AIP_TENSORBOARD_LOG_DIR'] como o diretório de registo às APIs de escrita de registos do TensorBoard de código aberto. Normalmente, a localização do AIP_TENSORBOARD_LOG_DIR é definida com a variável staging_bucket.

Para configurar o seu script de preparação no TensorFlow 2.x, crie um callback do TensorBoard e defina a variável log_dir como os.environ['AIP_TENSORBOARD_LOG_DIR']. O callback do TensorBoard é, em seguida, incluído na lista de callbacks do TensorFlow model.fit.

  tensorboard_callback = tf.keras.callbacks.TensorBoard(
       log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],
       histogram_freq=1
  )
  
  model.fit(
       x=x_train,
       y=y_train,
       epochs=epochs,
       validation_data=(x_test, y_test),
       callbacks=[tensorboard_callback],
  )
  

Saiba como a Vertex AI define variáveis de ambiente no seu ambiente de preparação personalizado.

Crie uma tarefa de preparação personalizada

O exemplo seguinte mostra como criar a sua própria tarefa de preparação personalizada.

Para ver um exemplo detalhado de como criar uma tarefa de preparação personalizada, consulte o artigo Olá, preparação personalizada. Para ver os passos para criar contentores de preparação personalizados, consulte o artigo Crie uma imagem de contentor personalizada para preparação.

Para criar uma tarefa de preparação personalizada, use o SDK Vertex AI para Python ou REST.

Python

Python

def create_training_pipeline_custom_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 0,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomTrainingJob(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

  • project: . Pode encontrar estes IDs na página de Google Cloud boas-vindas da consola.
  • location: a localização onde executar o CustomJob. Esta deve ser a mesma localização que a instância do TensorBoard fornecida.
  • staging_bucket: o contentor do Cloud Storage para preparar artefactos durante as chamadas API, incluindo registos do TensorBoard.
  • display_name: nome a apresentar da tarefa de preparação personalizada.
  • script_path: o caminho, relativo ao diretório de trabalho no seu sistema de ficheiros local, para o script que é o ponto de entrada para o seu código de preparação.
  • container_uri: O URI da imagem do contentor de preparação pode ser o Vertex AI. Contentor de preparação pré-criado ou um contentor personalizado.
  • model_serving_container_image_uri: o URI do contentor de publicação do modelo adequado para publicar o modelo produzido pelo script de preparação.
  • dataset_id: o número de ID do conjunto de dados a usar para a preparação.
  • model_display_name: nome a apresentar do modelo preparado.
  • args: argumentos da linha de comandos a transmitir ao script Python.
  • replica_count: o número de réplicas de trabalhadores a usar. Na maioria dos casos, defina este valor como 1 para o seu primeiro conjunto de trabalhadores.
  • machine_type: o tipo de VM a usar. Para ver uma lista das VMs compatíveis, consulte Tipos de máquinas
  • accelerator_type: O tipo de GPU a associar a cada VM no conjunto de recursos. Para ver uma lista das GPUs suportadas, consulte a secção GPUs.
  • accelerator_count O número de GPUs a associar a cada VM no conjunto de recursos. O valor predefinido é 1.
  • training_fraction_split: a fração do conjunto de dados a usar para preparar o modelo.
  • validation_fraction_split: a fração do conjunto de dados a usar para validar o seu modelo.
  • test_fraction_split: a fração do conjunto de dados a usar para avaliar o seu modelo.
  • sync: se este método deve ser executado de forma síncrona.
  • tensorboard_resource_name: O nome do recurso da instância do Vertex TensorBoard para a qual o CustomJob vai carregar os registos do TensorBoard.
  • service_account: obrigatório quando executado com o TensorBoard. Consulte o artigo Crie uma conta de serviço com as autorizações necessárias.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION_ID: a localização onde executar o CustomJob, por exemplo, us-central1. Esta deve ser a mesma localização que a instância do TensorBoard fornecida.
  • PROJECT_ID: o seu ID do projeto.
  • TENSORBOARD_INSTANCE_NAME: (Obrigatório) O nome completo da instância do Vertex AI TensorBoard existente que armazena os registos do Vertex AI TensorBoard:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    Nota: se a instância do TensorBoard não for uma instância existente, a criação de customJobs gera um erro 404.
  • GCS_BUCKET_NAME: "${PROJECT_ID}-tensorboard-logs-${LOCATION}"
  • USER_SA_EMAIL: (obrigatório) a conta de serviço criada nos passos anteriores ou a sua própria conta de serviço. "USER_SA_NAME@${PROJECT_ID}.iam.gserviceaccount.com"
  • TRAINING_CONTAINER: TRAINING_CONTAINER.
  • INVOCATION_TIMESTAMP: "$(date +'%Y%m%d-%H%M%S')"
  • JOB_NAME: "tensorboard-example-job-${INVOCATION_TIMESTAMP}"
  • BASE_OUTPUT_DIR: (obrigatório) o Google Cloud caminho onde toda a saída da formação é escrita. "gs://$GCS_BUCKET_NAME/$JOB_NAME"

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/customJobs

Corpo JSON do pedido:

{
"displayName": JOB_NAME,
"jobSpec":{
"workerPoolSpecs":[
  {
    "replicaCount": "1",
     "machineSpec": {
        "machineType": "n1-standard-8",
      },
      "containerSpec": {
        "imageUri": TRAINING_CONTAINER,
      }
    }
  ],
  
  "base_output_directory": {
  "output_uri_prefix": BASE_OUTPUT_DIR,
   },
  "serviceAccount": USER_SA_EMAIL,
  "tensorboard": TENSORBOARD_INSTANCE_NAME,
  }
}

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/customJobs/CUSTOM_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-8"
        },
        "replicaCount": "1",
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "IMAGE_URI"
        }
      }
    ],
    "serviceAccount": "SERVICE_ACCOUNT",
    "baseOutputDirectory": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    },
    "tensorboard": "projects//locations/LOCATION_ID/tensorboards/tensorboard-id"
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "CREATE-TIME",
  "updateTime": "UPDATE-TIME"
}

O que se segue?