尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Feast Local 模板快速入门:从零搭建本地 Feature Store 并跑通全链路

发布时间:2026/9/17 22:19:55

资讯中心
01
ARTICLE

Feast Local 模板快速入门:从零搭建本地 Feature Store 并跑通全链路

Feast Local 模板快速入门:从零搭建本地 Feature Store 并跑通全链路
Feast Local 模板快速入门从零搭建本地 Feature Store 并跑通全链路【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feast本文基于 Feast 官方local模板README.md面向初次接触 Feast 的开发者完整讲解如何通过feast init -t local生成一个可运行的本地 Feature Store 项目逐行剖析模板中的 feature 定义与配置文件跑通「定义特征 → 生成训练数据 → 物化在线特征 → 在线检索 → 流式推数」的完整闭环并给出从本地开发走向生产部署的升级路线。一、模板概览local 模板里有什么local模板位于仓库 sdk/python/feast/templates/local/ 目录feast init -t local会把它复制到用户指定的目录。生成后的 feature 仓库包含四类内容文件/目录作用data/存放原始演示用的 parquet 数据feature_repo/feature_definitions.py演示用的特征定义Entity、FeatureView、FeatureService 等feature_repo/feature_store.yaml演示配置声明数据源、Registry、Provider 等指向哪里feature_repo/test_workflow.py展示 Feast 全部关键命令的脚本定义、检索、推送特征整个流程可以一条命令跑完python test_workflow.pytest_workflow.py内部依次执行了feast apply、离线特征获取训练与批量打分两种模式、materialize_incremental物化、在线特征获取三种途径直接取特征、经 FeatureService、经 PushSource 驱动的 FeatureView、store.push模拟流式推数最后执行feast teardown清理资源。这正是 Feast 从注册到离在线检索的完整生命周期。二、模板机制feast init是如何生成项目的local模板之所以能直接运行背后依赖 Feast CLI 的模板机制相关实现见 sdk/python/feast/cli/cli.py 与 sdk/python/feast/repo_operations.pyfeast init [目录名] -t local会先校验项目名只能由字母、数字、下划线、连字符组成且不能以下划线或连字符开头见is_valid_name随后把sdk/python/feast/templates/local/整目录拷贝到目标路径如果模板目录里有bootstrap.pysdk/python/feast/templates/local/bootstrap.pyCLI 会动态导入并执行其中的bootstrap()函数然后用完即删最后将feature_store.yaml里的project: my_project替换为用户传入的项目名。bootstrap.py完成了三件关键的事对应实现见 bootstrap.py调用create_driver_hourly_stats_df定义于 sdk/python/feast/driver_test_data.py为司机 1001~1005 生成最近 15 天、按小时采样的模拟特征数据并写成data/driver_stats.parquet用 pyarrow 显式 schema 生成一个空的data/driver_quality_labels.parquet作为 Label View 的批数据源把feature_definitions.py中的%PROJECT_NAME%、%PARQUET_PATH%、%LOGGING_PATH%、%LABEL_DATA_PATH%四个占位符替换为真实路径。其他可用模板可通过feast init --help查看模板名与sdk/python/feast/templates/下的目录一一对应gcp、aws、snowflake、spark、postgres、minimal等。三、配置文件解析feature_store.yamllocal 模板生成的 feature_store.yaml 是理解 Feast 配置的起点project: my_project # 默认 Registry 是文件可换成更可扩展的 SQL 后端 registry: data/registry.db # provider 主要指定默认的离线/在线存储以及在给定云上存储 Registry 的方式 provider: local online_store: type: sqlite path: data/online_store.db entity_key_serialization_version: 3 # 默认 no_auth不做认证授权可选 kubernetes、oidc详见文档 auth: type: no_auth各配置项含义如下projectFeature Store 的命名空间模板中以Project对象在代码中对应见下文 feature_definitions.py 第 25 行。所有 FeatureView、FeatureService 都归属于某个 projectregistry特征注册表元数据存储。local 模板使用本地 SQLite 文件data/registry.db仅适合本地开发生产环境应换成 S3/GCS 上的远程文件或 SQL 数据库详见 Registry 概念providerlocal表示使用本地离线存储文件与本地在线存储SQLite。切换 provider 即切换整套默认存储例如feast init -t gcp会默认接入 BigQueryonline_store在线存储类型为sqlite路径为data/online_store.db用于支撑毫秒级的在线特征检索entity_key_serialization_version实体键序列化版本3是当前推荐版本仓库内还提供 v2 到 v3 的重序列化指南见 entity-reserialization-of-from-v2-to-v3.mdauth默认no_auth生产可切换为kubernetes或oidc参见 认证文档。四、特征定义逐行解析feature_definitions.py模板的核心是 feature_definitions.py它演示了 Feast 特征建模的几乎所有核心抽象。4.1 Project 与 Entityproject Project(name%PROJECT_NAME%, descriptionA project for driver statistics) driver Entity(namedriver, join_keys[driver_id])Project声明了该仓库所属的命名空间Entity定义了特征的主体——司机driver其join_keys[driver_id]相当于查询特征时使用的主键。4.2 数据源 FileSourcedriver_stats_source FileSource( namedriver_hourly_stats_source, pathdata/driver_stats.parquet, timestamp_fieldevent_timestamp, created_timestamp_columncreated, )parquet 文件是本地开发最便捷的数据源生产环境可换成 BigQuery、Snowflake、Redshift 等数仓。timestamp_field用于 point-in-time joincreated_timestamp_column用于去重。4.3 FeatureView特征的核心容器driver_stats_fv FeatureView( namedriver_hourly_stats, entities[driver], ttltimedelta(days1), schema[ Field(nameconv_rate, dtypeFloat32), Field(nameacc_rate, dtypeFloat32), Field(nameavg_daily_trips, dtypeInt64, descriptionAverage daily trips), Field(namedriver_metadata, dtypeMap, descriptionDriver metadata as key-value pairs), Field(namedriver_config, dtypeJson, descriptionDriver configuration as JSON), Field(namedriver_profile, dtypeStruct({name: String, age: String}), descriptionDriver profile as a typed struct), ], onlineTrue, sourcedriver_stats_source, tags{team: driver_performance}, enable_validationTrue, versionlatest, )模板刻意展示了 Feast 的类型系统对应 docs/reference/type-system.md 与 feast/typesFloat32/Int64基础数值类型Map键值对类型driver_metadata用它承载{vehicle_type: truck, rating: 5.0}这类数据Json任意 JSON 文档Struct结构化嵌套类型driver_profile声明了{name: String, age: String}的字段结构。schema既用于特征物化入库也用于检索时构建训练数据集或在线服务特征是离线训练/在线服务同构的关键。ttl控制特征在在线存储中的过期时间onlineTrue表示该特征需物化到在线存储。4.4 RequestSource 与 On-demand 变换input_request RequestSource( namevals_to_add, schema[Field(nameval_to_add, dtypeInt64), Field(nameval_to_add_2, dtypeInt64)], ) on_demand_feature_view( sources[driver_stats_fv, input_request], schema[ Field(nameconv_rate_plus_val1, dtypeFloat64), Field(nameconv_rate_plus_val2, dtypeFloat64), ], ) def transformed_conv_rate(inputs: pd.DataFrame) - pd.DataFrame: df pd.DataFrame() df[conv_rate_plus_val1] inputs[conv_rate] inputs[val_to_add] df[conv_rate_plus_val2] inputs[conv_rate] inputs[val_to_add_2] return dfRequestSource描述请求时刻才有的特征如 HTTP 请求携带的实时数值on_demand_feature_view定义按需变换把已有 FeatureView 特征与请求参数组合计算出新特征属于对 ADR-0003-on-demand-transformations 的落地示范。4.5 FeatureService面向模型版本的特征分组driver_activity_v1 FeatureService( namedriver_activity_v1, features[ driver_stats_fv[[conv_rate]], # 子选择某个特征 transformed_conv_rate, # 选择全部特征 ], logging_configLoggingConfig(destinationFileLoggingDestination(pathdata/)), ) driver_activity_v2 FeatureService( namedriver_activity_v2, features[driver_stats_fv, transformed_conv_rate] )FeatureService把特征打包成模型版本粒度支持特征子选择如driver_stats_fv[[conv_rate]]并可为服务挂载特征日志写入FileLoggingDestination。4.6 PushSource流式新鲜特征driver_stats_push_source PushSource( namedriver_stats_push_source, batch_sourcedriver_stats_source, ) driver_stats_fresh_fv FeatureView( namedriver_hourly_stats_fresh, entities[driver], ttltimedelta(days1), schema[...], onlineTrue, sourcedriver_stats_push_source, # 与上面的 FV 区别仅在此 tags{team: driver_performance}, versionlatest, )PushSource在批数据源之上叠加推入通道流数据可直接store.push()到在线存储让特征秒级变新。注意driver_stats_fresh_fv与driver_stats_fv的 schema、TTL 完全一致唯一区别是 source 换成了 PushSource——这说明了流式特征与批特征建模的统一方式。对应流式变换的设计见 ADR-0005-stream-transformations。4.7 LabelView可变的训练标签driver_quality_labels_source PushSource( namedriver_quality_labels_push, batch_sourceFileSource( namedriver_quality_labels_batch, pathdata/driver_quality_labels.parquet, timestamp_fieldevent_timestamp, ), ) driver_quality_labels LabelView( namedriver_quality_labels, entities[driver], schema[ Field(nameis_reliable, dtypeInt64), Field(namequality_score, dtypeFloat32), Field(namereviewer_notes, dtypeString), Field(namelabeler, dtypeString), ], sourcedriver_quality_labels_source, labeler_fieldlabeler, conflict_policyConflictPolicy.LAST_WRITE_WINS, descriptionHuman quality labels for drivers - used for model training and evaluation, tags{ feast.io/labeling-method: table, feast.io/field-role:is_reliable: label, feast.io/label-values:is_reliable: 1 0, feast.io/label-widget:is_reliable: binary, feast.io/label-widget:quality_score: number, feast.io/label-widget:reviewer_notes: text, }, )LabelView用于管理训练数据、RLHF、评估所需的可变人类标签标签数据通过 PushSource 从 UI 或外部工具提交conflict_policyConflictPolicy.LAST_WRITE_WINS定义并发写入的冲突策略后写覆盖labeler_field标记标注者字段tags用feast.io/field-role:*、feast.io/label-widget:*等约定描述字段角色与 UI 渲染方式。这是 ADR-0012-label-view 的工程落地。五、端到端工作流test_workflow.py 全流程拆解test_workflow.py 是理解 Feast 常用 API 的最佳样例python test_workflow.py一次性演示了六大环节5.1 注册feast applystore FeatureStore(repo_path.) subprocess.run([feast, apply])apply把 feature_definitions.py 中的定义注册到 Registry是后续一切操作的前提。5.2 离线特征训练与批量打分entity_df pd.DataFrame.from_dict({ driver_id: [1001, 1002, 1003], # 实体 join key event_timestamp: [datetime(2021, 4, 12, 10, 59, 42), ...], # 保留关键字 label_driver_reported_satisfaction: [1, 5, 3], # 可选标签Feast 不处理 val_to_add: [1, 2, 3], # 供 on-demand 变换使用 val_to_add_2: [10, 20, 30], }) training_df store.get_historical_features( entity_dfentity_df, features[ driver_hourly_stats:conv_rate, driver_hourly_stats:acc_rate, driver_hourly_stats:avg_daily_trips, transformed_conv_rate:conv_rate_plus_val1, transformed_conv_rate:conv_rate_plus_val2, ], ).to_df()get_historical_features基于 entity_df 执行point-in-time join原理见 docs/getting-started/concepts/point-in-time-joins.md返回可用于训练或批量打分的 DataFrame。批量打分模式只需把event_timestamp统一设为当前时间pd.to_datetime(now, utcTrue)即取每个实体最新时刻的特征。5.3 物化materialize_incrementalstore.materialize_incremental(end_datedatetime.now())把离线数据源中的特征按 TTL 窗口增量写入在线存储支撑低延迟检索。定时物化如借助 Airflow正是生产环境的标准做法参见 数据接入概念。5.4 在线特征检索三种途径# 途径一直接列出特征引用 returned_features store.get_online_features( features[ driver_hourly_stats:acc_rate, driver_hourly_stats:driver_metadata, driver_hourly_stats:driver_config, driver_hourly_stats:driver_profile, transformed_conv_rate:conv_rate_plus_val1, transformed_conv_rate:conv_rate_plus_val2, ], entity_rows[{driver_id: 1001, val_to_add: 1000, val_to_add_2: 2000}, ...], ).to_dict() # 途径二经 FeatureService features_to_fetch store.get_feature_service(driver_activity_v1) # 途径三经 PushSource 驱动的新鲜特征服务 features_to_fetch store.get_feature_service(driver_activity_v3)其中 entity_rows 需同时携带 on-demand 变换所需的val_to_add请求字段途径三取的是以driver_hourly_stats_freshPushSource 版为基础的driver_activity_v3服务。5.5 流式推数store.pushevent_df pd.DataFrame.from_dict({ driver_id: [1001], event_timestamp: [datetime.now()], created: [datetime.now()], conv_rate: [1.0], acc_rate: [1.0], avg_daily_trips: [1000], driver_metadata: [{vehicle_type: truck, rating: 5.0}], driver_config: [json.dumps({max_distance_km: 500, preferred_zones: [north]})], driver_profile: [{name: driver_1001_updated, age: 30}], }) store.push(driver_stats_push_source, event_df, toPushMode.ONLINE_AND_OFFLINE)store.push模拟一次流事件toPushMode.ONLINE_AND_OFFLINE表示同时写入在线存储与离线存储其他模式见feast.data_source.PushMode。推数后再次查询driver_activity_v3即可看到 driver 1001 的conv_rate已更新为 1.0——这就是流式特征实时可用的直观演示。随后feast teardown清理 Registry 与存储资源。六、从本地走向生产升级路线local 模板的目标是本地快速验证生产部署需要按以下顺序演进详见 Running Feast in production更换模板/离线存储local使用文件离线存储不可扩展。改用可扩展离线存储的模板例如feast init -t gcp、feast init -t aws、feast init -t snowflake具体选项运行feast init --help查看当前仓库 templates 目录还提供spark、postgres、athena等模板见 sdk/python/feast/templates/。推荐用 BigQuery、Snowflake、Redshift 等数仓Spark 目前为实验性支持Registry 上云/上库feature_store.yaml默认指向本地文件data/registry.db生产应改用远程文件S3/GCS或 SQL Registry参见 Registry 概念 及 SQL Registry 参考搭建 CI/CD 与多环境按 dev / staging / prod 分离环境在特征定义变更时自动更新 Registry可选定时物化通过 Airflow 等调度器定期执行批量物化保证在线特征低延迟可用见 数据接入 中的批式物化可选部署特征服务feast serve启动 Python 特征服务暴露 HTTP 接口供在线检索详见 Python Feature Server业务方也可以直接在代码中调用 Feast 客户端取特征特征检索。七、小结local模板虽然体量小却完整覆盖了 Feast 的核心心智模型Entity 定义主体、FeatureView 组织特征、FeatureService 面向模型版本、PushSource/LabelView 支撑流式与标签场景外加apply → get_historical_features → materialize → get_online_features → push → teardown的全链路 API。先跑通python test_workflow.py再按上文路线逐级替换离线存储、Registry 与部署形态即可平滑地从本地原型演进为生产级 Feature Store。【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feast创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。