Junte-se à comunidade SIG TFX-Addons e ajude a tornar o TFX ainda melhor!

Tutorial TFX Airflow

Pitão PyPI

Introdução

Este tutorial foi desenvolvido para apresentar o TensorFlow Extended (TFX) e ajudá-lo a aprender a criar seus próprios pipelines de aprendizado de máquina. Ele é executado localmente e mostra integração com TFX e TensorBoard, bem como interação com TFX em notebooks Jupyter.

Você seguirá um processo típico de desenvolvimento de ML, começando pelo exame do conjunto de dados e terminando com um pipeline de trabalho completo. Ao longo do caminho, você explorará maneiras de depurar e atualizar seu pipeline e medir o desempenho.

Saber mais

Consulte o Guia do usuário TFX para saber mais.

Passo a passo

Você criará gradualmente seu pipeline trabalhando passo a passo, seguindo um processo típico de desenvolvimento de ML. Aqui estão as etapas:

  1. Configure seu ambiente
  2. Traga o esqueleto do pipeline inicial
  3. Mergulhe em seus dados
  4. Engenharia de recursos
  5. Treinamento
  6. Analisando o desempenho do modelo
  7. Pronto para produção

Pré-requisitos

  • Linux / MacOS
  • Virtualenv
  • Python 3.5+
  • Git

Pacotes necessários

Dependendo do seu ambiente, pode ser necessário instalar vários pacotes:

sudo apt-get install \
    build-essential libssl-dev libffi-dev \
    libxml2-dev libxslt1-dev zlib1g-dev \
    python3-pip git software-properties-common

Se você estiver executando o Python 3.6, deverá instalar o python3.6-dev:

sudo apt-get install python3.6-dev

Se você estiver executando o Python 3.7, deverá instalar o python3.7-dev:

sudo apt-get install python3.7-dev

Além disso, se o seu sistema tiver uma versão do GCC <7, você deve atualizar o GCC. Caso contrário, você verá erros ao executar o airflow webserver . Você pode verificar sua versão atual com:

gcc --version

Se você precisar atualizar o GCC, pode executar:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-7
sudo apt install g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7

Ambiente MacOS

Se você não tem Python 3 e git já instalados, você pode instalá-los usando o gerenciador de pacotes Homebrew :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew update
brew install python
brew install git

Às vezes, o MacOS tem problemas de bifurcação de threads ao executar o Airflow, dependendo da configuração. Para evitar esses problemas, você deve editar seu ~/.bash_profile e adicionar a seguinte linha ao final do arquivo:

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

Materiais tutoriais

O código para este tutorial está disponível em: https://github.com/tensorflow/tfx/tree/master/tfx/examples/airflow_workshop

O código é organizado pelas etapas nas quais você está trabalhando, portanto, para cada etapa, você terá o código de que precisa e instruções sobre o que fazer com ele.

Os arquivos do tutorial incluem um exercício e a solução para o exercício, caso você fique preso.

Exercício

  • taxi_pipeline.py
  • taxi_utils.py
  • táxi DAG

Solução

  • taxi_pipeline_solution.py
  • taxi_utils_solution.py
  • solução_táxi DAG

O que você está fazendo

Você está aprendendo a criar um pipeline de ML usando TFX

  • Os pipelines TFX são apropriados quando você implementa um aplicativo ML de produção
  • Os pipelines TFX são apropriados quando os conjuntos de dados são grandes
  • Os pipelines TFX são apropriados quando a consistência do treinamento / serviço é importante
  • Os pipelines TFX são apropriados quando o gerenciamento de versão para inferência é importante
  • O Google usa pipelines TFX para ML de produção

Você está seguindo um processo típico de desenvolvimento de ML

  • Ingestão, compreensão e limpeza de nossos dados
  • Engenharia de recursos
  • Treinamento
  • Analise o desempenho do modelo
  • Ensaboe, enxágue, repita
  • Pronto para produção

Adicionando o código para cada etapa

O tutorial é projetado para que todo o código seja incluído nos arquivos, mas todo o código das etapas 3 a 7 seja comentado e marcado com comentários embutidos. Os comentários embutidos identificam a qual etapa a linha de código se aplica. Por exemplo, o código da etapa 3 está marcado com o comentário # Step 3 .

O código que você adicionará para cada etapa normalmente se enquadra em 3 regiões do código:

  • importações
  • A configuração DAG
  • A lista retornada da chamada create_pipeline ()
  • O código de suporte em taxi_utils.py

À medida que avança no tutorial, você remove o comentário das linhas de código que se aplicam à etapa do tutorial em que está trabalhando no momento. Isso adicionará o código para essa etapa e atualizará seu pipeline. Ao fazer isso , recomendamos enfaticamente que você analise o código que está descomentando .

Conjunto de dados de táxi de Chicago

TáxiChicago taxi

Você está usando o conjunto de dados Taxi Trips divulgado pela cidade de Chicago.

Você pode ler mais sobre o conjunto de dados no Google BigQuery . Explore o conjunto de dados completo na IU do BigQuery .

Objetivo do modelo - classificação binária

O cliente dará uma gorjeta superior ou inferior a 20%?

Etapa 1: configure seu ambiente

O script de configuração ( setup_demo.sh ) instala o TFX e o Airflow e configura o Airflow de uma maneira que facilita o trabalho neste tutorial.

Em uma concha:

cd
virtualenv -p python3 tfx-env
source ~/tfx-env/bin/activate

git clone https://github.com/tensorflow/tfx.git
cd ~/tfx
# These instructions are specific to the 0.21 release
git checkout -f origin/r0.21
cd ~/tfx/tfx/examples/airflow_workshop/setup
./setup_demo.sh

Você deve revisar o setup_demo.sh para ver o que ele está fazendo.

Etapa 2: trazer o esqueleto do pipeline inicial

Olá Mundo

Em uma concha:

# Open a new terminal window, and in that window ...
source ~/tfx-env/bin/activate
airflow webserver -p 8080

# Open another new terminal window, and in that window ...
source ~/tfx-env/bin/activate
airflow scheduler

# Open yet another new terminal window, and in that window ...
# Assuming that you've cloned the TFX repo into ~/tfx
source ~/tfx-env/bin/activate
cd ~/tfx/tfx/examples/airflow_workshop/notebooks
jupyter notebook

Você iniciou o bloco de notas Jupyter nesta etapa. Posteriormente, você executará os blocos de notas desta pasta.

Em um navegador:

  • Abra um navegador e vá para http://127.0.0.1:8080

Solução de problemas

Se você tiver problemas para carregar o console do Airflow em seu navegador da web, ou se houver algum erro ao executar o airflow webserver , você pode ter outro aplicativo em execução na porta 8080. Essa é a porta padrão para o Airflow, mas você pode alterá-la para qualquer outra porta do usuário que não esteja sendo usada. Por exemplo, para executar o Airflow na porta 7070, você pode executar:

airflow webserver -p 7070

Botões de visualização DAG

Botões DAG

  • Use o botão à esquerda para habilitar o DAG
  • Use o botão à direita para atualizar o DAG ao fazer alterações
  • Use o botão à direita para acionar o DAG
  • Clique no táxi para ir para a visualização do gráfico do DAG

Botão de atualização do gráfico

CLI do Airflow

Você também pode usar a CLI do Airflow para ativar e acionar seus DAGs:

# enable/disable
airflow pause <your DAG name>
airflow unpause <your DAG name>

# trigger
airflow trigger_dag <your DAG name>

Esperando que o pipeline seja concluído

Depois de acionar seu pipeline na visualização dos DAGs, você pode observar como o pipeline conclui o processamento. À medida que cada componente é executado, a cor do contorno do componente no gráfico DAG muda para mostrar seu estado. Quando o processamento de um componente termina, o contorno fica verde escuro para mostrar que foi concluído.

Até agora, você só tem o componente CsvExampleGen em nosso pipeline, portanto, é necessário esperar que ele fique verde escuro (cerca de 1 minuto).

Configuração completa

Etapa 3: mergulhe nos seus dados

A primeira tarefa em qualquer projeto de ciência de dados ou ML é entender e limpar os dados.

  • Compreenda os tipos de dados para cada recurso
  • Procure por anomalias e valores ausentes
  • Compreenda as distribuições de cada recurso

Componentes

Componentes de DadosComponentes de Dados

  • ExampleGen ingere e divide o conjunto de dados de entrada.
  • StatisticsGen calcula estatísticas para o conjunto de dados.
  • SchemaGen SchemaGen examina as estatísticas e cria um esquema de dados.
  • ExampleValidator procura anomalias e valores ausentes no conjunto de dados.

Em um editor:

  • Em ~ / airflow / dags, descomente as linhas marcadas como Step 3 em taxi_pipeline.py
  • Reserve um momento para revisar o código que você descomentou

Em um navegador:

  • Retorne à página da lista de DAGs no Airflow clicando no link "DAGs" no canto superior esquerdo
  • Clique no botão de atualização no lado direito do táxi DAG
    • Você deverá ver "DAG [táxi] agora está fresco como uma margarida"
  • Trigger taxi
  • Aguarde a conclusão do pipeline
    • Tudo verde escuro
    • Use atualizar no lado direito ou atualizar a página

Mergulhe nos dados

De volta ao Jupyter:

Anteriormente, você executou o jupyter notebook , que abriu uma sessão do Jupyter em uma guia do navegador. Agora volte para essa guia em seu navegador.

  • Abra step3.ipynb
  • Siga o caderno

Mergulhe nos dados

Exemplo mais avançado

O exemplo apresentado aqui serve apenas para ajudá-lo a começar. Para um exemplo mais avançado, consulte o TensorFlow Data Validation Colab .

Para obter mais informações sobre como usar TFDV para explorar e validar um conjunto de dados, consulte os exemplos em tensorflow.org .

Etapa 4: Engenharia de recursos

Você pode aumentar a qualidade preditiva de seus dados e / ou reduzir a dimensionalidade com a engenharia de recursos.

  • Cruzamentos de recursos
  • Vocabulários
  • Embeddings
  • PCA
  • Codificação categórica

Um dos benefícios de usar TFX é que você escreverá seu código de transformação uma vez, e as transformações resultantes serão consistentes entre o treinamento e o serviço.

Componentes

Transformar

  • O Transform executa a engenharia de recursos no conjunto de dados.

Em um editor:

  • Em ~ / airflow / dags, remova o comentário das linhas marcadas como Step 4 em taxi_pipeline.py e taxi_utils.py
  • Reserve um momento para revisar o código que você descomentou

Em um navegador:

  • Retornar à página da lista de DAGs no Airflow
  • Clique no botão de atualização no lado direito do táxi DAG
    • Você deverá ver "DAG [táxi] agora está fresco como uma margarida"
  • Trigger taxi
  • Aguarde a conclusão do pipeline
    • Tudo verde escuro
    • Use atualizar no lado direito ou atualizar a página

Engenharia de Recursos

De volta ao Jupyter:

Volte para a guia Jupyter em seu navegador.

  • Abra step4.ipynb
  • Siga o caderno

Exemplo mais avançado

O exemplo apresentado aqui serve apenas para ajudá-lo a começar. Para um exemplo mais avançado, consulte o TensorFlow Transform Colab .

Etapa 5: treinamento

Treine um modelo TensorFlow com seus dados bonitos, limpos e transformados.

  • Inclua as transformações da etapa 4 para que sejam aplicadas de forma consistente
  • Salve os resultados como um SavedModel para produção
  • Visualize e explore o processo de treinamento usando o TensorBoard
  • Também salve um EvalSavedModel para análise de desempenho do modelo

Componentes

Em um editor:

  • Em ~ / airflow / dags, remova o comentário das linhas marcadas como Step 5 em taxi_pipeline.py e taxi_utils.py
  • Reserve um momento para revisar o código que você descomentou

Em um navegador:

  • Retornar à página da lista de DAGs no Airflow
  • Clique no botão Atualizar no lado direito do táxi DAG
    • Você deverá ver "DAG [táxi] agora está fresco como uma margarida"
  • Trigger taxi
  • Aguarde a conclusão do pipeline
    • Tudo verde escuro
    • Use a atualização no lado direito ou atualize a página

Treinando um modelo

De volta ao Jupyter:

Volte para a guia Jupyter em seu navegador.

  • Abra step5.ipynb
  • Siga o caderno

Treinando um modelo

Exemplo mais avançado

O exemplo apresentado aqui serve apenas para ajudá-lo a começar. Para um exemplo mais avançado, consulte o Tutorial do TensorBoard .

Etapa 6: Analisando o desempenho do modelo

Compreender mais do que apenas as métricas de nível superior.

  • Os usuários experimentam o desempenho do modelo apenas para suas consultas
  • O baixo desempenho em fatias de dados pode ser oculto por métricas de nível superior
  • A justiça do modelo é importante
  • Freqüentemente, subconjuntos principais de usuários ou dados são muito importantes e podem ser pequenos
    • Desempenho em condições críticas, mas incomuns
    • Desempenho para públicos-chave, como influenciadores
  • Se você estiver substituindo um modelo que está atualmente em produção, primeiro certifique-se de que o novo é melhor
  • O avaliador diz ao componente Pusher se o modelo está OK

Componentes

  • O avaliador realiza uma análise profunda dos resultados do treinamento e garante que o modelo seja "bom o suficiente" para ser colocado em produção.

Em um editor:

  • Em ~ / airflow / dags, descomente as linhas marcadas como Step 6 em taxi_pipeline.py
  • Reserve um momento para revisar o código que você descomentou

Em um navegador:

  • Retornar à página da lista de DAGs no Airflow
  • Clique no botão de atualização no lado direito do táxi DAG
    • Você deverá ver "DAG [táxi] agora está fresco como uma margarida"
  • Trigger taxi
  • Aguarde a conclusão do pipeline
    • Tudo verde escuro
    • Use atualizar no lado direito ou atualizar a página

Analisando o desempenho do modelo

De volta ao Jupyter:

Volte para a guia Jupyter em seu navegador.

  • Abra step6.ipynb
  • Siga o caderno

Analisando o desempenho do modelo

Exemplo mais avançado

O exemplo apresentado aqui serve apenas para ajudá-lo a começar. Para um exemplo mais avançado, consulte o TFMA Chicago Taxi Tutorial .

Etapa 7: pronto para produção

Se o novo modelo estiver pronto, faça-o assim.

  • Pusher implanta SavedModels em locais bem conhecidos

Alvos de implantação recebem novos modelos de locais bem conhecidos

  • TensorFlow Serving
  • TensorFlow Lite
  • TensorFlow JS
  • TensorFlow Hub

Componentes

  • Pusher implanta o modelo em uma infraestrutura de serviço.

Em um editor:

  • Em ~ / airflow / dags, descomente as linhas marcadas como Step 7 em taxi_pipeline.py
  • Reserve um momento para revisar o código que você descomentou

Em um navegador:

  • Retornar à página da lista de DAGs no Airflow
  • Clique no botão de atualização no lado direito do táxi DAG
    • Você deverá ver "DAG [táxi] agora está fresco como uma margarida"
  • Trigger taxi
  • Aguarde a conclusão do pipeline
    • Tudo verde escuro
    • Use atualizar no lado direito ou atualizar a página

Pronto para produção

Próximos passos

Agora você treinou e validou seu modelo e exportou um arquivo SavedModel diretório ~/airflow/saved_models/taxi . Seu modelo agora está pronto para produção. Agora você pode implantar seu modelo em qualquer um dos destinos de implantação do TensorFlow, incluindo:

  • TensorFlow Serving , para disponibilizar seu modelo em um servidor ou farm de servidores e processar solicitações de inferência REST e / ou gRPC.
  • TensorFlow Lite , para incluir seu modelo em um aplicativo móvel nativo Android ou iOS, ou em um aplicativo Raspberry Pi, IoT ou microcontrolador.
  • TensorFlow.js , para executar seu modelo em um navegador da Web ou aplicativo Node.JS