Dagster
Используется для управления MLOps.
Адрес: https://dagster.dot-dot.ru/
Репо: https://gitlab.dot-dot.ru/ai/dagster
Jobs
TEST_chain
Автотесты для следующих эндпойнтов:
-
/v1/schedule/chains
-
/v1/schedule/chains/carrier/scoring
Принцип работы:
-
Запросить цепочки. Число цепочек должно быть больше 0.
-
Для первых 5 групп цепочек сформировать запрос на перевозчиков. Суммировать число перевозчиков, вывести в отчете в конце. Теоретически число перевозчиков может быть 0, однако скорее всего это повод сделать более тщательную проверку подбора перевозчиков.
-
Для успешного прохождения теста ни один из запросов не должен быть с ошибкой.
TEST_schedule
Автотесты для следующих эндпойнтов:
-
/v1/schedule/transport
-
/v1/schedule/calculate
-
/v1/schedule/carrier/scoring
Принцип работы:
-
Получить графики с /v1/schedule/transport. Вывести длительность работы эндпойнта.
-
Сформировать 9 корзин - 3 по 1, 3 по 2 и 3 по 3 графика в каждой. В каждой корзине в каждом графике выбрать случайное количество дней и количество перевозок.
-
Посчитать калькуляцию по корзинам.
-
Проверить: количество элементов в ключе schedule ответа должно быть равно количеству элементов ключа cart запроса. В каждом графике запроса и ответа должно совпадать количество элементов в соответствующих ключах sub. В каждом элементе sub запроса и ответа поле day должно быть идентичным.
-
Получить рекомендацию перевозчиков для корзины с /v1/schedule/carrier/scoring. Посчитать общее количество перевозчиков для всех корзин.
-
Для рекомендаций должно выполняться правило: если перевоз имеет заполненное поле dot_dot_id, то carrier_class должен быть null. Если заполнено поле ati_id, то carrier_class должен быть одним из {1, 2, 3, 4}.
-
В конце теста общее количество рекомендуемых перевозчиков не должно быть 0.
-
Для успешного прохождения теста ни один из запросов не должен быть с ошибкой.
В конце теста выводится общее количество полученных перевозчиков по рекомендациям.
TEST_schedule_V2
Автотесты для эндпойнтов:
-
/v2/schedule/transport
-
/v2/schedule/calculate
-
/v2/schedule/carrier/scoring
Принцип работы практически тот же с поправкой на разницу в API.
TEST_calculator
Автотесты следующих эндпойнтов:
-
/v1/classification/order/relevance
-
/v2/classification/direction/confidence
-
/v1/classification/carrier/scoring
-
/v1/classification/direction/uncertain
Принцип работы:
-
Вытащить все уверенные направления из /v2/classification/direction/confidence.
-
Идти по полученным направлениям, делать запрос в /v1/classification/order/relevance, проверять статус. Для запроса без изменений ожидается статус 1.
-
Каждый 2 запрос прибавлять к weight 1.0. Для такого запроса ожидается статус 0.
-
Если пришедший статус не соответствует ожидаемому, то выбрасывается ошибка.
-
Каждый 15 запрос получить рекомендацию перевозчиков с /v1/classification/carrier/scoring. Посчитать количество рекомендуемых перевозчиков.
-
Для рекомендаций должно выполняться правило: если перевоз имеет заполненное поле dot_dot_id, то carrier_class должен быть null. Если заполнено поле ati_id, то carrier_class должен быть одним из {1, 2, 3, 4}.
-
В конце теста общее количество рекомендуемых перевозчиков не должно быть 0.
-
Число неуверенных направлений (direction/uncertain) должно быть больше 0.
-
Для успешного прохождения теста ни один из запросов не должен быть с ошибкой.
В конце выводится статистика: количество ответов в разрезе статусов, общее число полученных перевозов по рекомендациям, среднее, максимальное и минимальное время работы эндпойнта с рекомендациями перевозчиков.
TEST_calculator_V2
Автотесты для следующих эндпойнтов:
-
/v2/classification/order/relevance
-
/v3/classification/direction/confidence
-
/v2/classification/carrier/scoring
-
/v2/classification/direction/uncertain
Принцип работы практически тот же с поправкой на разницу в API.
SUSTAIN_clean_logs
Чистка логов ранов дагстера и ранов mlflow (по всем экспериментам).
По умолчанию для дагстера установлена максимальная давность в 14 дней, для mlflow - 45 дней.
DEPLOY_autodeploy_calc
Автоматическое обучение модели калькулятора для ветки, указанной в env как CALCULATOR_BRANCH. При успехе загружает модель в MLFlow, устанавливает требуемый alias. Отправляет метрики в телеграмм.
Обучение основано на джобе TRAIN_train_model.
TRAIN_train_model
Запустить обучение модели из git-репозитория.
Универсальная задача, может поддерживать запуск обучения любой модели, которая поддерживает данный формат. В launchpad необходимо указать HTTPS ссылку на репозиторий и SHA коммита (либо название ветки), параметры обучения, если необходимо переопределить дефолтные.
Обучение происходит в докере, который видно на самом сервере. Поскольку вывод из докер контейнера недоступен, для дебагинга рекомендуется обучать модель запуском команды напрямую, а не через dagster. Данная джоба полезна экономией времени для отлаженных процессов обучения модели.
ALERTS_check_availability
Проверка доступности ML API, БД, инференс-сервера и Редиса. В случае недоступности одного из элементов, отправляет алерт в ТГ канал. К сожалению, поскольку Дагстер развернут на том же сервере, что и ML, в случае падения сервера алерты работать не будут.
MANAGEMENT_get_model_info
Получить подробную информацию о модели на инференс сервере.
В launchpad необходимо указать имя модели.
Пример ответа
[
{
"batchSize": 1,
"jobQueueStatus": {
"pendingRequests": 0,
"remainingCapacity": 1000
},
"loadedAtStartup": false,
"maxBatchDelay": 100,
"maxWorkers": 1,
"minWorkers": 1,
"modelName": "calculator_production",
"modelUrl": "https://storage.yandexcloud.net/data-monsters/models/calculator_production.mar",
"modelVersion": "2.1.4",
"runtime": "python",
"workers": [
{
"gpu": false,
"gpuUsage": "N/A",
"id": "9011",
"memoryUsage": 494702592,
"pid": 5591,
"startTime": "2023-11-14T15:21:39.635Z",
"status": "READY"
}
]
}
]
MANAGEMENT_get_api_info
Получить информацию о состоянии ML API.
Пример ответа
{
"models": [
{
"name": "calculator_production",
"version": "2.1.4",
"workers": 1
},
{
"name": "calculator_staging",
"version": "2.1.1",
"workers": 1
},
{
"name": "carrier_ranker_production",
"version": "0.6.2",
"workers": 1
},
{
"name": "carrier_ranker_staging",
"version": "0.6.2",
"workers": 1
}
],
"version": "0.1.2"
}
MANAGEMENT_get_all_models_info
Получить информацию о всех моделях на инференс сервере.
Пример ответа
{
"models": [
{
"modelName": "calculator_production",
"modelUrl": "https://storage.yandexcloud.net/data-monsters/models/calculator_production.mar"
},
{
"modelName": "calculator_staging",
"modelUrl": "https://storage.yandexcloud.net/data-monsters/models/calculator_staging.mar"
},
{
"modelName": "carrier_ranker_production",
"modelUrl": "https://storage.yandexcloud.net/data-monsters/models/carrier_ranker_production.mar"
},
{
"modelName": "carrier_ranker_staging",
"modelUrl": "https://storage.yandexcloud.net/data-monsters/models/carrier_ranker_staging.mar"
}
]
}
Schedules
SUSTAIN_clean_logs_schedule
SUSTAIN_clean_logs, запускается раз в неделю в воскресенье.
DEPLOY_autodeploy_calc_schedule
DEPLOY_autodeploy_calc, запускается каждый день в 21:00 по МСК. Mlflow alias установлен в production, т.е. обученный калькулятор сразу идет в прод.
ALERTS_check_availability_schedule
ALERTS_check_availability, запускается каждые 5 минут.
DEPLOY_autodeploy_schedule_schedule
DEPLOY_autodeploy_schedule с запуском в пятницу в 21:00 по МСК. Mlflow alias установлен в test, т.е. требует ручного перевода в production.
No Comments