O código de treinamento pode ser empacotado em um componente de treinamento personalizado e executado em um job de pipeline. Os registros do TensorBoard são transmitidos automaticamente para o experimento do Vertex AI TensorBoard. Essa integração é necessária para monitorar o treinamento quase em tempo real, já que o TensorBoard da Vertex AI fará streaming nos registros do TensorBoard Vertex AI à medida que eles forem gravados no Cloud Storage.
Para a configuração inicial, consulte Configuração para o TensorBoard da Vertex AI.
Alterações no script de treinamento
Seu script de treinamento precisa ser configurado para gravar registros do TensorBoard no
bucket do Cloud Storage, o local do serviço de treinamento do Vertex AI
que será disponibilizado automaticamente por meio de uma variável de ambiente
predefinida AIP_TENSORBOARD_LOG_DIR
.
Geralmente, isso pode ser feito ao fornecer os.environ['AIP_TENSORBOARD_LOG_DIR']
como o diretório de registros para as APIs de gravação de registros de TensorBoard de código aberto. O local
do AIP_TENSORBOARD_LOG_DIR
é normalmente definido com a variável
staging_bucket
.
Para configurar seu script de treinamento no TensorFlow 2.x, crie um callback do TensorBoard e defina oslog_dir
comoos.environ['AIP_TENSORBOARD_LOG_DIR']
O callback do TensorBoard é incluído nomodel.fit
de callbacks.
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 mais sobre como a Vertex AI define variáveis de ambiente no ambiente de treinamento personalizado.
Criar e executar um pipeline
O exemplo a seguir mostra como criar e executar um pipeline usando o pacote DSL do Kubeflow Pipelines. Para mais exemplos e detalhes, consulte a documentação do Vertex AI Pipelines.
Criar um componente de treinamento
Empacote seu código de treinamento em um componente personalizado, certificando-se de que o código esteja configurado para gravar registros do TensorBoard em um bucket do Cloud Storage. Para mais exemplos, consulte Criar seus próprios componentes de pipeline.
from kfp.v2.dsl import component
@component(
base_image="tensorflow/tensorflow:latest",
packages_to_install=["tensorflow_datasets"],
)
def train_tensorflow_model_with_tensorboard():
import datetime, os
import tensorflow as tf
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
def create_model():
return tf.keras.models.Sequential(
[
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation="relu"),
]
)
model = create_model()
model.compile(
optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"]
)
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=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback],
)
Crie e compile um pipeline.
Crie um job de treinamento personalizado a partir do componente criado. Basta especificar a especificação do componente em create_custom_training_job_op_from_component
.
Defina tensorboard_resource_name
como sua instância do TensorBoard e staging_bucket
como o local para preparar os artefatos durante chamadas de API (incluindo registros do TensorBoard).
Em seguida, crie um pipeline para incluir esse job e compile-o em um arquivo JSON.
Para mais exemplos e informações, consulte Componentes de job personalizados e Criar um pipeline.
from kfp.v2 import compiler
from google_cloud_pipeline_components.v1.custom_job.utils import \
create_custom_training_job_op_from_component
from kfp.v2 import dsl
def create_tensorboard_pipeline_sample(
project, location, staging_bucket, display_name, service_account, experiment, tensorboard_resource_name
):
@dsl.pipeline(
pipeline_root=f"{staging_bucket}/pipeline_root",
name=display_name,
)
def pipeline():
custom_job_op = create_custom_training_job_op_from_component(
component_spec=train_tensorflow_model_with_tensorboard,
tensorboard=tensorboard_resource_name,
base_output_directory=staging_bucket,
service_account=service_account,
)
custom_job_op(project=project, location=location)
compiler.Compiler().compile(
pipeline_func=pipeline, package_path=f"{display_name}.json"
)
Enviar um pipeline da Vertex AI
enviar seu pipeline usando o SDK da Vertex AI para Python. Para mais informações, consulte Executar um pipeline.
Python
experiment_name
: dê um nome para o experimento.pipeline_job_display_name
: o nome de exibição do job do pipeline.template_path
: o caminho para o modelo de pipeline compilado.pipeline_root
: especifique um URI do Cloud Storage que sua conta de serviço de pipelines possa acessar. Os artefatos das execuções de pipeline são armazenados na raiz do pipeline.parameter_values
: (opcional) os parâmetros de pipeline a serem transmitidos para essa execução. Por exemplo, crie umdict()
com os nomes do parâmetro como as chaves do dicionário e os valores de parâmetro como os valores do dicionário.project
: o ID do projeto. O projeto do Google Cloud em que o pipeline será executado. Esses IDs estão na página de boas-vindas do console do Google Cloud.
location
: o local para executar os componentes do pipeline. Deve ser igual local que a instância do TensorBoard usada.
A seguir
- Veja os resultados: Veja o TensorBoard para o Vertex AI Pipelines.
- Saiba como otimizar o desempenho dos jobs de treinamento personalizado usando Cloud Profiler.