11.5 Testando tudo junto
Agora que já sabemos como treinar e efetuar o deploy do modelo via Notebook, vamos criar um pipeline para automatizar o processo.
11.5.1 Testando tudo junto: fase 1
O primeiro passo é separar de forma lógica os steps (passos):
Preparação dos dados
Treinamento do modelo
Deploy
Assim como fizemos no capítulo 11.3, vamos usar o Notebook para criar o pipeline que irá preparar os dados, treinar o modelo e efetuar o deploy.
Neste primeiro pipeline, vamos criar algo simples, basicamente com o código que vimos no capítulo 11.4. Essa primeira função é a fase de preparação de dados. Ela baixa os dados do Minio e os prepara para a fase de treinamento:
def get_data():
import pandas as pd
from io import BytesIO
from minio import Minio
import nltk
from nltk.corpus import stopwords
MINIO_HOST="minio-service.kubeflow:9000"
MINIO_ACCESS_KEY="minio"
MINIO_SECRET_KEY="minio123"
MINIO_MODEL_BUCKET="kserve"
MINIO_DATA_PRODUCT_PATH="data/produtos.csv"
MINIO_DATA_PREP_PATH="data/prep.csv"
INCOME_MODEL_PATH="sklearn/income/model"
minioClient = Minio(MINIO_HOST,
access_key=MINIO_ACCESS_KEY,
secret_key=MINIO_SECRET_KEY,
secure=False)
obj = minioClient.get_object(
MINIO_MODEL_BUCKET,
MINIO_DATA_PRODUCT_PATH,
)
nltk.download('stopwords')
products_data = pd.read_csv(obj,delimiter=';', encoding='utf-8')
products_data.count()
# concatenando as colunas nome e descricao
products_data['informacao'] = products_data['nome'] + products_data['descricao']
# excluindo linhas com valor de informacao ou categoria NaN
products_data.dropna(subset=['informacao', 'categoria'], inplace=True)
products_data.drop(columns=['nome', 'descricao'], inplace=True)
stop_words=set(stopwords.words("portuguese"))
# transforma a string em caixa baixa e remove stopwords
products_data['sem_stopwords'] = products_data['informacao'].str.lower().apply(lambda x: ' '.join([word for word in x.split() if word not in (stop_words)]))
tokenizer = nltk.RegexpTokenizer(r"\w+")
products_data['tokens'] = products_data['sem_stopwords'].apply(tokenizer.tokenize) # aplica o regex tokenizer
products_data.drop(columns=['sem_stopwords','informacao'],inplace=True) # Exclui as colunas antigas
products_data["strings"]= products_data["tokens"].str.join(" ") # reunindo cada elemento da lista
products_data.head()
csv = products_data.to_csv(sep=';').encode('utf-8')
minioClient.put_object(
MINIO_MODEL_BUCKET,
MINIO_DATA_PREP_PATH,
data=BytesIO(csv),
length=len(csv),
content_type='application/csv'
)Depois, vamos criar uma função para o treinamento do modelo:
E, por fim, efetuar o deploy do modelo:
Agora, precisamos transformar as funções em componentes para usarmos dentro do pipeline do Kubeflow:
Veja que cada componente tem as próprias dependências de pacotes. O pipeline orquestra a chamada dos contêineres de forma sequencial. Execute o seguinte comando para criar o pipeline e acompanhe na WebUI o resultado:
Testando tudo junto: fase 2
Agora que já vimos como o pipeline pode ajudar no processo de deploy de Machine Learning, vamos utilizar alguns componentes do Kubeflow Pipeline para facilitar o processo.
Vamos substituir a etapa de deploy do modelo pelo componente KServe.
Execute o seguinte comando para criar o pipeline e acompanhe na WebUI o resultado:
Veja e explore a documentação do componente KServe. Existem parâmetros para controlar a ação de deploy e opções de rollout de deploy.
Explore outros componentes do Kubeflow Pipeline, como o Metrics.
Last updated