ABEJA Tech Blog

中の人の興味のある情報を発信していきます

ABEJAの技術スタックを公開します (2019年11月版)

2021/10/22追記:最新版は下記記事になります!こちらもご一読くださいませ。 tech-blog.abeja.asia


どうも、Tech Blog編集長(自称)の緒方(@conta_)です。

よくエンジニアの方にご質問いただく ABEJAってよく聞くけど、実際どんなことやってるのかよくわからない という点をクリアにするために、事業内容と技術視点でのABEJAの取り組みを紹介したいと思います。

ABEJAに興味のある方や、未来の一緒に働くメンバーに読んでいただけると嬉しいです!

割とAIコンサルの会社と思われているらしいので、ちゃんとプロダクト作ってますよ!ということを伝えていきたい

ABEJAの事業紹介

ABEJAは2012年から約7年間、機械学習・ネットワークやIoTデバイスを活用したプロダクトの研究・開発・運用を行っています。 様々な産業・業種へ機械学習の適用・運用を培ってきたナレッジを生かして、ABEJAでは2019年10月地点で、下記の4つの事業部(+研究開発部門)を展開しています。

  • Platform事業部
  • Dataset事業部
  • Retail事業部
  • Use Case Creation事業部
  • Labs部門

またAsia/USへの海外展開も行っており、シンガポール・USに子会社があります。

それぞれの事業は密接に絡んでおり、お互いに協力しながら事業展開を進めています。

f:id:contaconta:20191111135008p:plain
事業部連携イメージ

それぞれの役割や、そこで使われている技術スタックを紹介したいと思います。

Platform事業部

事業紹介

ABEJA Platformという機械学習の運用基盤(MLOps)を提供しています。

ABEJAでは、様々な産業・業種へ機械学習の適用・運用を行ってきました。 その中で、機械学習を実ビジネスに適用する際に、データ収集が困難であったり、モデル開発はできるけど実際に実証実験をするには様々なシステムを開発をしなければならなかったりと、機械学習プロダクト本質的なバリュー以外のところで時間的・人的コストがかかってしまい、プロダクトの仮説検証から価値提供スピードが落ちてしまうという課題に直面することが多々ありました。

これらの課題を解決するために、機械学習の運用フローをシステム化・プロダクト化したものがABEJA Platformになります。 機械学習を適用したプロダクトを開発・運用したいPM・PdM・MLエンジニアがなるべくインフラや環境面を意識せずにサービス提供出来ることをゴールとしています。

f:id:contaconta:20191101132725p:plain

Dataset事業部・Retail事業部・Use Case Creation事業部は、ABEJA Platformの顧客でもあります。

アーキテクチャ

Platformは主に様々なサブシステムと管理システムの集合体で構成されています。 かなり巨大なシステムなため、下記の3つを紹介したいと思います。

  • 学習基盤
  • 推論基盤
  • Gateway

f:id:contaconta:20191023160119p:plain *2019/9/9地点

各機能別技術紹介

学習基盤

概要

  • ディープラーニングの学習を行うための基盤をフルマネージドで提供
    • GPU Instance (3,000+/monthlyのインスタンスを管理)
  • 以下の機能を提供
    • Training Job
    • Jupyter Notebook
    • Tensor Board
    • 共有ストレージ
    • ログ・メトリクス
    • 学習結果の保存
    • 学習モデルのバージョニング

f:id:contaconta:20191023160359p:plain:w450

技術スタック

Key Value
開発言語 Python, Golang
インフラ EKS(Kubernetes), EFS, ECR, S3, スポットインスタンス, Datadog
データベース RDS(PostgreSQL)

工夫ポイント

  • JobやNotebookはCPU/GPUを選択でき、利用していない時は自動で停止する仕組みを提供
  • ローカル学習機能も提供しているため、手元で開発し必要に応じてクラウド側のGPUを利用する、といったことも可能

推論基盤(HTTP)

概要

  • 推論をHTTPで行うための基盤をフルマネージドで提供
    • EC2 Instance: 200+
    • Service: 500+
  • 以下の機能を提供
    • High Availability HTTP Service
    • AutoScale
    • 認証
    • IP制限
    • Bule/Green Deployment
    • バージョニング
    • ログ・メトリクス

f:id:contaconta:20191023160737p:plain:w450

技術スタック

Key Value
開発言語 Python
インフラ EKS(Kubernetes), ECR, S3, スポットインスタンス, Datadog
データベース RDS(PostgreSQL), DynamoDB

工夫ポイント

  • スポットインスタンスで低コスト運用も可能
  • インフラを知らなくても意識しなくてもUI操作のみで、自動復旧・自動スケールし、認証やIP制限、Bule/Green Deploymentが付いた環境を利用できる (もちろんCLIにも対応)

Gateway

概要

  • 全てのAPIのエンドポイントとして提供
  • 月間3億リクエスト超え
    • EC2: large相当 x 4
    • RDS: m3.medium(multi-az) x 1
  • 以下の機能を提供
    • API Gateway
    • Authentication
    • Role
    • Quote
    • Billing
    • Proxy

f:id:contaconta:20191023161003p:plain:w450

技術スタック

Key Value
開発言語 Elixir
インフラ EKS(Kubernetes), ECR, S3, スポットインスタンス, Datadog
データベース RDS(PostgreSQL), ElastiCache(Memcached)

工夫ポイント

  • Gatewayが落ちたらすべてのサービスが停止するので、絶対落としてはいけない(絶対落としてはいけない)
  • リクエスト数が大量なため、Erlang VMがすごくハマってる
  • 高速に処理するためのノウハウ満載

Others

推論基盤(Batch)

  • Batch処理的に推論する基盤
  • 技術的には推論基盤(HTTP)と共通することが多い
  • 以前はAWS Batchを利用していたが用途が合わないため自作中

管理コンソール (UI)

  • React を使い Amazon CloudFront で配信
Key Value
開発言語 JavaScript
フレームワーク React, Flowtype, Webpack, Redux, RxJS
インフラ CloudFront

モニタリング

  • 基本自動復旧なのでThrottole系を主に監視している
Key Value
ロギング Datadog
エラートラッキング Sentry
アラート通知 Pagerduty

開発環境

  • Docker
  • CircleCI
  • Terraform

カスタマーサクセス、カスタマーサポート

  • Intercom、Discourse、LogRocket、Slackを活用し顧客をサクセス

Dataset事業部

精度の高い教師データを迅速・効率的に作成するためのサービスを実装しています。 アノテーションプロジェクトのスムーズな進行・品質管理を行うための機能設計から実装までを行なっています。 日々新しい教師データ作成のためのテンプレートの開発を行なっており、様々な種類の教師データ作成に対応しています。

主に事業としては下記の2つを行っています。

  • ABEJA Platformにおける教師データ作成のシステム提供
  • BPOによる教師データ作成代行サービス

技術スタック (Backend)

f:id:contaconta:20191023161730p:plain:w450

Key Value
開発言語 Go
フレームワーク gin
インフラ GKE, GCS, Firebase, Cloud Memorystore
データベース Postgresql
CI CircleCI

技術スタック (Frontend)

Key Value
開発言語 TypeScript
フレームワーク Vue.js Konvajs Jest
CI CircleCI, Netlify
デザイン Figma Bootstrap(Custom) Sass
その他 Firestore

工夫ポイント

  • 開発するメンバーが多いため、厳格にルールを決めることで、機能追加・保守を行いやすい設計になっています
  • かなり巨大なフロントエンドシステムのため、TypeScriptによる型がすごく助かっています
  • Goを選定した第一の理由は、Goが使いたかったから です
  • アノテーション作業を迅速・正確に行うための作業UIを実装しています (アノテーターの方にUI/UXのテストを行ってもらい、Feedbackをもらいながら開発)
  • API連携により他システムとのインテグレーションが可能な設計のため、今後サードパーティのアノテーションツールも連携可能になります(今後リリース予定)
  • 事前推論機能によりアノテーション作業を効率化できるようなシステム・フローを考慮して設計・開発しています

Retail事業部

大田黒さん の力作寄稿

事業紹介

ABEJA Insight for Retailは、小売流通業向けのABEJAが提供するサービスの一つです。従来の技術では取得の難しかった来店者の顧客属性・顧客行動等の情報。これらの情報をIoTxAI(主に画像解析)xWebの技術を駆使する事で可視化・指標化し、お客様の店舗経営を支援しています。

事業部の開発チームでは、店舗内の映像を取得する為のカメラ設置からデータ解析をしてお客様にデータ提供するまでの一連のコンポーネントを全て社内で開発・運用しており、様々なコンポーネントが導入からデータデリバリーまでの流れを支えています。

アーキテクチャ

f:id:hiroyuki_abeja:20191106172428p:plain

デバイスやネットワーク機器〜分析・可視化まで多岐にわたるコンポーネントがサービス基盤上に存在しています。今回はその中で、主要コンポーネントである下記4つにフォーカスして解説したいと思います。

  • ストリーミングマネジメントシステム
  • 映像解析システム
  • データ変換システム
  • ダッシュボード関連システム

ストリーミングマネジメントシステム

f:id:hiroyuki_abeja:20191106172506p:plain

www.slideshare.net

役割

  • 国内外に存在するカメラと暗号化通信を行いながらセキュアに映像取得を行う
  • 取得した映像を解析しやすいフォーマットに変換してから後段の解析処理に映像を送る
  • 通信回線の品質、取得した映像のエラーチェック等を行い、問題発生時はアラート通知をする

技術スタック

key value
開発言語 Ruby on Rails + Sidekiq , Python3, Terraform, Packer, Ansible
利用ツール Prometheus, Consul, Grafana, HA Proxy , ElasticSearch, Kibana
インフラ さくらクラウド, Rancher
データベース Postgres (Rancher用)

工夫ポイント

  • サービス基盤・導入環境間でABEJAプロバイダーと呼ばれる独自の映像転送バックボーンを利用

    • セキュアな映像転送を実現
    • 回線開通までの時間を短縮し、データ提供までのリードタイムを高速化
  • 基盤の自動スケールによるインフラ構築コストの低減

    • 以前はサービス導入時にインフラエンジニアが手動でサーバーの追加・サブネットの増設・ルーティングテーブルの追加を行っており、工数がかかっていたが、現在はサービス規模に合わせて自動でTerraformが実行され自動でサーバーが追加され、サービス維持に必要なコンテナが自動デプロイされるようになっている
  • カメラデバイスや通信回線の品質をチェックする事で、データ品質のKAIZENに役立てている

    • データ取得部である本コンポーネントの安定性は、最終的に出力されるデータの品質に大きく影響を及ぼす
    • データ取得を取り巻く情報を監視する事で、「当たり前品質」を担保できるようにする

映像解析システム

www.youtube.com

speakerdeck.com

役割

  • ディープラーニングを用いた映像解析を通して、ビジネス上意味のあるデータに変換する

    • 例) 出力データ例: 来店者の年齢・性別等
  • 来店者のリピート率の推定を行う

  • 1日数十TBの映像データを分散解析し、ニアリアルタイムなデータ提供を行う

※リピート率の推定部は、IoT推進コンソーシアム・経済産業省・総務省より平成30年3月30日に公表された「カメラ画像利活用ガイドブックver2.0」を参考とし、プライバシーに配慮したシステム設計・システム運用をしています。

技術スタック

key value
開発言語 Python3, TensorFlow, Pytorch
インフラ ABEJA Platform (Data Lake, Model), AWS ECS

工夫ポイント

  • ABEJA Platform上でマイクロサービスとして映像解析フローを実装
    • 機械学習のモデルをDAGでつないで機能拡張性の向上とオートスケールを実現
    • 日々研究開発が進む新たなアルゴリズム・モデルを適用しやすくしている
  • 処理全体のリトライや冪等性を担保し回復性の高いアーキテクチャを採用
  • インメモリDBを自前で実装し、高速な特徴量検索ができるようにしている
    • 将来的にO(107) の特徴量検索でも数10msec で処理できることを目指す予定

データ変換システム

f:id:hiroyuki_abeja:20191106173619p:plain

役割

  • サービス基盤と店舗に設置されたIoTデバイス・お客様環境のPOSとのシステム境界

    • 適切な認証・認可を行い、外部からのデータを受け取る
    • 一定のポリシーに基づいてデータ変換(フォーマット整形)を行い、サービス基盤内のDWHに送信する
  • IP制限・RateLimit制限といったアクセスコントロールを実施する

技術スタック

key value
開発言語 Golang (認証認可系), Node.js (データフォーマット変換部)
インフラ ALB, ECS (Fargate), DynamoDB, Redis

工夫ポイント

  • Insight for retail専用のGateway(Border)を設置

    • サービス基盤の内外でシステムの責任を分離
    • 統一的な認証認可やロギングを実施
  • Fargateを利用する事で、インスタンスのマネージメントコストを下げる

  • データ連携の失敗が検知できるように、社内のアラート基盤と連携されている

    • 現場でのIoTデバイスの不調や、お客様環境のトラブルを迅速に検知できるようにする

ダッシュボード関連システム

f:id:hiroyuki_abeja:20191106173633p:plain

役割

  • ビジネスにインパクトする意思決定ができる可視化・分析ツールを提供する
    • Vue.js + S3を組み合わせたSPA静的ホスティング

技術スタック

key value
開発言語 Vue.js, Node.js
インフラ ALB, ECS(Fargate), S3, Firebase
利用モジュール Plotly.js, Storybook

工夫ポイント

  • BFF (Backend For Frontend)層を採用

    • UIの機能提供にフォーカスしたAPI層を提供
    • B/G基盤と組み合わせた高速な機能開発・デリバリーのサイクルの実現
  • Gateway(Nginx) + CodeDeployを活用したB/G基盤

    • 分析に使うロジックの切り替えの簡易化

Use Case Creation事業部

各企業とのコラボレーションを通じで機械学習の活用事例を作ることで、より機械学習のビジネス活用を加速させるためのチームになります。 AI活用の啓蒙活動から・コンサルティング・PoCの開発から実証実験を通じて実際にカタチにする、ということを意識しています。 *事業内容上、機密なことが多いため詳しくはコチラ の登壇内容をご覧いただくとイメージしやすいです。

Use Case Creation事業部では、各プロジェクトやプロダクト開発において、Dataset事業部と連携してデータ収集の効率化を図ったり、ABEJA Platformを活用して実証実験までの道のりを簡略化したりしています。

技術スタック

Labsのチームと近いものを利用していることが多いので、次項をご覧ください。

Labs

活動内容

真の意味でテクノロジーベースの事業づくりや、事業成長を狙えるテーマを研究・開発すること目的として活動しています。 主な活動は技術調査・発信から研究・プロトタイプ開発、事業性の検証になります(主にプロダクトアウト)。 特定の事業や技術に縛られず良いシーズを発見しカタチにしていくために、探索フェーズと集中フェーズをバランス良くできるような仕組みを意識して運営しています。 探索フェーズでは個人のスペシャリティーや興味を活かし チームで個人プレー を行い、集中フェーズでは各事業部とも協力し スモールチームで素早く検証 できる環境づくりを推進しています。 しかしながら何かを生み出すためにはムダや遊びも必要なので、現段階で事業に関係なさそうな個人的興味を研究テーマとして取り組めるような余力も取れるような施策もチームとして運用しています。

技術スタック

Key Value
開発言語 Python, JavaScript, c++
DLフレームワーク Pytorch, Chainer, Tensorflow, MXNet
その他よく使うフレームワーク例 Numpy, Pandas, OpenCV
Webフレームワーク Vue.js
開発環境 Docker (Dockerfileで記述された以外の俺の考えたさいきょーの環境での実験は原則禁止), pyenv, anaconda, jupyter
インフラ ABEJA Platform, AWS, GCP, オンプレ(DGX等)
データベース Firebase, ElasticSearch

直近2-3年での取り組み例キーワード

  • ML
    • Domain Adaptation
    • Few-shot learning
    • Semi-supervised Learning
    • Unsupervised Learning
    • Self-supervised Learning
    • Meta learning
    • Explainable AI
    • Active Learning
    • Neural Archtecture Search
    • Deep Model Complession
    • Generative Adversarial Network
  • CV
    • Object Detection
    • Object Tracking
    • Action Recogniton
    • Landmark Detection
    • Pose Estimation
    • Face Detection
    • Face Verification
    • Image Segmentation
    • Image Matting
    • Annomaly Detection
    • Efficient Crowd Sourcing
    • Image Captioning
  • RL
    • Inverse Reinforcement Learning
  • NLP
    • Word2Vec
    • Doc2Vec
    • BERT
    • 前処理

工夫ポイント

  • 技術調査・研究〜プロトタイプ開発まで業務範囲が広いため、技術選定は寛容にできるように意識しています(個人の裁量で決めており、年々フルスタック化が進んでいます)
  • 基本的に自由ですが、再現性をかなり意識しているため、実験やプロトタイプ開発時において 俺の環境では動く は原則禁止しています(ドキュメントやスクリプトでカバーも意識しています)
  • 人柱としてトライした技術は社内外で共有することを心がけ、自分たちのアイディアのプロトタイプ実現に必要な知識は全社横断的に技術アドバイスを受けています

いかがでしたか?

このように採用している技術は各事業やチームの性質や特色が現れています、事業も技術も日進月歩ですね。(正直僕自身、全てを把握しきれていません笑) N年前は会社横串で技術スタックを揃えていたのですが、事業フェーズやスピード感・重要ポイントが事業ごとに異なるので今はこのように事業部である程度裁量を持って技術選定が出来るようにしています。 一方で、積み上げた知見や技術は共有いけるよう、これらのベストプラクティスやアンチパターンをエンジニア横串で相談できるようにしたり、使ってみた・作ってみたのような社内カンファレンスを通じで情報交換することで切磋琢磨しております。

やりたいことは山ほどあるのですが、挑戦したい・すべきテーマが多すぎて人手が足りていない、、、というのが現状です 😔 もしこれらの事業や技術テーマに興味や共感を持っていただけたらぜひ一度お声がけください! カジュアルに遊びに来ていただけると嬉しいです。

ABEJAではイケてるしヤバい人材募集中です!今回のブログのような研究や実装をしてみたい方・こういったサービスを開発してみたい方・インターンに興味がある方がいれば、ぜひご連絡くださいー

採用情報一覧は以下↓

hrmos.co

www.wantedly.com

ABEJAの中の人と話ししたい!オフィス見学してみたいも随時受け付けておりますので、気軽にポチッとどうぞ↓↓