8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 8

Charms による Elixir 低レベルプログラミングを Livebook 上で実行する -環境構築編-

Last updated at Posted at 2024-12-03

はじめに

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 が正しくインストールできています

スクリーンショット 2024-12-03 0.05.28.png

詳細なコードの内容、実装例は次回に譲ります

まとめ

LLVM のビルドにかなりのメモリと時間が必要になりますが、 Charms を Livebook から動かすことができました

最初は LLVM のビルドが必要で苦労しましたが、プリコンパイル版 MLIR が使えるようなったおかけで環境構築が楽になりました

次は Charms で色々実装してみたいと思います

8
0
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
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?