Лёгкий REST API для обучения и инференса scikit-learn моделей, написанный на FastAPI и разворачиваемый через Docker.
- Обучать ML модели (Logistic Regression, Random Forest, SVM) через HTTP запросы
- Сохранять обученные модели на диск в формате
.joblib - Загружать модели в память и делать предсказания
- Обучение запускается в отдельном пуле процессов — сервер остаётся отзывчивым
- Настраиваемые лимиты: сколько ядер отдать под обучение, сколько моделей держать в памяти
- FastAPI — REST API
- scikit-learn — ML модели
- joblib — сериализация моделей
- Docker / Docker Compose — деплой
docker compose up --buildСервер будет доступен по адресу http://localhost:8000.
POST /fit{
"X": [[1.0, 2.0], [3.0, 4.0]],
"y": [0, 1],
"config": {
"model_name": "my_model",
"model_type": "random_forest",
"parameters": {"n_estimators": 100}
}
}Допустимые значения model_type: logistic_regression, random_forest, svm.
POST /load{
"config": { "model_name": "my_model" }
}POST /predict{
"X": [[1.0, 2.0]],
"config": { "model_name": "my_model" }
}POST /unload{
"config": { "model_name": "my_model" }
}POST /remove{
"config": { "model_name": "my_model" }
}POST /remove_allGET /healthВозвращает список загруженных моделей и количество свободных слотов для обучения.
Настраивается через .env перед запуском:
| Переменная | По умолчанию | Описание |
|---|---|---|
MODEL_DIR |
/app/models |
Куда сохранять .joblib файлы |
TRAINING_CORES |
4 |
Всего ядер CPU (1 ядро резервируется под сервер) |
MAX_LOADED_MODELS |
10 |
Максимум моделей одновременно в памяти |
ml_project/
├── app/
│ ├── main.py # FastAPI приложение и все эндпоинты
│ ├── model_manager.py # Хранилище моделей в памяти (load/unload)
│ └── training.py # Обучение моделей (запускается в подпроцессе)
├── backend.ipynb # Примеры работы с API
├── frontend.ipynb # Клиентское демо
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env