Развертывание моделей ML с Flask и Gunicorn - PullRequest
0 голосов
/ 08 мая 2020

Я впервые развертываю модель машинного обучения. Я использую flask -restful для создания rest api и gunicorn в качестве автономного WSGI. В моем каталоге проекта всего 2 файла, ML_model.py и rApi.py. Я установил gunicorn и запустил сервер, используя gunicorn -w 4 -b 127.0.0.1:5000 rApi:app, и я могу использовать restAPi. Я вижу много вещей, таких как файлы .env, .config и wsgi.py, упомянутые в учебных пособиях, доступных в Интернете. что мне не хватает. зачем мне все эти файлы, если я уже могу использовать API?

1 Ответ

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

Я вижу много вещей, таких как файлы .env, .config и wsgi.py, упомянутые

Скорее всего, это просто разные способы загрузки конфигураций в приложение.

Например, с файлом .env вы можете объявить некоторые переменные в форме:

#.env
MODEL_FILE=some/path/to/a.h5

Затем загрузить это с чем-то вроде python -dotenv , что в конечном итоге позволит вы должны сделать следующее в своем приложении:

model_to_use = os.getenv('MODEL_FILE', 'default.h5')
then_do_someting_with(model_to_use)

Это удерживает жестко закодированные (возможно, секретные переменные) из вашего кода, избегая их передачи в систему управления версиями. Поэтому, когда вы развертываете приложение на другом сервере или системе, вы можете создать новый файл .env, который вместо этого содержит:

MODEL_FILE=some/production_ready/file.h5

Теперь ту же копию кода можно развернуть с другими функциями.


Выделенный config.py может использоваться, если вы хотите сохранить всю вышеупомянутую загрузку конфигурации вместе, тогда в вашем app.py просто сделайте что-то вроде:

from config import MODEL_FILE
# ...
do_something_with(MODEL_FILE)

* 1028 Иногда можно увидеть выделенные файлы wsgi.py, чтобы сервер WSGI мог загрузить модуль wsgi:app. Этот файл может содержать конфигурацию, которая указана c для развертывания WSGI (например, применение ProxyFix промежуточного программного обеспечения к приложению).

Конечно, это всего лишь один из способов применения этой конфигурации к приложению. Вы также можете передать PROXYFIX_ON env var в коде, а затем ввести лог c в код, чтобы активировать фактическую функциональность в зависимости от ее наличия.

Последнее означает, что функциональность отключена или включена изменение этого env var. Первое означает, что функциональность отключена или включена в зависимости от модуля, используемого для запуска сервера.


Это действительно зависит от вас, как вы создадите эту часть приложения. Однако загрузка конфигурации из переменных среды довольно распространена. Конечно, неплохо иметь представление о том, как выбранный вами метод развертывания решает эту проблему. Например:

...