기계 학습(ML) 특성 저장소는 2017년 우버가 미켈란도로 개념을 소개한 이후로 중요한 비즈니스 애플리케이션에 대한 관심과 사용을 끌어내고 있습니다. 이 블로그 게시물에서는 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?
특성 저장소의 온라인 및 오프라인 데이터베이스
특성 저장소에 대해 이야기할 때, 사용자들은 보통 아키텍처 내의 두 종류의 데이터베이스를 구분합니다. 한 쪽에는 온라인 데이터베이스를 사용하고, 다른 쪽에는 오프라인 데이터베이스를 가질 수도 있습니다. 이 데이터베이스들은 서로 다른 목적을 위해 사용됩니다.
오프라인 데이터베이스: 이러한 종류의 데이터베이스는 historical processed features를 저장하며, 일반적으로 배치 단위로 흡수됩니다. 오프라인 데이터베이스는 역사에서 큰 시간 범위를 커버하는 feature 데이터를 가지고 있기 때문에, 특정 역사 기간의 feature set을 처리할 때 유용합니다.
온라인 데이터베이스: 이 데이터베이스는 실시간 데이터 스트림과 오프라인 데이터베이스의 데이터를 모두 포함할 수 있습니다. 온라인 스토리지는 생산 모델과 기타 실시간 애플리케이션을 가장 최신의 feature 데이터로 서비스하기 위해 사용됩니다. 성능과 낮은 지연 시간이 매우 중요합니다. 만약 데이터베이스가 실시간 feature를 충분히 빠르게 제공할 수 없다면, 모델은 오래된 또는 부정확한 데이터를 사용하여 예측을 수행할 수 있습니다.
Feature Store Data Modeling: Wide vs. Narrow Table Design
오프라인이든 온라인이든 feature store 내에서 데이터 모델을 설계할 때, 두 가지 유형의 테이블 설계 중 하나를 선택할 수 있습니다: wide와 narrow. 각각은 자신만의 장점과 단점을 가지고 있습니다. 두 가지의 실제 예제를 보고, 왜 사용 사례에 가장 적합하거나 적합하지 않을 수 있는지 살펴보겠습니다:
Wide Table Design
와이드 테이블 설계는 각 feature에 대해 별도의 열을 포함합니다. 테이블에 저장하고자 하는 feature 유형이 많을수록, 더 많은 열을 생성해야 합니다.
Wide Table Layout Example
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 | |
) |
이러한 레이아웃은 시작하기 쉽지만, 시간이 지남에 따라 유지 관리가 더 복잡해지고 변경을 시키기 어려워집니다. 새로운 feature를 도입하거나(또는 기존 feature를 제거하려고 할 때) 스키마를 수정해야 하며, 이는 복잡할 수 있습니다.
Narrow Table Design
좁은 테이블 디자인은 간단하고 유지보수가 쉽습니다. 이는 열의 수가 미래에 증가하거나 감소하지 않기 때문입니다. 심지어 기능을 추가하거나 제거해도 마찬가지입니다.
좁은 테이블 레이아웃 예시
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 헬스케어나 ShareChat와 같은 회사에서 핵심 기능 스토어 작업에 신뢰할 수 있는 데이터베이스입니다. 고가용성과 내결함성 덕분에 성능과 신뢰성이 중요한 인프라에서 무거운 작업을 수행할 수 있습니다.
ScyllaDB를 특징 저장소 아키텍처에서 온라인 스토어로 활용하는 것 외에도, ScyllaDB는 온라인/오프라인 하이브리드 저장 솔루션으로도 사용됩니다. 이러한 방식으로 당신의 팀이 하나의 데이터베이스로 모든 특징 저장소 작업을 처리함으로써 유지보수 부담을 줄일 수 있습니다.
사용자들은 종종 ScyllaDB를 아키텍처의 중앙에 배치하여 특징과 특징 저장소 메타데이터를 저장 및 검색합니다. 이 경우, ScyllaDB는 온라인 스토어로 작용합니다. 다른 사용자들은 ScyllaDB를 온라인/오프라인 하이브리드 저장소로 사용합니다. 모델 개발을 가속화하기 위해 성능은 핵심 요구사항이며, ScyllaDB의 읽기-쓰기 성능은 사용자의 기대치를 지속적으로 충족하거나 뛰어넘습니다.
실제로, 일부 사용자들은 ScyllaDB가 여러 데이터베이스를 대체하여 모든 머신러닝 데이터 요구에 대한 단일 중앙 저장소로 사용될 수 있다는 것을 발견했습니다. 예를 들어, ScyllaDB는 Redis(온라인 스토어)와 PostgreSQL(오프라인 스토어)를 대체할 수 있어 인프라 유지보수를 더욱 저렴하고 간단하게 만들 수 있습니다.
ScyllaDB는 낮은 레이턴시와 높은 성능이 필요한 사용 사례에서 빛납니다. 또한, ScyllaDB는 Cassandra와 DynamoDB와 호환되므로 이미 이들 중 하나의 데이터베이스를 사용하고 있다면 쿼리를 변경하지 않고도 원활하게 마이그레이션할 수 있습니다.
튜토리얼: ScyllaDB 온라인 스토어
ScyllaDB를 온라인 스토어로 시작하는 데 도움이 되도록 우리는 샘플 애플리케이션(또한 GitHub에서 이용 가능)을 만들어 두었습니다.
- 저장소
- 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