TensorFlow 2.x no TFX
O TensorFlow 2.0 foi lançado em 2019, com forte integração com o Keras, execução eager por padrão e execução de funções no estilo Python, entre outros novos recursos e melhorias.
Este guia fornece uma visão geral técnica abrangente do TF 2.x no TFX.
Qual versão usar?
O TFX é compatível com o TensorFlow 2.x, e as APIs de alto nível que existiam no TensorFlow 1.x (principalmente Estimators) continuam funcionando.
Inicie novos projetos no TensorFlow 2.x
Já que o TensorFlow 2.x mantém os recursos de alto nível do TensorFlow 1.x, não há vantagem em usar a versão mais antiga em novos projetos, mesmo que você não planeje usar os novos recursos.
Portanto, se você estiver iniciando um novo projeto TFX, recomendamos usar o TensorFlow 2.x. Talvez você queira atualizar seu código posteriormente, à medida que o suporte completo para Keras e outros novos recursos estiver disponível, e o escopo das alterações será muito menor se você começar logo com o TensorFlow 2.x, em vez de tentar atualizar do TensorFlow 1.x em o futuro.
Convertendo projetos existentes para o TensorFlow 2.x
O código escrito para o TensorFlow 1.x é amplamente compatível com o TensorFlow 2.x e continuará funcionando no TFX.
No entanto, se quiser aproveitar as melhorias e os novos recursos à medida que forem disponibilizados no TF 2.x, você pode seguir as instruções para migrar para o TF 2.x.
Estimator
A API Estimator foi mantida no TensorFlow 2.x, mas não é o foco de novos recursos e desenvolvimento. O código escrito no TensorFlow 1.x ou 2.x usando Estimators continuará funcionando conforme esperado no TFX.
Aqui está um exemplo de TFX ponta a ponta usando o Estimator puro: Exemplo do táxi (Estimator)
Keras com model_to_estimator
Os modelos Keras podem ser agrupados com a função tf.keras.estimator.model_to_estimator
, que permite que funcionem como se fossem Estimators. Para usar:
Construa um modelo Keras.
Passe o modelo compilado para
model_to_estimator
.Use o resultado de
model_to_estimator
no Trainer, da mesma forma que você normalmente usaria um Estimator.
Além do arquivo do módulo do usuário do Trainer, o restante do pipeline permanece inalterado.
Keras nativo (ou seja, Keras sem model_to_estimator
)
Observação: O suporte completo para todos os recursos do Keras está em andamento; na maioria dos casos, o Keras no TFX funcionará conforme o esperado. Ainda não funciona com Sparse Features para FeatureColumns.
Exemplos e Colab
Aqui estão vários exemplos com Keras nativo:
Penguin (arquivo de módulo): exemplo 'Hello world' completo.
MNIST (arquivo de módulo): exemplo com Image e TFLite completo.
Taxi (arquivo de módulo): exemplo completo com uso de Transform.
Também temos um Keras Colab por componente.
Componentes TFX
As seguintes seções explicam como os componentes TFX relacionados oferecem suporte ao Keras nativo.
Transform
Atualmente, o Transform tem suporte experimental para modelos Keras.
O próprio componente Transform pode ser usado no Keras nativo sem alterações. A definição preprocessing_fn
permanece a mesma, usando ops do TensorFlow e tf.Transform.
A função serving e a função eval foram alteradas para Keras nativo. Os detalhes serão discutidos nas seções a seguir do Trainer e do Evaluator.
Observação: As transformações dentro de preprocessing_fn
não podem ser aplicadas à característica de rótulo para treinamento ou avaliação.
Trainer
Para configurar o Keras nativo, o GenericExecutor
precisa ser definido para o componente Trainer para substituir o executor padrão baseado no Estimator. Para mais detalhes, clique aqui.
Arquivo Keras Module com Transform
O arquivo do módulo de treinamento deve conter um run_fn
que será chamado pelo GenericExecutor
. Um run_fn
típico do Keras ficaria assim:
No run_fn
acima, uma assinatura de serviço é necessária ao exportar o modelo treinado para que o modelo possa obter exemplos brutos para previsão. Uma função de serviço típica seria assim:
Na função de serviço acima, as transformações tf.Transform precisam ser aplicadas aos dados brutos para inferência, usando a camada tft.TransformFeaturesLayer
. O _serving_input_receiver_fn
anterior que era necessário para Estimators não será mais necessário com Keras.
Arquivo Keras Module sem Transform
Isto é semelhante ao arquivo do módulo mostrado acima, mas sem as transformações:
tf.distribute.Strategy
No momento, o TFX oferece suporte apenas a estratégias de worker único (por exemplo, MirroredStrategy, OneDeviceStrategy).
Para usar uma estratégia de distribuição, crie um tf.distribute.Strategy apropriado e mova a criação e compilação do modelo Keras dentro de um escopo de estratégia.
Por exemplo, substitua model = _build_keras_model()
acima por:
Para verificar o dispositivo (CPU/GPU) usado por MirroredStrategy
, habilite o log do TensorFlow para o nível info:
e você deverá ver Using MirroredStrategy with devices (...)
no log.
Observação: A variável de ambiente TF_FORCE_GPU_ALLOW_GROWTH=true
pode ser necessária para um problema de falta de memória da GPU. Para mais detalhes, veja o Guia da GPU Tensorflow.
Evaluator
No TFMA v0.2x, ModelValidator e Evaluator foram combinados num único novo componente Evaluator. O novo componente Evaluator pode tanto realizar a avaliação de modelo único, como também validar o modelo atual em comparação com modelos anteriores. Com essa alteração, o componente Pusher agora consome um resultado de blessing do Evaluator em vez do ModelValidator.
O novo Evaluator oferece suporte a modelos Keras e também a modelos Estimator. O _eval_input_receiver_fn
e o modelo salvo eval que eram exigidos anteriormente não serão mais necessários com Keras, pois o Evaluator agora é baseado no mesmo SavedModel
usado ao servir.