Как использовать require.txt или аналогичный для объекта pickle - PullRequest
5 голосов
/ 15 мая 2019

Задача

Как я могу выгрузить объект pickle с его собственными зависимостями?

Объект рассола, как правило, генерируется из ноутбука.

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

Фон

Чего я пытаюсь достичь

Я пытаюсь создать поток MLOps. Краткое объяснение: MLOps - это модное слово, которое является синонимом DevOps для машинного обучения . Существуют различные решения для PaaS / SaaS, предлагаемые разными компаниями, и они обычно решают следующие проблемы:

  • Автоматизация создания веб-API из моделей
  • Требования к обработке / зависимости
  • Хранение и запуск сценариев, используемых для генерации моделей, двоичных файлов моделей и наборов данных.

Я пропущу часть памяти и сосредоточусь на первых двух.

Как я пытаюсь достичь

В моем случае я пытаюсь настроить это, используя старый добрый TeamCity, где модели представляют собой объект pickle, сгенерированный sk-learn. Требования:

  • Зависимости должны быть явно определены
  • Должны поддерживаться другие объекты pickle (вместо sk-learn).
  • Рабочий процесс для данных ученых будет выглядеть так:
    • Специалисты по обработке данных загружают модель маринада с requirements.txt.
    • Специалисты по обработке данных фиксируют файл определения, который выглядит следующим образом:
     apiPort: 8080
     apiName: name-tagger
     predicterVersion: 1.0
    
    • где предиктор - это приложение FLASK с собственным requirements.txt. Это API-оболочка / слой модели pickle, которая загружает модель в память и предоставляет прогнозы из конечной точки покоя.

Затем конфигурация сборки в team city анализирует файл и выполняет следующее:

  1. Разобрать файл определения.
  2. Найдите код предсказателя
  3. Скопируйте модель выбора как модель.pickle в корневую папку приложений предиктора
  4. Слияние requirements.txt предсказателя с requirements.txt модели рассола
  5. Создайте virtualenv, установите зависимости, вставьте его как колесо

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

1 Ответ

2 голосов
/ 09 июля 2019

Для таких сложных этапов сборки я использую Makefile для локальной системы, а в облачных MLOps - что-то вроде AWS CodeBuild с sagemaker .

Примером может служить следующий пример для упаковки зависимостей, а для выполнения приведенных ниже шагов сборки потребуется три файла, в котором main.py содержится функция драйвера вашего кода, Pipfile содержит зависимости для вашего virtualenv и модели:

  1. main.py
def main():
      do_something()

if __name__ == "__main__":
      main()

  1. Pipfile
[[source]]
url = 'https://pypi.python.org/simple'
verify_ssl = true
name = 'pypi'

[requires]
python_version = '2.7'

[common-packages]
scipy >= "0.17.0"
pandas 

[model1-packages]
numpy >= "1.11.0"

[model2-packages]
numpy == "1.0.0"
  1. Makefile
.DEFAULT_GOAL := run

init:
    pipenv --three install
    pipenv shell

analyze:
    flake8 ./src

run_tests:
    pytest --cov=src test/jobs/

run:

    # cleanup
    find . -name '__pycache__' | xargs rm -rf

    # run the job
    python main.py 

После того, как вы настроите эти 3 файла для своего варианта использования, процесс можно будет выполнить с помощью следующей команды:

make run
...