ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Feast Couchbase Online Store 接入指南:以 Couchbase Capella Operational 作为特征在线存储

Feast Couchbase Online Store 接入指南:以 Couchbase Capella Operational 作为特征在线存储 Feast Couchbase Online Store 接入指南以 Couchbase Capella Operational 作为特征在线存储【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feastCouchbase Online Store 是 Feast 社区贡献的在线存储实现用于将 Couchbase Capella Operational 与仓库内模板、测试用例完整讲解从集群准备、feature_store.yaml配置、feast apply、materialize-incremental到get_online_features读取的全流程并深入剖析其底层文档模型与命名规则帮助你在真实项目中快速落地。注意该在线存储为社区贡献目前处于 alpha 开发阶段尚未被 Feast 项目官方正式支持。使用时请关注功能稳定性并留意后续版本中接口可能发生变化。一、前置准备部署 Couchbase Capella Operational 集群使用该在线存储前你需要一个可用的 Couchbase 集群推荐 Couchbase Capella Operational 托管服务本地集群亦可。按以下顺序完成初始化创建 Couchbase Capella 账号注册并登录 Couchbase Capella 控制台可使用免费层开始。部署 Operational 集群在控制台按向导创建 Operational 类型的集群。创建 BucketBucket 名称可自定义但必须与后续feature_store.yaml中bucket_name配置保持一致。仓库默认的 bucket 名为feast。创建集群访问凭据创建数据库用户database user并确保该凭据对第 3 步创建的 bucket 拥有完整访问权限full access。配置允许的 IP 地址在 Capella 的 allowlist 中放行运行 Feast 所在机器的公网 IP否则 Feast 无法连接集群。此外若使用本地 Couchbase Server 进行开发验证可参考仓库集成测试 couchbase.py 的做法测试通过couchbase/server:enterprise-7.6.3Docker 镜像启动容器初始化kv,n1ql,index服务、设置管理员凭据Administrator/password并创建 bucket。这为本地复现本文后续命令提供了最小环境参考。二、创建 Feature Repository 并配置在线存储2.1 初始化特征仓库使用 Feast CLI 初始化项目生成特征仓库骨架feast init feature_repo cd feature_repo除通用的feature_repo模板外仓库还提供了 Couchbase 专用模板由 cli.py 注册名称为couchbase初始化时指定模板可得到预置的 Couchbase 配置feast init -t couchbase feature_repo该模板包含 feature_store.yaml 与 feature_definitions.py并在初始化过程中通过 bootstrap.py 以交互式提示connection string、用户名、密码、bucket 名、KV 端口等自动回填占位符。2.2 编辑feature_store.yaml将online_store的type设置为couchbase.online并按实际情况填写连接参数project: feature_repo registry: data/registry.db provider: local online_store: type: couchbase.online connection_string: couchbase://127.0.0.1 # Couchbase connection string, copied from Connect page in Couchbase Capella console user: Administrator # Couchbase username from access credentials password: password # Couchbase password from access credentials bucket_name: feast # Couchbase bucket name, defaults to feast kv_port: 11210 # Couchbase key-value port, defaults to 11210. Required if custom ports are used. entity_key_serialization_version: 32.3 配置参数详解各配置项由 couchbase.py 中的CouchbaseOnlineStoreConfig模型定义全部字段均可选有默认值参数说明默认值备注type在线存储类型标识固定为couchbase.onlinecouchbase.online通过 Literal 类型约束写错会校验失败connection_stringCouchbase 连接串Capella 控制台 Connect 页面复制couchbase://127.0.0.1本地开发默认即可user数据库访问凭据的用户名Administrator需对 bucket 有完整权限password数据库访问凭据的密码passwordbucket_name存放特征的 bucket 名称feast必须与 Capella 中已创建的 bucket 一致kv_portCouchbase Key-Value 服务端口11210使用自定义端口时必填从源码 couchbase.py 可见_get_conn方法实际构造的连接串为{connection_string}:{kv_port}并使用PasswordAuthenticator完成认证同时显式指定networkexternal以适配 Capella 的外部网络拓扑。因此即使connection_string末尾已含端口kv_port仍会被拼接请勿在两者间重复填写端口保持一致即可。entity_key_serialization_version: 3用于控制实体键的序列化方式文档原始示例即采用版本 3该值同时作用于serialize_entity_key调用见 couchbase.py升级旧仓库时需与原有序列化版本保持一致否则会读取不到历史数据。另外type: couchbase.online的解析由 repo_config.py 注册表映射到feast.infra.online_stores.couchbase_online_store.couchbase.CouchbaseOnlineStore这是 Feast 发现并实例化该在线存储的机制。三、定义特征Feature View 与数据源应用前需要准备特征定义文件。可直接使用仓库中的示例 example.py它演示了标准的三段式定义通过FileSource声明离线数据源driver_stats.parquet包含event_timestamp时间戳字段与created创建时间列定义实体driver_id作为特征检索的主键定义 Feature Viewdriver_hourly_stats_view声明conv_rateFloat32、acc_rateFloat32、avg_daily_tripsInt64三个特征并设置onlineTrue使其可写入在线存储。若使用-t couchbase模板数据源则替换为CouchbaseColumnarSource直接从 Couchbase Capella Columnar 读取见 feature_definitions.py并额外演示了FeatureService、on_demand_feature_view与PushSource的用法。对于仅验证在线存储的场景使用 parquet 文件数据源即可。四、应用并部署基础设施在特征仓库目录下执行feast -c feature_repo apply预期输出Registered entity driver_id Registered feature view driver_hourly_stats_view Deploying infrastructure for driver_hourly_stats_viewapply阶段不仅注册实体与特征视图还会触发CouchbaseOnlineStore.update方法见 couchbase.pyFeast 会为每个 Feature View 在 bucket 下自动创建命名 scope 与 collection结构为Scope 命名规则{project}_{table.name}_scopeCollection 命名规则{project}_{table.name}_collection例如projectfeature_repo、Feature View 名为driver_hourly_stats时对应feature_repo_driver_hourly_stats_scope与feature_repo_driver_hourly_stats_collection。源码中通过捕获ScopeAlreadyExistsException/CollectionAlreadyExistsException实现幂等创建重复 apply 不会报错。这也说明bucket 内的 scope/collection 由 Feast 自动管理无需手工预建。五、物化最新数据到 Couchbase 在线存储特征数据从离线源写入在线存储需要执行物化命令materialize-incremental表示从注册表记录的上一次物化时间点增量写入到指定时间CURRENT_TIME$(date -u %Y-%m-%dT%H:%M:%S) feast -c feature_repo materialize-incremental $CURRENT_TIME预期输出Materializing 1 feature views from 2022-04-16 15:30:3905:30 to 2022-04-19 15:31:0405:30 into the Couchbase online store. driver_hourly_stats_view from 2022-04-16 15:30:3905:30 to 2022-04-19 15:31:0405:30: 100%|████████████████████████████████████████████████████████████████| 5/5 [00:0000:00, 120.59it/s]物化期间online_write_batch见 couchbase.py会为每条特征值构造文档并执行collection.upsert存在即覆盖进度条来自progress回调。写入的关键处理逻辑实体键经serialize_entity_key序列化后以 hex 字符串表示时间戳event_ts、created_ts统一转为 naive UTC 后再输出为 ISO 格式字符串特征值ValueProto先序列化为 protobuf 二进制再 base64 编码为字符串存储。六、在线读取最新特征物化完成后即可在应用侧通过FeatureStore.get_online_features拉取指定实体 ID 的最新特征向量from pprint import pprint from feast import FeatureStore store FeatureStore(repo_path.) feature_vector store.get_online_features( features[ driver_hourly_stats:conv_rate, driver_hourly_stats:acc_rate, driver_hourly_stats:avg_daily_trips, ], entity_rows[ {driver_id: 1004}, {driver_id: 1005}, ], ).to_dict() pprint(feature_vector)预期输出{ acc_rate: [0.01390857808291912, 0.4063614010810852], avg_daily_trips: [69, 706], conv_rate: [0.6624961495399475, 0.7595928311347961], driver_id: [1004, 1005], }七、底层实现文档模型与读写路径理解 Couchbase Online Store 的数据布局有助于排查问题与评估容量规划。从 couchbase.py 可确认其核心设计文档 ID 规则{project}:{table.name}:{entity_key_hex}:{feature_name}。即每个实体 × 特征名组合对应一个独立文档例如feature_repo:driver_hourly_stats:1f2e...:conv_rate。这种按特征名拆分的文档设计使读取时可按requested_features精确 get 对应文档代价是单个实体的 N 个特征会分散为 N 个文档。文档内容结构{ metadata: { event_ts: 2022-04-19T10:01:04.123456, created_ts: 2022-04-19T10:01:04.123456, feature_name: conv_rate }, value: base64 编码的 protobuf 二进制 }读取路径online_read见 couchbase.py按文档 ID 逐个collection.get从metadata.event_ts解析出事件时间将value字段 base64 解码后通过ValueProto.ParseFromString还原为 Feast 内部值类型若目标文档不存在则捕获DocumentNotFoundException该实体的结果返回(None, None)。清理路径teardown见 couchbase.py删除 Feature View 时直接drop_scope连带删除 scope 下所有 collection。八、验证与测试仓库如何保障该实现可用仓库为 Couchbase Online Store 提供了较完整的验证体系可作为接入前的自检参照通用集成测试配置couchbase_repo_configuration.py 将CouchbaseOnlineStoreCreator注册进FULL_REPO_CONFIGS使其进入 Feast 的通用在线存储集成测试矩阵。测试基础设施couchbase.py 通过 Docker 拉起couchbase/server:enterprise-7.6.3依次初始化集群服务、管理员凭据、alternate address 与 bucket最终向 Feast 返回一组与feature_store.yaml同构的在线存储配置验证了 容器的 KV 端口经映射后通过kv_port传入 这一真实部署形态。九、注意事项与限制alpha 阶段警告online_write_batch、online_read、update、teardown均会触发RuntimeWarning提示该功能仍处于实验阶段、接口可能变动生产使用前请充分评估。依赖要求该实现在运行时导入couchbaseSDK见 couchbase.py因此使用前需自行安装 Couchbase Python 客户端并确保版本与集群服务端兼容。Capella 网络配置连接依赖 Capella 控制台的 IP allowlist 放行且源码固定使用networkexternal模式本地直连时需保证kv_port可达。scope/collection 上限每个 Feature View 会占用一个 scope 与一个 collection大量 Feature View 时需留意 Couchbase 侧的 scope/collection 数量限制。实体键序列化版本entity_key_serialization_version的变更会影响文档 ID 的实体键部分存量数据迁移需谨慎处理。数据一致性写入采用单文档upsert覆盖写不提供跨文档事务对最终一致性有严格要求的场景需结合业务评估。综上Feast Couchbase Online Store 提供了一条完整的 离线训练 Couchbase 在线服务 路径通过 feature_store.yaml 一键切换在线存储类型配合apply/materialize-incremental/get_online_features三个核心操作即可完成从特征定义到在线推理的闭环而其 scope/collection 自动编排与 protobuf 编码方案则保证了与 Feast 生态的无缝衔接。【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feast创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表