Path: blob/master/site/pt-br/guide/migrate/tpu_embedding.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Como migrar de TPU embedding_columns para a camada TPUEmbedding
Este guia mostra como migrar o treinamento de embedding em TPUs da API embedding_column
do TensorFlow 1 com TPUEstimator
, para a API da camada TPUEmbedding
do TensorFlow 2 com TPUStrategy
.
Embeddings são (grandes) matrizes. Eles são tabelas de associação que mapeiam de um espaço de características esparso para vetores densos. Embeddings fornecem representações eficientes e densas, capturando semelhanças complexas e relacionamentos entre características.
O TensorFlow inclui suporte especializado para treinar embeddings em TPUs. Esse suporte a embeddings, específico para TPUs, permite que você treine embeddings que são maiores do que a memória de um único dispositivo TPU e use entradas esparsas e irregulares em TPUs.
No TensorFlow 1,
tf.compat.v1.estimator.tpu.TPUEstimator
é uma API de alto nível que encapsula treinamento, avaliação, previsão e exportação para servir com TPUs. Tem suporte especial paratf.compat.v1.tpu.experimental.embedding_column
.Para implementar no TensorFlow 2, use a camada
tfrs.layers.embedding.TPUEmbedding
do TensorFlow Recommenders. Para treinamento e avaliação, use uma estratégia de distribuição de TPUs —tf.distribute.TPUStrategy
— que é compatível com as APIs Keras para, por exemplo, construção de modelos (tf.keras.Model
), otimizadores (tf.keras.optimizers.Optimizer
), e treinamento comModel.fit
ou um loop de treinamento personalizado comtf.function
etf.GradientTape
.
Para informações adicionais, consulte a documentação da API da camada tfrs.layers.embedding.TPUEmbedding
, bem como a documentação tf.tpu.experimental.embedding.TableConfig
e tf.tpu.experimental.embedding.FeatureConfig
para obter informações adicionais. Para obter uma visão geral de tf.distribute.TPUStrategy
, confira o guia Treinamento distribuído e o guia Usando TPUs. Se você estiver migrando de TPUEstimator
para TPUStrategy
, confira o O guia de migração de TPUs.
Configuração
Comece instalando o TensorFlow Recommenders e importando alguns pacotes necessários:
E prepare um dataset simples para fins de demonstração:
TensorFlow 1: treine incorporações em TPUs com o TPUEstimator
No TensorFlow 1, você configura os embeddings de TPU usando a API tf.compat.v1.tpu.experimental.embedding_column
e treina/avalia o modelo em TPUs com tf.compat.v1.estimator.tpu.TPUEstimator
.
As entradas são números inteiros que variam de zero ao tamanho do vocabulário para a tabela de embeddings da TPU. Comece codificando as entradas para um ID categórico com tf.feature_column.categorical_column_with_identity
. Use "sparse_feature"
para o parâmetro key
, já que os recursos de entrada são de valor inteiro, enquanto num_buckets
é o tamanho do vocabulário para a tabela de embeddings (10
).
Em seguida, converta as entradas categóricas esparsas numa representação densa com tpu.experimental.embedding_column
, onde dimension
é a largura da tabela de embedding. Ela armazenará um vetor de embedding para cada um dos num_buckets
.
Agora, defina a configuração de incorporação específica para a TPU através de tf.estimator.tpu.experimental.EmbeddingConfigSpec
. Você vai passá-la depois para tf.estimator.tpu.TPUEstimator
como um parâmetro embedding_config_spec
.
Em seguida, para usar um TPUEstimator
, defina:
Uma função de entrada para os dados de treinamento
Uma função de entrada de avaliação para os dados de avaliação
Uma função de modelo para instruir o
TPUEstimator
como a operação de treinamento será definida com as características e rótulos
Com essas funções definidas, crie um tf.distribute.cluster_resolver.TPUClusterResolver
que forneça as informações do cluster e um objeto tf.compat.v1.estimator.tpu.RunConfig
.
Junto com a função de modelo que você definiu, agora você pode criar um TPUEstimator
. Aqui, você simplificará o fluxo ignorando o salvamento de checkpoints. Em seguida, você especificará o tamanho do lote para treinamento e avaliação para o TPUEstimator
.
Chame TPUEstimator.train
para começar a treinar o modelo:
Em seguida, chame TPUEstimator.evaluate
para avaliar o modelo usando os dados de avaliação:
TensorFlow 2: treine incorporações em TPUs com o TPUStrategy
No TensorFlow 2, para treinar os workers da TPU, use tf.distribute.TPUStrategy
junto com as APIs Keras para a definição do modelo e do treinamento/avaliação. (Consulte o guia Usando TPUs para mais exemplos de treinamento com Keras Model.fit e um loop de treinamento personalizado (com tf.function
e tf.GradientTape
).)
Já que você precisa realizar alguma inicialização para se conectar ao cluster remoto e inicializar os workers da TPU, comece criando um TPUClusterResolver
para fornecer as informações do cluster e conectar-se ao cluster. (Saiba mais na seção Inicialização da TPU do guia Usando TPUs.)
Em seguida, prepare seus dados. Isto é semelhante a como você criou um dataset no exemplo do TensorFlow 1, exceto que a função do dataset agora é transmitida a um objeto tf.distribute.InputContext
em vez de um dict params
. Você pode usar esse objeto para determinar o tamanho do lote local (e para qual host esse pipeline se destina, para que você possa particionar seus dados adequadamente).
Ao usar a API
tfrs.layers.embedding.TPUEmbedding
, é importante incluir a opçãodrop_remainder=True
ao agrupar o dataset comDataset.batch
, poisTPUEmbedding
requer um tamanho de lote fixo.Além disso, o mesmo tamanho de lote deve ser usado para avaliação e treinamento se estiverem ocorrendo no mesmo conjunto de dispositivos.
Por fim, você deve usar
tf.keras.utils.experimental.DatasetCreator
junto com a opção de entrada especial —experimental_fetch_to_device=False
— emtf.distribute.InputOptions
(que contém configurações específicas da estratégia). Isto é demonstrado a seguir:
Em seguida, depois de preparar os dados, você criará um TPUStrategy
e definirá um modelo, métricas e um otimizador no escopo dessa estratégia (Strategy.scope
).
Você deve escolher um número para steps_per_execution
em Model.compile
, pois ele especifica a quantidade de lotes a serem executados durante cada chamada tf.function
e é crítico para o desempenho. Esse argumento é semelhante ao iterations_per_loop
usado em TPUEstimator
.
As características e a configuração da tabela que foram especificadas no TensorFlow 1 através de tf.tpu.experimental.embedding_column
(e tf.tpu.experimental.shared_embedding_column
) podem ser especificados diretamente no TensorFlow 2 através de um par de objetos de configuração:
tf.tpu.experimental.embedding.FeatureConfig
tf.tpu.experimental.embedding.TableConfig
(Consulte a documentação da API associada para mais detalhes.)
Com isso, você está pronto para treinar o modelo com o dataset de treinamento:
Por fim, avalie o modelo usando o dataset de avaliação:
Próximos passos
Saiba mais sobre como configurar embeddings específicos para TPUs na documentação da API:
tfrs.layers.embedding.TPUEmbedding
: particularmente sobre configuração de características e tabelas, configuração do otimizador, criação de um modelo (usando a API funcional Keras ou através de uma subclasse detf.keras.Model
), treinamento/avaliação, e servndo modelos comtf.saved_model
tf.tpu.experimental.embedding.TableConfig
tf.tpu.experimental.embedding.FeatureConfig
Para mais informações sobre TPUStrategy
no TensorFlow 2, considere os seguintes recursos:
Guia: Usando TPUs (cobre treinamento com Keras
Model.fit
/ um loop de treinamento personalizado comtf.distribute.TPUStrategy
, bem como dicas sobre como melhorar o desempenho comtf.function
)
Para saber mais sobre como personalizar seu treinamento, consulte:
As TPUs, os ASICs especializados do Google para aprendizado de máquina, estão disponíveis através do Google Colab, TPU Research Cloud e Cloud TPU.