Prática DevOps com Docker para Machine Learning
  • Prática de DevOps com Docker para Machine Learning
  • Autores e Agradecimentos
  • Uso do Livro
  • Contribua com o Livro
  • Licença
  • Organização do Livro
  • 1. Introdução
    • 1.1 Máquinas Virtuais e Contêineres
    • 1.2 DevOps e Docker
    • 1.3 Configuração do Ambiente - Python
    • 1.4 Configuração do Ambiente - Docker
    • 1.5 Dockerfile, Imagem e Contêiner Docker
    • 1.6 Docker Hub e Comandos Adicionais
  • 2. Desenvolvimento
    • 2.1 Do notebook para aplicação - parte 1
    • 2.2 Do notebook para aplicação - parte 2
    • 2.3 Do notebook para aplicação - parte 3
  • 3. Produção
    • 3.1 Desenvolvimento vs Produção: o fim ou o início?
    • 3.2 Ambiente de Produção - parte 1
    • 3.3 Ambiente de Produção - parte 2
    • 3.4 Ambiente de Produção - parte 3
  • 4. Monitoramento
    • 4.1 Introdução
    • 4.2 Configurando o Servidor de Monitoramento
    • 4.3 Monitorando Servidores do Ambiente de Produção
    • 4.4 Comandos de Verificação do Nagios
    • 4.5 Criando Verificações Mais Específicas
    • 4.6 Criando Alertas
    • 4.7 Recuperando de Problemas
    • 4.8 Verificação de Contêineres via NRPE
  • 5. Infraestrutura como Código e Orquestração
    • 5.1 Introdução
    • 5.2 Orquestração com Docker Compose
    • 5.3 Orquestração com Kubernetes
  • 6. Integração Contínua
    • 6.1 Introdução
    • 6.2 Controle de Versão
    • 6.3 Configurando um repositório no GitLab
    • 6.4 Branch e merge
    • 6.5 Pipeline de Integração Contínua com GitLab CI/CD
  • 7. Entrega Contínua
    • 7.1 Introdução
    • 7.2 Implantação automática no Docker Hub
    • 7.3 Implantação automática no Heroku
    • 7.4 Implantação automática no Google Kubernetes Engine (GKE)
    • 7.5 Testando tudo junto
  • 8. Model serving
    • 8.1 Introdução
    • 8.2 Model serving com mlserver
    • 8.3 CI/CD com GitLab e mlserver
    • 8.4 Testando tudo junto
  • 9. Model serving batch
    • 9.1 Introdução
    • 9.2 Spark
    • 9.3 Airflow
    • 9.4 Testando tudo junto
  • 10. MLOps com mlflow
    • 10.1 Introdução
    • 10.2 Visão geral do MLflow
    • 10.3 Configuração do MLflow
    • 10.4 Testando MLflow
  • 11. MLOps com Kubeflow
    • 11.1 Visão geral do Kubeflow
    • 11.2 Configuracão
    • 11.3 Kubeflow Pipeline
    • 11.4 Kserve
    • 11.5 Testando tudo junto
  • 12. Conclusão
    • Conclusão
Powered by GitBook
On this page
  • 11.3.1 Configuração do Notebook
  • 11.3.2 Primeiros Pipelines
  1. 11. MLOps com Kubeflow

11.3 Kubeflow Pipeline

Previous11.2 ConfiguracãoNext11.4 Kserve

Last updated 10 months ago

é uma plataforma para workflows de Machine Learning baseado em containers. Os pipelines são desenvolvidos com a linguagem Python e traduzidos em objetos dentro do Kubernetes. Revise os do Pipeline para melhor entendimento.

Vamos fazer um exemplo ponta a ponta agora com o Kubeflow pipelines.

11.3.1 Configuração do Notebook

Antes de iniciar o exemplo precisamos criar uma para que os notebooks do Kubeflow acesses o Kubeflow pipelines:

apiVersion: kubeflow.org/v1alpha1
kind: PodDefault
metadata:
  name: access-ml-pipeline
  namespace: "kubeflow-user-example-com"
spec:
  desc: Allow access to Kubeflow Pipelines
  selector:
    matchLabels:
      access-ml-pipeline: "true"
  volumes:
    - name: volume-kf-pipeline-token
      projected:
        sources:
          - serviceAccountToken:
              path: token
              expirationSeconds: 7200
              audience: pipelines.kubeflow.org      
  volumeMounts:
    - mountPath: /var/run/secrets/kubeflow/pipelines
      name: volume-kf-pipeline-token
      readOnly: true
  env:
    - name: KF_PIPELINES_SA_TOKEN_PATH
      value: /var/run/secrets/kubeflow/pipelines/token

Crie um arquivo yaml como o exemplo e crie os recursos com o kubectl. Agora podemos acessar o notebook do Kubeflow e usar a configuração para acessar o Kubeflow pipeline.

Através da WebUi do Kubeflow vamos criar um Notebook Jupyter e executar o primeiro pipeline.

No notebook Jupyter execute a seguinte linha para criar uma variável para utilizarmos na namespace correta:

namespace="kubeflow-user-example-com"

11.3.2 Primeiros Pipelines

Agora vamos criar o primeiro pipeline:

import kfp
from kfp import dsl

@dsl.component
def echo_op():
    print("Hello world step 1")

@dsl.pipeline(
    name='my-first-pipeline',
    description='A hello world pipeline.'
)
def hello_world_pipeline():
    echo_task = echo_op()

kfp_client=kfp.Client()
run_id = kfp_client.create_run_from_pipeline_func(hello_world_pipeline,namespace=namespace, arguments={}, experiment_name="hello_word")

Agora vamos criar um exemplo de steps sequenciais. Este exemplo ele baixa um arquivo txt do cloud storage e em seguida faz o print do resultado. Para que os steps sejam sequenciais é necessário que a saída de um step seja a entrada do seguinte ou podemos declarar a dependencia com a função *after:

@dsl.container_component
def gcs_download_op(url: str):
    return dsl.ContainerSpec(
        image='google/cloud-sdk:279.0.0',
        command=['sh', '-c'],
        args=['gsutil cat $0 | tee $1', url, '/tmp/results.txt']
    )
@dsl.container_component
def echo_op(text: str):
    return dsl.ContainerSpec(
        image='library/bash:4.4.23',
        command=['sh', '-c'],
        args=['echo "$0"', text]
    )

@dsl.pipeline(
    name='sequential-pipeline',
    description='A pipeline with two sequential steps.'
)
def sequential_pipeline(url : str='gs://ml-pipeline/sample-data/shakespeare/shakespeare1.txt'):
    """A pipeline with two sequential steps."""
  download_task = gcs_download_op(url=url)
  echo_task = echo_op(text='/tmp/results.txt').after(download_task)
  echo_task2 = echo_op(text='/tmp/results.txt').after(echo_task)

kfp_client=kfp.Client()
run_id = kfp_client.create_run_from_pipeline_func(sequential_pipeline,namespace=namespace, arguments={}, experiment_name="sequential_pipeline")

Após a execução deste pipeline veja a execução na WebUI do Kubeflow.

Vamos usar a namespace kubeflow-user-example-com criada na configuração do Kuubeflow e instalar as bibliotecas Python para manipular o pipeline via notebook. Utilize a para criar o notebook Jupyter.

Verifique na WebUi do Kubeflow a execução do pipeline. Repare que utilizamos o componente , que transforma uma função python em um componente do Kubeflow pipeline que é utilizado pelo pipeline hello_world_pipeline.

Existem muitos de pipeline no repositório do Kubeflow. Teste outros exemplos como o .

Kubeflow pipeline
conceitos
configuração
documentação oficial
create_component_from_func
exemplos
Data passing in python components