Вы специалист по данным, вы понимаете бизнес-проблему, собираете данные, выполняете некоторую разработку функций и придумали потрясающую модель машинного обучения, которая очень хорошо предсказывает данные в вашей локальной среде IDE.
Но что дальше?
Другими словами, как развернуть вашу модель в производственной среде или легко поделиться ею с другими людьми, чтобы они могли запустить и оценить ее на своем локальном компьютере. ПК и запускайте его на невидимых данных без необходимости установки каких-либо библиотек, зависимостей, графического интерфейса (IUPython, Jupyter Notebook ...) или даже для просмотра вашего кода.
Docker является одним из ответов на эту проблему, поэтому в следующих параграфах мы рассмотрим, как разместить вашу модель в Docker и распространить ее среди других людей.
В этом примере мы будем использовать простую модель линейной регрессии.
Начнем с запуска наших библиотек:
import warnings warnings.filterwarnings("ignore", category=FutureWarning) import sys import pandas as pd from sklearn.linear_model import LinearRegression
После этого нам нужно будет импортировать данные:
Данные обучения: данные, на основе которых наша модель будет учиться.
Тестовые данные: будут введен кем-либо, кому нужно оценить вашу модель на невидимых данных.
Очевидно, что тестовые и обучающие данные должны иметь одинаковую форму.
TestData = sys.argv[1] # Read the data that will serve for training and the test data X_full = pd.read_csv("TrainingData.csv", index_col='x001') # Read the data that will serve for testing X_test = pd.read_csv(TestData, index_col='x001')
Мы отделим целевые данные от всех данных:
#separate target from predictors in both training and test data y = X_full.y y_test=X_test.y X_full.drop(['y'], axis=1, inplace=True) X_test.drop(['y'], axis=1, inplace=True)
Затем применим нашу модель:
model=LinearRegression() model.fit(X_full,y) preds = model.predict(X_test)
Затем мы сохраним результаты прогноза в файле outputTest.txt.
# Save test predictions to file output = pd.DataFrame({'Id': X_test.index,'Y Original': y_test, 'Y predicted':preds}) output.to_csv('/data/outputTest.txt', index=False)
Теперь, когда у нас запущена наша базовая модель, мы попытаемся разместить ее в докере.
Для этого нам нужно сначала создать необходимые файлы для создания образа докера, которые являются Dockerfile и require.txt
#DockerFile:
FROM python:3 COPY Your_python_code.py ./ COPY requirements.txt ./ COPY TrainingData.csv ./ RUN pip install -r requirements.txt CMD ["python", "wallet.py", "/data/testData.csv"]
# requirements.txt (Нет необходимости загружать математическую библиотеку, поскольку она будет автоматически добавлена вместе с python3).
pandas sklearn
Затем мы помещаем TrainingData.csv, Your_python_code.py DockerFile и requirements.txt в одну и ту же папку, открываем Терминал, переходим в эту папку и запускаем следующее:
docker build -t <your_docker_image_name> . # dont forget the . at the end.
Затем мы отправляем образ в нашу учетную запись в DockerHub (мы предполагаем, что у вас есть учетная запись в Docker Hub, если нет, вы можете создать ее бесплатно, а затем запустить приложение Docker на своем ПК / MAC):
docker push <your_docker_image_name>
Теперь ваша модель находится в Docker-хабе, и вы можете поделиться ею со своими друзьями.
Просто попросите их сделать следующее:
1- Получите образ из Docker Hub:
docker pull <your_docker_image_name>
2- Запускаем контейнер:
docker run -v <path>:/data/ <your_docker_image_name>
Где ‹путь› - это локальный путь к вашим обучающим данным testData.csv.
В этом примере ваш файл должен называться testData.csv ( обязательно) в соответствии с требованиями .txt
Пример:
если ваш testData.csv находится в / var / files /, вам следует запустить:
docker run -v /var/files/:/data/ <your_docker_image_name>
Выходные данные:
Будет создан выходной текстовый файл outputTest.txt, содержащий 3 столбца:
ID, реальное значение Y и прогнозируемое значение Y.
Вывод будет сохранен в каталоге ‹path›, в примере
выше, вывод будет сохранен в / var / files / и будет называться
outputTest.txt.
Пожалуйста, найдите полный код в этом GIST.
Как всегда, надеюсь, вы узнали что-то новое :)
Салам.