MongoDB Atlas가 기계 학습에 적합한 4가지 이유

2023. 3. 3. 23:41개발/MongoDB

728x90

MongoDB가 그러면 내가 자주 사용하는 기계 학습과 어떻게 연관될 수 있는 지를 찾아봤다.

MongoDB를 머신러닝에 적합한 이유를 찾을 때 보통 아래와 같은 이유들을 말하는 것 같다

 

Reason Number 1: Flexible Data Model

MongoDB는 여러 가지 이유로 기계 학습을 위한 최고의 데이터베이스 중 하나입니다. 

첫 번째 이유는 MongoDB가 JSON 문서를 저장하고 유연한 스키마를 가지고 있기 때문입니다. 열 정의가 있는 스키마와 테이블을 정의해야 하는 관계형 데이터베이스와 달리 MongoDB를 사용하면 사전 스키마 설계 없이 데이터를 직접 로드할 수 있습니다. 

즉, 새로운 소스에서 데이터를 로드하고 즉시 작업을 시작할 수 있습니다. 

이러한 기본적인 유연성 때문에 가스 가격 데이터로 작업을 완료한 후 부동산 데이터를 로드하고 한 줄의 코드를 변경하지 않고 집값에 대한 기계 학습을 수행했습니다.

-> 즉 다양한 모델을 자유로운 형식으로 저장할 수 있다.

Reason Number 2: Powerful Query Language

데이터가 로드되면 MongoDB는 사용하려는 매우 구체적인 값에 빠르게 액세스 할 수 있도록 강력한 쿼리 언어와 보조 인덱스를 제공합니다. 데이터 정렬 및 집계를 필터링하고 사용해야 하는 필드를 선택하고 변환하는 옵션이 있습니다. 이것은 기계 학습에 사용되는 데이터를 준비하는 데 필요한 단계입니다. 

대부분의 NoSQL 데이터 저장소에서는 이러한 수준의 쿼리 정교함을 사용할 수 없습니다.

 

Reason Number 3: Store and Retrieve Trained Models as JSON Documents

MongoDB는 훈련된 모델을 저장, 공유 및 검색하기에 완벽한 장소입니다. 모델을 저장할 수 있을 뿐만 아니라 모델 기록을 데이터베이스에 보관하여 선택한 경우 이전 버전에서 훈련된 모델을 복원할 수 있습니다. 히스토리 컬렉션에 모델 사본을 저장하는 간단한 트리거를 만들 수 있습니다. 히스토리 컬렉션은 MongoDB 내에서 시간이 지남에 따라 훈련된 각 모델의 히스토리를 유지합니다. 더 중요한 것은 훈련된 모델을 공유하면 기계 학습 예측에 해당 모델을 사용하는 데 걸리는 시간이 단축된다는 것입니다. 예측이나 강화 학습을 위해 기존 모델을 사용하려는 경우 모델에 대해 MongoDB를 쿼리하고 로드하면 원래 모델을 교육하는 데 걸리는 모든 시간을 절약할 수 있습니다.

-> 즉 모델을 쉽게 저장할 수 있다는 장점

-> array를 직접 저장하니 더 빠를 수 있다는 것 같다.

Reason Number 4: MongoDB Atlas offers Database as a Service Across all Modern Cloud Providers

2016년 6월 28일에 MongoDB Atlas가 릴리스되었습니다. Atlas는 클라우드에서 MongoDB를 실행하는 가장 간단하고 강력하며 비용 효율적인 방법입니다. Atlas는 단일 복제 세트를 실행하든 수백 테라바이트를 호스팅 하는 샤드 클러스터를 실행하든 관계없이 MongoDB를 거의 쉽게 실행할 수 있게 해주는 서비스로서의 데이터베이스입니다. 2020년 10월 현재 MongoDB Atlas는 고객이 모든 주요 클라우드 제공업체에서 애플리케이션을 동시에 실행할 수 있는 최초의 클라우드 데이터베이스였습니다. 고객은 다중 클라우드 클러스터를 사용하여 다양한 클라우드 공급자의 고유한 기능과 도달 범위를 쉽게 활용할 수 있습니다. 즉, 고객은 클라우드 간 데이터 복제 및 마이그레이션을 관리하는 운영상의 복잡성을 추가하지 않고도 여러 클라우드 공급자에 걸쳐 애플리케이션을 배포하는 이점을 활용할 수 있습니다. 예를 들어, Azure에서 온라인 상점을 운영하고 기계 학습을 위해 실시간으로 데이터를 GCP에 복제할 수 있습니다. 또한 MongoDB Atlas를 사용하면 주요 클라우드 공급자(AWS, GCP 및 Azure)에서 단 7분 만에 프리 티어를 생성할 수 있습니다.

노트북의 GPU와 웹 브라우저를 활용하여 분류 문제를 해결하기 위해 나만의 신경망을 구축할 수 있는 Tensor Flow 놀이터 애플리케이션을 찾았습니다. 아래 링크를 클릭하여 플레이할 수도 있습니다.

 

http://playground.tensorflow.org/

 

Tensorflow — Neural Network Playground

Tinker with a real neural network right here in your browser.

playground.tensorflow.org

플레이그라운드 애플리케이션을 사용하면 웹 브라우저에서 신경망을 구축하고 훈련할 수 있습니다. 성공적인 플레이그라운드 애플리케이션에 이어 Google은 2017년 8월 개발자가 브라우저에서 자바스크립트를 사용하여 기계 학습을 수행할 수 있도록 deeplearn.js를 출시했습니다. 2018년 4월 Google은 deeplearn.js에서 배운 내용을 가져와 공식적으로 Tensor Flow.js를 출시하여 TensorFlow 제품군에 출시했습니다.

 

다음과 같은 이유로 TensorFlow.js를 선택하여 브라우저에서 MongoDB Atlas 및 Realm을 사용한 기계 학습의 힘을 보여주었습니다.

  1. 제로 설치: 드라이버 없음/설치 없음
  2. 대화형: 대화형이므로 데이터를 가지고 놀 수 있습니다.
  3. 센서: 센서에 액세스 하기 위한 표준 API를 사용하여 센서, 웹캠 및 스마트폰 데이터에 액세스 할 수 있습니다.
  4. 분산형: 데이터를 처리하고 클라이언트에 유지할 수 있음

이러한 이유로 매우 강력한 고객 데모를 위해 Tensor Flow.js와 브라우저를 선택했습니다. Spark로 복잡한 Hadoop 인프라를 설치하고 기계 학습을 수행하기 위해 복잡한 기능과 논리를 작성해야 했던 시대는 지났습니다. 오늘날 MongoDB Atlas, Tensor flow.js 및 브라우저를 사용하면 설치 없이 매우 적은 복잡성으로 고도의 대화형 기계 학습을 수행할 수 있습니다. 기계 학습에 대한 장벽이 제거되었습니다.

그 결과 MongoDB Realm에서 서버리스로 호스팅 되는 웹 페이지가 포함된 다소 세련된 데모가 탄생했습니다. 고객과 공유하기 위해 7분 데모를 녹화했습니다. 후속 회의와 실습 시연 후 고객은 등록하고 기계 학습을 애플리케이션에 통합하는 프로세스를 시작했습니다. 아래 응용 프로그램 비디오를 게시했습니다.

 

https://www.youtube.com/watch?v=aX-PZ6WKHNg 

 

<html>
<head>
<!-------------------------------------------------------------------------
-- Version  Date          Author                Comments          
---------------------------------------------------------------------------
-- 1.0      10/05/2020    Britton LaRoche       Initial Version
--
---------------------------------------------------------------------------
-->
<script src="https://unpkg.com/realm-web@0.9.0/dist/bundle.iife.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"></script>
<script>
  const appId = "YOUR-APP-ID"; // Set Realm app ID here.
  const appConfig = {
    id: appId,
    timeout: 1000,
  };
  async function run() {
    let user;
    try {
      const app = new Realm.App(appConfig);
      const credentials = Realm.Credentials.anonymous(); // create an anonymous credential
      user = await app.logIn(credentials);
      console.dir(user);
      result = await user.functions.fnc_loadCSV("https://raw.githubusercontent.com/brittonlaroche/realm-tensorflow/main/data/fuel_sales_price.csv","InventoryDemo","FuelSales");
      console.dir(result);
      const mongo = app.services.mongodb("mongodb-atlas");
      const db = mongo.db("InventoryDemo");
      const coll = db.collection("FuelSales");
      items = await coll.find({});
      console.log("Items Length: " + items.length);
      console.dir(items);
      //---------------------------------------------------------
      //-- Data prep
      //---------------------------------------------------------
      var numDocs = items.length;
      var xInput =[];
      var yOutput = [];
      var priceTemp = [];
      var totalSales = 0;
      for  (i=0;i<numDocs;i++){
        //priceTemp = [items[i].price, items[i].high_temperature];
        //totalSales = items[i].sales_total;
        xInput[i] = items[i].price;
        yOutput[i] = items[i].sales_quantity;
      }
      //---------------------------------------------------------
      //-- Tensor flow / ML Prediction Below
      //---------------------------------------------------------
      // Define a model for linear regression.
      const model = tf.sequential();
      model.add(tf.layers.dense({units: 1, useBias: true, activation: 'linear', inputShape: [1]}));
      model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
      // Generate some synthetic data for training.
      //const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
      //const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);
      console.dir(xInput);
      console.dir(yOutput);
      const xs = tf.tensor2d(xInput, [numDocs, 1]);
      const ys = tf.tensor2d(yOutput, [numDocs, 1]);
      // Train the model using the data.
      model.fit(xs, ys, {epochs: 100}).then(() => {
          // Use the model to do inference on a data point the model hasn't seen before:
          model.predict(tf.tensor2d([3.25], [1, 1])).print();
          // Open the browser devtools to see the output
      });
    } finally {
      if (user) {
        user.logOut();
      }
    }
  }
  run().catch(console.dir);
</script>
<p>Check the console</p>
Collapse
</head>
<body>
</body>
</html>

 

일단 mongodb가 db로 자유로운 포맷으로 저장할 수 있다는 장점과 tensor flow.js를 사용해서 html에서 학습코드를 짤 수 있는 두 개를 결합하여 저런 UI를 만들 수 있다는 게 신기했고, 

여러 결과들을 관리하는 데 굉장히 용이해 보인다는 것을 알게 되었다.

 

참고

https://becominghuman.ai/4-reasons-why-mongodb-atlas-is-great-for-machine-learning-1140406 be3 a

https://github.com/brittonlaroche/realm-tensorflow/blob/main/html/secondVersion.html

728x90

'개발 > MongoDB' 카테고리의 다른 글

MongoDB) 계정 만들고 db 생성하고 CRUD 해보기  (0) 2023.03.03