Skip to content

Instantly share code, notes, and snippets.

@fclesio
Created February 23, 2022 21:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fclesio/cbb8c255b62f11127a00e0a844ab75fc to your computer and use it in GitHub Desktop.
Save fclesio/cbb8c255b62f11127a00e0a844ab75fc to your computer and use it in GitHub Desktop.
# Importação da biblioteca do Boto3 e
# criação de sessão para acesso aos recursos
import boto3
sessao_boto = boto3.Session(region_name='us-east-1')
# Função para pegar a "ROLE" (papel) de execução
# IAM dos recursos no Sage Maker
from sagemaker import get_execution_role
ROLE = get_execution_role()
# Importação do Sage Maker SDK e criação
# da sessão do Sage Maker SDK
import sagemaker
sessao_sagemaker = sagemaker.Session(boto_session=sessao_boto)
BUCKET ='sagemaker-alura-engenharia-machine-learning'
PREFIXO_DADOS = 'dados'
PREFIXO_MODELOS = 'modelos'
REGIAO = sessao_sagemaker.boto_region_name
SEMENTE = 42
import sys
sys.path.append("./")
import os
import io
import json
import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
from time import strftime, gmtime
# Vamos colocar os caminhos em um dicionario
# apenas para manter a simplicidade e a consistencia
# dos caminhos. Em caso de mudança, essa será refletida
# em todos os caminhos.
dict_caminho_dados = {
"treino": "dados/df_bytebank_treino.csv",
"teste": "dados/df_bytebank_teste.csv",
"validacao": "dados/df_bytebank_validacao.csv",
}
# Função para upload dos dados no S3
# para as bases de treinamento,
# teste e validação
bytebank_treino_caminho = \
sessao_sagemaker.upload_data(path=dict_caminho_dados['treino'],
bucket=BUCKET,
key_prefix=f'{PREFIXO_DADOS}/treino'
)
# Upload dos dados de treinamento
bytebank_teste_caminho = \
sessao_sagemaker.upload_data(path=dict_caminho_dados['teste'],
bucket=BUCKET,
key_prefix=f'{PREFIXO_DADOS}/teste'
)
# Upload dos dados de validação
bytebank_validacao_caminho = \
sessao_sagemaker.upload_data(path=dict_caminho_dados['validacao'],
bucket=BUCKET,
key_prefix=f'{PREFIXO_DADOS}/validacao'
)
print(bytebank_treino_caminho)
# Função para criar os canais de
# treinamento que vamos passar para o estimador
s3_input_treino =\
sagemaker.TrainingInput(s3_data=bytebank_treino_caminho,
content_type='csv')
# Canal de teste
s3_input_teste =\
sagemaker.TrainingInput(s3_data=bytebank_teste_caminho,
content_type='csv')
# Canal de validação
s3_input_validacao =\
sagemaker.TrainingInput(s3_data=bytebank_validacao_caminho,
content_type='csv')
# Imagem do XGBoost que vamos usar no container
from sagemaker import image_uris
container = \
image_uris.retrieve(
framework='xgboost',
region=REGIAO,
version='0.90-2'
)
# Criação do estimador
from sagemaker import estimator
estimador_modelo_xgb = \
estimator.Estimator(
image_uri=container,
role=ROLE,
instance_count=1,
instance_type='ml.m4.xlarge',
output_path=f's3://{BUCKET}/{PREFIXO_MODELOS}',
base_job_name='bytebankPythonSDK',
sagemaker_session=sessao_sagemaker)
# Definição dos hiperparametros
estimador_modelo_xgb.set_hyperparameters(
max_depth=5,
eta=0.3,
eval_metric='error',
seed=SEMENTE,
num_round=100,
objective='binary:hinge'
)
# Ajuste do modelo
estimador_modelo_xgb.fit({
'train': s3_input_treino,
'validation': s3_input_validacao
})
# Importação do serializador CSV e a
# definição do objeto de serialização
from sagemaker.serializers import CSVSerializer
serializer = CSVSerializer()
# Deploy do estimador no endpoint
modelo_endpoint = \
estimador_modelo_xgb.deploy(
initial_instance_count=1,
instance_type='ml.t2.medium',
endpoint_name='bytebankSDKEndpoint',
serializer=serializer,
model_name='bytebankPythonSDK-2021-02-15-21-43-56-913'
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment