Сравнить коммиты

..

Ничего общего в коммитах. 'cddf0e0b656cd0cd9871b7500ac74edd9b9a0ff4' и '7bb2455d4c45c9661c36bda715106a0b7447b844' имеют совершенно разные истории.

@ -8,15 +8,9 @@
](https://www.kaggle.com/datasets/vijayaadithyanvg/car-price-predictionused-cars/data) — ](https://www.kaggle.com/datasets/vijayaadithyanvg/car-price-predictionused-cars/data) —
продажа подержанных автомобилей на рынке в Индии. продажа подержанных автомобилей на рынке в Индии.
## Сервис предсказания цен ## Установка
См. `services/ml_service.md`. ### Общий порядок
## Исследовательская часть проекта
### Установка
#### Общий порядок
**Внимание**: Здесь описан только общий порядок установки. Определённые части проекта могут требовать установки по отдельным инструкциям. **Внимание**: Здесь описан только общий порядок установки. Определённые части проекта могут требовать установки по отдельным инструкциям.
@ -53,13 +47,13 @@
5. **При необходимости** скачайте данные. Каноническое расположение для данных проекта: `data/`. 5. **При необходимости** скачайте данные. Каноническое расположение для данных проекта: `data/`.
#### Зависимости ### Зависимости
##### Общие зависимости #### Общие зависимости
Зависимости — пакеты Python — записаны в файле `requirements/requirements.txt` (см. **Пакеты Python**). Зависимости — пакеты Python — записаны в файле `requirements/requirements.txt` (см. **Пакеты Python**).
##### Пакеты Python #### Пакеты Python
Установка/обновление пакетов Python в активное окружение из файла `requirements/requirements.txt`: Установка/обновление пакетов Python в активное окружение из файла `requirements/requirements.txt`:
@ -67,10 +61,10 @@
pip install -U -r requirements/requirements.txt pip install -U -r requirements/requirements.txt
``` ```
### Разведочный анализ данных (EDA) ## Разведочный анализ данных (EDA)
См. `eda/README.md`. См. `eda/README.md`.
### Исследование и настройка предсказательной модели ## Исследование и настройка предсказательной модели
См. `research/README.md`. См. `research/README.md`.

@ -6,7 +6,7 @@ $DEFAULT_ARTIFACT_ROOT = "./mlflow/mlartifacts/"
$MLFLOW_PORT = if ($env:MLFLOW_PORT) { $env:MLFLOW_PORT } else { 5000 } $MLFLOW_PORT = if ($env:MLFLOW_PORT) { $env:MLFLOW_PORT } else { 5000 }
New-Item -ItemType Directory -Force -Path $DEFAULT_ARTIFACT_ROOT | Out-Null New-Item -ItemType Directory -Force -Path $DEFAULT_ARTIFACTS_ROOT | Out-Null
& mlflow server ` & mlflow server `
--backend-store-uri="$BACKEND_URI" ` --backend-store-uri="$BACKEND_URI" `

@ -1,11 +1,10 @@
FROM python:3.11-slim FROM python:3.11-slim
WORKDIR /service WORKDIR /
COPY ./requirements.txt . COPY . /service
RUN pip install --no-cache-dir -r requirements.txt
COPY . . RUN pip install --no-cache-dir -r /service/requirements.txt
VOLUME /models VOLUME /models
@ -13,7 +12,9 @@ EXPOSE 8000/tcp
ENV MODELS_PATH=/models ENV MODELS_PATH=/models
WORKDIR /service
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
# docker build -t ml_service:1 services/ml_service/ # docker build -t ml_service services/ml_service/
# docker run -v "$(pwd)/services/models:/models" -p 8000:8000 ml_service:1 # docker run -v "$(pwd)/services/models:/models" -p 8000:8000 ml_service

@ -1,71 +0,0 @@
# Сервис предсказания цен
Веб-сервис предсказания цен на подержанные автомобили; только stateless API. Об используемой предсказательной модели см. `research/README.md`.
## API
**Базовый URL**: `/api`. Все указанные далее URL записаны **относительно базового URL**, если не указано иное.
* Полная интерактивная документация (Swagger UI): `/docs`.
* Предсказать цену подержанного автомобиля: `/predict`.
Пример запроса:
* requst query: `item_id=16` (параметр `item_id` необходим!);
* request body:
```json
{
"selling_price": 5.59,
"driven_kms": 27000.0,
"age": 5.0,
"fuel_type": "petrol",
"selling_type": "dealer",
"transmission_type": "manual"
}
```
* response body:
```json
{
"item_id": 16,
"price": 3.743508852258851
}
```
* Тестовый эндпоинт: `/`
Возвращает простой демонстрационный объект JSON.
Может использоваться для проверки состояния сервиса.
## Развёртывание
### Файл модели
Файл используемой предсказательной модели `model.pkl` можно извлечь из MLFlow скриптом `services/models/fetch_model_as_pickle_from_mlflow.py`. Файл модели можно разместить в директории проекта, а именно в `services/models/`.
Например, извлечь модель по имени (`<model-name>`) и версии (`<model-version>`) (например, `UsedCardPricePredictionFinal/1`) (команда запускается из корневой директории проекта &mdash; от этого зависит путь к создаваемому файлу):
python services/models/fetch_model_as_pickle_from_mlflow.py --model "models:/<model-name>/<model-version>" services/models/model.pkl
Можно указать адрес tracking сервера MLFlow, например: `--tracking-uri "http://localhost:5000"`.
Информация о других опциях доступна:
python services/models/fetch_model_as_pickle_from_mlflow.py --help
### Образ Docker
Сборка образа (замените `<version>` на номер версии) (команда запускается из корневой директории проекта &mdash; от этого зависит путь к директории):
docker build -t ml_service:<version> services/ml_service/
Запуск образа (замените `<version>` на номер версии образа, `<models-dir>` на **абсолютный** путь к директории, где размещён файл предсказательной модели `model.pkl`, `<port>` на порт для запуска веб-сервиса (например, `8000`)):
docker run -v "<models-dir>:/models" -p <port>:8000 ml_service:<version>
Модель может быть размещена в директории проекта; тогда, например, при запуске команды из корна проекта: `$(pwd)/services/models` (здесь `$(pwd)` используется потому, что необходим абсолютный путь).
Загрузка…
Отмена
Сохранить