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