Поделиться через


Публикация функций в интернет-магазине

В этой статье описывается, как публиковать функции в интернет-магазине для обслуживания в режиме реального времени.

Хранилище признаков 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.