git sparse-checkout という技をとある「誰得」Qiita 記事からまなびました。ありがとうございます。早速使ってみようと思います。
PelemayBackend プロジェクトは複数のサブプロジェクトで構成されています。それらのうち一つだけ読み込みたい時に git sparse-checkout を活用できそうです。
実行環境
$ sw_vers
ProductName: macOS
ProductVersion: 13.4
BuildVersion: 22F66
$ elixir --version
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]
Elixir 1.15.1 (compiled with Erlang/OTP 26)
$ git --version
git version 2.40.1
PelemayBackend
産業用コントローラやスマートフォン,Apple Silicon 等で広く用いられる ARMv8 CPU で行う機械学習や画像処理を並列化・高速化する研究です。
詳しくは PelemayBackend(第2版)のコンセプトをご覧ください。
Git sparse-checkout
プロジェクトの一部のディレクトリだけを取り込むことができるようです。大きめのプロジェクトの一部分だけが欲しい場合に便利そうです。
先ずは原典に当たるのが得策だと思います。
日本語の Qiita 記事も幾つか見つかりました。
Gitのバージョンにより使えるコマンドが異なるので注意が必要です。(例:git sparse-checkout add
は、2.26
から)古い記事をみるとかえって混乱するかもしれません。
論よりRUN
適宜、実験用ディレクトリを用意してください。
$ mkdir tmp
$ cd tmp
--sparse
オプションをつけて git clone
します。
$ git clone --sparse git@github.com:zeam-vm/pelemay_backend.git
余談ですが、これらのオプションを追加すると、さらにダウンロードの容量を減らせるようです。大きなプロジェクトで何かを一度きりで試したい場合に良いかもしれません。
-
--depth=1
- コミット履歴を削減 (shallow clone) -
--filter=blob:none
- バイナリデータを削減(blobless clone)
$ git clone --sparse --depth=1 --filter=blob:none git@github.com:zeam-vm/pelemay_backend.git
Github のこの記事に詳しく書かれています。
ダウンロードされたファイル構造をみてみます。
入れ子になっているサブプロジェクトは含まれていないようです。
$ tree ~/tmp/pelemay_backend
/Users/mnishiguchi/tmp/pelemay_backend
├── CITATION.cff
├── LICENSE
├── Makefile
├── README.md
├── mix.exs
├── mix.lock
└── publish.exs
1 directory, 7 files
pelemay_backend
ディレクトリの中に入り、git sparse-checkout add
コマンドを用いてサブプロジェクトを取り込みます。
$ cd pelemay_backend
$ git sparse-checkout add benchmarks/onnx_to_axon_bench
benchmarks/
配下の onnx_to_axon_bench
プロジェクトが取り込めました。
$ tree ~/tmp/pelemay_backend
/Users/mnishiguchi/tmp/pelemay_backend
├── CITATION.cff
├── LICENSE
├── Makefile
├── README.md
├── benchmarks
│ └── onnx_to_axon_bench
│ ├── LICENSE
│ ├── README.md
│ ├── lib
│ │ ├── onnx_to_axon_bench
│ │ │ └── utils
│ │ │ └── http.ex
│ │ └── onnx_to_axon_bench.ex
│ ├── mix.exs
│ ├── mix.lock
│ └── test
│ ├── onnx_to_axon_bench_test.exs
│ └── test_helper.exs
├── mix.exs
├── mix.lock
└── publish.exs
7 directories, 15 files
Elixir を実行できる環境が必要ですが、せっかくダウンロードしたのベンチマークを RUN してみます。
$ cd benchmarks/onnx_to_axon_bench
# 依存関係を解決
$ mix deps.get
# ベンチマークをRUN
$ mix run -e "OnnxToAxonBench.run"
Elixir の Mix.install で似たようなことをやってみる
Elixir 言語では Mix.install/2 関数を用いて IEx いう対話シェルから第三者パッケージをダウンロードすることができます。
Mix.install/2 にはいろんなオプションがありますが、その中に sparse
オプションがあります。
iex
コマンドで IEx を起動します。
$ iex
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]
Interactive Elixir (1.15.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
以下のコードを貼り付けます。
Mix.install([
{
:onnx_to_axon_bench,
github: "zeam-vm/pelemay_backend",
sparse: "benchmarks/onnx_to_axon_bench"
}
])
result = OnnxToAxonBench.run; :ok
最後の ; :ok
は OnnxToAxonBench.run/0
関数の巨大な戻り値を印字させないための技です。これが印字されてしまうとベンチマークの結果が見えなくなってしまうためです。
結果はこんな感じです。
コミュニティ
本記事は以下のコミュニティでの活動成果です。
元氣と刺激をいただきありがとうございます。
闘魂
Elixir 言語でワクワク