11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

M2 MacBook のローカルとコンテナ実行を比較する

Last updated at Posted at 2023-08-07

はじめに

M2 Mac ではローカルとコンテナでどれだけパフォーマンスに差が出るか Livebook で確認してみました

Intel Mac の場合はこちら

Intel Mac と M2 Mac の比較はこちら

実行する処理

Nx の様々なバックエンドによる行列の加算処理を計測の対象とします

Benchee.run によって、IPS(Instructions Per Second 1秒間に何回処理を実行できたか)を計測します

bench = fn backend ->
  tensor =
    {200, 200}
    |> Nx.iota(type: :f64, backend: backend)

  Nx.add(tensor, tensor)
end
Benchee.run(%{
  "binary" => fn -> bench.(Nx.BinaryBackend) end,
  "exla" => fn -> bench.(EXLA.Backend) end,
  "torchx" => fn -> bench.(Torchx.Backend) end,
  "evision" => fn -> bench.(Evision.Backend) end
})

詳細な内容は以下の記事を参照してください

Nx.BinaryBackend を使っている場合は単純に Elixir で 40,000 回足し算を行っています

Evision.Backend なら OpenCV 、 EXLA.Backend なら XLA を使った行列演算を実行しています

TorchX が arm64 の Linux にインストールできない

TorchX は Mac の場合にしか arm64 アーキテクチャに対応していません

if(NOT APPLE)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -shared")
    set_target_properties(torchx PROPERTIES INSTALL_RPATH "\$ORIGIN/${LIBTORCH_BASE}")
else()
    # Although the compiler complains about not using these,
    # things only work with them set
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -undefined dynamic_lookup")
    check_c_compiler_flag("-arch arm64" ARM64_SUPPORTED)
    if(ARM64_SUPPORTED)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMAC_ARM64")
    endif()
    # set(CMAKE_SHARED_LINKER_FLAGS "-bundle -flat_namespace -undefined suppress")
    set_target_properties(torchx PROPERTIES INSTALL_RPATH "@loader_path/${LIBTORCH_BASE}")
endif()

これにより、 Livebook のコンテナ上で TorchX をインストールしようとすると、以下のようなエラーが発生します

/usr/bin/ld: /home/livebook/.cache/mix/installs/elixir-1.15.2-erts-14.0.2/a3046f2697bbfc375e1ce3e0a9da02d7/deps/torchx/cache/libtorch-1.12.1-cpu/lib/libtorch.so: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
gmake[3]: *** [CMakeFiles/torchx.dir/build.make:107: torchx.so] Error 1
gmake[3]: Leaving directory '/home/livebook/.cache/mix/installs/elixir-1.15.2-erts-14.0.2/a3046f2697bbfc375e1ce3e0a9da02d7/_build/dev/lib/torchx/cmake'
gmake[2]: *** [CMakeFiles/Makefile2:95: CMakeFiles/torchx.dir/all] Error 2
gmake[2]: Leaving directory '/home/livebook/.cache/mix/installs/elixir-1.15.2-erts-14.0.2/a3046f2697bbfc375e1ce3e0a9da02d7/_build/dev/lib/torchx/cmake'
gmake[1]: *** [Makefile:103: all] Error 2
gmake[1]: Leaving directory '/home/livebook/.cache/mix/installs/elixir-1.15.2-erts-14.0.2/a3046f2697bbfc375e1ce3e0a9da02d7/_build/dev/lib/torchx/cmake'
make: *** [Makefile:29: /home/livebook/.cache/mix/installs/elixir-1.15.2-erts-14.0.2/a3046f2697bbfc375e1ce3e0a9da02d7/_build/dev/lib/torchx/priv/torchx.so] Error 2
could not compile dependency :torchx, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile torchx --force", update it with "mix deps.update torchx" or clean it with "mix deps.clean torchx"

TorchX.Backend はコンテナ上では使用しないものとします

ローカル

実行環境は以下の通りです

  • MacBook Pro 13 inch, 2022
    • macOS Ventura 13.5
    • CPU Apple M2
      8 コア(パフォーマンス: 4、効率性: 4)
    • メモリ 24 GB
  • Elixir 1.15.2
  • Erlang 26.0.2
  • Livebook 0.10.0

Elixir と Erlang は asdf でインストールし、 Livebook は GitHub からタグ指定でクローンしてきたコードをローカルビルドしています

実行結果は以下のようになりました

バックエンド IPS
binary 154
evision 5,800
exla 11,870
torchx 8,600

コンテナ

コンテナには Rancher Desktop を使います

また、イメージは以下のリポジトリーのものを使いました

Livebook のコンテナイメージはマルチプラットフォームイメージなので、自動的に arm64 のアーキテクチャでコンテナが起動します

アーキテクチャは起動したコンテナ内で確認できます

$ docker exec -it livebook /bin/bash
root@179553aa7b45:/data# uname -m
aarch64
  • Rancher Desktop 1.9.1
    • CPU割当て 6
    • メモリ割当て 10 GB
  • Debian 11
  • Elixir 1.15.4
  • Erlang 26.0.2
  • Livebook 0.10.0

実行結果は以下の通りです

バックエンド IPS
binary 131
evision 1,360
exla 3,320

ローカルと比べて明らかに遅くなりましたね

比較

M2 Mac のローカルとコンテナの比較表は以下のようになります

バックエンド ローカル IPS コンテナ IPS ローカル / コンテナ
binary   154 131 1.18
evision   5,800 1,360 4.26
exla   11,870 3,320 3.58
torchx   8,600 - -

ちなみに、 Intel Mac の場合は以下のようになっていました

バックエンド ローカル IPS コンテナ IPS ローカル / コンテナ
binary   79 41 1.93
evision   2,580 392 6.58
exla   8,260 771 10.71
torchx   5,810 862 6.74

比較すると、 M2 Mac の方がコンテナでもあまり性能が落ちていません

まとめ

Livebook はマルチプラットフォームイメージなので、特に何もしなくても arm64 アーキテクチャでコンテナを起動することができました

また、 Intel Mac と比べてコンテナ上での性能の下げ幅が小さくなっていました

それでも 4 倍程度差が出るので、やはり重い処理はローカルで実行した方が良いでしょう

ただし、 TorchX がコンテナでインストールできないという問題があります

11
3
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
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?