Как обслуживать ежедневные предварительно вычисленные прогнозы в aws мудрец? - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь использовать 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')

1 Ответ

1 голос
/ 10 мая 2020

Почему бы не вызвать пакетное преобразование вместо этого и позволить AWS выполнить тяжелую работу.

Вы можете либо планировать выполнение каждый день, либо вместо этого запускать его вручную.

После этого используйте либо API-шлюз с функцией Lambda, либо CloudFront для отображения результатов S3.

...