Я пытаюсь использовать Sagemaker для обслуживания предварительно вычисленных прогнозов. Прогнозы представлены в следующем формате в словаре python.
customer_group prediction
1 50
2 60
3 25
4 30
...
В настоящее время docker код API обслуживания переходит на s3 и ежедневно загружает данные.
Проблема в том, что загрузка данных блокирует API от ответа на вызовы конечной точки Sagemaker health .
Это пример , как zappos сделал это с помощью Amazon DynamoDB. Однако есть ли способ сделать это в Sagemaker?
Где и как добавить функцию загрузки s3, чтобы не прерывать проверку работоспособности?
Может ли это работать? -> https://github.com/seomoz/s3po https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-email-support
app = flask.Flask(__name__)
@app.route('/ping', methods=['GET'])
def ping():
"""Determine if the container is working and healthy. In this sample container, we declare
it healthy if we can load the model successfully."""
health = ScoringService.get_model() is not None # You can insert a health check here
status = 200 if health else 404
return flask.Response(response='\n', status=status, mimetype='application/json')
@app.route('/invocations', methods=['POST'])
def transformation():
"""Do an inference on a single batch of data. In this sample server, we take data as CSV, convert
it to a pandas data frame for internal use and then convert the predictions back to CSV (which really
just means one prediction per line, since there's a single column.
"""
data = None
# Convert from CSV to pandas
if flask.request.content_type == 'text/csv':
data = flask.request.data.decode('utf-8')
s = StringIO.StringIO(data)
data = pd.read_csv(s, header=None)
else:
return flask.Response(response='This predictor only supports CSV data', status=415, mimetype='text/plain')
print('Invoked with {} records'.format(data.shape[0]))
# Do the prediction
predictions = ScoringService.predict(data)
# Convert from numpy back to CSV
out = StringIO.StringIO()
pd.DataFrame({'results':predictions}).to_csv(out, header=False, index=False)
result = out.getvalue()
return flask.Response(response=result, status=200, mimetype='text/csv')