LoginSignup
11
9

More than 3 years have passed since last update.

BERT のメモ (2019 年 10 月 27 日時点)

Last updated at Posted at 2019-09-27

背景

vtuber になるため, 顔認識, Speech 認識, text-to-speech, vtuber レンダリングとかはだいたい理解したので, 最後(?)のかなめである文脈解析とか自然言語処理とかの理解を極めたい.

CMU SARA でいう reasoning の部分, みたいな?

SARA: the Socially Aware Robot Assistant
http://articulab.hcii.cs.cmu.edu/projects/sara/

昨今では BERT が有名っぽいので BERT を調べる.

用語

  • Attention : 日本語直訳では「注意」であるが, アテンションでいいのではないだろうか, 実質的には確率分布のようなもの
  • Transformer(s) : 変形するロボットアニメ(or 映画)では「無い」. Encoder/Decoder みたいなもの
  • BERT : Bidirectional Encoder Representations from Transformers(BDPT: Bi-Directional Path Tracing みたいな響のもの https://graphics.stanford.edu/courses/cs348b-03/papers/veach-chapter10.pdf )
  • GELU : Gaussian Error Linear Units (GELUs). https://arxiv.org/abs/1606.08415

必要知識

Transformer(Attention) をまず理解しておく必要があります.

作って理解する Transformer / Attention
https://qiita.com/halhorn/items/c91497522be27bde17ce

このあと, BERT 論文とか Qiita の BERT 解説記事よめばだいたい BERT 理解できます.

発展

Cross-lingual Language Model Pretraining(XLM)
https://github.com/facebookresearch/XLM/

XLNet: Generalized Autoregressive Pretraining for Language Understanding
https://arxiv.org/abs/1906.08237

Large Batch Optimization for Deep Learning: Training BERT in 76 minutes
https://arxiv.org/abs/1904.00962

LAMB と呼ぶ large batch optimization により, バッチを増やしすつつ精度を落とさずに学習時間をスケーラブルに短縮している. 学習に 3 日かかるのを 76 分に短縮(時間として 64 倍で, 利用した TPUs も 16 -> 1024 個と 64 倍になっている)

ERNIE

Baidu’s Optimized ERNIE Achieves State-of-the-Art Results in Natural Language Processing Tasks
http://research.baidu.com/Blog/index-view?id=121

PaddleLite https://github.com/PaddlePaddle/Paddle-Lite で ERNIE 推論動いたりしないかしらん

最適化(高速化)とか

一から pre-train 学習ですとなかなか計算量の多いものなので, いろいろな方が最適化や軽量化などを提案しています. ありがたいですね.

RoBERTa: A Robustly Optimized BERT Pretraining Approach
https://arxiv.org/abs/1907.11692

NVIDIA Achieves 4X Speedup on BERT Neural Network
https://news.developer.nvidia.com/nvidia-achieves-4x-speedup-on-bert-neural-network/

(PyTorch の nn.Transformer は NVIDIA による CUDA 最適化が施してあるのかしらん?)

NVIDIA Clocks World’s Fastest BERT Training Time and Largest Transformer Based Model, Paving Path For Advanced Conversational AI
https://devblogs.nvidia.com/training-bert-with-gpus/

Tesla V100(32GB mem) で 1,024 枚で 1 時間程度で学習しています.

Megatron-LM
https://github.com/NVIDIA/Megatron-LM

BERT の大規模学習用?
64 x Tesla V100(32 GB?) で BERT Large を 3 日で学習

軽量化とか

実装とか

🤗 Transformers: State-of-the-art Natural Language Processing for TensorFlow 2.0 and PyTorch.
https://github.com/huggingface/transformers

いろいろ実装があります. ありがとうございます 🤗

NeMo : https://github.com/NVIDIA/NeMo

モバイルで動かしたい...

CoreML については huggingface が対応していますね.

Swift Core ML implementations of Transformers: GPT-2, BERT, more coming soon!
https://github.com/huggingface/swift-coreml-transformers

huggingface のモデルは TorchScript 対応で, libtorch(C++) で, PC でモデルのトレースとロードまではできたので, 少なくとも Android では動きそう.

tflite 版が最近でてました(量子化してモデルサイズは 96 MB くらい).

pretrained tflite model のありかは, app/download.gradle のスクリプトに URL があります
(Gradle でファイルダウンロードする機能あるのですね)

ASUS ZenFone Max (M2) (Snapdragon 632. 手元にあるもので一番ロースペックな端末)でも 1, 2 秒くらいで推論ができて, それなりにスムースに動きました. モバイルで NLP もこれから実用的に使えていきそうですね.

pre-training のコスト

ABCI で Tesla V100(16GB) x 4 なノードが 200 円/時くらいで借りることができます.

TPUv3 は preemptible でも USD 2.4/hour でお高いので, ABCI を使うのを考えてみます.

NVIDIA の Tesla V100(32GB) 1,024 枚で 1 時間少しで学習したのに当てはめてみると, ABCI のはメモリが 16GB なので, 二倍の 2,048 枚かかるとすると, 1 回の pre-train は (2048/4) * 200 で税込でおよそ ~12 万円くらいでしょうか.

学習 1 回 10 万円というのは少しハードル高いですが, 期末予算消化したいとか, 小規模でまずは動かし, 数回だけでうまく行く見込みがあるなら借りて実行がいいかもしれません.

あとはもう少しまてば ALBERT のようにパラメータ削減して学習時間を短縮し, 4 GPUs で 1 日で学習できるなどの手法が出てくると思われますのでそれを待つという手も考えられます.

もしくは, 水力発電や太陽光発電と組み合わせて GPU ファームを建造し, 学習につかっていないときはレイトレーシングやマイニングをして費用を賄うかでしょうか.

Quantized

8bit でもそれなりにいい結果が出ているので, OpenCL や OpenGL/Vulkan compute shader で学習してみたい. 最近は Vulkan には fp16 や int8 型のまま演算する VK_KHR_shader_float16_int8 拡張が定義されている.

(ストレージとしての fp16, int8 対応は以前からある模様)

考察

BDPT(双方向パストレ)のアルゴリズムが NLP にも応用できたりしないだろうか? e.g. Matrix Bidirectional Path Tracing https://www.ci.i.u-tokyo.ac.jp/~hachisuka/mbdpt.pdf

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9