2021년 11월 30일 화요일

SQL 기반 In-Database Machine Learning의 의의

데이터는 모였을 때 비로서 의미를 만들어 낼 수 있고, 그 때 가치가 있다는 건 그리 놀라운 사실은 아니다. 대부분의 기업들이 오늘날 당면하고 있는 과제도 이 연장선상에서 출발하기도 하고 말이다. 전통적인 경우에는, 데이터베이스에 데이터를 저장하고 SQL을 통해 분석 결과를 얻는 형태를 취했었으나, 근래에는 Data Lake와 Machine Learning 영역으로 확장되고 있다. 특히, 그 중 Machine Learning은 새로운 것으로 느껴지며, 이를 다루기 위해서는 한동안 R이나 Python이 필수적인 것처럼 느껴지게 만들었다. 클라우드 벤더들에서는 언어의 장벽을 최소화 하는 서비스들도 다양하게 별도로 출시하며 편의성을 높였다. 1

정말 새로운 필요가 있어서 새로운 기술을 사용하는 것은 당연한 일이다. 마치 반정형 데이터 저장을 위해 NoSQL을 사용하거나 로그성 데이터를 저장하기 위해 Object Storage 또는 Elastic을 사용하는 것처럼 말이다. 하지만, 머신러닝처럼 스펙트럼이 넓은 경우라면 다른 관점에서 접근할 수 있다. 적용하려는 머신러닝 알고리즘이 잘 알려진 일반적인 형태에 국한된다면, 데이터베이스 벤더들이 제공하는 SQL 기반의 Machine Learning 을 사용하여 편의성을 극대화 하는 것이다.

2018년 Google N.E.X.T 행사에서 구글이 발표하면서 유명해진 In-Database Machine Learning이 바로 이에 해당한다. 구글은 BigQuery 엔진에서 SQL로 대표적인 머신러닝을 SQL 함수로 수행할 수 있는 기능을 선보였다. 2 뿐만 아니라, 최근까지도 알고리즘은 지속적으로 추가되고 있다. 3

[2018 Google N.E.X.T. BigQuery ML 발표 현장]

구글이 발표했기 때문에, 그리고 BigQuery라는 플랫폼에 힘입어 많은 각광을 받긴 했으나, 이 시도는 구글이 처음 한 것도 아니며 사실 아주 오래 전부터 다양하게 존재했던 시도이다. 4 가장 전통적인 제품 중 하나인 Teradata는 이미 2010년 전후로 Aster라는 제품에서 이 컨셉을 공개하고 이를 Teradata에 이식하였으며 5, Oracle도 과거부터 현재의 Advanced Analytics라는 이름으로 이 기능을 발전시켜 왔다.6 Vertica에서는 오히려 구글의 이 발표가 기존에 Vertica가 지원하던 In-DB ML을 간접 홍보해주었다는 식의 감사의 블로그 글을 공개하기도 했다.7 (필자는 이 영역에서는 Vertica가 가장 진보한 강자라고 생각한다.)

[Vertica는 다양한 In-DB ML을 코어 기능으로 제공함]

방법은 단순하다. 각 DBMS 회사들은 각 솔루션에 최적화 된 SQL 구문의 확장된 형태로 머신러닝 함수 패키지를 제공한다. 가령 Oracle은 SQL과 PL/SQL 패키지를 묶어 매우 유사한 형태로 이를 지원8하며, Vertica의 경우는 SQL 함수 형태로 이를 지원한다.9 (참조 글은 Random Forest의 예시) Teradata나 IBM도 이와 유사한 형태의 기능을 제공하며, 심지어 PostgreSQL 계열을 위해서는 MADlib이라는 프로젝트가 있어 In-DB ML 형태를 구현할 수도 있다.

[Apache 프로젝트인 MADlib]

현재 머신 러닝이 수행할 수 있는 기능이 100이라면, 아마 SQL 형태로 지원할 수 있는 기능은 70% 내외일 것이라고 생각한다. 하지만 분명한 것은 그 70% 정도의 기능은 확실하게 해낼 수 있다는 점에서 10 SQL 을 이용한 머신러닝이 매우 유용할 수 있는 경우들이 다음과 같이 존재한다.

  • 고급 데이터 과학자 없이 머신 러닝을 시작하는 경우: SQL에 능숙한 DBA 인력만으로 머신러닝을 시작해볼 수 있다는 점에서 매우 유용하며, 기술의 습득면에서도 SQL이 압도적으로 빠른 것은 자명하다.
  • 머신러닝을 빠르게 적용해보려고 하며, 데이터가 DBMS에 존재하는 경우: 이 경우에는 데이터를 외부로 옮기는 것보다 데이터베이스 내에서 머신러닝을 수행하는 것이 유용하며 이때는 DBMS의 병렬 컴퓨팅을 최대한 활용할 수 있다. (이를 극대화 하기 위해 Python이나 R을 DBMS에 심는 형태의 기능도 최근에는 일반화 되고 있으며, 추후 소개할 예정이다.)
  • Data Cleansing 영역: 소위 데이터 마사지를 위해서는 알고리즘을 자체적으로 짜는 것보다는 존재하는 SQL에서 지원되는 함수가 있다면 이를 쓰는 것이 유용하다 – 그리고 대부분의 제품들이 대표적인 데이터 클랜징 함수인 Outlier Detection, Normalization 등의 기능은 제공하고 있다. 특히, 마사지 작업이 필요한 데이터는 보통 데이터베이스를 거친다는 측면에서 그 효용 가치는 더더욱 높다.

물론, 나머지 지원되지 않는 20~30%를 위해서 고급 기술을 활용해야 하는 경우가 있을 것이다. 그 경우에도 관점을 바꾸어 고급 인력은 고급 영역에만 배정하고, 중간 단계까지의 영역은 SQL 기반의 기술을 사용하는 이른바 병행이 더 유용할 가능성이 높다. 이런 점을 고려할 때 DBMS가 존재하는 한 In-DB ML을 잘 활용하는 것을 고려하는 것이 기업의 큰 경쟁력이 될 수 있을 것이다. 대표적인 데이터 기반 비즈니스를 수행하는 기업인 Uber가 DBMS와 SQL Engine, 그리고 자체 ML Platform 을 이용하여11 데이터 플랫폼의 높은 완성도를 이룬 것처럼 말이다.

  1. AWS releases SageMaker to make it easier to build and deploy machine learning models
  2. Google Adds Machine Learning Modeling to BigQuery
  3. Machine Learning for Data Analysts — BigQuery ML
  4. In-Database Machine Learning: Can’t We All Just Get Along?
  5. In-database Distributed Machine Learning: Demonstration using Teradata SQL Engine
  6. Why You Should Use Your Database for Machine Learning
  7. Thanks, Google!
  8. RandomForest Machine Learning – Oracle Machine Learning (OML)
  9. Vertica’s In-database Random Forest, Highly Scalable and Easy to Use
  10. You Can’t Do Machine Learning Inside a Database. Can You?
  11. Solving Big Data Challenges with Data Science at Uber

    Related Posts

    Stored Procedure에 대한 단상
    ML 모델 도입을 위한 SageMaker의 효율성
    머신 러닝 모델 관리법

    2 Responses

    1. Jin

      저는 BQML 하나만 써보았는데 꽤 편리하고 좋았습니다. in DBMS 머신러닝은 앞으로 계속 발전할 것 같다는 생각이 저도 드네요.

    2. Pingback : 머신러닝 모델과 데이터베이스 연계의 의미와 한계 - 클라우드 인사이트

    Leave a Reply