A Day in the Life

Apple Silicon GPU(mps) の embeddings 変換パフォーマンス

世の中 M3 Max (ユニファイドメモリ128GB) の発表により、巨大パラメータモデルLLMもローカルで動かせるのでは、と賑わっているが、自分のユースケースで手元 Mac で文章を embeddings に変換したくなって、そもそもどれぐらいの変換速度が出るんだっけ?と文章から文ベクトル(embeddings)への変換速度を調査した。

Apple Silicon

環境

ローカル Mac & Linux(WSL2) と Colabで実行。

  • Mac: 2022 MacBook Air / M2, 8CPU, 10GPU, 24GB Mem
  • Linux(WSL2): Ryzen 9 5950X / NVIDIA RTX4090
  • Google Colab: T4 インスタンス

これらの CPU と GPU 各々に multilingal-e5-small でwikipedia日本語の先頭512トークン、1000 サンプルを変換した時間を計測。計測に使った notebook は以下。

結果

Device Method Total Time (sec) RPS
RTX 4090 CUDA (GPU) 2.58 388.07
Colab T4 CUDA (GPU) 19.92 50.21
MacBook Air M2 MPS (GPU) 33.16 30.15
Ryzen 5950X CPU 73.18 13.66
MacBook Air M2 CPU 104.89 9.53
Colab CPU 710.72 1.41

RTX 4090 が圧勝(そりゃそうだろう)、というのは置いておいても、T4 の60%の速度が M2 GPU 10 コアで出ている。M3 Max はGPU 40コアモデルもあって、速度が線型増加すると仮定すると、M3 Max GPU 40コアならRPSは130ぐらい。RTX4090 の 1/3ぐらいの速度になって、ラップトップPCのGPUとしてはかなり速い。T4の倍以上の速度は出そう。

M2 の Embeddings の変換は実用的な速度か?と言われると用途によりそう。すごく遅くはないが、早くもない。ただ、M2 CPU で変換するよりは GPU は3倍は速いし、HuggingFace Transformers なら device を "mps" にするだけで使えるので、Mac で使う場合は当たり前に GPU を使っていきたい。M3 Max なら大体の用途で、そこそこ実用的な速度が出るんじゃないかな。

それにしても M2 の CPU (8コア) 実行の速さよ。Ryzen 5950X も 16コア全部使い切って実行してるんだけど、シングルCPUコア速度なら Ryzen 5950X よりも速いとは。ライブラリの最適化周りも関わってそうだけど、とりあえず何も考えずの比較では速いね。

追記

yuumi3からおたよりをいただき、Mac mini M2 Pro (10CPU / 16GPU) は以下の速度だったとのこと(ありがとうございます!)。GPU10コア(M2)→16コア(M2 Pro)になったためか、その分の速度が増加していそうなスコアですね。

[mps] convert 1000 embs, total time: 13.59 sec  / rps: 73.60
[cpu] convert 1000 embs, total time: 68.12 sec  / rps: 14.68
記事の一覧 >