Управление моделями машинного обучения в Managed Service for ClickHouse®
Managed Service for ClickHouse® позволяет анализировать данные с помощью моделей машинного обучения CatBoost
Чтобы применить модель, подключите ее к кластеру и вызовите в SQL-запросе с помощью встроенной функции catboostEvaluate()
. В результате выполнения такого запроса вы получите предсказания модели для каждой строки входных данных.
Подробнее о функции catboostEvaluate()
читайте в документации ClickHouse®
Перед подключением модели
Managed Service for ClickHouse® работает только с моделями, которые загружены в Yandex Object Storage и к которым предоставлен доступ на чтение:
- Для привязки сервисного аккаунта к кластеру убедитесь, что вашему аккаунту в Yandex Cloud назначена роль iam.serviceAccounts.user или выше.
- Загрузите файл обученной модели в Yandex Object Storage.
- Подключите сервисный аккаунт к кластеру. С помощью сервисного аккаунта вы настроите доступ к файлу модели.
- Назначьте роль
storage.viewer
сервисному аккаунту. - В ACL бакета добавьте разрешение
READ
сервисному аккаунту. - Получите ссылку на файл модели.
Получить список моделей в кластере
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список моделей в кластере, выполните команду:
yc managed-clickhouse ml-model list --cluster-name=<имя_кластера>
Имя кластера можно запросить со списком кластеров в каталоге.
Чтобы получить список моделей в кластере, воспользуйтесь методом REST API list для ресурса MlModel или вызовом gRPC API MlModelService/List и передайте в запросе идентификатор кластера в параметре clusterId
.
Идентификатор кластера можно получить со списком кластеров в каталоге.
Получить детальную информацию о модели
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить детальную информацию о модели, выполните команду:
yc managed-clickhouse ml-model get <имя_модели> \
--cluster-name=<имя_кластера>
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
Чтобы получить детальную информацию о модели, воспользуйтесь методом REST API get для ресурса MlModel или вызовом gRPC API MlModelService/Get и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя модели в параметре
mlModelName
.
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
Создать модель
Примечание
Поддерживаются только модели типа CatBoost: ML_MODEL_TYPE_CATBOOST
.
-
Выберите кластер:
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
- Нажмите Создать модель.
- В консоли управления
-
Настройте параметры модели:
- Тип —
ML_MODEL_TYPE_CATBOOST
. - Имя — имя модели. Имя модели — один из аргументов функции
catboostEvaluate()
, которая нужна для вызова модели в ClickHouse®. - URL — адрес модели в Yandex Object Storage.
- Тип —
-
Нажмите Создать и дождитесь окончания создания модели.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать модель, выполните команду:
yc managed-clickhouse ml-model create <имя_модели> \
--cluster-name=<имя_кластера> \
--type=ML_MODEL_TYPE_CATBOOST \
--uri=<ссылка_на_файл_модели_в_Object_Storage>
Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Добавьте к описанию кластера Managed Service for ClickHouse® блок
ml_model
с описанием подключаемой модели машинного обучения:resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" { ... ml_model { name = "<имя_модели>" type = "ML_MODEL_TYPE_CATBOOST" uri = "<ссылка_на_файл_модели_в_Object_Storage>" } }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Чтобы создать модель, воспользуйтесь методом REST API create для ресурса MlModel или вызовом gRPC API MlModelService/Create и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя модели в параметре
mlModelName
. - Тип модели
ML_MODEL_TYPE_CATBOOST
в параметреtype
. - Ссылку на файл модели в Yandex Object Storage в параметре
uri
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
Применить модель
Чтобы применить модель к данным, которые хранятся в кластере ClickHouse®:
-
Выполните SQL-запрос вида:
SELECT catboostEvaluate('<путь_к_файлу_модели>', <имя_столбца_1>, <имя_столбца_2>, ... <имя_столбца_N>) FROM <имя_таблицы>
В качестве аргументов функции catboostEvaluate()
укажите:
- Путь к файлу модели в формате
/var/lib/clickhouse/models/<имя_модели>.bin
. - Имена столбцов, содержащих входные данные.
Результатом выполнения запроса станет столбец с предсказаниями модели для каждой строки исходной таблицы.
Изменить модель
Managed Service for ClickHouse® не отслеживает изменения в файле с моделью, который находится в бакете Yandex Object Storage.
Чтобы актуализировать содержимое модели, которая уже подключена к кластеру:
- Загрузите файл с актуальной моделью в Yandex Object Storage.
- Получите ссылку на этот файл.
- Измените параметры модели, подключенной к Managed Service for ClickHouse®, передав новую ссылку на файл с моделью.
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
- Выберите нужную модель, нажмите на значок
и выберите пункт Изменить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы изменить ссылку на файл с моделью в бакете Yandex Object Storage, выполните команду:
yc managed-clickhouse ml-model update <имя_модели> \
--cluster-name=<имя_кластера> \
--uri=<новая_ссылка_на_файл_в_Object_Storage>
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Измените в описании кластера Managed Service for ClickHouse® значение параметра
uri
в блокеml_model
:resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" { ... ml_model { name = "<имя_модели>" type = "ML_MODEL_TYPE_CATBOOST" uri = "<новая_ссылка_на_файл_модели_в_Object_Storage>" } }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Чтобы изменить модель, воспользуйтесь методом REST API update для ресурса MlModel или вызовом gRPC API MlModelService/Update и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. Чтобы узнать идентификатор, получите список кластеров в каталоге. - Имя модели в параметре
mlModelName
. - Новую ссылку на файл модели в Yandex Object Storage в параметре
uri
. - Список изменяемых полей конфигурации кластера в параметре
updateMask
.
Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре updateMask
(одной строкой через запятую).
Отключить модель
Примечание
После отключения модели соответствующий объект остается в бакете Yandex Object Storage. Если этот объект модели больше не нужен, его можно удалить.
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse. - Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
- Выберите нужную модель, нажмите на значок
и выберите пункт Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы отключить модель, выполните команду:
yc managed-clickhouse ml-model delete <имя_модели> \
--cluster-name=<имя_кластера>
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Удалите из описания кластера Managed Service for ClickHouse® блок описания нужной модели
ml_model
. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for ClickHouse®:
- создание, в т. ч. путем восстановления из резервной копии, — 60 минут;
- изменение — 90 минут;
- удаление — 30 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_clickhouse_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Чтобы удалить модель, воспользуйтесь методом REST API delete для ресурса MlModel или вызовом gRPC API MlModelService/Delete и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя модели в параметре
mlModelName
.
Идентификатор кластера можно запросить со списком кластеров в каталоге, имя модели — со списком моделей в кластере.
Пример
Если у вас еще нет подходящего набора данных и модели для его обработки, вы можете протестировать машинное обучение в Managed Service for ClickHouse® на этом примере. Для него мы подготовили файл с данными и обучили модель для их анализа. Вы сможете загрузить данные в ClickHouse® и посмотреть на предсказания модели для разных строк таблицы.
Примечание
Для этого примера мы будем использовать открытые данные из Amazon Employee Access ChallengeACTION
. Те же данные и модель используются на GitHub
Чтобы загрузить данные в ClickHouse® и протестировать модель:
-
В консоли управления
подключите тестовую модель:- Тип —
ML_MODEL_TYPE_CATBOOST
. - Имя —
ml_test
. - URL —
https://storage.yandexcloud.net/managed-clickhouse/catboost_model.bin
.
- Тип —
-
Скачайте файл с данными
для анализа. -
Создайте тестовую таблицу:
CREATE TABLE ml_test_table (date Date MATERIALIZED today(), ACTION UInt8, RESOURCE UInt32, MGR_ID UInt32, ROLE_ROLLUP_1 UInt32, ROLE_ROLLUP_2 UInt32, ROLE_DEPTNAME UInt32, ROLE_TITLE UInt32, ROLE_FAMILY_DESC UInt32, ROLE_FAMILY UInt32, ROLE_CODE UInt32) ENGINE = MergeTree() PARTITION BY date ORDER BY date;
-
Загрузите данные в таблицу:
INSERT INTO ml_test_table FROM INFILE '<путь_к_файлу>/train.csv' FORMAT CSVWithNames;
-
Протестируйте модель:
-
Получите предсказание значений столбца
ACTION
для первых 10 строк таблицы:SELECT catboostEvaluate('/var/lib/clickhouse/models/ml_test.bin', RESOURCE, MGR_ID, ROLE_ROLLUP_1, ROLE_ROLLUP_2, ROLE_DEPTNAME, ROLE_TITLE, ROLE_FAMILY_DESC, ROLE_FAMILY, ROLE_CODE) > 0 AS prediction, ACTION AS target FROM ml_test_table LIMIT 10;
-
Получите предсказанную вероятность для первых 10 строк таблицы:
SELECT catboostEvaluate('/var/lib/clickhouse/models/ml_test.bin', RESOURCE, MGR_ID, ROLE_ROLLUP_1, ROLE_ROLLUP_2, ROLE_DEPTNAME, ROLE_TITLE, ROLE_FAMILY_DESC, ROLE_FAMILY, ROLE_CODE) AS prediction, 1. / (1 + exp(-prediction)) AS probability, ACTION AS target FROM ml_test_table LIMIT 10;
-
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc