AWS Sagemaker Multi-Model Endpoint avec Scikit Learn: UnexpectedStatusException lors de l'utilisation d'un script d'entraînement
J'essaie de créer un point de terminaison multimodèle dans AWS sagemaker à l'aide de Scikit-learn et d'un script d'entraînement personnalisé. Lorsque j'essaye d'entraîner mon modèle à l'aide du code suivant:
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)
où "TRAINING_FILE" contient:
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)
Le script de formation réussit mais sagemaker lance un UnexpectedStatusException:
Quelqu'un a-t-il déjà vécu quelque chose comme ça avant? J'ai vérifié tous les journaux de cloudwatch et je n'ai rien trouvé d'utile, et je suis complètement perplexe sur ce qu'il faut essayer ensuite.
Réponses
Pour quiconque rencontre ce problème à l'avenir, le problème a été résolu.
Le problème n'avait rien à voir avec la formation, mais avec des caractères non valides dans les noms de répertoire envoyés à S3. Ainsi, le script produirait correctement les artefacts, mais sagemaker lèverait une exception en essayant de les enregistrer dans S3