Feast:开源特征存储,用于以亚秒级延迟提供机器学习特征——2026 安装指南
Complete guide to Feast — the leading open-source feature store. Covers feature registry, online/offline stores, sub-second serving, Redis/BigQuery backends, batch & real-time features, and production deployment.
- Apache-2.0
- 更新于 2026-05-19
{{< 资源信息 >}} ## 简介:200ms 特征工程危机 一家运行实时欺诈检测的金融科技初创公司发现,他们的推理延迟在高峰时段飙升至 800 毫秒。 罪魁祸首不是模型,而是特征检索管道。 每个预测都会触发 7 个单独的数据库查询、2 个对外部服务的 API 调用以及即时计算的实时聚合。 训练服务偏差导致离线评估和实时预测之间的准确度下降12%。 这就是特征工程危机,它悄无声息地摧毁了生产机器学习系统。 如果没有集中式特征存储,每个团队都会构建自定义特征管道,训练和服务之间的特征会有所不同,实时推理将成为延迟噩梦。 Feast (Feature Store) 解决了这个问题。 Feast 拥有 7,000 多名 GitHub 明星、361 名贡献者和最新版本 v0.63.0(2026 年 5 月),是采用最广泛的开源功能存储。 Feast 最初由 GO-JEK 开发,现在是 Apache-2.0 下的 Linux 基金会 项目,它提供了一个统一的层,用于定义、存储和提供亚秒级延迟的 ML 功能。 在本指南中,您将安装 Feast、配置在线 (Redis) 和离线 (BigQuery) 存储、定义功能视图、通过 REST API 提供功能以及部署经过生产强化的功能存储 — 所有这些都将在 30 分钟内完成。 ## 什么是盛宴? Feast 是一个开源特征存储,为定义、注册、存储和服务 ML 特征提供统一的接口。 它将特征存储分为两层:用于训练数据生成(批量、历史查询)的 离线存储 和用于实时特征服务(亚秒级查找)的 在线存储。 中央功能注册表跟踪所有功能定义、元数据和沿袭。 主要功能一览: - 功能注册表:功能定义的中央目录,以代码版本化,可跨团队搜索和重用
- 离线存储:批量检索历史特征以进行模型训练——支持BigQuery、Snowflake、Redshift、DuckDB、Spark
- 在线商店:用于实时推理的亚秒级 (p99 < 10ms) 功能查找 — 支持 Redis、DynamoDB、Bigtable、SQLite、Dragonfly
- 时间点连接:正确检索历史特征值,防止训练中数据泄漏
- 物化:按计划将计算特征从离线同步到在线商店
- 特征服务器:基于Go的高性能REST/gRPC服务器,用于特征检索
- 流功能:与 Kafka、Kinesis 和 Spark Streaming 集成以进行实时特征计算 Feast 不**计算特征——它存储并提供由数据管道(Spark、Airflow、dbt 等)生成的预先计算的特征。 这种设计使 Feast 保持轻量级,同时与您现有的数据基础设施集成。 ## 盛宴如何运作:架构深度探究 Feast架构由四个核心组件组成: ### 1. 功能注册表 注册表是Feast的大脑。 它将所有功能定义存储为代码(在“feature_store.yaml”和 Python 文件中),并将元数据保存到后端 — 文件(本地、S3、GCS)或 SQL 数据库(PostgreSQL、MySQL): ```` yam l
项目:欺诈检测 提供者:本地 注册表: path: s3://my-bucket/registry.db # 用于生产的 SQL 注册表 在线商店: 类型:redis 连接字符串:“redis://localhost:6379” 离线商店: 类型:大查询 项目: my-gcp-project 数据集:fest_offline 实体密钥序列化版本:2
- **批量评分**:批量预测的大规模特征检索 支持的后端:**BigQuery、Snowflake、Redshift、Spark、DuckDB、PostgreSQL、Trino** ````蟒蛇
# 检索历史特征进行训练
从盛宴导入FeatureStore 商店=FeatureStore(repo_path =“。”) Historical_df = store.get_historical_features( entity_df=entity_df, # 带有实体 ID 和时间戳的 DataFrame 特征=[ “用户特征:avg_order_amount_30d”, “用户特征:total_transactions_90d”, "user_features:days_since_last_order", ],
).to_df()
```` `get_historical_features()` 调用执行**时间点连接** - 它检索在 `entity_df` 中指定的时间戳处存在的每个特征值。 这可以防止数据泄漏,这是机器学习训练管道中最常见的错误之一。 ### 3. 网上商店 在线商店是一个用于实时功能服务的低延迟键值数据库。 在推理过程中,模型服务器请求给定实体 ID 的最新特征值,在线商店会在 10 毫秒内返回结果 (p99)。 支持的后端:**Redis、Redis Cluster、Dragonfly、DynamoDB、Bigtable、Cassandra、SQLite、PostgreSQL、MySQL** ````蟒蛇
# 检索在线特征以进行实时推理
功能 = store.get_online_features( 特征=[ “用户特征:avg_order_amount_30d”, “用户特征:total_transactions_90d”, ], entity_rows=[{"user_id": "user_12345"}],
).to_dict() # 返回:{'avg_order_amount_30d': [245.50], 'total_transactions_90d': [12]}
```` ### 4. 特征服务器 Feast 特征服务器是一种基于 Go 的高性能服务,通过 REST 和 gRPC 公开特征检索。 将其部署为模型服务基础设施(KServe、Seldon、自定义)旁边的边车: ````
bas
h
# 启动特征服务器
盛宴服务--端口6566 # 用于特征检索的 REST API 端点
卷曲-X POST“http://localhost:6566/get-online-features”\ -H“内容类型:application/json”\ -d'{ “功能”:[“用户功能:avg_order_amount_30d”], “实体”:{“user_id”:[“user_12345”]} }'
```` ## 安装和设置:不到 5 分钟 Feast 需要 Python 3.9+ 和 pip。 安装您想要的后端: ````
bas
h
# 核心盛宴(最少)
pip 安装盛宴 # 使用 BigQuery 线下商店
pip install "盛宴[bigquery]" # 使用Redis在线商店
pip install "盛宴[redis]" # 与雪花
pip install "盛宴[雪花]" # 使用 PostgreSQL
pip install "盛宴[postgres]" # 完全安装所有常见后端
pip install "盛宴[gcp,redis,postgres,snowflake]"
```` 验证安装: ````
bas
h
盛宴版
#盛宴SDK版本:0.63.0
```` 初始化一个新的 Feast 项目: ````
bas
h
# 创建并进入项目目录
mkdir Fraud_Detection_feature_store
cd 欺诈_检测_特征_存储 # 初始化 Feast(创建 feature_store.yaml 和 example/)
盛宴初始化 # 项目结构:
#. # ├── feature_store.yaml # 主要配置
# ├── 例子/
# │ ├── 仓库/
# │ │ ├── example.py # 特征定义
# │ │ └── test_workflow.py
```` ## 定义特征:实体、特征视图和特征服务 Feast 围绕**实体**(模型进行预测的对象)和**特征视图**(从数据源计算的相关特征组)组织特征。 ### 第 1 步:定义实体 ````蟒蛇
# 特征/实体.py
从盛宴导入实体,ValueType # 定义我们的欺诈模型的主要实体
用户=实体( 名称=“用户id”, value_type=ValueType.STRING, 描述=“每个用户的唯一标识符”, join_key="user_id",
)
```` ### 步骤 2:定义数据源 ````蟒蛇
# 特征/data_sources.py
从盛宴导入 BigQuerySource # 线下商店的历史数据源
transaction_stats_source = BigQuerySource( 名称=“交易统计”, 查询=“” 选择 用户身份, 事件时间戳, 平均订单金额_30d, 总交易数 90 天, 自上次订单以来的天数, unique_merchants_30d, avg_transaction_amount_7d, failed_transaction_rate_30d, 已创建 来自`my-gcp-project.featds.transaction_aggregates` """, 时间戳字段=“事件时间戳”, created_timestamp_column="已创建",
)
```` ### 步骤 3:定义特征视图 ````蟒蛇
# 功能/feature_views.py
从盛宴导入FeatureView、Field
从fest.types导入Float32,Int64,Float64
从日期时间导入时间增量
从 features.entities 导入用户
从 features.data_sources 导入 transaction_stats_source # 具有滑动窗口聚合的特征视图
user_transaction_features = 特征视图( 名称=“user_transaction_features”, 实体=[用户], ttl=timedelta(days=90), # 功能有效期为 90 天 架构=[ 字段(名称=“avg_order_amount_30d”,dtype=Float64), 字段(名称=“total_transactions_90d”,dtype=Int64), 字段(名称=“days_since_last_order”,dtype=Int64), 字段(名称=“unique_merchants_30d”,dtype=Int64), 字段(名称=“avg_transaction_amount_7d”,dtype=Float64), 字段(名称=“failed_transaction_rate_30d”,dtype=Float32), ], online=True, # 从在线商店(Redis)提供服务 来源=交易统计来源, Tags={"team": "fraud", "domain": "transactions"}, 所有者=“ml-team@company.com”,
)
```` ### 步骤 4:定义要素服务 ````蟒蛇
# 功能/feature_services.py
从盛宴导入FeatureService
从 features.feature_views 导入 user_transaction_features # 特征服务——模型使用的接口
欺诈检测_v1 = 功能服务( 名称=“fraud_detection_v1”, 特征=[用户交易特征], 标签={"version": "1.0", "model": "fraud_xgboost"}, 所有者=“ml-team@company.com”,
)
```` ### 第 5 步:应用并实现 ````
bas
h
# 将功能定义应用到注册表
盛宴适用 # 将线下商店的功能实体化到线上商店
#(用最新的特征值填充Redis)
盛宴物化增量 $(date -u +"%Y-%m-%dT%H:%M:%S") # 或者具体化一个特定的时间范围
盛宴实现 2026-01-01T00:00:00 2026-05-19T00:00:00
```` ## 生产配置:Redis + BigQuery 对于生产部署,Redis + BigQuery 组合可提供性能、成本和可扩展性的最佳平衡。 ### feature_store.yaml(生产) ````
yam
l
# feature_store.yaml — 生产配置
项目:欺诈检测
提供商:gcp
注册表: 注册表存储类型:sql 路径:“postgresql://user:pass@pg-host:5432/feast_registry” 缓存生存时间:60 在线商店: 类型:redis 连接字符串:“redis://:password@redis-cluster.internal:6379” key_ttl_seconds: 604800 # 功能密钥的 7 天 TTL 离线商店: 类型:大查询 项目: my-gcp-project 数据集:fest_offline 地点:美国 实体密钥序列化版本:2 标志: alpha_features:true on_demand_transforms: true
```` ### Redis 在线商店配置 对于亚毫秒级服务,请使用具有适当分片的 Redis 集群: ````
yam
l
# Redis集群配置
在线商店: 类型:redis redis_type:redis_cluster 连接字符串:“redis://redis-node-1:6379,redis-node-2:6379,redis-node-3:6379” key_ttl_秒:604800
```` ### 在 VPS 上部署 Redis 对于自托管部署,DigitalOcean
提供托管 Redis 集群,起价为 15 美元/月,并具有自动故障转移功能。 或者,在 Droplet 上部署 Redis: ````
bas
h
# 在 Ubuntu 22.04 (DigitalOcean Droplet) 上部署 Redis
须藤apt更新
sudo apt install redis 服务器 # 配置生产环境
sudo tee -a /etc/redis/redis.conf <<EOF
最大内存2GB
最大内存策略 allkeys-lru
绑定0.0.0.0
保护模式 是
requirefeaturerequirepass your_secure_password
EOF sudo systemctl 重新启动redis # 验证
redis-cli ping
#乒乓球
```` ## 与 ML 管道集成 ### 训练管道集成(Python SDK) ````蟒蛇
# 训练管道.py
从盛宴导入FeatureStore
将 pandas 导入为 pd
将 xgboost 导入为 xgb
从 sklearn.model_selection 导入 train_test_split # 初始化特征存储
商店=FeatureStore(repo_path =“。”) # 加载带标签的实体DataFrame (user_id + 目标时间戳 + 标签)
entity_df = pd.read_parquet(“s3://training-data/labeled_users.parquet”) # 检索时间点正确的特征
feature_service = store.get_feature_service("fraud_detection_v1")
Training_df = store.get_historical_features( 实体_df =实体_df, 功能=功能服务,
).to_df() # 分割并训练
X = Training_df.drop(columns=["user_id", "event_timestamp", "is_fraud"])
y = Training_df["is_fraud"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 模型 = xgb.XGBClassifier( 最大深度=6, 学习率=0.1, n_估计器=200, 子样本=0.8,
)
model.fit(X_train, y_train) # 评估
print(f"AUC-ROC: {roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]):.4f}")
```` ### 实时推理集成 ````蟒蛇
# 推理服务.py
从盛宴导入FeatureStore
从 fastapi 导入 FastAPI
将 xgboost 导入为 xgb
导入作业库 应用程序 = FastAPI()
商店=FeatureStore(repo_path =“。”)
model = joblib.load("models/fraud_xgboost.pkl") @app.post("/预测")
异步 def 预测(user_id:str,transaction_amount:float): # 从 Redis 检索在线特征(< 5ms) 功能 = store.get_online_features( 特征=[ “user_transaction_features:avg_order_amount_30d”, “user_transaction_features:total_transactions_90d”, “user_transaction_features:days_since_last_order”, “user_transaction_features:unique_merchants_30d”, “user_transaction_features:failed_transaction_rate_30d”, ], entity_rows=[{"user_id": user_id}], ).to_dict() # 构建特征向量 特征向量 = [ 交易金额, 特征[“avg_order_amount_30d”][0], 特征[“total_transactions_90d”][0], 特征[“days_since_last_order”][0], 特征["unique_merchants_30d"][0], 特征[“failed_transaction_rate_30d”][0], ] # 预测 欺诈概率 = model.predict_proba([feature_vector])[0][1] 返回 { “用户id”:用户id, “欺诈概率”:浮动(欺诈概率), “is_fraud”:欺诈概率 > 0.7, "features_retrieved": {k: v[0] for k, v in features.items()}, }
```` ### 用于物化的气流 DAG ````蟒蛇
# dags/feast_materialize.py
从气流导入 DAG
从airflow.operators.bash导入BashOperator
从日期时间导入日期时间,时间增量 默认参数 = { “所有者”:“ml-团队”, “depends_on_past”:错误, “email_on_failure”:正确, “重试”:2, “重试延迟”:timedelta(分钟= 5),
} 与 DAG( “盛宴具体化”, 默认参数=默认参数, Schedule_interval =“@每小时”, 开始日期 = 日期时间(2026, 1, 1), 追赶=假,
) 作为达格: 实现 = BashOperator( task_id =“materialize_features”, bash_命令=“”“ cd /opt/feast/fraud_detection_feature_store && \ 盛宴物化增量 {{ ds }}T{{ ts_nodash_with_tz }} """, ) 验证 = BashOperator( task_id =“validate_online_store”, bash_命令=“”“ cd /opt/feast/fraud_detection_feature_store && \ python 脚本/validate_online_features.py """, ) 实现>>验证
```` ## 基准测试和实际用例 Feast 为从初创公司到大型企业的各种公司的生产机器学习系统提供支持。 以下是性能基准和采用指标: | 公制| 价值| 来源 |
|
💬 留言讨论