Публикация функций в интернет-магазине
В этой статье описывается, как публиковать функции в интернет-магазине для обслуживания в режиме реального времени.
Хранилище признаков Databricks поддерживает следующие веб-хранилища:
Поставщик интернет-магазина | Публикация с помощью конструктора компонентов в каталоге Unity | Публикация с помощью устаревшего хранилища компонентов рабочей области | Поиск функций в устаревшей модели MLflow | Поиск функций в службе моделей |
---|---|---|---|---|
Azure Cosmos DB [1] | X | X (клиент Магазина компонентов версии 0.5.0 и более поздних версий) | X | X |
Azure MySQL (отдельный сервер) | X | X | ||
Azure SQL Server | X |
Заметки о совместимости Cosmos DB
В этом разделе содержатся некоторые важные моменты, которые следует учитывать при использовании Хранилища компонентов Databricks с Cosmos DB.
Рабочие пространства с поддержкой Unity Catalog
В Databricks Runtime 12.2 LTS ML и более ранних версиях поставщик онлайн-хранилища Cosmos DB несовместим с рабочими областями, где включён Unity Catalog. Каталог Unity и официальный соединитель Cosmos DB Spark изменяют Spark каталоги. При публикации функций в Cosmos DB из рабочей области с поддержкой каталога Unity в кластере под управлением Databricks Runtime 12.2 LTS ML или ниже может возникнуть конфликт записи, который приводит к сбою публикации Хранилища компонентов в Cosmos DB.
Чтобы использовать Cosmos DB в рабочей области с поддержкой каталога Unity, необходимо использовать кластер с Databricks Runtime 13.0 ML или более поздней версии, либо кластер с Databricks Runtime 11.3 LTS ML или более поздней версии с политикой кластера "Без ограничений" или "Общие ресурсы".
Соединитель Spark
Чтобы использовать Azure Cosmos DB, учетная запись должна быть создана с помощью API Core (SQL), а метод сетевого подключения должен иметь значение Все сети. В кластере должен быть установлен соответствующий соединитель OlTP Spark 3 OLTP для SQL . Databricks рекомендует установить последнюю версию соединителя для Spark 3.2, пока не будет выпущен соединитель для Spark 3.3.
Не создавайте базу данных или контейнер вручную. Используйте publish_table()
Интернет-магазин Cosmos DB использует другую схему, отличную от автономного хранилища. В частности, в интернет-магазине первичные ключи хранятся в виде объединенного ключа в столбце _feature_store_internal__primary_keys
.
Чтобы обеспечить доступ Feature Store к онлайн-хранилищу Cosmos DB, необходимо создать таблицу в этом хранилище, используя publish_table()
. Не создавайте базу данных или контейнер вручную в Cosmos DB.
publish_table()
делает это автоматически.
Публикация признаков пакетного вычисления в онлайн-хранилище
Вы можете создать и запланировать задание Databricks для регулярной публикации обновленных функций. Это задание также может содержать код для вычисления обновленных признаков; кроме того, можно создавать и запускать отдельные задания для вычисления и публикации обновленных признаков.
Для хранилищ SQL в следующем коде предполагается, что в онлайн-хранилище уже существует онлайн-база данных с именем recommender_system, которое совпадает с названием автономного хранилища. Если в базе данных нет таблицы с именем "customer_features", этот код создает его. Кроме того, предполагается, что функции вычисляются каждый день и хранятся в виде секционированного столбца _dt
.
В следующем коде предполагается, что вы создали секреты для доступа к этому онлайн-хранилищу.
Cosmos DB
Поддержка Cosmos DB доступна во всех версиях конструктора компонентов в клиенте каталога Unity и клиенте Магазина компонентов версии 0.5.0 и выше.
import datetime
from databricks.feature_engineering.online_store_spec import AzureCosmosDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureCosmosDBSpec(
account_uri='<account-uri>',
read_secret_prefix='<read-scope>/<prefix>',
write_secret_prefix='<write-scope>/<prefix>'
)
fe.publish_table( # or fs.publish_table for Workspace Feature Store
name='ml.recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
Хранилища SQL
import datetime
from databricks.feature_engineering.online_store_spec import AzureMySqlSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureMySqlSpec(
hostname='<hostname>',
port='<port>',
read_secret_prefix='<read-scope>/<prefix>',
write_secret_prefix='<write-scope>/<prefix>'
)
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
Потоковая публикация признаков в онлайн-хранилище
Чтобы непрерывно передавать функции в интернет-магазин, задайте streaming=True
.
fe.publish_table( # or fs.publish_table for Workspace Feature Store
name='ml.recommender_system.customer_features',
online_store=online_store,
streaming=True
)
Публикация некоторых признаков в онлайн-хранилище
Чтобы опубликовать в онлайн-хранилище только некоторые признаки, используйте аргумент features
, задающий имена признаков для публикации. Первичные ключи и ключи отметок времени публикуются всегда. Если аргумент features
не указан или значение None, публикуются все признаки из офлайн-таблицы признаков.
Примечание.
Вся автономная таблица должна быть допустимой таблицей функций, даже если вы публикуете только подмножество функций в интернет-магазине. Если автономная таблица содержит неподдерживаемые типы данных , невозможно опубликовать подмножество функций из этой таблицы в интернет-магазине.
fe.publish_table( # or fs.publish_table for Workspace Feature Store
name='ml.recommender_system.customer_features',
online_store=online_store,
features=["total_purchases_30d"]
)
Публикация таблицы компонентов в определенной базе данных
В спецификации интернет-магазинаукажите имя базы данных (database_name
) и имя таблицы (table_name
). Если эти параметры не указаны, используется имя автономной базы данных и имя таблицы компонентов. База database_name
уже должна существовать в онлайн-хранилище.
online_store = AzureMySqlSpec(
hostname='<hostname>',
port='<port>',
database_name='<database-name>',
table_name='<table-name>',
read_secret_prefix='<read-scope>/<prefix>',
write_secret_prefix='<write-scope>/<prefix>'
)
Перезапись существующей таблицы функций в Сети или определенных строк
Используйте mode='overwrite'
в вызове publish_table
. Онлайн таблица полностью перезаписывается данными из автономной таблицы.
Примечание.
Azure Cosmos DB не поддерживает режим перезаписи.
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
mode='overwrite'
)
Чтобы перезаписать только определенные строки, используйте аргумент filter_condition
:
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
Удаление опубликованной таблицы из интернет-магазина
С помощью клиента Магазина компонентов версии 0.12.0 и более поздних версий можно использовать drop_online_table
для удаления опубликованной таблицы из интернет-магазина. При удалении опубликованной таблицы с drop_online_table
таблица удаляется из поставщика интернет-магазина, а метаданные интернет-магазина удаляются из Databricks.
fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
name='recommender_system.customer_features',
online_store = online_store
)
Примечание.
-
drop_online_table
удаляет опубликованную таблицу из интернет-магазина. Она не удаляет таблицу функций в Databricks. - Перед удалением опубликованной таблицы необходимо убедиться, что таблица не используется для поиска функций обслуживания моделей и не имеет других зависимостей нижестоящего потока. Удаление необратимо и может привести к сбою зависимостей.
- Чтобы проверить наличие зависимостей, рассмотрите возможность смены ключей для опубликованной таблицы за день до выполнения удаления с помощью
drop_online_table
.