온라인 스토어에 기능 게시
이 문서에서는 실시간 서비스를 위해 온라인 스토어에 기능을 게시하는 방법을 설명합니다.
Databricks 기능 저장소는 다음 온라인 저장소를 지원합니다.
온라인 스토어 공급자 | Unity 카탈로그에서 기능 엔지니어링을 사용하여 게시 | 작업 영역 기능 저장소를 사용하여 게시 | 레거시 MLflow 모델 서비스 기능 조회 | 모델 제공의 기능 조회 |
---|---|---|---|---|
Azure Cosmos DB [1] | X | X(기능 저장소 클라이언트 v0.5.0 이상) | X | X |
Azure MySQL(단일 서버) | X | X | ||
Azure SQL Server | X |
Cosmos DB 호환성 정보
이 섹션에는 Cosmos DB와 함께 Databricks 기능 저장소를 사용할 때 유의해야 할 몇 가지 중요한 사항이 포함되어 있습니다.
Unity 카탈로그 사용 작업 영역
Databricks Runtime 12.2 LTS ML 이하에서 Cosmos DB 온라인 저장소 공급자는 Unity 카탈로그 사용 작업 영역과 호환되지 않습니다. Unity 카탈로그와 공식 Cosmos DB Spark 커넥터 모두 Spark 카탈로그를 수정합니다. Databricks Runtime 12.2 LTS ML 이하를 실행하는 클러스터의 Unity 카탈로그 사용 작업 영역에서 Cosmos DB에 기능을 게시하는 경우 기능 저장소가 Cosmos DB에 게시되지 않는 쓰기 충돌이 발생할 수 있습니다.
Unity 카탈로그 사용 작업 영역에서 Cosmos DB를 사용하려면 Databricks Runtime 13.0 ML 이상을 실행하는 클러스터 또는 클러스터 정책 Unrestricted 또는 Shared Compute를 사용하여 Databricks Runtime 11.3 LTS ML 이상을 실행하는 클러스터를 사용해야 합니다.
Spark 커넥터
Azure Cosmos DB를 사용하려면 Core(SQL) API를 사용하여 계정을 만들어야 하며 네트워킹 연결 방법을 모든 네트워크로 설정해야 합니다. 적절한 Azure Cosmos DB Spark 3 OLTP Connector for SQL API를 클러스터에 설치해야 합니다. Databricks는 Spark 3.3용 커넥터가 릴리스될 때까지 Spark 3.2용 최신 커넥터 버전을 설치하는 것이 좋습니다.
데이터베이스 또는 컨테이너를 수동으로 만들지 마세요. publish_table()
Cosmos DB 온라인 저장소는 오프라인 저장소와 다른 스키마를 사용합니다. 특히 온라인 스토어에서 기본 키는 열 _feature_store_internal__primary_keys
에 결합된 키로 저장됩니다.
기능 저장소가 Cosmos DB 온라인 저장소에 액세스할 수 있도록 하려면 publish_table()
을 사용하여 온라인 저장소에 테이블을 만들어야 합니다. Cosmos DB 내에 데이터베이스 또는 컨테이너를 수동으로 만들지 마세요. publish_table()
자동으로 수행됩니다.
온라인 저장소에 일괄 계산된 기능 게시
Databricks 작업을 만들고 예약하여 업데이트된 기능을 정기적으로 게시할 수 있습니다. 또한 이 작업은 업데이트된 기능을 계산하는 코드를 포함하거나, 별도의 작업을 만들고 실행하여 기능 업데이트를 계산 및 게시할 수 있습니다.
SQL 저장소의 경우 다음 코드에서는 ‘recommender_system’이라는 온라인 데이터베이스가 온라인 저장소에 이미 있고 오프라인 저장소의 이름과 일치한다고 가정합니다. 데이터베이스에 ‘customer_features’라는 테이블이 없는 경우 이 코드는 테이블을 만듭니다. 또한 기능이 매일 계산되고 분할된 열 _dt
로 저장된다고 가정합니다.
다음 코드는 사용자가 이 온라인 저장소에 액세스하기 위해 비밀을 만들었다고 가정합니다.
Cosmos DB
Cosmos DB 지원은 Unity 카탈로그 클라이언트의 모든 기능 엔지니어링 버전 및 기능 저장소 클라이언트 v0.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>'
)
기존 온라인 기능 테이블 또는 특정 행 덮어쓰기
publish_table
호출에 mode='overwrite'
를 사용합니다. 온라인 테이블은 오프라인 테이블의 데이터로 완전히 덮어씁니다.
참고 항목
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'
)
온라인 스토어에서 게시된 테이블 삭제
Feature Store 클라이언트 v0.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
하기 전에 하루 동안 삭제하려는 게시된 테이블의 키를 회전하는 것이 좋습니다.