ARTICLE DETAIL

资讯详情

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

Feast Python SDK 的 feast.infra 基础设施包:Provider、InfraObject、Key 编码与各类存储/计算引擎架构详解

Feast Python SDK 的 feast.infra 基础设施包:Provider、InfraObject、Key 编码与各类存储/计算引擎架构详解 Feast Python SDK 的 feast.infra 基础设施包Provider、InfraObject、Key 编码与各类存储/计算引擎架构详解【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feastFeastThe Open Source Feature Store for AI/ML的feast.infra包是整个 Python SDK 中负责底层基础设施编排的核心模块涵盖 Provider 抽象、基础设施对象管理InfraObject/Infra、实体键序列化key_encoding_utils以及离线存储、在线存储、注册表、计算引擎、特征服务器等全部插件化组件。本文以 feast.infra.rst 文档为骨架结合仓库源码逐层拆解该包的模块结构与实现原理帮助读者理解 Feast 如何在feature_store.yaml一份配置的驱动下将特征定义翻译成可运行的存储与计算资源。从 API 参考文档看 feast.infra 的整体架构feast.infra.rst 是 Sphinx API 文档的入口页它定义了feast.infra包的公开 API 边界**10 个子包Subpackages**与5 个直接子模块Submodules。直接子模块即本包的核心实现文件feast.infra.infra_object基础设施对象抽象InfraObject与Infrafeast.infra.key_encoding_utils实体键Entity Key的序列化/反序列化工具feast.infra.passthrough_provider默认的直通式 Provider 实现feast.infra.providerProvider 抽象基类与工厂函数feast.infra.supported_async_methodsProvider/存储层异步能力声明。10 个子包则分别承载具体的插件实现common通用类型如物化任务、compute_engines计算引擎、contrib社区贡献模块、feature_servers特征服务器、mcp_serversMCP 特征服务器、offline_stores离线存储、online_stores在线存储、registry注册表存储、transformation_servers转换服务器、utils工具函数。在源码中sdk/python/feast/infra/ 目录与文档一一对应且还额外包含data_sources数据源、materialization相关目录等 RST 未列出的实现文件说明该 RST 只暴露了部分公开接口完整实现比文档更丰富。核心抽象Provider 如何编排特征存储组件Provider 抽象基类provider.py 中的Provider抽象基类是feast.infra的总指挥其文档字符串明确了职责定义一个特征存储对象的实现编排离线存储、在线存储与物化引擎并通过 RepoConfig 配置。它声明的抽象方法覆盖了特征存储的完整生命周期基础设施编排update_infra对账云资源与 Feast 对象、plan_infra计算支撑目标注册表所需的 Infra、teardown_infra销毁资源数据写入online_write_batch批量写在线存储、online_write_batch_async、ingest_df、ingest_df_to_offline_store数据读取online_read、online_read_async、get_online_features、get_online_features_async、retrieve_online_documents向量检索、retrieve_online_documents_v2支持 BM25 关键字检索与过滤器历史特征get_historical_featuresPoint-in-Time 正确性联接、materialize_single_feature_view物化单个特征视图日志与数据源write_feature_service_logs、retrieve_feature_service_logs、validate_data_source、get_table_column_names_and_types_from_data_source生命周期initialize、close。值得注意retrieve_online_documents_v2的参数列表暴露了 Feast 向量检索能力支持embedding向量查询、query_stringBM25 关键字查询、filtersComparisonFilter/CompoundFilter元数据过滤、top_k与distance_metric对应 docs/reference/alpha-vector-database.md 中描述的向量数据库集成。工厂函数 get_provider从配置到实现类的映射provider.py 的get_provider(config)是配置驱动的核心入口PROVIDERS_CLASS_FOR_TYPE { gcp: feast.infra.passthrough_provider.PassthroughProvider, aws: feast.infra.passthrough_provider.PassthroughProvider, local: feast.infra.passthrough_provider.PassthroughProvider, azure: feast.infra.passthrough_provider.PassthroughProvider, unity_catalog: feast.infra.data_sources.contrib.iceberg_catalog.uc_provider.UnityCatalogProvider, }其解析逻辑为若config.provider不含.则视为内置别名并从上述映射表查取完整类路径否则将config.provider直接作为自定义 Provider 的完整模块路径格式foo.bar.MyProvider通过rsplit(., 1)拆出模块名与类名最后用import_class动态导入并实例化。这意味着用户既可以使用local、gcp等内置 provider也可以按 docs/how-to-guides/customizing-feast/creating-a-custom-provider.md 编写自定义 Provider 并配置为provider: my_module.MyProvider。PassthroughProvider默认的直通式实现设计思想与懒加载passthrough_provider.py 的PassthroughProvider是所有内置 providerlocal、gcp、aws、azure共用的实现其设计哲学正如类注释所言将全部操作直接委托给底层在线/离线存储与批量计算引擎自身不引入额外逻辑。它通过三个惰性属性lazy property按需实例化组件online_store首次访问时用get_online_store_from_config从 RepoConfig 的online_store段解析在线存储offline_store用get_offline_store_from_config解析离线存储batch_engine解析repo_config.batch_engine_config支持字符串或 dict 两种配置形式dict 必须含type字段并从 repo_config.py 的BATCH_ENGINE_CLASS_FOR_TYPE映射中解析计算引擎类通过import_class动态导入。基础设施对账plan / update / teardownplan_infra将期望的注册表状态交给在线存储的plan方法生成所需的Infra对象集合update_infra仅在配置了在线存储时调用online_store.update同时过滤出onlineTrue的特征视图tables_to_keep_online并把变更同时下发给batch_engine.updateteardown_infra则依次销毁在线存储与计算引擎的资源。这一计划-执行-销毁三阶段与feast apply/feast teardown命令的语义一一对应。特征读写与物化在线写入online_write_batch直接把(EntityKeyProto, {feature: ValueProto}, event_ts, created_ts)四元组列表转交给在线存储在线读取online_read/get_online_features将请求转交给在线存储支持full_feature_names将特征名从feature改写为feature_view__feature与特征视图版本元数据开关物化materialize_single_feature_view构造MaterializationTask后交给batch_engine.materialize并对OnDemandFeatureView校验write_to_online_store开关若任务状态为 ERROR 则抛出其携带的异常历史特征get_historical_features将 Point-in-Time 查询委托给离线存储的RetrievalJob并支持filter_by_created_timestamp能力校验日志回写write_feature_service_logs/retrieve_feature_service_logs把特征服务日志写回离线存储或按时间窗口拉取用于训练数据审计。InfraObject 与 Infra被 Feast 管理的基础设施对象infra_object.py 定义了基础设施的数据模型。InfraObject抽象基类代表单个由 Feast 管理的基础设施对象如在线存储中的表抽象方法包括to_infra_object_proto/to_proto序列化为 protobuf、from_infra_object_proto/from_proto反序列化、update部署或更新、teardown销毁。其序列化机制具有明显的多态设计from_infra_object_proto读取infra_object_class_type字段后通过_get_infra_object_class_from_type将字符串类路径如feast.infra.online_stores.datastore.DatastoreTable用import_class动态还原为具体类from_proto则按 protobuf 类型DatastoreTableProto、SqliteTableProto推断类类型。若无法识别抛FeastInvalidInfraObjectType异常。Infra是一个 dataclass封装List[InfraObject]提供to_proto/from_proto与注册表中的 Infra 记录互相转换使feast apply后基础设施状态可以持久化到注册表供后续对账使用。key_encoding_utils实体键的稳定二进制编码在线存储本质上是一个以实体键为 key 的哈希表因此实体键的序列化格式必须稳定且跨版本兼容。key_encoding_utils.py 的文档字符串明确指出之所以不能直接使用 protobuf 序列化是因为protobuf 不保证两个内容相同的消息序列化结果一致无法作为哈希表查找键。编码格式版本 3serialize_entity_key(entity_key, entity_key_serialization_version3)的字节布局为实体键数量I仅版本 2 时写入每个 join key类型标记ValueType.STRING 键长度 UTF-8 键字节每个值类型标记 值长度 值字节。单实体走快速路径免排序多实体则先按(join_key, value)排序再编码保证同一逻辑键的编码结果确定性一致。_serialize_val支持STRING、BYTES、INT32、INT64、UNIX_TIMESTAMP其中INT64在版本 ≤ 1 时用l4 字节否则用q8 字节体现了版本演进细节。配套工具函数deserialize_entity_key反向解码使用memoryview零拷贝切片优化并带边界校验serialize_entity_key_prefix仅编码实体键不含值用于在线存储的前缀扫描prefix-scan场景reserialize_entity_v2_key_to_v3将版本 2 的键重编码为版本 3对应 entity-reserialization-of-from-v2-to-v3.md 指南注意版本 3 的序列化已弃用调用时仅发 warning 而非报错用于兼容重序列化流程serialize_f32/deserialize_f32将 float 列表打包为紧凑的原始字节格式Nf服务于向量嵌入的在线存储编码。supported_async_methods异步能力声明随着在线存储引入异步读写Provider 需要向调用方声明自身能力。supported_async_methods.py 用两个 Pydantic 模型解决这一问题SupportedAsyncMethodsread/write布尔字段默认 False表示某个存储层是否支持异步读写ProviderAsyncMethods聚合在线存储的异步能力声明。PassthroughProvider.async_supported即通过ProviderAsyncMethods(onlineself.online_store.async_supported)向上传递。子包拆解六大插件体系online_stores在线存储插件族sdk/python/feast/infra/online_stores/ 是插件最丰富的目录支持 Redis、DynamoDB、Bigtable、Cassandra、Datastore、MySQL、PostgreSQL、SQLite、Snowflake、Aerospike、Couchbase、Elasticsearch、Hazelcast、HBase、MongoDB、SingleStore、ScyllaDB 以及向量存储Faiss、Milvus、Qdrant等完整清单见 docs/reference/online-stores/。基类 online_store.py 与 helpers.py 中的get_online_store_from_config负责按配置加载对应实现vector_store.py则封装了向量检索的公共逻辑retrieve_online_documents系列接口即在此层实现。offline_stores离线存储与历史特征查询sdk/python/feast/infra/offline_stores/ 提供 BigQuery、Redshift、Snowflake、DuckDB、Dask、Ibis、混合离线存储hybrid_offline_store以及contrib下的社区实现Athena、ClickHouse、MSSQL、PostgreSQL、Spark、Trino 等。基类 offline_store.py 定义的RetrievalJob是get_historical_features的返回载体负责执行 Point-in-Time 查询offline_utils.py提供get_offline_store_from_config工厂函数。registry注册表存储后端sdk/python/feast/infra/registry/ 支持本地文件、GCS、S3、Snowflake、SQL 数据库与远程注册表等多种后端详见 docs/reference/registries/。base_registry.py定义BaseRegistry抽象Provider 与存储层均依赖它caching_registry.py提供缓存层registry_store.py抽象底层存储proto_registry_utils.py提供 protobuf 读写工具。compute_engines物化与批量计算引擎sdk/python/feast/infra/compute_engines/ 是物化materialization能力的核心支持本地引擎、Spark、Snowflake、Ray、Flink、AWS Lambda 与 Kubernetes 等后端。base.py定义ComputeEngine接口materialize/update/teardown_infra等feature_builder.py、feature_resolver.py与dag/目录负责特征计算图构建与解析对应 docs/reference/compute-engine/ 中描述的计算引擎架构。feature_servers / mcp_servers / transformation_servers服务端组件feature_servers/local_process本地进程特征服务器对应feast serve与multicloud多云端部署两种模式base_config.py定义服务器配置基类详见 docs/reference/feature-servers/python-feature-server.mdmcp_servers/MCPModel Context Protocol特征服务器为 Agent/LLM 提供特征检索接口相关说明见 docs/reference/feature-servers/mcp-feature-server.mdtransformation_servers/On-Demand 转换的独立服务app.py Dockerfile用于在特征服务外执行 Python 转换逻辑。contrib 与 utils社区扩展与工具集sdk/python/feast/infra/contrib/ 存放社区贡献的集成代码如grpc_server.py、spark_kafka_processor.py流处理器sdk/python/feast/infra/utils/ 提供 AWS、HBase 及 ClickHouse / Couchbase / Postgres / Snowflake 等存储的底层工具函数。配置驱动实例一份 feature_store.yaml 如何激活整个 infra 体系以仓库中的真实示例 examples/agent_feature_store/feature_repo/feature_store.yaml 为代表的配置展示了feast.infra各组件如何被一份配置串联provider字段决定get_provider选择的 Provider 类online_store段由get_online_store_from_config解析为具体在线存储offline_store段同理batch_engine段则驱动物化引擎。feast apply时plan_infra→update_infra的对账流程在在线存储中创建表InfraObject并把 Infra 快照写入注册表feast materialize时materialize_single_feature_view经batch_engine生成物化任务线上推理时get_online_features通过key_encoding_utils.serialize_entity_key编码实体键后从在线存储读取。小结feast.infra包是 Feast Python SDK 的基础设施内核Provider及默认的PassthroughProvider负责统一编排InfraObject/Infra负责基础设施状态建模与持久化key_encoding_utils保障在线存储实体键的稳定编码supported_async_methods声明异步能力而五大插件子包在线/离线存储、注册表、计算引擎、特征服务器、社区扩展通过配置驱动 动态导入实现可插拔。理解这一架构无论是排查物化问题、接入新的在线存储还是编写自定义 Provider都能快速定位到对应的源码层级入口在 sdk/python/feast/infra/provider.py核心数据模型在 sdk/python/feast/infra/infra_object.py编码细节在 sdk/python/feast/infra/key_encoding_utils.py其余皆为可替换的插件实现。【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feast创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表