Path: blob/master/site/pt-br/guide/migrate/tpu_embedding.ipynb
38968 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.TPUEmbeddingdo 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.fitou um loop de treinamento personalizado comtf.functionetf.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
TPUEstimatorcomo 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=Trueao agrupar o dataset comDataset.batch, poisTPUEmbeddingrequer 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.DatasetCreatorjunto 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.FeatureConfigtf.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_modeltf.tpu.experimental.embedding.TableConfigtf.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.
Ver em TensorFlow.org
Executar no Google Colab
Ver fonte no GitHub
Baixar notebook