この記事は、Elixir Advent Calendar 2023 シリーズ9 の14日目です
昨日は、 @RyoWakabayashi さんで 「闘魂Elixir ── Advent of code 2023 Day 3 Part 2 を Livebook で楽しむ」 でした
piacere です、ご覧いただいてありがとございます
2023年末の時点で、Elixirにいったい何が出来るのかを紐解いていくシリーズで、前回は「④ Web/スマホ開発ライブラリ編」でしたが、今回は「⑤ AI・ML前編【Nx/Bumblebee】」です
なお、本コラムで紹介した内容は、あなたのスキルからBright(輝き)とRight(正しさ)を引き出すプロダクト「Bright」の「AI・MLエンジニア Elixir」スキルパネルに反映された上でアンロックされるので、お楽しみに
本シリーズの全体像は、下記になります
あと、このコラムが、面白かったり、役に立ったら、 をお願いします
Elixir AI・ML関連プロダクトのおさらい
中核である「Nx」を始めとするNxシリーズのレポジトリは、下記の通り、さまざまなOSSで構成されています
各OSSの機能と、Pythonで言うと何に相当するかは、下図の通りです
OSS名 | 機能 | Pythonで言うと何? |
---|---|---|
Nx | Elixirで行列/テンソルを扱う | NumPy |
EXLA | NxでGPUやTPUを扱えるようにする (Google XLAバインディング) |
TensorFlow PyTorch |
TorchX | NxでGPUやTPUを扱えるようにする (PyTorchバインディング) |
PyTorch |
Axon | Nxで下記の学習/予測を実現 ・ニューラルネットワーク ・ディープラーニング |
TensorFlow/Keras PyTorch TensorFlow Serving |
AxonOnnx | ONNXモデルをAxonモデルに変換 | ONNX Runtime |
Bumblebee | 最新事前学習済モデルを利用可能に ・各種Hugginf Faceモデル ・Stable Diffusion ・Whisper ・BERT ・ResNet ・その他TensorFlowサポートモデル |
各モデル毎に異なり、該当無し (強いて言うならTensorFlow) |
Scholar | Nxで機械学習を実現 | Scikit-learn |
Polaris | 最適化関数のオプティマイザ ・Adam ・SGD ・Lamb他 |
TensorFlow/Keras PyTorch Scikit-learn |
Scidata | 機械学習用サンプルデータの提供 ・Irisデータセット ・MNISTデータセット ・CIFAR-10データセット他 |
scikit-learn |
NxSignal | Nxで信号処理 | SciPy |
Safetensors | Pickleに変わる安全なデータ処理 ※Hugging Faceモデルで常用 |
safetensors |
Ortex | ONNXモデルをNx.Servingで利用可能に | ONNX Runtime |
Livebook | Web上でElixir開発する環境 | JupyterNotebook Colaboratory |
うち、Livebookは本コラム続編の「⑥ Livebookアップデート編」で扱うので、今回、割愛します
また、上記Nxシリーズ以外にも、Nxを土台として使うライブラリには、下記があります
OSS名 | 機能 | Pythonで言うと何? |
---|---|---|
EXGBoost | Nx版XGBoost(究極の勾配ブースティング) ※Kaggleで上位入賞する機械学習アルゴリズム |
xgboost |
Explorer | Nxでデータ加工を実現 | Pandas |
Evision | Nxでの画像処理(OpenCVベース) | opencv-python(cv2) |
Image | Nxでの画像処理(Vixベース) | pyvips |
PgvectorElixir | Nxを使ったベクトルDBラッパー | pgvector |
Nx(EXLA/TorchXも梱包)/Axon/Ortex
Nx/EXLA/TorchXは、2022年1月が初出ですが、初期リリース時点から高い完成度で、その後のアップデートは、便利関数の追加や高速化/軽量化がほとんどでした
大きめのアップデートとしては、2022年12月の Nx.Serving
の追加で、これはPythonのTensorFlow Servingとほぼ同等のモデルデプロイとクライアント/サーバ分離をもたらしつつ、同時にElixirの分散にも対応した、現行のElixir AI・MLの発展を支えています
Axon /AxonOnnxは2022年6月が初出で、Ortexは2023年5月が初出ですが、これらも初期リリースから実用的で素晴らしいプロダクトです
出来ること
- NumPy並の行列/テンソル操作に、Elixir構文を組み合わせられる
- Enumモジュールと同じようなラムダ関数で行列/テンソル操作ができる
- ディープラーニング向け多層ニューラルネットワークをKeras同等に簡単に作れる
- 損失関数や最適化関数など、ディープラーニングのためのパーツが揃っている
- GPU/TPUでの高速学習が可能 … XLA(Accelerated Linear Algebra)/libtorch経由
- Pythonで構築したONNXモデルをロードして、Elixir上で実行可能
- Pythonでのディープラーニング開発とほぼ遜色無いか、それ以上の開発体験
全量は下記にあります
Bumblebee/Safetensors
Bumblebeeは、2022年12月が初出ですので、ほぼ今年のOSSと言って良いかと思います
バージョンアップのたびに、新たなモデルへの対応が追加されており、「Llama 2」「 Mistral 」のような生成AIの主戦場であるLLM(Large Langauge Model)も動きます
Hugging Faceが、ファイル形式を「ckpt(Pickel形式)」から「Safetensors(安全なデータ形式)」に統一したことに伴い、Bumblebeeでも対応していきました
出来ること
- Hugging Face Hubから様々なモデルをダウンロードし、実行可能
- Transformer/Attention系(生成AIの中核でもある)
- テキストから画像生成
- Stable Diffusion … ミュンヘン大学作、いわゆる「お絵描きAI」
- 画像からテキスト生成
- BLIP … Salesforce作、画像をテキストで情景説明できる
- 音声からテキスト生成
- Whisper … OpenAI作、音声をテキストに起こせる
- テキストからテキスト生成
- Llama 2 … Facebook作、ChatGPTの対抗馬と目される高速LLM
- Mistral … Llama 2よりも高速なLLM
- GPT2 … OpenAI作、ChatGPTのGPT3の前身
- BART … BERTをRNNであるseq2seqで構成することで翻訳/要約を強化
- テキスト翻訳/補完/要約
- BERT … Google作、自然言語間を変換したり、穴埋めできる
- RoBERTa … Facebook作、事前学習データ増加や長文学習で精度向上
- XLM-RoBERTa … RoBERTaの多言語バージョン
- ALBERT … BERTを軽量化することで少ないパラメータで高精度
- DistilBERT … Hugging Face作、BERTより60%高速でパラメータ40%減
- 画像分類
- ViT … Google作、Transformerを自然言語処理から画像に転用
- DeiT … Facebook作、ViTよりも少ないパラメータで学習できる
- テキストから画像生成
- 非Transformer系(CNN/RNN/AE)
- 画像分類
- ResNet … CNNベースの画像分類としては高性能なモデル
- ConvNeXt … CNNにViTの構造を模倣したハイブリッド
- 画像分類
- Transformer/Attention系(生成AIの中核でもある)
全量は下記にあります
最後に
Nx登場からのこの2年間は、Elixirが真にAI・MLおよびGPU対応していった激震の区間で、今となってはPython無しでもAI・MLプロダクト開発に不自由しないレベルへと進化しました
この先、LLM(Large Language Models) … すなわち「生成AI」の最新すらも、Elixirでビルドできる状況へと進行することも見えており、それは思ったよりも近い未来でしょう
次回は、「⑥ AI・LLM後編【Scholar/Explorer/Evison/EXGBoost】」 をお送りします
明日は、 私で 「2023年末のElixirが出来ること⑥AI・ML後編【Scholar/Explorer/Evison/EXGBoost】」 です