pandazx's blog

データ分析など雑多な技術ブログ

SysML2019論文読み会のメモ

SysML2019論文読み会に参加してきた。

mlxse.connpass.com

気になった発表は以下から論文を参照できる

以下、メモ

SysML参加報告&紹介

Speaker: 今井

SysMLとは

  • SySMLとは計算機システムと機械学習の学際的な研究を扱う国際会議。
  • 採択率16%とトップカンファレンス級の難易度。

SysML2019

  • Session
    • Parallel & Distributed Learningのセッションは2セッションあった
    • 他はSecurity and Privacy, Hardware, Hardware Debugging, Video Analysis, etc
  • 参加者515名. 去年の1.8倍
  • 産学比は産:学=7:3
    • メルカリからは約6名参加, FPN, NEC, Indeed, etc.
  • スポンサー:GAFAM, Tesla, databricks, IBM Research AI, QUANTUMBLACK, NetApp
  • 講演映像はSysMLで公開されている

基調講演1: Compiling AI for the Edge

  • Ofer Dekel, Microsoft Research
  • Microsoft Researchが開発しているエッジ向けAIコンパイラ ELL(the Embedded Learning Library)
    • デプロイ先のエッジHWプロファイルを使ってコンパイルする
  • 評価がいい加減な機械学習が多いという苦言
    • 冗長なモデルにlossy compressionを行って、精度劣化があったが、コスト低減ができたという論文が多い
    • lossy compressionとは、例えば、FP32->FP8にするといったもの
    • 基本的に処理時間と精度はトレードオフで、 このトレードオフのパレート境界を上に押し広げる研究でないと意味がない

基調講演2: How Do We Make AI Fair?

  • Maya Gupta, Google AI
  • AIの公平性の話
  • 学習時に公平性を制約として入れて、公平性を満たすように学習すべき。 この際、滑らかな関数を得たい。ギャップがあると、その前後で公平性に欠ける可能性がある
  • 例えば、ある指標値が上がっていく時に上がって下がって上がるような曲線がある場合、 途中下がってしまうと不公平になる場合があるため
  • 具体例としては金利計算する際に勤務年数を元にすると、 勤務年数が低い方が金利が優遇されてしまうケースが出てくるため
  • AIで難しいのは現実に即したモデルとなって欲しいが、現実が公平ではない場合があるということ

おそらく、ギャップを狙ってAIがハックされるといった、AIの脆弱性にも通じるところと思われる。

Hardwareセッション: Serving Recurrent Neural Networks Efficiently with a Spatial Accelerator

Hardwareセッション: Bandana: Using Non-Volatile Memory for Storing Deep Learning Models

  • Standord, Facebook
  • Facebookではたくさんの特徴量がベクタ表現に変換しているため、巨大なメモリが必要
  • DRAMでは足りなくなるので、NVMをメモリとして使って、DRAMをキャッシュとして使う
  • 格納アルゴリズムSocial Hash Partitioner(SHP)を提案
    • 特徴量のバケットが複数あり、それにアクセスするクエリがあったとして、 クエリがアクセスするバケット数が少なくなると効率が良いので、 そのように特徴量を格納するアルゴリズム
  • 学習の時に使うテクニック

Speaker: 宮崎崇史, ヤフー株式会社

Parallel & Distributed Learning I, II

  • 分散学習の例: AGGREGATHOR, Federated Learning
  • アプローチの分類
    • 通信ボトルネックの低減
      • 通信と計算のオーバーラップの削減(TicTac, P3)
      • 通信内容の圧縮(3LC)
      • 通信頻度の削減(AdaComm)
      • 通信アルゴリズムの改良(BlueConnect)
    • 計算の効率化
  • TicTac
    • ResNet, Inceptionなど分岐が多い場合に通信順序を効率化する手法
  • P3
    • 層ごとのパラメータ数が異なる場合に効率化する手法
  • AdaComm
    • 分散SGDは分散して学習して、都度、コミュニケーションして協調していく
    • Periodic Averaging SGD(PASGD)はコミュニケーション回数をτ回に1回にする
      • 学習はバラツキが大きいので、τ回にすることでバラつきが抑えられる(らしい)
      • 処理は速くなるが、収束性が分散SGDよりも悪化し、得られるモデル精度が劣化する問題がある
      • これを改善するために、最初のτは大きく、徐々に小さくする手法もある ※他の分散学習でも学習率はこのように変化させることが多い
  • P3(Priority-based Parameter Propagation for Distributed DNN Training)

Video Analysis: FixyNN: Efficient Hardware for Mobile Computer Vision via Transfer Learning

  • 事前学習しておくと転移学習で必要な学習データ量を削減できる
  • FFEのメリットとして、演算内容が固定されるので最適化しやすい
  • ただ、固定すると精度が劣化
  • 固定する層数に比例してチップ面積が増大
  • NVDLA: NVIDIAが公開しているOSSのNNアクセラレータ
  • DeepFreeze: 本論文で提案したツール。Githubで公開されている
  • NVDLA, DeepFreezeを評価してスループットや電力効率(TOPS/W)を比較

Category: Security and Privacy

AGGREGATHOR: Byzantine Machine Learning via Robust Gradient Aggregation

  • Speaker: 丸山宏, PFN Fellow
  • 並列トレーニングにおけるビザンチン障害
  • 理論的かつ実用的な提案
  • マルチノードマルチGPUの分散学習で、いくつかのGPUが故障したり、乗っ取られたケースを想定
  • All Reduceで重み平均値を計算するが、その際のルールを提案
  • 1つの方法として平均ではなく、中央値を取る方法もある。 他にMULTI-KRUM, BULYANという手法があり、それに対する考察を行い、 ビザンチン障害に対する耐性を数学的に証明
  • MULTI-KRUMはいくつかの障害があっても収束することを証明
  • BULYANはいくつかの障害があっても、障害がない場合と同じ値になることを証明
  • 故障したり、乗っ取られた場合の値というのは全体的な平均の値から 一定以上離れているかどうかを基準としている
  • Tensorflow上に実装して、故障やパケットロスを起こさせて評価して 提案手法の有効性を示した

Towards Federated Learning at Scale: System Design

  • 論文著者はBonawitz et al., Google
  • Federated Learning(自分の理解があやしい。。。)
    • クラウドからエッジに学習タスクを配布
    • エッジで得られたデータを元に学習
    • 更新したモデルを暗号化してクラウドにUPして集約
    • これはエッジで得られたデータを外に出せない場合に有効な手法

To compress or not to compress: Understanding the Interactions between Adversarial Attacks and Neural Network Compression

メモしなかった

敵対的サンプルについて。

Category: Hardware & Debugging

Full Deep Neural Network Training on a Pruned Weight Budget

  • エッジデバイスで学習するためのPruningを適用してメモリ使用量を削減する手法
  • 評価では重みの数を5~11分の1に削減し、精度劣化なしという結果が得られた

Continuous Integration of Machine Learning Models with ease.ml/ci: Towards a Rigorous Yet Practical Treatment

  • 厳密だが実用的な機械学習システムのためのCI(Continuous Integration)
  • 技術課題
    • テストセットのサイズ
    • テストセットの更新頻度
    • リリースの基準
  • 貢献
    • テストシナリオを整理
    • テスト条件を記述するscriptを定義(Travis CIの拡張として定義)
    • そのCI Systemを開発
  • リリース基準
    • モデルの精度が改善していること
    • モデルの結果が変わりすぎていないこと
    • 他に3つある
  • テストセットの更新頻度
    • 基本的には開発者が過学習させないようにテストセットは開発者に渡したくないという考えがある
    • テストセット更新しない。モデル開発者にはテストセットは渡さない
    • テストセットを毎回更新。モデル開発にはテストセットを渡す
    • モデルがテストをパスしたらテストセットを更新。モデル開発にはテストセットを渡す
  • テストセットのサイズ
    • Hoeffdingの不等式の変形によってサンプルサイズを計算
    • 最適化などを使用
  • コメント
    • 運用チームが開発とは独立にテストデータを準備するのは難しいので、 前提が成り立ちにくいのでは

Data Validation for Machine Learning

  • 機械学習パイプライン
  • TFX(Tensorflow Extended)のライブラリとして提案手法を実装
  • 既存研究ではデータの品質に着目されてこなかったが、 運用ではデータの品質監視が重要
  • 学習データとテストデータの分布の差を監視
    • 両データの分布の距離を計算するが、KL divergence, コサイン距離は 運用チームでは解釈が難しい。チェビシェフの距離を使った解釈が容易な手法を提案

データ品質監視はDebuggingというカテゴリになるんだな。

Category: Efficient Training & Interface

Optimizing DNN Computation with Relaxed Graph Substitutions

  • Speaker: 横道春道, NEC研究所
  • DNN計算グラフの最適化
  • 提案手法
    • グラフ全体にサブグラフに分割
    • バックトラック法で広い空間で探索
    • 最大で1.6倍高速化
  • 単純な方式
    • convとreluを1つにまとめる
    • これにより、メモリアクセス、GPUカーネルの立ち上げ処理が低減される
    • 本方式はルールベースでモデルやハードウェアの違いを考慮できていない
  • Metaflowによる最適化
    • conv 1x1 -> conv 3x3にしてカーネルサイズを拡大
      • ただ、こういったルールは人が決めている。自動化は将来課題
    • 拡大した部分は0で埋める。拡大しても計算結果は変わらない
    • プレゼンの例で示された最適化例はV100では高速化されるが、K80では高速化されないらしい。 つまり、デプロイ先のHWを考慮した最適化が必要
  • ソースコードGithubで公開されている
    • metaflow_sysml19
  • QA

Category: Programming Models

TensorFlow Eager: A multi-stage, Python-embedded DSL for machine learning

  • Tensorflow EagerはAutoGraphと関連が深い
  • AutoGraph: https://www.tensorflow.org/guide/autograph
  • Tensorflow Eager
    • ハードウェアにより高速化される機械学習のための、多段階型のPythonに埋め込まれたDSL
    • ライブラリというよりはDSL
    • Tensorflowは宣言型プログラミングだったが、これを命令型にしたのがTensorflow Eager