SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2018 夏】セッションレポート(AD)

課せられたのは「4時間で100社分のデータ処理」――2年目エンジニアが挑んだ機械学習【デブサミ2018 夏】

【C-2】メモリも、僕のキャパシティも溢れっぱなし。。2年目エンジニアが実現した機械学習

  • X ポスト
  • このエントリーをはてなブックマークに追加

どうすれば、精度の高い分析を4時間以内に終えられるか?

分析基盤の全体構成イメージ
分析基盤の全体構成イメージ

 上図は、同社が開発した分析基盤のイメージ図だ。オンプレの環境にある大量のアクセスデータをクラウド上に移して分析する。その結果を再度オンプレの環境に移し、顧客が閲覧できる状態にする流れだ。この基盤上で、前述した2つの要件をどのように解決していったのだろうか。

 「まずスケーラビリティについて解説すると、前提として、分析対象の企業数が増えたとしても性能を落としてはいけません。その課題をクリアするため、AmazonEMRというサービスを用いました」

 Amazon EMRは、大量データを効率的に処理するためにHadoopを使用できるプラットフォームサービスだ。AWSのAmazon EC2インスタンス上に構築されたHadoopクラスタを、必要に応じて柔軟に増減できる。

 また、分析対象となるデータの格納にはAmazon S3を用いた。扱うデータ量が膨大だったため自由自在に拡張してくれるクラウドストレージは「うってつけの環境だった」という。

 ところが研究を始めてすぐ、ある課題に直面する。処理に時間がかかり過ぎてしまったのだ。当初は、1社の分析を終えるのに40分以上を要した。求められている水準が4時間で100社であることを考えると、1社あたりにかけられる時間は約2.4分。大きな乖離があった。この差を埋めていくために数多くの工夫を行ったという。

 1つ目の工夫は、分析クラスタを並列に複数起動させること。この手法は高速化以外にもメリットがある。クラスタの冗長化による可用性の向上だ。つまり、特定のクラスタに何かの問題が発生しても、他のクラスタが残りのデータを拾って分析処理を続行できる。

 本プロジェクトでは、10クラスタを立ち上げて10並列で分析を行った。これにより、1社分の処理にかけられる時間は1クラスタあたり24分となり、現実味のある数字となってきた。しかし、道のりはまだ遠い。どんな手段を用いて残りの時間を縮めていったのだろうか。

 2つ目の工夫は、各クラスタの共通処理を切り出して、初回に一度だけ実行するような設計にすること。これにより、1社あたりおよそ4~5分ほどの時間が短縮できたという。

 3つ目の工夫は、組み合わせの量を減らすこと。つまり、必要のないデータを省いていくということだ。それほど分析精度の向上に寄与しないと思われるデータをばっさり切り捨て、検証してはまた切り捨てて……といったトライ&エラーをくり返し、データ量を減らしていった。

 その他にもApache Hiveのクエリチューニングなどいくつもの改善を続け、実用に耐えうるレベルまで高速化を続けていった。

 「ですが、そのまま何事もなく順調にプロジェクトが進んで終了、とはなりませんでした。他のメンバーが行っていた作業とのバッティングが起きたのです。チームにボーロンというベテランのフランス人開発者がいるのですが、彼は主に分析精度を改善するための研究をしていました。毎日さまざまな手法を試して、精度が少しでも良くなったらそのソースコードをプッシュするわけです。何が起きたかというと、彼の変更したアルゴリズムを取り込んでみると、確かに精度は上がっているけれど速度が遅くなっているのです。せっかく処理速度を改善したところがまた遅くなる……ということが、くり返し行われました。でもその中で、地道に課題と向き合いながら、精度と性能の改善を両立していきました」

 高水準な分析基盤の構築は、一朝一夕には実現しない。改善のサイクルを回し続けながら、少しずつ性能を向上させていくことが重要なのだ。機械学習によるデータ分析をサービスに取り入れる際には、顧客に満足してもらえるサービスの質を担保するのが前提の上で、裏でも絶え間なくシステムの改善を続けることが何よりも大切であり、同時に大変でもある。そう総括し、内藤氏はセッションを締めくくった。

お問い合わせ

 株式会社ロックオン

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2018 夏】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11026 2018/09/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング