機械学習基盤/MLOpsまわりの勉強をしたときに参考にさせていただいた記事（2018.12時点）

# はじめに
機械学習基盤/MLOpsについて知らなければと思い立ち、勉強したときに参考にさせていただいた記事の自分用メモです。

# 1. アーキテクチャ例

**[Apache Airflowでエンドユーザーのための機械学習パイプラインを構築する](https://medium.com/programming-soda/apache-airflowでエンドユーザーのための機械学習パイプラインを構築する-part0-f5cce5da628)**
---

- 概要
    - 「本連載では、Apache Airflowを用いて機械学習の専門家ではないユーザー(=エンドユーザー)が、機械学習を活用するためのパイプラインの構築を目指します。」
- ポイント、所感
    - 既存の機械学習パイプラインがどのような処理を行なっているかをサーベイし、それを受けてApache Airflowで構築した事例
    - 機械学習パイプライン全体を俯瞰することができる
    - Airflow流行っている？AWSでもマネージドサービス出して欲しい、、、。
- 関連技術
    - Airflow,機械学習パイプライン

**[Jupyter だけで機械学習を実サービス展開できる基盤](https://engineer.recruit-lifestyle.co.jp/techblog/2018-10-04-ml-platform/)**
---

- 概要
    - GCPを活用した機械学習基盤構成例（リクルートライフスタイル社）
        - ①分析・モデリング環境、②学習バッチ実行環境、③APIサービング環境
- ポイント、所感
    - JupyterNotebookを業務フローの中心に据えた構成を実現するには
    - TFXを参考にしている
    - GKE使って、コンテナベースで環境構築をしているので、柔軟性が高そう
- 関連技術
    - JupyterNotebook,papermill,Flask,GKE,lstio,GCR,BigQuery,GCS,CloudFunctions,Git

**[クックパッドの機械学習基盤 2018](https://speakerdeck.com/ayemos/machine-learning-platform-at-cookpad-2018)**
---

- 概要
    - 「クックパッド社の機械学習基盤の変遷」
- ポイント、所感
    - ChatBot経由で開発者にGPUインスタンスを提供、はやった方がいいなと思った（つけっぱなし対応含め）
    - GoogleCloudMLEngine,FloydHub,AmazonSageMakerの比較（主にデプロイまわり）がありがたい
    - 「各モデル実装者がデプロイまで行う体制へ」を目標にするのはいいなと思った
- 関連技術
    - GoogleCloudMLEngine,FloydHub,AmazonSageMaker

**[開発を爆速にするキスモの機械学習基盤](http://kysmo.hatenablog.jp/entry/2018/05/22/111111)**
---

- 概要
    - オンプレ機械学習基盤構成例（キスモ社）
- ポイント、所感
    - 機械学習基盤をオンプレで構築する場合とクラウドで構築する場合のメリデメを比較している
    - 既存の計算資源があったので、Kubernetes化して、RancherによりGUIで利用できるようにした
    - 開発者は使いたいGPUを指定して学習することができる
- 関連技術
    - オンプレ,Docker,Rancher,Kubernetes,etcd

**[検索組織の機械学習実行基盤](https://recruit-tech.co.jp/blog/2018/09/10/qass_ml/)**
---

- 概要
    - GCPを活用した機械学習実行基盤例（リクルートテクノロジーズ社のQaasチーム）
- ポイント、所感
    - サービスごとに属人化していた->コンテナ技術を使ってロジックの移植性を向上させた+ワークフローエンジンを採用して簡単に処理を実行できるようにした->サービスを横断した資産の活用が活発になった
    - データソース->dockerでデータ加工->共有ストレージに->dockerの機械学習ロジックで加工->出力
    - ワークフローエンジンはDigdag。Dockerのイメージを指定し、そのコンテナで処理を実行できる。CI/CDツールはDrone。BigQueryにデータを集約。
- 関連技術
    - Docker,Drone,Digdag,BigQuery,GCS,GCR

**[Kubernetes を利用したコンテナベース機械学習基盤の構築](https://analytics.livesense.co.jp/entry/2018/01/18/090000)**
---

- 概要
    - GCPを活用した機械学習基盤構成例（Livesense社）
- ポイント、所感
    - 「Kubernetes 上でのコンテナのデプロイは本当に簡単/柔軟に行え、これであれば柔軟な機械学習システムの開発に十分活用出来る」
    - 設定のコード化、素早いデプロイ・ロールバック、クラスタ内の各Pod・Serviceの連携が楽、ConfigMap・Secretsによる設定の共通化、CronJobによるバッチ運用
    - データ分析基盤はRedshift。バッチ処理なので転送コストやレイテンシは問題ない。
- 関連技術
    - GCR,GKE,CloudLB,GCE,CloudStorage,helm,CronJob,Redshift

**[多角型事業と集約型事業、 それぞれのMLOps / AI基盤](https://speakerdeck.com/yurfuwa/shibuyasynapse-number-4)**
---

- 概要
    - 機械学習基盤構成例（DeNA社）
- ポイント、所感
    - 前提情報大事。「多角型事業組織でドメインを定めず大小多数のサービスと事業で成立している」からこういう機械学習基盤。（クラウドをシンプリに活用、とか）
    - シンプルでクイックに機械学習基盤を構築する際に意識すること、MLOpsでMLエンジニアがやること一覧。
    - ElasticBeanstalk Docker Multiple Containerを利用している。パイプラインはSQS。
- 関連技術
    - EB,DynamoDB,SQS

**[メルカリに学ぶ深層学習基盤](http://kskbyt.hatenablog.jp/entry/2018/02/17/222015)**
---

- 概要
    - メルカリAI部が構築している機械学習基盤（MLOps）について
- ポイント、所感
    - kubernetes利用
    - インサンプルでモデルの精度をウォッチして、閾値以下の精度になると自動でtrainし直す
    - 機械学習基盤のポイントは、ML/DLを『全自動で』『精度を保ったまま』『動かし続ける』ことの
- 関連技術
    - kubernetes

# 2. 個別技術要素解説
## コンテナ
### **Docker**
コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム

* コンテナ技術とコンテナオーケストレーション
    * https://speakerdeck.com/tarosaiba/kontenaji-shu-tokontenaokesutoresiyonru-men
    * コンテナとは、Dockerとは,各種dockerコマンドの全体像,コンテナオーケストレーション

### **Kubernetes**
コンテナ化されたアプリケーションの展開、スケーリング、および管理を自動化するためのオープンソースシステム

* Kubernetesを始めよう！
    * https://inside.dmm.com/entry/2018/04/13/hello-kubernetes
    * Kubernetesとは,各種コマンド(kubectl),Web UI(Dashboard),クラスタの構成要素(オブジェクト/ポッド,デプロイメントコントローラ,サービス)

* Kubernetesはクラスタで障害があったとき、どういう動きをするのか
    * http://dr-asa.hatenablog.com/entry/2018/04/02/174006
    * ReplicaSetのマニュフェスト,Podのオートヒーリング機能,kube-controller-manager,Node Controller

### **etcd**
設定情報共有とサービス検出のための高可用KVS

* Kubernetesの分散環境を支えるetcdとflannel
    * https://netmark.jp/2014/12/kubernetes-etcd-flannel.html
    * etcdとは

### **Istio**
マイクロサービスをセキュアにマネージメントするためのOSS
サービス間の認証やモニタリング、L7での柔軟なロードバランシングなど

* Istio入門
    * https://qiita.com/Ladicle/items/979d59ef0303425752c8
    * Istioのコンセプト,アーキテクチャ,構築手順,デプロイ手順

### **argo**
Kubernetes 上で動作するコンテナネイティブなワークフローエンジン

* Argo によるコンテナネイティブなデータパイプラインのワークフロー管理
    * https://analytics.livesense.co.jp/entry/2018/07/24/110000
    * argoとは,ワークフローの設定

### **Kubeflow**
Kubernetesのコンテナに機械学習をさせるためのツール
以下から構成される
  1. JupyterHub (Jupyterを複数ユーザーで使えるようにしたもの)
  2. TensorFlow Training Controller (学習用の分散環境が簡単に構築できる)
  3. TensorFlow Serving (構築したモデルを公開できる)

* 機械学習ツールキット KubeflowについてGDG DevFest18 で登壇してきました
    * https://tech.mercari.com/entry/kubeflow-intro
    * Kubeflowで何ができて何ができないのか


## GCP
### **GCP**
Googleがクラウド上で提供するサービス群の総称
Googleだからこそ作ることのできるデータ解析や機械学習系のサービス、そして Google が得意とするアプリケーションのスケールアウトが可能な Google App Engine

* GCP入門編
    * https://www.topgate.co.jp/gcp01-what-is-google-cloud-platform
    * GCPとは,GKE,GCR,BigQuery,CloudFunctions,他主要サービス

### **Cloud ML Engine**
Googleの提供する、TensorFlowの実行環境

* Cloud ML Engine上でTensorFlowを動かしてみよう
    * https://book.mynavi.jp/manatee/detail/id=78197
    * 学習ジョブ実行,学習済みモデルの実行

## AWS
### **AWS**
Amazonがクラウド上で提供するサービス群の総称

* AWS再入門2018
    * https://dev.classmethod.jp/series/aws-re-introduction-2018
    * AWSとは,他主要サービス

### **ECS, EKS, Fargate**
AWSにおけるコンテナ関連サービス

* 迷える子羊に捧げるコンテナ環境徹底比較　〜ECS、Fargate、EKSは何が得意で不得手か
    * https://speakerdeck.com/hamadakoji/mi-eruzi-yang-nipeng-gerukontenahuan-jing-che-di-bi-jiao-ecs-fargate-ekshahe-gade-yi-debu-de-yi-ka
    * ECS, EKS, Fargateの使い分け

### **SageMaker**
Amazonの提供する、完全マネージド型の機械学習サービス

* 【初心者向け】Amazon SageMakerではじめる機械学習
    * https://dev.classmethod.jp/machine-learning/getting-started-with-amazon-sagemaker
    * SageMakerノートブックインスタンス起動->モデルアーティファクトを生成->SageMaker ホスティングサービスにモデルをデプロイ


## ワークフロー管理
### **Digdag**
Treasure Data製のワークフローエンジンのOSS
バッチ処理の依存関係を明確に定義できたり、ジョブの管理する

* Digdag – 特集カテゴリー –
    * https://dev.classmethod.jp/referencecat/job-management-tool-digdag/
    * Digdagのアーキテクチャとコンセプト,インストール方法,ワークフロー定義,スケジューリング

### **Airflow**
Airbnbが提供しているオープンソースのタスクスケジューリング・モニタリングのフレームワーク

* Apache Airflow でタスクスケジューリングしてみた ～Airflowによって開発負荷が変わる～
    * https://www.gixo.jp/blog/11162/
    * Airflowのはじめ方

## Webフレームワーク
### **Flask**
FlaskはWebフレームワークで軽量で機能がそこまで備わっていないということが最大の特徴

* [Python] Flask 入門
    * http://python.zombie-hunting-club.com/entry/2017/11/03/223503
    * Flaskのインストール,htmlファイル表示,pythonの値をhtmlに埋め込む,GET/POSTで値を渡す

### **Django**
PythonのフルスタックWebフレームワーク

* Djangoを最速でマスターする
    * https://qiita.com/gragragrao/items/373057783ba8856124f3
    * Djangoの基本要素、アプリ作成の流れ

### **FastAPI**
標準のPythonタイプヒントに基づいてPython 3.6+でAPIを構築するための最新の高速（高性能）Webフレームワーク

* FastAPI
    * https://fastapi.tiangolo.com
    * 公式ドキュメント

# おわりに
こっそりしれっと随時追記していく気もします。