S3 читать Sagemaker обученную модель
Используя Amazon Sagemaker, я создал модель Xgboost. После распаковки получившегося файла tar.gz я получаю файл "xgboost-model".
Следующим шагом будет загрузка модели непосредственно из моей корзины S3, без загрузки ее с помощью pickle. Вот что я попробовал:
obj = client.get_object(Bucket='...',Key='xgboost-model')
xgb_model = pkl.load(open((obj['Body'].read())),"rb")
Но это выдает мне ошибку:
TypeError: embedded NUL character
Также попробовал это:
xgb_model = pkl.loads(open((obj['Body'].read())),"rb")
результат был тот же.
Другой подход:
bucket='...'
key='xgboost-model'
with s3io.open('s3://{0}/{1}'.format(bucket, key),mode='w') as s3_file:
pkl.dump(mdl, s3_file)
Это дает ошибку:
CertificateError: hostname bucket doesn't match either of '*.s3.amazonaws.com', 's3.amazonaws.com'
Это, хотя ведро то же самое.
Как я могу загрузить модель в объект маринования, чтобы затем использовать ее для прогнозов?
1 ответ
Я предполагаю, что вы обучили модель, используя встроенный алгоритм Sagemaker XGBoost. Вы хотели бы использовать эту модель и делать прогнозы в своей собственной среде хостинга (не хостинг Sagemaker).
pickle.load(file)
читает маринованный объект из открытого файла объекта файла и pickle.loads(bytes_object)
читает выбранный объект из объекта байтов и возвращает десериализованный объект. Поскольку объект S3 уже загружен (в память) в виде байтов, вы можете использовать pickle.loads
без использования open
xgb_model = pkl.loads(obj['Body'].read())
Если вы обучили модель с помощью встроенного алгоритма SageMaker XGBoost в какой-то момент и хотели бы использовать эту модель для прогнозирования в среде Sagemaker на более позднем этапе, вы используете метод "прикрепления" оценщика.
Сразу после установки XGBoost вы можете использовать
model_job_name = xgb_model._current_job_name
для определения названия учебного задания. В качестве альтернативы вы можете перейти в раздел "работа по обучению" на панели инструментов SageMaker и найти название выполняемой вами работы:панель задач по обучению.
Позже, когда вы захотите повторно использовать модель, вы сделаете:
import sagemaker
reloaded_xgb_model = sagemaker.estimator.Estimator.attach(model_job_name)