2023年末のElixirが出来ること⑤AI・LLM前編【Nx／Bumblebee】（最新Elixirのキャッチアップや、アドカレのネタ探しに読んでください）

この記事は、[Elixir Advent Calendar 2023 シリーズ9](https://qiita.com/advent-calendar/2023/elixir) の14日目です

昨日は、 @RyoWakabayashi さんで [「闘魂Elixir ── Advent of code 2023 Day 3 Part 2 を Livebook で楽しむ」](https://qiita.com/RyoWakabayashi/items/c4717de1caf89391d358) でした

---

[piacere](https://twitter.com/piacere_ex) です、ご覧いただいてありがとございます :bow:

2023年末の時点で、Elixirにいったい何が出来るのかを紐解いていくシリーズで、[前回は「④ Web／スマホ開発ライブラリ編」](https://qiita.com/piacerex/items/40ec656513be75a996c0)でしたが、今回は「⑤ AI・ML前編【Nx／Bumblebee】」です

なお、本コラムで紹介した内容は、あなたのスキルからBright（輝き）とRight（正しさ）を引き出すプロダクト「Bright」の「AI・MLエンジニア Elixir」スキルパネルに反映された上でアンロックされるので、お楽しみに :wink: 

https://bright-fun.org
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f6d76f4e-08dd-f832-239a-20ae2f170f2a.png)](https://bright-fun.org)

本シリーズの全体像は、下記になります

:::note warn
[①2023年の新たなライブラリ／FW編](https://qiita.com/piacerex/items/774dd91c67184bec6df1)
[②2023年に更新されたライブラリ／FW編](https://qiita.com/piacerex/items/0c6ffb235e1146c38302)
[③Elixir本体／Phoenix／LiveView編](https://qiita.com/piacerex/items/8cd483159c93d0f05bd7)
[④Web／スマホ開発ライブラリ編](https://qiita.com/piacerex/items/40ec656513be75a996c0)
[⑤AI・LLM前編【Nx／Bumblebee】](https://qiita.com/piacerex/items/f6a73a8252a3f6093b1a)
[⑥AI・LLM後編【Scholar／Explorer／Evison／EXGBoost】](https://qiita.com/piacerex/items/fd19820bc0befe52b156)
[⑦Livebook＋プラグイン編](https://qiita.com/piacerex/items/bcdcb7bc6c998335a406)
[⑧クラウドライブラリ編](https://qiita.com/piacerex/items/0ce1f05990a502a26ed7)
[⑨マイクロサービスライブラリ編](https://qiita.com/piacerex/items/7e4b15e4dd9a94e58b3b)
[⑩データ操作ライブラリ編](https://qiita.com/piacerex/items/2e19fd1df6ef2d7cf150)
[⑪2023年末までのElixirができることを振り返る](https://qiita.com/piacerex/items/4ef28623d898450c0dcf)
:::

あと、このコラムが、面白かったり、役に立ったら、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/907a8695-4d83-1b5c-8052-d0ce52de5f66.png) をお願いします :bow:

# Elixir AI・ML関連プロダクトのおさらい

中核である「Nx」を始めとするNxシリーズのレポジトリは、下記の通り、さまざまなOSSで構成されています

https://github.com/orgs/elixir-nx/repositories

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/80b73ab7-eac6-a34d-3601-d24f70366da2.png)](https://github.com/orgs/elixir-nx/repositories)

各OSSの機能と、Pythonで言うと何に相当するかは、下図の通りです

OSS名 | 機能 | Pythonで言うと何？
-|-|-
[Nx](https://github.com/elixir-nx/nx) | Elixirで行列／テンソルを扱う | NumPy
EXLA | NxでGPUやTPUを扱えるようにする<br>（Google XLAバインディング） | TensorFlow<br>PyTorch
TorchX | NxでGPUやTPUを扱えるようにする<br>（PyTorchバインディング） | PyTorch
[Axon](https://github.com/elixir-nx/axon) | Nxで下記の学習／予測を実現<br>・ニューラルネットワーク<br>・ディープラーニング | TensorFlow／Keras<br>PyTorch<br>TensorFlow Serving
[AxonOnnx](https://github.com/mortont/axon_onnx) | ONNXモデルをAxonモデルに変換 | ONNX Runtime
[Bumblebee](https://github.com/elixir-nx/bumblebee) | 最新事前学習済モデルを利用可能に<br>・各種Hugginf Faceモデル<br>・Stable Diffusion<br>・Whisper<br>・BERT<br>・ResNet<br>・その他TensorFlowサポートモデル | 各モデル毎に異なり、該当無し<br>（強いて言うならTensorFlow）
[Scholar](https://github.com/elixir-nx/scholar) | Nxで機械学習を実現 | Scikit-learn
[Polaris](https://github.com/elixir-nx/polaris) | 最適化関数のオプティマイザ<br>・Adam<br>・SGD<br>・Lamb他 | TensorFlow／Keras<br>PyTorch<br>Scikit-learn
[Scidata](https://github.com/elixir-nx/scidata) | 機械学習用サンプルデータの提供<br>・Irisデータセット<br>・MNISTデータセット<br>・CIFAR-10データセット他 | scikit-learn
[NxSignal](https://github.com/elixir-nx/nx_signal) | Nxで信号処理 | SciPy
[Safetensors](https://github.com/elixir-nx/safetensors) | Pickleに変わる安全なデータ処理<br>※Hugging Faceモデルで常用 | safetensors
[Ortex](https://github.com/elixir-nx/ortex) | ONNXモデルをNx.Servingで利用可能に | ONNX Runtime
Livebook | Web上でElixir開発する環境 | JupyterNotebook<br>Colaboratory

うち、Livebookは本コラム続編の「⑥ Livebookアップデート編」で扱うので、今回、割愛します

また、上記Nxシリーズ以外にも、Nxを土台として使うライブラリには、下記があります

OSS名 | 機能 | Pythonで言うと何？
-|-|-
[EXGBoost](https://github.com/acalejos/exgboost) | Nx版XGBoost（究極の勾配ブースティング）<br>※Kaggleで上位入賞する機械学習アルゴリズム | xgboost
[Explorer](https://github.com/elixir-explorer/explorer) | Nxでデータ加工を実現 | Pandas
[Evision](https://github.com/cocoa-xu/evision) | Nxでの画像処理（OpenCVベース） | opencv-python（cv2）
[Image](https://github.com/elixir-image/image) | Nxでの画像処理（Vixベース） | pyvips
[PgvectorElixir](https://github.com/pgvector/pgvector-elixir) | Nxを使ったベクトルDBラッパー | pgvector

# Nx（EXLA／TorchXも梱包）／Axon／Ortex

Nx／EXLA／TorchXは、2022年1月が初出ですが、初期リリース時点から高い完成度で、その後のアップデートは、便利関数の追加や高速化／軽量化がほとんどでした

大きめのアップデートとしては、2022年12月の `Nx.Serving` の追加で、これはPythonのTensorFlow Servingとほぼ同等のモデルデプロイとクライアント／サーバ分離をもたらしつつ、同時にElixirの分散にも対応した、現行のElixir AI・MLの発展を支えています

https://github.com/elixir-nx/nx

Axon <strike>／AxonOnnx</strike>は2022年6月が初出で、Ortexは2023年5月が初出ですが、これらも初期リリースから実用的で素晴らしいプロダクトです

https://github.com/elixir-nx/axon

https://github.com/elixir-nx/ortex

## 出来ること

- NumPy並の行列／テンソル操作に、Elixir構文を組み合わせられる
- Enumモジュールと同じようなラムダ関数で行列／テンソル操作ができる
- ディープラーニング向け多層ニューラルネットワークをKeras同等に簡単に作れる
- 損失関数や最適化関数など、ディープラーニングのためのパーツが揃っている
- GPU／TPUでの高速学習が可能 … XLA（Accelerated Linear Algebra）／libtorch経由
- Pythonで構築したONNXモデルをロードして、Elixir上で実行可能
- Pythonでのディープラーニング開発とほぼ遜色無いか、それ以上の開発体験

全量は下記にあります

https://hexdocs.pm/nx/changelog.html

https://github.com/elixir-nx/axon/blob/main/CHANGELOG.md

# Bumblebee／Safetensors

Bumblebeeは、2022年12月が初出ですので、ほぼ今年のOSSと言って良いかと思います

バージョンアップのたびに、新たなモデルへの対応が追加されており、「Llama 2」「 Mistral 」のような生成AIの主戦場であるLLM（Large Langauge Model）も動きます

https://github.com/elixir-nx/bumblebee

Hugging Faceが、ファイル形式を「ckpt（Pickel形式）」から「Safetensors（安全なデータ形式）」に統一したことに伴い、Bumblebeeでも対応していきました

https://github.com/elixir-nx/safetensors

## 出来ること

- 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の構造を模倣したハイブリッド

全量は下記にあります

https://github.com/elixir-nx/bumblebee/blob/main/CHANGELOG.md

# 最後に

Nx登場からのこの2年間は、Elixirが真にAI・MLおよびGPU対応していった激震の区間で、今となってはPython無しでもAI・MLプロダクト開発に不自由しないレベルへと進化しました

この先、LLM（Large Language Models） … すなわち「生成AI」の最新すらも、Elixirでビルドできる状況へと進行することも見えており、それは思ったよりも近い未来でしょう

次回は、[「⑥ AI・LLM後編【Scholar／Explorer／Evison／EXGBoost】」](https://qiita.com/piacerex/items/fd19820bc0befe52b156) をお送りします

---

明日は、 私で [「2023年末のElixirが出来ること⑥AI・ML後編【Scholar／Explorer／Evison／EXGBoost】」](https://qiita.com/piacerex/items/fd19820bc0befe52b156) です

# p.s.このコラムが、面白かったり、役に立ったら…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/907a8695-4d83-1b5c-8052-d0ce52de5f66.png) にて、どうぞ応援よろしくお願いします :bow: