はじめに
2024/12/5
Charms が 0.1.2 に更新され、プリコンパイル版の MLIR でインストールできるようになったため、コンテナ定義を変更しました
https://hex.pm/packages/charms/0.1.2
Thank you, Jackal!
Charms は Elixir で「低レベルプログラミング」を 行うためのモジュールです
低レベルプログラミングでは CPU やメモリといったハードウェアを詳細に操作できるため、処理速度の向上やメモリの最適化が期待できます
反面、コーディングに深い知識が要求され、知識不足ではバグを生む可能性が高くなります
通常、低レベルプログラミングは C やアセンブリで行いますが、それを Elixir でできるようにしたのが Charms です
本記事では、 Charms を使うための環境を Docker コンテナで構築する手順について説明します
実行環境
私の実行環境は以下のとおりです
- チップ: Apple M2
- メモリ: 24 GB
- OS: macOS Sequoia 15.1.1
- 仮想化プラットフォーム: OrbStack
- メモリ上限: 18 GB
- CUP 上限: なし
OrbStack を使ったのが重要です
RancherDesktop ではどうしてもメモリ不足やストレージ不足でエラーが発生してしまいました
LLVM のコンパイルが不要になったことで、 RancherDesktop でもコンテナがビルドできました
コンテナ定義
Livebook のコンテナをベースとして、 Charms の依存モジュールである Beaver の CONTRIBUTING.md を参考にしました
Dockerfile は以下のとおりです
FROM ghcr.io/livebook-dev/livebook:0.14.5
RUN apt-get upgrade -y \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
ninja-build \
python3-pip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# LLVM
COPY llvm-requirements.txt .
RUN python3 -m pip install --upgrade pip \
&& python3 -m pip install -r llvm-requirements.txt
ENV LLVM_CONFIG_PATH=/usr/local/lib/python3.10/dist-packages/mlir/bin/llvm-config
# Zig
RUN wget "https://ziglang.org/download/0.13.0/zig-linux-aarch64-0.13.0.tar.xz" -O "zig-linux.tar.xz" \
&& tar Jxvf "zig-linux.tar.xz" -C /usr/local \
&& mv /usr/local/zig-linux-aarch64-0.13.0 /usr/local/zig-linux \
&& rm "zig-linux.tar.xz"
ENV PATH=/usr/local/zig-linux:${PATH}
ENV LIVEBOOK_HOME=/home/livebook
COPY ./livebooks /home/livebook
CMD ["/app/bin/livebook", "start"]
llvm-requirements.txt
mlir==20.0.0.2024112701+fad5ed6e
--find-links https://github.com/makslevental/mlir-wheels/releases/expanded_assets/latest
Charms では LLVM 、 MLIR というフレームワークを利用しており、これらをビルドする必要があります
プリコンパイル版の MLIR で動くようになりました
Charms で利用している MLIR というフレームワークを pip でインストールします
また、 Charms には Zig も必要なのでインストールします
現状ではバージョン 0.13.0 でないと動作しません
実行結果
コンテナをビルドして実行すると、 Livebook が起動します
...
Attaching to livebook_charms
livebook_charms | [Livebook] Application running at http://localhost:8080/?token=xxx
URL をブラウザで開いてから、 Charms README の先頭にある Run in Livebook
ボタンをクリックすると、 Charms のチュートリアルノートブックが実行できます
初回起動時はインストールに時間がかかりますが、気長に待ってください
ノートブックをエラーなく実行できれば、 Charms が正しくインストールできています
詳細なコードの内容、実装例は次回に譲ります
まとめ
LLVM のビルドにかなりのメモリと時間が必要になりますが、 Charms を Livebook から動かすことができました
最初は LLVM のビルドが必要で苦労しましたが、プリコンパイル版 MLIR が使えるようなったおかけで環境構築が楽になりました
次は Charms で色々実装してみたいと思います