20161027 hadoop summit generating recommendations at amazon scale with apache spark and amazon...
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!