Modo local offline do SageMaker — treinamento com LightGBM¶
Treina contra um endpoint S3/STS suportado pelo moto através da biblioteca sagemaker-local (sem AWS). O trabalho é executado em um contêiner Docker local.
Conjunto de dados: california_housing (regressão), carregado dentro do contêiner de scikit-learn. A imagem construída sagemaker-local:latest já inclui LightGBM 4.6.0.
import os
from dataclasses import replace
from sagemaker.deserializers import JSONDeserializer
from sagemaker.estimator import Estimator
from sagemaker.serializers import JSONSerializer
from sagemaker_local.config import config_from_env
from sagemaker_local.session import make_local_session
cfg = replace(
config_from_env(),
bucket="sagemaker-lightgbm",
image_tag="sagemaker-lightgbm:train",
)
boto_session, sm_session = make_local_session(cfg)
Treinamento¶
est.fit() corre sincronicamente em um recipiente local; train.py carrega california_housing e escreve model.joblib para /opt/ml/model.
O Estimator genérico (traga seu próprio recipiente) aponta para a imagem local através do image_uri, de modo que nenhuma imagem da AWS é puxada.
est = Estimator(
entry_point="train.py",
source_dir=os.path.join(
os.environ.get("SAGEMAKER_LOCAL_REPO_PATH", "/workspace"),
"projects",
"sagemaker_lightgbm",
"src",
"sagemaker_lightgbm",
),
image_uri=cfg.image_tag,
role=cfg.role_arn,
instance_type="local",
instance_count=1,
sagemaker_session=sm_session,
output_path=f"s3://{cfg.bucket}/models",
hyperparameters={"dataset": "california_housing"},
)
est.fit()
Implantar e prever¶
As entradas são matrizes JSON 2-D, de modo que o manipulador de entrada de serviço padrão as analisa corretamente.
predictor = est.deploy(
initial_instance_count=1,
instance_type="local",
serializer=JSONSerializer(),
deserializer=JSONDeserializer(),
)
result = predictor.predict([[8.3, 41.0, 6, 1, 1, 1, 38.0, -121.0]])
print("predicted median house value:", result)
Limpeza¶
Exclua o endpoint para que o contêiner de serviço seja liberado e a porta 8080 seja liberada.
predictor.delete_endpoint()