AWS Sagemaker Multi-Model-Endpunkt mit Scikit Learn: UnexpectedStatusException bei Verwendung eines Trainingsskripts
Ich versuche, mit Scikit-learn und einem benutzerdefinierten Trainingsskript einen Endpunkt mit mehreren Modellen in AWS sagemaker zu erstellen. Wenn ich versuche, mein Modell mit dem folgenden Code zu trainieren:
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)
Dabei enthält 'TRAINING_FILE':
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)
Das Trainingsskript ist erfolgreich, aber der Sagemaker wirft ein UnexpectedStatusException:
Hat jemand so etwas schon einmal erlebt? Ich habe alle Cloudwatch-Protokolle überprüft und nichts Nützliches gefunden. Ich bin völlig ratlos, was ich als nächstes versuchen soll.
Antworten
Für alle, die in Zukunft auf dieses Problem stoßen, ist das Problem gelöst.
Das Problem hatte nichts mit dem Training zu tun, sondern mit ungültigen Zeichen in Verzeichnisnamen, die an S3 gesendet wurden. Das Skript würde also die Artefakte korrekt erzeugen, aber der Sagemaker würde eine Ausnahme auslösen, wenn er versucht, sie in S3 zu speichern