20161027 hadoop summit generating recommendations at amazon scale with apache spark and amazon...

Post on 21-Jan-2017

1.099 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Solutions Architect, Amazon Web Services Japan

Generating Recommendations

at Amazon Scale with

Apache Spark and Amazon DSSTNE

Ryosuke Iwanaga

October 2016, Hadoop Summit Tokyo

自己紹介

Ryosuke Iwanaga (岩永 亮介)• Twitter/GitHub @riywo

Amazon Web Services Japan

Solutions Architect• Web, Gaming

• Big Data / Machine Learning / DevOps / Container

Before Amazon• Software Engineer / Ops Engineer / DBA / etc.

Agenda

• 機械学習とAmazon DSSTNE

• AWSを利用したAmazonのレコメンデーション

機械学習とAmazon DSSTNE

サービス、分析、リアルタイム、そして機械学習

• サービス: ビジネスのコア (E*)• ビジネス価値を高めるには、これだけでは不十分

• 分析: 過去に何があったか?• Hadoopが最初に注目されたところ

• リアルタイム: 今何が起こっているか?• 最近注目されているところ (Spark Streaming, Flink, etc.)

• 機械学習: これから何が起こるか?• これから注目を浴びていくところ

機械学習は難しい?専門性が必要?

子どもたちが算数の授業で学ぶこと

算数の問題を解く時

問題を解くステップの本質

機械学習の問題を解く時

1. 正しい問いを与える

2. 現実世界を数式に

3. 計算

4. 数式を現実世界に

1. 正しい問いを与える

2. 現実世界を数式に

3. 計算

4. 数式を現実世界に

→データ

→アプリ

学習タスク 推論タスク

BIGDATA

Labels

学習済みモデル

Apple:0.9

Orange:0.1

Strawberry: 0.2

Banana:0.1

学習推論

エンジン

結果

教師データ

機械学習のアーキテクチャ

ここだけ提供しているSaaSも多いデバイス側で動作させる場合も多い大量の計算リソースが必要

「今日の天気は?」

「晴れです」

推論エンジン学習

初期パラメータニューラルネットワーク定義

結果 配布

配布

Amazonの製品レコメンデーション

• 製品A, B, C …, Zを買った人が、次に購入しそうな製品はなんでしょう?

推論の入出力

• 入力: 各お客様の購入履歴 (過去のデータ)

• 出力: 各お客様の、各製品に対する購入確率 (未来の予測)

課題

• 製品数・お客様数が膨大なため、学習・推論に時間がかかる

レコメンデーションのための機械学習

多数のアルゴリズム

行列因子分解

ロジスティック回帰

ナイーブベイズ

etc.

=> ニューラルネットワーク

パーセプトロン

複数の入力値の積み重ねから、出力を計算

ニューラルネットワーク

パーセプトロンを接続

多くの場合、複数層で構成

深層学習とは、深い層を持ったネットワークの学習効率化

ニューラルネットワークとは?

y

x0

x1

x2

ニューラルネットワークでレコメンデーション

出力層 (1万-1千万)

入力層 (1万-1千万)

隠れ層 (100-1,000)

製品カタログに対して、お客様の購入履歴は極端に小さい→ほとんどの重みがゼロ(疎なネットワーク)

愚直にニューラルネットワークを計算すると、ほとんどの計算は0×0

Amazon DSSTNE:Deep Sparse Scalable Tensor Network Engine

AmazonがOSSとしてリリースしたニューラルネットワークのフレームワーク巨大疎データと全結合レイヤに対して最適化されているモデル並列の複数GPUサポートが、とても効率的100%の決定論的な実行SM 3.x, 5.x, 6.xを完全にサポート (Kepler以上のGPU)標準で分散学習をサポート (約20行のMPI呼び出し)

よくあるユースケース 製品レコメンデーション (製品数は膨大だが、各人の購入履歴は小さい) 自然言語学習 (語彙数は膨大だが、各文脈で使われるのはごく一部)

https://github.com/amznlabs/amazon-dsstne

AWSを利用したAmazonのレコメンデーション

レコメンデーションシステムの要件

• 高速な繰り返しが、生産性のために最も重要

• 設計=>学習=>予測=>評価=>設計=>学習=>…

• 多種多様なワークロードをなるべく少ないツールで

• データサイエンティストがその仕事に集中できるように

• レコメンデーション生成が24時間以内に終わること

• 分散システムを使って、大規模データを扱う

GPUは超並列学習・推論に最適だが試行錯誤が重要

• アルゴリズム、パラメータ、フレームワークを変えて繰り返し

• → 入出力を変えずに、学習器のみを入替えたい

機械学習では、その前後のデータ処理も重要

• データ整形、異常値排除等CPUが得意な処理

• →大量のデータを、分散処理したい

• →1つのインタフェースで両方を扱いたい

GPUとCPUを、統一された使い勝手で効率よく

アーキテクチャ

Amazon EMR

Amazon S3

Amazon ECS

コンテナとは何か?

OS上の仮想化

プロセスの隔離

イメージ

自動化Server

Guest OS

Bins/Libs Bins/Libs

App2App1

深層学習とDocker(Container)

• 深層学習のフレームワークはたくさんある

• DSSTNE, Caffe, Theano, TensorFlow, MXNet, etc.

• 深層学習では調整すべきパラメータが膨大

• 同じ入力で様々に比較するには?

• 各フレームワークをコンテナ化

• コンテナイメージと設定を入れ替えるだけでOK

• もうマシンのセットアップを心配しなくて良い

• 例: CUDA Driverはホスト側で共有するのでセットアップ済

参考: NVIDIA Dockerhttps://github.com/NVIDIA/nvidia-docker

Sparkを使って対話的な速度を実現

join

filter

groupBy

Stage 3

Stage 1

Stage 2

A: B:

C: D: E:

F:

= cached partition= RDD

map

• 大規模並列

• 実行エンジンとしてMap ReduceではなくDAGを利用

• DataFrameのメモリ内にデータほ保持することでI/Oを最小化

• パーティションを意識するので、ネットワーク負荷になるShuffleを避けられる

Apache Zeppelinのノートブックでクエリを構成

Amazon EMR

Why EMR?

自動化 分離 弾力性

連携 低コスト最新

Why EMR? 自動化

EC2起動 Cluster設定 Hadoop設定

アプリケーション

インストール

ジョブ実行モニタリングと

失敗のハンドリング

Why EMR? 分離アーキテクチャ

コンピュートと

ストレージを分離

データロスなく

リサイズしたり止めたり

Amazon S3上の同一データを

複数クラスタから利用

技術の進歩に合わせて

簡単にインフラも進歩できる

繰り返しでI/O重視な

ワークロードにはHDFS

スポットやリザーブドインスタンスで

コストを抑える

Why EMR? ストレージとコンピュートの分離

Amazon Kinesis(Streams, Firehose)

Hadoopジョブ

永続化クラスタ – 対話型クエリ(Spark-SQL | Presto | Impala)

変換クラスタ - バッチジョブ(夜間バッチで数時間) – ノードを増減

ETLジョブ

Hive外部Metastorei.e Amazon RDS

ワークロード特化型クラスタ(異なるサイズ、異なるバージョン)

Amazon S3をストレージ

create external table t_name(..)...location s3://bucketname/path-to-file/

FINRA事例: GreenplumからHive on EMRへ

EMR 5.0 - Applications

Amazon ECS

Amazon EC2 Container Service

コンテナ管理をあらゆるスケールで

柔軟なコンテナの配置 AWSの基盤との連携

Amazon ECS コンポーネント

• Task

• Instance上で実行されている実際のContainer

• Task Definition

• Taskで使うContainer、及び周辺設定の定義

• Cluster

• Taskが実行されるEC2 Instance群

• Manager

• ClusterのリソースとTaskの状態を管理

• Scheduler

• Clusterの状態をみて、Taskを配置

• Agent

• EC2 InstanceとManagerの連携を司る

Cluster, Scheduler, Task Scheduler

ManagerCluster

Task Definition

Task

Agent

高性能GPUインスタンスタイプ

• NVIDIA K80を最大16GPU搭載

• 最大64 vCPUのIntel Broadwell プロセッサと、最大 732 GiB RAM

• Elastic Network Adaptor (ENA)による20 Gbps ネットワーク

P2 インスタンス

p2.xlarge: $ 0.90 per hour (us-east-1)〜利用可能リザーブドインスタンスやスポットインスタンスももちろん可能

https://aws.amazon.com/jp/blogs/news/new-p2-instance-type-for-amazon-ec2-up-to-16-gpus/

学習はモデル並列、推論はデータ並列

AWSを利用したことによる利点

スケーラビリティ

フルマネージドサービス

GPUインスタンス

まとめ

Amazonのレコメンデーション on AWS

• SparkとZeppelinをデータサイエンティストの統一インタフェースに

• DSSTNEで巨大な疎なニューラルネットを実行

• CPUクラスタをEMR、GPUクラスタをECSで管理

• 今すぐあなたも試せます!

• GPU高速化のワークロードをAmazon ECS上で管理する• 上記のアーキテクチャを簡単に試すことができるAWS CloudFormationテンプレート付きです

参考情報

• Apache SparkとAmazon DSSTNEを使った、Amazon規模のレコメンデーション生成

• 今回も紹介しているアーキテクチャの解説ブログ

• Amazon S3を中心とするデータ分析のベストプラクティス

• S3をデータレイクとして構成する際のアーキテクチャ

• AWSでBig Data活用

• AWSの各種サービスを駆使した事例

Thank you!

top related