Я развернул модель линейной регрессии на Sagemaker. Теперь я хочу написать лямбда-функцию для прогнозирования входных данных. Файлы извлекаются из S3 в первую очередь. Некоторая предварительная обработка завершена, и окончательным вводом является pandas
кадр данных. Согласно документации boto3 sagemaker, полезная нагрузка может быть как байтовой, так и файловой. Поэтому я попытался преобразовать фрейм данных в байтовый массив, используя код из этого поста
# Convert pandas dataframe to byte array
pred_np = pred_df.to_records(index=False)
pred_str = pred_np.tostring()
# Start sagemaker prediction
sm_runtime = aws_session.client('runtime.sagemaker')
response = sm_runtime.invoke_endpoint(
EndpointName=SAGEMAKER_ENDPOINT,
Body=pred_str,
ContentType='text/csv',
Accept='Accept')
Я распечатал pred_str
, который мне кажется байтовым массивом.
Однако, когда я запускаю его, я получаю следующее Algorithm Error
, вызванное UnicodeDecodeError
:
Caused by: 'utf8' codec can't decode byte 0xed in position 9: invalid continuation byte
Трассировка показывает python 2.7 не уверен, почему это так:
Traceback (most recent call last):
File "/opt/amazon/lib/python2.7/site-packages/ai_algorithms_sdk/serve.py", line 465, in invocations
data_iter = get_data_iterator(payload, **content_parameters)
File "/opt/amazon/lib/python2.7/site-packages/ai_algorithms_sdk/io/serve_helpers.py", line 99, in iterator_csv_dense_rank_2
payload = payload.decode("utf8")
File "/opt/amazon/python2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
Является ли декодер по умолчанию utf_8
? Какой правильный декодер я должен использовать? Почему он жалуется на позицию 9?
Кроме того, я также попытался сохранить фрейм данных в файл csv и использовать его в качестве полезной нагрузки
pred_df.to_csv('pred.csv', index=False)
with open('pred.csv', 'rb') as f:
payload = f.read()
response = sm_runtime.invoke_endpoint(
EndpointName=SAGEMAKER_ENDPOINT,
Body=payload,
ContentType='text/csv',
Accept='Accept')
Однако при запуске я получил следующее ошибка:
Customer Error: Unable to parse payload. Some rows may have more columns than others and/or non-numeric values may be present in the csv data.
И снова трассировка вызывает python 2.7:
Traceback (most recent call last):
File "/opt/amazon/lib/python2.7/site-packages/ai_algorithms_sdk/serve.py", line 465, in invocations
data_iter = get_data_iterator(payload, **content_parameters)
File "/opt/amazon/lib/python2.7/site-packages/ai_algorithms_sdk/io/serve_helpers.py", line 123, in iterator_csv_dense_rank_2
Это вообще не имеет смысла, потому что это стандартный 6x78 фрейм данных. Все строки имеют одинаковое количество столбцов. Плюс ни один из столбцов не является числовым c. Как исправить эту проблему с мудрецом?