加入我们在Slack上的讨论!
👋👋👋 来Slack上打个招呼吧!
概述
Feast(Feature Store)是一个开源的机器学习特征存储。Feast是管理现有基础设施以将分析数据生产化用于模型训练和在线推理的最快途径。
Feast让机器学习平台团队能够:
- 通过管理离线存储(用于大规模批处理或模型训练的历史数据处理)、低延迟在线存储(用于实时预测),以及经过实战检验的特征服务器(在线提供预计算特征)来确保特征在训练和服务时的一致可用性。
- 通过生成时间点正确的特征集来避免数据泄露,从而使数据科学家能够专注于特征工程,而不是调试容易出错的数据集连接逻辑。这确保了未来特征值在训练期间不会泄露给模型。
- 通过提供单一的数据访问层解耦ML与数据基础设施,从而将特征存储从特征提取中抽象出来,确保模型在从训练到服务、从批处理到实时、以及从一个数据基础设施系统到另一个系统的迁移过程中保持可移植性。
请参阅我们的文档以获取有关该项目的更多信息。
📐 架构
上图是最小部署的Feast架构。想在Snowflake/GCP/AWS上运行完整的Feast?点击这里。
🐣 入门指南
1. 安装Feast
pip install feast
2. 创建一个特征库
feast init my_feature_repo
cd my_feature_repo/feature_repo
3. 注册您的特征定义并设置您的特征存储
feast apply
4. 在网页UI中探索您的数据(实验性功能)
feast ui
5. 构建一个训练数据集
from feast import FeatureStore
import pandas as pd
from datetime import datetime
entity_df = pd.DataFrame.from_dict({
"driver_id": [1001, 1002, 1003, 1004],
"event_timestamp": [
datetime(2021, 4, 12, 10, 59, 42),
datetime(2021, 4, 12, 8, 12, 10),
datetime(2021, 4, 12, 16, 40, 26),
datetime(2021, 4, 12, 15, 1 , 12)
]
})
store = FeatureStore(repo_path=".")
training_df = store.get_historical_features(
entity_df=entity_df,
features = [
'driver_hourly_stats:conv_rate',
'driver_hourly_stats:acc_rate',
'driver_hourly_stats:avg_daily_trips'
],
).to_df()
print(training_df.head())
# 训练模型
# model = ml.fit(training_df)
event_timestamp driver_id conv_rate acc_rate avg_daily_trips
0 2021-04-12 08:12:10+00:00 1002 0.713465 0.597095 531
1 2021-04-12 10:59:42+00:00 1001 0.072752 0.044344 11
2 2021-04-12 15:01:12+00:00 1004 0.658182 0.079150 220
3 2021-04-12 16:40:26+00:00 1003 0.162092 0.309035 959
6. 将特征值加载到在线存储中
CURRENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S")
feast materialize-incremental $CURRENT_TIME
Materializing feature view driver_hourly_stats from 2021-04-14 to 2021-04-15 done!
7. 低延迟读取在线特征
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": 1001}]
).to_dict()
pprint(feature_vector)
# 做预测
# model.predict(feature_vector)
{
"driver_id": [1001],
"driver_hourly_stats__conv_rate": [0.49274],
"driver_hourly_stats__acc_rate": [0.92743],
"driver_hourly_stats__avg_daily_trips": [72]
}
📦 功能和路线图
以下列表包含贡献者计划为Feast开发的功能。
-
我们欢迎对路线图上的所有项目做出贡献!
-
数据源
-
离线存储
-
在线存储
-
特征工程
-
流处理
-
部署
-
特征服务
- Python 客户端
- Python 特征服务器
- Java 特征服务器(阿尔法版)
- Go 特征服务器(阿尔法版)
-
数据质量管理(查看 RFC)
- 数据分析和校验(Great Expectations)
-
特征发现和治理
- 浏览特征注册表的 Python SDK
- 浏览特征注册表的 CLI
- 以模型为中心的特征跟踪(特征服务)
- Amundsen 集成(查看 Feast extractor)
- DataHub 集成(查看 DataHub Feast 文档)
- Feast Web UI(测试版发布。查看 文档)
🎓 重要资源
请参考官方文档 文档
👋 贡献
Feast 是一个社区项目,仍在积极开发中。如果您希望为该项目做出贡献,请查看我们的贡献和开发指南:
✨ 贡献者
感谢这些不可思议的人们: