Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Feast & Redis Quickstart: Xây Dựng Feature Store ML Mở Rộng Trong Phút

Hướng dẫn này cung cấp một Feast for Redis quickstart bước بخط dẫn bạn qua một ví dụ end-to-end sử dụng Feast với Redis làm online feature store cho machine learning. Nó dựa trên hướng dẫn Feast Quickstart, nhưng thay vì dùng online store mặc định, nó dùng Redis online store để cung cấp dự đoán thời gian thực ở quy mô lớn. Nếu bạn chưa quen với Feast hoặc Redis, thì cách nhanh nhất để bắt đầu với Feast dùng Redis là qua hướng dẫn này. Vui lòng tham khảo bài viết blog Feature Stores and Feast using Redis để có giới thiệu cấp cao. Thông tin chi tiết hơn về Redis và Feast, cũng như tài nguyên bổ sung, có sẵn ở cuối hướng dẫn này.

Trong hướng dẫn này bạn sẽ:

  1. Triển khai một feature store cục bộ với Parquet file offline store và Redis online store.
  2. Xây dựng tập dữ liệu huấn luyện (training dataset) sử dụng các feature chuỗi thời gian demo từ các file Parquet.
  3. Materialize (nạp) giá trị feature từ offline store vào Redis online store.
  4. Đọc các feature mới nhất từ Redis online store cho suy luận (inference).

Bạn có thể chạy hướng dẫn trên Google Colab hoặc trên localhost của bạn theo các bước được hướng dẫn dưới đây.

Feast & Redis Quickstart: Xây Dựng Feature Store ML Mở Rộng Trong Phút

Feast trong vỏ hạt dẻ:

Feast (Feature store) là một feature store mã nguồn mở và là một phần của Linux Foundation AI & Data Foundation. Nó có thể phục vụ dữ liệu feature cho mô hình từ một online store độ trễ thấp (cho phục vụ thời gian thực) hoặc một offline store (cho huấn luyện mô hình hoặc phục vụ batch). Nó cũng cung cấp một registry trung tâm để kỹ sư machine learning và khoa học dữ liệu có thể khám phá các feature liên quan cho các trường hợp sử dụng ML. Dưới đây là kiến trúc cấp cao của Feast:

Feast là một thư viện Python + CLI tùy chọn. Bạn có thể cài đặt Feast bằng pip, như sẽ được mô tả sớm trong hướng dẫn này.

Feast với Redis giải quyết một số vấn đề phổ biến trong luồng này:

  1. Training-serving skew và join dữ liệu phức tạp: Giá trị feature thường tồn tại trên nhiều bảng. Join các tập dữ liệu này có thể phức tạp, chậm, và dễ lỗi.
    • Feast join các bảng này với logic đã được kiểm chứng đảm bảo tính đúng đắn theo thời điểm (point-in-time correctness) để giá trị feature trong tương lai không rò rỉ vào mô hình.
  2. Tính sẵn sàng feature online với độ trễ thấp và quy mô lớn: Tại thời điểm suy luận, mô hình thường cần truy cập feature không sẵn sàng và cần được precomputed từ các nguồn dữ liệu khác theo thời gian thực.
    • Bằng cách triển khai Feast với Redis bạn đảm bảo các feature cần thiết luôn có sẵn và được tính toán mới tại thời điểm suy luận, với độ trễ thấp và throughput cao.
  3. Tái sử dụng feature và versioning mô hình: Các đội khác nhau trong tổ chức thường không thể tái sử dụng feature trên các dự án, dẫn đến logic tạo feature trùng lặp. Mô hình có phụ thuộc dữ liệu cần được version, như khi chạy A/B test trên các phiên bản mô hình.
    • Feast cho phép khám phá và cộng tác trên các feature đã dùng trước và cho phép versioning các tập feature (qua feature services).
    • Feast cho phép biến đổi feature để người dùng có thể tái sử dụng logic biến đổi trên online/offline use cases và mô hình.

Tổng Quan Hướng Dẫn Feast với Redis

Trong hướng dẫn này, chúng ta dùng feature store để tạo dữ liệu huấn luyện và cấp năng cho suy luận mô hình online cho một mô hình dự đoán sự hài lòng của tài xế ride-sharing. Trong kịch bản dữ liệu demo:

  • Chúng tôi đã khảo sát một số tài xế để xác định mức độ hài lòng của họ với trải nghiệm dùng ứng dụng ride-sharing.
  • Chúng tôi muốn tạo dự đoán sự hài lòng của tài xế cho phần còn lại người dùng để có thể tiếp cận những người dùng có thể không hài lòng.

Các Bước Hướng Dẫn:

  1. Cài đặt Redis và chạy Redis-Server ở background
  2. Cài đặt Feast với Redis
  3. Tạo feature repository và định nghĩa Redis là online store
  4. Đăng ký định nghĩa feature và triển khai feature store của bạn
  5. Tạo dữ liệu huấn luyện
  6. Nạp feature vào Redis online store của bạn
  7. Lấy vector feature cho suy luận

Bước 1: Cài đặt Redis và chạy Redis server ở background

Để cài đặt Redis làm theo một trong các lựa chọn dưới:

Ubuntu:

$ sudo snap install redis

Docker:

$ docker run --name redis --rm -p 6379:6379 -d redis

Mac (Homebrew):

$ brew install redis

Thông tin thêm về các cách cài đặt Redis khác có thể tìm thấy ở đây. Thông tin cấu hình thêm có thể tìm thấy trong hướng dẫn Redis Quick Start.

Bước 2: Cài đặt Feast với Redis

Cài đặt Feast SDK và CLI bằng pip:

$ pip install 'feast[redis]'

Bước 3: Tạo feature repository và cấu hình Redis làm online store

Một feature repository là một thư mục chứa cấu hình của feature store và các feature riêng lẻ.

Bước 3a: Tạo feature repository

Cách dễ nhất để tạo feature repository mới là dùng lệnh feast init. Điều này tạo một khung với dữ liệu demo ban đầu.

$ feast init feature_repo $ cd feature_repo

Đầu ra:

Creating a new Feast repository in /Users/nl/dev_fs/feast/feature_repo

Hãy nhìn vào demo repo kết quả. Nó phân chia thành:

  • feature_store.yaml chứa thiết lập demo cấu hình nguồn dữ liệu và online store
  • example.py
    chứa định nghĩa feature demo
  • data/ chứa dữ liệu parquet demo thô

Bước 3b: Cấu hình Redis làm online store trong file cấu hình YAML

Để cấu hình Redis làm online store chúng ta cần đặt giá trị type và connection_string cho online_store trong feature_store.yaml như sau:

project: my_project
registry: data/registry.db
provider: local
online_store:
type: redis
connection_string: localhost:6379

Provider định nghĩa nơi dữ liệu thô tồn tại (để tạo dữ liệu huấn luyện và giá trị feature cho phục vụ) trong demo này, cục bộ. online_store định nghĩa nơi materialize (nạp) giá trị feature trong cơ sở dữ liệu online store (cho phục vụ).

Lưu ý rằng cấu hình trên khác với file YAML mặc định được cung cấp cho hướng dẫn mà dùng online store mặc định:

project: my_project
registry: data/registry.db
provider: local
online_store:
path: data/online_store.db

Vì vậy bằng cách thêm hai dòng cho

online_store
(
type: redis, connection_string: localhost:6379
) trong file YAML theo trên, Feast sau đó có thể đọc và ghi từ Redis làm online store của nó. Redis Online Store là một phần của mã lõi Feast, và như vậy, Feast biết cách dùng Redis out-of-the-box.

Bước 3c: Kiểm tra định nghĩa feature demo tại example.py

Hãy nhìn vào định nghĩa feature demo tại example.py (để xem trong terminal bạn có thể chạy

cat
example
.
py 
).

Example.py

Bước 3d: Kiểm tra dữ liệu thô

Cuối cùng, hãy kiểm tra dữ liệu thô. Dữ liệu thô chúng ta có trong demo này được lưu trong file parquet cục bộ. Tập dữ liệu ghi nhận thống kê theo giờ của một tài xế trong ứng dụng ride-sharing.

Feast & Redis Quickstart: Xây Dựng Feature Store ML Mở Rộng Trong Phút

Bước 4: Đăng ký định nghĩa feature và triển khai feature store của bạn

Bây giờ chúng ta chạy

feast apply
để đăng ký feature views và entities được định nghĩa trong example.py. Lệnh apply quét các file Python trong thư mục hiện tại để tìm định nghĩa feature view/entity, đăng ký các đối tượng, và triển khai hạ tầng. Trong ví dụ này, nó đọc example.py (hiển thị ở trên) và thiết lập Redis online store.

$ feast apply

Đầu ra:

Registered entity driver_id
Registered feature view driver_hourly_stats
Deploying infrastructure for driver_hourly_stats

Bước 5: Tạo dữ liệu huấn luyện

Để huấn luyện mô hình, chúng ta cần feature và label. Thường, dữ liệu label này được lưu riêng (ví dụ bạn có một bảng lưu kết quả khảo sát người dùng và một tập bảng khác với giá trị feature).

Người dùng có thể truy vấn bảng label đó với timestamp và truyền đó vào Feast như một entity dataframe để tạo dữ liệu huấn luyện. Trong nhiều trường hợp, Feast cũng sẽ join thông minh các bảng liên quan để tạo vector feature liên quan.

  • Lưu ý rằng chúng ta bao gồm timestamp vì chúng ta muốn feature cho cùng tài xế tại nhiều timestamp được dùng trong mô hình.

Python

(Sao chép mã dưới vào file gen_train_data.py và chạy nó):

Đầu ra:

----- Feature schema -----

<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 event_timestamp 3 non-null datetime64[ns, UTC]
1 driver_id 3 non-null int64
2 label_driver_reported_satisfaction 3 non-null int64
3 conv_rate 3 non-null float32
4 acc_rate 3 non-null float32
5 avg_daily_trips 3 non-null int32
dtypes: datetime64[ns, UTC](1), float32(2), int32(1), int64(2)
memory usage: 132.0 bytes
None

----- Example features -----

event_timestamp driver_id ... acc_rate avg_daily_trips
0 2021-08-23 15:12:55.489091+00:00 1003 ... 0.120588 938
1 2021-08-23 15:49:55.489089+00:00 1002 ... 0.504881 635
2 2021-08-23 16:14:55.489075+00:00 1001 ... 0.138416 606

[3 rows x 6 columns]

Bước 6: Nạp feature vào Redis online store của bạn

Chúng ta sẽ bây giờ nạp hoặc materialize dữ liệu feature vào Redis online store của bạn để chúng ta có thể phục vụ các feature mới nhất cho mô hình để dự đoán online. Lệnh

materialize
cho phép người dùng materialize feature trên một khoảng thời gian lịch sử cụ thể vào online store. Nó sẽ truy vấn batch sources cho tất cả feature views trên khoảng thời gian cung cấp, và nạp giá trị feature mới nhất vào online store đã cấu hình. Lệnh
materialize
–
incremental
sẽ chỉ nạp dữ liệu mới đã đến ở offline store, kể từ lần gọi materialize cuối.

$ CURRENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S")
$ feast materialize-incremental $CURRENT_TIME

Đầu ra:

Materializing 1 feature views to 2021-08-23 16:25:46+00:00 into the redis online store.

driver_hourly_stats from 2021-08-22 16:25:47+00:00 to 2021-08-23 16:25:46+00:00:
100%|████████████████████████████████████████████| 5/5 [00:00<00:00, 592.05it/s]

Bước 7: Lấy vector feature cho suy luận

Tại thời điểm suy luận, chúng ta cần nhanh chóng đọc giá trị feature mới nhất cho các tài xế khác nhau (có thể chỉ tồn tại trong batch sources) từ Redis online feature store, dùng

get_online_features()
. Các vector feature này sau đó có thể được cung cấp cho mô hình.

Python

(Sao chép mã dưới vào file get_feature_vectors.py và chạy nó):

Đầu ra

{
'acc_rate': [0.5732735991477966, 0.7828438878059387],
'avg_daily_trips': [33, 984],
'conv_rate': [0.15498852729797363, 0.6263588070869446],
'driver_id': [1004, 1005]
}

Chúc mừng! Bạn đã đến cuối hướng dẫn. Để tắt Redis server đang chạy ở background bạn có thể dùng lệnh

redis-cli shutdown
.

Tóm tắt hướng dẫn:

Trong hướng dẫn này bạn đã triển khai một feature store cục bộ với Parquet file offline store và Redis online store. Sau đó bạn xây dựng tập dữ liệu huấn luyện sử dụng feature chuỗi thời gian từ file Parquet. Sau đó, bạn materialized giá trị feature từ offline store vào Redis online store. Cuối cùng, bạn đọc các feature mới nhất từ Redis online store cho suy luận. Với Redis làm online store bạn có thể đọc feature mới nhất rất nhanh cho các use case ML thời gian thực, với độ trễ thấp và throughput cao ở quy mô lớn.

Tiếp theo là gì?

  • Đọc trang Feast Concepts để hiểu mô hình dữ liệu Feast, và đọc trang Feast Architecture.
  • Đọc hướng dẫn cấu hình đầy đủ cho Feast với Redis, và mô hình dữ liệu dùng để lưu giá trị feature trong Redis.
  • Case studies – học từ đồng nghiệp: Tìm hiểu các công ty dùng Feature Stores với Redis làm online store (Wix, Swiggy, Comcast, Zomato, AT&T, DoorDash, iFood), và cụ thể cách họ dùng Feast với Redis cho online store (Gojek, Udaan, Robinhood).
  • Đọc về Azure Managed Feature Store với Feast và Redis và làm theo hướng dẫn Getting started with Feast on Azure cũng như các hướng dẫn Feast khác
  • Bạn cũng có thể tìm thêm thông tin về Feast hoặc Redis ở các trang giới thiệu sản phẩm chung về Feast và Redis tương ứng.

Gia nhập các người dùng và người đóng góp Feast khác trên Slack và trở thành một phần của cộng đồng!