Предварительная обработка данных для Sagemaker Inference Pipeline с Blazingtext - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь найти лучший способ предварительной обработки моих входных данных для моей конечной точки вывода для AWS Sagemaker. Я использую алгоритм BlazingText.

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

В настоящее время я тренирую свою модель, используя ноутбук Jupyter в Sagemaker. и это прекрасно работает, но проблема в том, что я использую NLTK для очистки моих данных (Swedi sh stopwords and stemming et c):

import nltk
nltk.download('punkt')
nltk.download('stopwords')

Итак, вопрос в том, как мне получить та же логика предварительной обработки c до конечной точки вывода?

У меня есть пара мыслей о том, как действовать:

  • Построить контейнер docker с python библиотеки и данные, установленные с единственной целью предварительной обработки данных. Затем используйте этот контейнер в конвейере вывода.

  • Поставьте библиотеки Python и Script в существующий контейнер так же, как вы делаете это для внешней библиотеки ноутбука

  • Создание Пользовательский контейнер fastText с нужными мне библиотеками и запускающий его вне Sagemaker.

  • Вероятно, будет работать, но выглядит как "взлом": создайте функцию Lambda, которая имеет Python libs & data установлен и вызывает конечную точку Sagemaker. Я беспокоюсь о задержках холодного запуска, так как прогнозируемый объем трафика c будет низким.

Я бы хотел go с первым вариантом, но я немного пытаюсь понять, есть ли изображение docker, из которого я мог бы построить, и добавить свой зависимости, или если мне нужно что-то построить с нуля. Например, будет ли имидж sagemaker-sparkml-Обслуживание: 2.2 хорошим кандидатом?

Но, может быть, есть лучший путь?

1 Ответ

1 голос
/ 09 апреля 2020

Niclas

Я бы посоветовал вам попробовать BentoML .

BentoML - это платформа с открытым исходным кодом для обслуживания высокопроизводительных моделей. Она превращает модель ML в конечную точку производственного API с помощью всего лишь нескольких строк кода.

Для вашего случая использования:

В вашей записной книжке на Sagemaker после обучения модели вы можете определить служба прогнозирования spe c с BentoML. Этот код создает BentoService, который ожидает PickleArtifact, предоставляет конечную точку API с именем предиката и автоматически включает зависимости pip

%%write my_service.py

from bentoml import api, BentoService, artifacts, env
from bentoml.artifacts import PickleArtifact
from bentoml.handlers import DataFrameHandler

@env(auto_pip_dependencies=True)
@artifacts([PickleArtifact('my_model')]
class MyTextClassifier(BentoService):
    def preprocess(self, raw_data):
        ...
        return processed_data;

    @api(DataframeHandler)
    def predict(self, df):
        processed_data = self.preprocess(df)
        return self.artifacts.my_model.predict(processed_data)

В следующей ячейке загрузите класс, определенный из предыдущей ячейки, и сохраните модель.

from my_service import MyTextClassification

service = MyTextClassification()
service.pack('my_model', trained_model)
service.save()
# could also saved the model to S3 bucket
# service.save('s3://my_bucket')

Вы можете легко развернуть Sagemaker в блокноте.

!bentoml sagemaker deploy my-deployment -b {service.name}:{service.version} --api-name predict

Вот пример этого. В этом примере он использует Keras для построения модели классификации текста, а затем развертывает модель в Sagemaker для обслуживания модели.

https://github.com/bentoml/gallery/blob/master/keras/text-classification/keras-text-classification.ipynb

Отказ от ответственности: я один из авторов BentoML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...