AWS Sagemaker Multi-Model Endpoint con Scikit Learn: UnexpectedStatusException mientras se usa un script de entrenamiento
Estoy intentando crear un punto de enlace de varios modelos en AWS sagemaker utilizando Scikit-learn y un script de entrenamiento personalizado. Cuando intento entrenar mi modelo usando el siguiente código:
estimator = SKLearn(
entry_point=TRAINING_FILE, # script to use for training job
role=role,
source_dir=SOURCE_DIR, # Location of scripts
train_instance_count=1,
train_instance_type=TRAIN_INSTANCE_TYPE,
framework_version='0.23-1',
output_path=s3_output_path,# Where to store model artifacts
base_job_name=_job,
code_location=code_location,# This is where the .tar.gz of the source_dir will be stored
hyperparameters = {'max-samples' : 100,
'model_name' : key})
DISTRIBUTION_MODE = 'FullyReplicated'
train_input = sagemaker.s3_input(s3_data=inputs+'/train',
distribution=DISTRIBUTION_MODE, content_type='csv')
estimator.fit({'train': train_input}, wait=True)
donde 'TRAINING_FILE' contiene:
import argparse
import os
import numpy as np
import pandas as pd
import joblib
import sys
from sklearn.ensemble import IsolationForest
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--max_samples', type=int, default=100)
parser.add_argument('--model_dir', type=str, default=os.environ.get('SM_MODEL_DIR'))
parser.add_argument('--train', type=str, default=os.environ.get('SM_CHANNEL_TRAIN'))
parser.add_argument('--model_name', type=str)
args, _ = parser.parse_known_args()
print('reading data. . .')
print('model_name: '+args.model_name)
train_file = os.path.join(args.train, args.model_name + '_train.csv')
train_df = pd.read_csv(train_file) # read in the training data
train_tgt = train_df.iloc[:, 1] # target column is the second column
clf = IsolationForest(max_samples = args.max_samples)
clf = clf.fit([train_tgt])
path = os.path.join(args.model_dir, 'model.joblib')
joblib.dump(clf, path)
print('model persisted at ' + path)
El guión de entrenamiento tiene éxito pero sagemaker arroja un UnexpectedStatusException:
¿Alguien ha experimentado algo como esto antes? Revisé todos los registros de Cloudwatch y no encontré nada útil, y estoy completamente perplejo sobre qué probar a continuación.
Respuestas
Para cualquiera que se encuentre con este problema en el futuro, el problema ha sido resuelto.
El problema no tenía nada que ver con el entrenamiento, sino con el envío de caracteres no válidos en los nombres de directorio a S3. Entonces, el script produciría los artefactos correctamente, pero sagemaker lanzaría una excepción al intentar guardarlos en S3