Управление моделями машинного обучения
Managed Service for ClickHouse позволяет анализировать данные с помощью моделей машинного обучения CatBoost без использования дополнительных инструментов. Чтобы применить модель, подключите ее к кластеру и вызовите в SQL-запросе с помощью встроенной функции modelEvaluate()
. В результате выполнения такого запроса вы получите предсказания модели для каждой строки входных данных. Подробнее о машинном обучении в ClickHouse читайте в документации.
Перед подключением модели
Managed Service for ClickHouse работает только с моделями, которые загружены в Yandex Object Storage и к которым предоставлен доступ на чтение:
-
Загрузите файл обученной модели в Yandex Object Storage.
-
Настройте доступ к файлу модели одним из способов:
-
Используйте сервисный аккаунт (рекомендуется). Данный способ позволяет получить доступ к файлу без ввода учетных данных.
1. Подключите сервисный аккаунт к кластеру.
2. Назначьте аккаунту рольstorage.viewer
.
3. В ACL бакета добавьте аккаунту разрешениеREAD
. -
Включите публичный доступ к бакету с файлом.
-
-
Получите ссылку на файл модели.
Получить список моделей в кластере
- В консоли управления перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список моделей в кластере, выполните команду:
yc managed-clickhouse ml-model list --cluster-name=<имя кластера>
Имя кластера можно запросить со списком кластеров в каталоге.
Воспользуйтесь методом API list и передайте идентификатор кластера в параметре clusterId
запроса.
Идентификатор кластера можно получить со списком кластеров в каталоге.
Получить детальную информацию о модели
- В консоли управления перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить детальную информацию о модели, выполните команду:
yc managed-clickhouse ml-model get <имя модели> \
--cluster-name=<имя кластера>
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
Воспользуйтесь методом API get и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя модели в параметре
mlModelName
.
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
Подключить модель
Примечание
Поддерживаются только модели типа CatBoost: ML_MODEL_TYPE_CATBOOST
.
-
Выберите кластер:
- В консоли управления перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
- Нажмите Добавить модель.
-
Настройте параметры модели:
- Тип —
ML_MODEL_TYPE_CATBOOST
. - Имя — имя модели. Имя модели — один из аргументов функции
modelEvaluate()
, которая нужна для вызова модели в 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=<ссылка на файл модели в Yandex Object Storage>
Имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание ClickHouse-кластера.
-
Добавьте к описанию кластера Managed Service for ClickHouse блок
ml_model
с описанием подключаемой модели машинного обучения:resource "yandex_mdb_clickhouse_cluster" "<имя кластера>" { ... ml_model { name = "<имя модели>" type = "ML_MODEL_TYPE_CATBOOST" uri = "<ссылка на файл модели в Yandex 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 минут
}
}
Воспользуйтесь методом API create и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя модели в параметре
mlModelName
. - Тип модели
ML_MODEL_TYPE_CATBOOST
в параметреtype
. - Cсылку на файл модели в Yandex Object Storage в параметре
uri
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
Применить модель
Чтобы применить модель к данным, которые хранятся в кластере ClickHouse:
-
Подключитесь к кластеру с помощью клиента ClickHouse CLI или перейдите на вкладку SQL в консоли управления кластером.
-
Выполните SQL-запрос вида:
SELECT modelEvaluate('<имя модели>', <имя столбца 1>, <имя столбца 2>, ... <имя столбца N>) FROM <имя таблицы>
В качестве аргументов функции modelEvaluate()
укажите имя модели и имена столбцов, содержащих входные данные. В результате выполнения запроса вы получите столбец с предсказаниями модели для каждой строки исходной таблицы.
Изменить модель
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=<новая ссылка на файл в Yandex Object Storage>
Имя модели можно запросить со списком моделей в кластере, имя кластера — со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание ClickHouse-кластера.
-
Измените в описании кластера Managed Service for ClickHouse значение параметра
uri
в блокеml_model
:resource "yandex_mdb_clickhouse_cluster" "<имя кластера>" { ... ml_model { name = "<имя модели>" type = "ML_MODEL_TYPE_CATBOOST" uri = "<новая ссылка на файл модели в Yandex 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 минут
}
}
Воспользуйтесь методом API 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 с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание ClickHouse-кластера.
-
Удалите из описания кластера 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 минут
}
}
Воспользуйтесь методом API delete и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Имя модели в параметре
mlModelName
.
Идентификатор кластера можно запросить со списком кластеров в каталоге, имя модели — со списком моделей в кластере.
Пример
Если у вас еще нет подходящего набора данных и модели для его обработки, вы можете протестировать машинное обучение в Managed Service for ClickHouse на этом примере. Для него мы подготовили файл с данными и обучили модель для их анализа. Вы сможете загрузить данные в ClickHouse и посмотреть на предсказания модели для разных строк таблицы.
Примечание
Для этого примера мы будем использовать открытые данные из Amazon Employee Access Challenge. Модель обучена предсказывать значение столбца ACTION
. Те же данные и модель используются в примерах в документации ClickHouse и на GitHub.
Чтобы загрузить данные в ClickHouse и протестировать модель:
-
Установите ClickHouse CLI и настройте подключение к кластеру как описано в документации.
-
Скачайте файл с данными для анализа:
wget https://storage.yandexcloud.net/managed-clickhouse/train.csv
-
Создайте таблицу для данных:
clickhouse-client --host <FQDN хоста> \ --database <имя базы данных> --secure \ --user <имя пользователя БД> \ --password <пароль пользователя БД> \ --port 9440 \ -q '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'
-
Загрузите данные в таблицу:
clickhouse-client --host <FQDN хоста> \ --database <имя базы данных> --secure \ --user <имя пользователя БД> \ --password <пароль пользователя БД> \ --port 9440 \ -q 'INSERT INTO ml_test_table FORMAT CSVWithNames' \ < train.csv
-
В консоли управления подключите тестовую модель:
- Тип —
ML_MODEL_TYPE_CATBOOST
. - Имя —
ml_test
. - URL —
https://storage.yandexcloud.net/managed-clickhouse/catboost_model.bin
.
- Тип —
-
Протестируйте модель:
- Подключитесь к кластеру с помощью клиента ClickHouse CLI или перейдите на вкладку SQL в консоли управления кластером.
- Проверьте работу модели с помощью запросов:
-
Предсказания значения столбца
ACTION
для первых 10 строк таблицы:SELECT modelEvaluate('ml_test', 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 modelEvaluate('ml_test', 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
-