LoginSignup
6
1
この記事誰得? 私しか得しないニッチな技術で記事投稿!

Git sparse-checkout を利用して PelemayBackend の OnnxToAxonBench のみをダウンロード

Last updated at Posted at 2023-07-01

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

最後の ; :okOnnxToAxonBench.run/0 関数の巨大な戻り値を印字させないための技です。これが印字されてしまうとベンチマークの結果が見えなくなってしまうためです。

結果はこんな感じです。

CleanShot 2023-06-07 at 08.32.35.png

CleanShot 2023-06-07 at 08.30.23.png

コミュニティ

本記事は以下のコミュニティでの活動成果です。
元氣と刺激をいただきありがとうございます。

闘魂

Elixir 言語でワクワク

6
1
1

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
6
1