ScyllaDB NoSQL을 사용하여 AI/ML 특성 저장소 구축하기

기계 학습(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
)

view rawgistfile1.txt 

이러한 레이아웃은 시작하기 쉽지만, 시간이 지남에 따라 유지 관리가 더 복잡해지고 변경을 시키기 어려워집니다. 새로운 feature를 도입하거나(또는 기존 feature를 제거하려고 할 때) 스키마를 수정해야 하며, 이는 복잡할 수 있습니다.

Narrow Table Design

좁은 테이블 디자인은 간단하고 유지보수가 쉽습니다. 이는 열의 수가 미래에 증가하거나 감소하지 않기 때문입니다. 심지어 기능을 추가하거나 제거해도 마찬가지입니다.

좁은 테이블 레이아웃 예시

create table feature_store.narrow_example(
    feature_id INT,
    feature_name TEXT,
    feature_value FLOAT
)

view rawgistfile1.txt 

이 레이아웃을 사용하면 기능의 이름(예: 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에서 이용 가능)을 만들어 두었습니다.

  1. 저장소
  2. ScyllaDB Cloud에 가입하거나 로컬에 ScyllaDB 설치
  3. 스키마 생성:
    cqlsh “node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud” 9042 -u scylla -p “password” -f schema.cql
  4. 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