自從Uber在2017年推出Michelangelo概念以來,機器學習(ML)特徵商店已成為商業關鍵應用中備受關注和使用的工具。在本篇部落格文章中,我們將深入探討ML特徵商店的基本原理,並探討為何ScyllaDB能成為您特徵商店架構中的關鍵組件。
要理解特徵商店是什麼,首先需要了解特徵的含義。
### 什麼是特徵?
在機器學習中,特徵是一組數據點,可用於訓練模型並根據歷史數據對未來進行預測。例如,我們的特徵商店示例應用允許您根據歷史飛行記錄預測航班延誤。
特徵是複雜數據處理和轉換管道的結果。大量的特徵數據能夠實現精確的預測和成功的機器學習項目。
### 什麼是特徵商店?
A feature store is a central database in your machine-learning architecture that contains your real-time and historical features. Feature stores allow your data engineers and data scientists to use the same central repository to discover, monitor, and analyze features.
What does a feature store architecture look like?
#### 特徵商店中的在線和離線數據庫
談及特徵商店時,用戶通常會在其架構中區分兩種類型的數據庫。一方面,他們使用在線數據庫,另一方面,他們可能還擁有一個離線數據庫。這些數據庫各有不同的用途。
離線數據庫: 這類數據庫存儲歷史處理過的特徵,通常以批量方式進行輸入。離線數據庫擁有涵蓋歷史大時間框架的特徵數據,因此對於在歷史特定時期內處理一組特徵非常有用。
在線數據庫: 此數據庫可能包含來自實時數據流和離線數據庫的數據。在線存儲用於為生產模型和其他實時應用提供最新鮮的特徵數據。在這裡,性能和低延遲至關重要。如果您的數據庫無法快速提供實時特徵,那麼您的模型可能會使用過時或不準確的數據來進行預測。
特徵存儲數據建模:寬表設計與窄表設計
在設計特徵存儲中的數據模型時,無論是離線還是在線存儲,您可以選擇兩種類型的表設計:寬表和窄表。每種設計都有其優點和缺點。讓我們通過實際例子來看看它們可能適合或不適合您的使用案例的原因:
寬表設計
寬表設計包括每個特徵的單獨列。您想要在表中存儲的特徵類型越多,就需要創建越多的列。
寬表佈局示例
create table feature_store.wide_example( | |
date TIMESTAMP, | |
feature_id INT, | |
feature_col1 FLOAT, | |
feature_col2 FLOAT, | |
feature_col3 FLOAT, | |
feature_col4 FLOAT, | |
feature_col5 FLOAT, | |
feature_col6 FLOAT, | |
feature_col7 FLOAT | |
) |
這種佈局起初可能很容易上手,但隨著時間的推移,維護起來會變得更加複雜,且難以進行更改。每當您想要引入新特徵(或刪除現有特徵)時,都需要修改模式,這可能會很複雜。
窄表設計
窄表設計簡單且易於維護,因為其列數不會隨未來功能增減而變化。
窄表布局示例
create table feature_store.narrow_example( | |
feature_id INT, | |
feature_name TEXT, | |
feature_value FLOAT | |
) |
此布局長期僅需兩固定列來存儲功能,一列為功能名(如:LATE_AIRCRAFT_DELAY),另一列為該功能值。
一般而言,窄表在提取數據時可能需轉換數據類型,因其格式不正確(如列類型為FLOAT,但實際數據值為INTEGER)。幸運的是,在特徵存儲中,線上與線下存儲已將數據整理為正確的數字(FLOAT)格式,且所有值具有相同數據類型,因此這在特徵存儲中並非缺點。
什麼是ScyllaDB,它如何在特徵存儲架構中發揮作用?
為建立實時推斷應用,機器學習團隊需能大規模低延遲返回特徵的數據庫。ScyllaDB是一高性能、低延遲的NoSQL數據庫,能處理大量讀寫操作。此外,ScyllaDB是GE Healthcare或ShareChat等公司用於關鍵任務特徵存儲的可靠數據庫。因其高可用性和容錯性,ScyllaDB可在性能和可靠性至關重要的基礎設施中承擔重任。
除了將ScyllaDB作為特徵存儲架構中的線上存儲外,ScyllaDB還被用作線上/線下混合存儲解決方案。採用此策略,您可以通過單一資料庫來處理所有特徵存儲工作負載,從而減輕團隊的維護負擔。
用戶通常將ScyllaDB置於其架構的核心位置,用於持久化和檢索特徵及特徵存儲元數據。在此情況下,ScyllaDB充當線上存儲。其他用戶也將ScyllaDB用作其線上/線下混合存儲。為了加速模型開發,性能是一個關鍵要求,而ScyllaDB的讀寫性能始終能夠滿足或超越用戶期望。
事實上,一些用戶發現ScyllaDB能夠取代多個資料庫,並作為所有機器學習數據需求的單一中心存儲。例如,ScyllaDB可以替換Redis(線上存儲)和PostgreSQL(線下存儲),從而使基礎設施維護更為經濟且簡單。
ScyllaDB在需要低延遲和高性能的使用案例中表現出色。此外,ScyllaDB與Cassandra和DynamoDB兼容,這意味著如果您已經在使用其中一種資料庫,您可以無縫遷移而不必更改查詢。
教程:ScyllaDB線上存儲
為了幫助您開始使用ScyllaDB作為您的線上存儲,我們創建了一個示例應用程序(也可在GitHub上獲得)。
- 複製repository
- 註冊ScyllaDB Cloud或本地安裝ScyllaDB
- 建立模式:
cqlsh “node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud” 9042 -u scylla -p “password” -f schema.cql
- 透過cqlsh連接到實例並導入樣本數據集
cqlsh “node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud” 9042 -u scylla -p “password” scylla@cqlsh> COPY feature_store.flight_features FROM ‘flight_features.csv’;
此命令導入樣本航班數據集:
op_carrier_fl_num|actual_elapsed_time|air_time|arr_delay|arr_time|cancellation_code|cancelled|carrier_delay|crs_arr_time|crs_dep_time|crs_elapsed_time|dep_delay|dep_time|dest|distance|diverted|fl_date |late_aircraft_delay|nas_delay|op_carrier|origin|security_delay|taxi_in|taxi_out|weather_delay|wheels_off|wheels_on| | |
—————–+——————-+——–+———+——–+—————–+———+————-+————+————+—————-+———+——–+—-+——–+——–+——————-+——————-+———+———-+——+————–+——-+——–+————-+———-+———+ | |
4317| 96.0| 73.0| -19.0| 2113.0| | 0.0| | 2132| 2040| 112.0| -3.0| 2037.0|MLI | 373.0| 0.0|2018-12-31 02:00:00| | |OO |DTW | | 5.0| 18.0| | 2055.0| 2108.0| | |
3372| 94.0| 74.0| 81.0| 1500.0| | 0.0| 0.0| 1339| 1150| 109.0| 96.0| 1326.0|RNO | 564.0| 0.0|2018-12-31 02:00:00| 81.0| 0.0|OO |SEA | 0.0| 3.0| 17.0| 0.0| 1343.0| 1457.0| | |
1584| 385.0| 348.0| -21.0| 2023.0| | 0.0| | 2034| 1700| 394.0| -9.0| 1658.0|SFO | 2565.0| 0.0|2018-12-31 02:00:00| | |UA |EWR | | 13.0| 33.0| | 1731.0| 2019.0| | |
4830| 119.0| 85.0| -35.0| 1431.0| | 0.0| | 1437| 1245| 136.0| -13.0| 1232.0|MSP | 546.0| 0.0|2018-12-31 02:00:00| | |OO |MSP | | 16.0| 18.0| | 1250.0| 1415.0| | |
2731| 158.0| 146.0| -19.0| 1911.0| | 0.0| | 1930| 1800| 160.0| -8.0| 1800.0|MSP | 842.0| 0.0|2018-12-31 02:00:00| | |WN |PVD | | 7.0| 7.0| | 1807.0| 1904.0| |
view rawgistfile1.txt hosted with ❤ by GitHub.
ScyllaDB + Feast
ScyllaDB亦整合了Feast等特徵存儲工具。Feast是一個流行的開源生產ML特徵存儲。使用Feast時,您可以選擇多種數據庫作為您的在線特徵存儲,包括ScyllaDB。
要將ScyllaDB設置為Feast的在線商店,您需要編輯Feast的配置文件並添加您的ScyllaDB憑證。ScyllaDB與Cassandra兼容,因此您可以使用Feast內置的Cassandra連接器。
# feature_store.yaml | |
project: scylla_feature_repo | |
registry: data/registry.db | |
provider: local | |
online_store: | |
type: cassandra | |
hosts: | |
– node-0.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud | |
– node-1.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud | |
– node-2.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud | |
keyspace: feast | |
username: scylla | |
password: password |
view rawgistfile1.txt hosted with ❤ by GitHub.
總結
特徵存儲對於特徵工程和構建機器學習模型是必要的。如果您正在構建實時特徵存儲基礎設施,則需要仔細考慮性能。低延遲、高性能和高吞吐量的需求使得NoSQL數據庫成為您特徵存儲中在線存儲解決方案的完美候選。
Source:
https://dzone.com/articles/tutorial-whats-an-aiml-feature-store-and-how-to-bu