Ahogrammer

Deep Dive Into NLP, ML and Cloud

M1チップ上でのspaCyの高速化

導入されたのはだいぶ前ですが、spaCy v3.2からM1チップ上での学習と予測が最大で8倍高速化できるということで試してみました。以前は行列積の演算にBLISを使っていたところを、Appleのネイティブのライブラリに切り替えることで実現しています。その中核となっているのがthinc-apple-opsであり、こちらでライブラリを置き換えています。

公式でも、spaCyを使った予測と学習に対して、高速化前と高速化後のベンチマークを出しています。予測では、de_core_news_lgを使った1秒あたりの処理単語数を比較しています。結果として、Intel Macだと速度にほとんど変化がない一方、M1 Macだとおおよそ4.3倍になっています。学習では1秒あたりのイテレーション数を比較しており、3倍程度高速化できています。

ちょうど手元にM1 Proを積んだMacがあったので試してみました。通常のspaCyのインストール(pip install spacy)とM1に対応した版(pip install spacy[apple])で固有表現認識モデルの学習をして、実行時間を比較してみます。設定としてはほぼ以下のノートブックのとおりですが、結果を比較するために、最大ステップ数が同じになるように調整しました。

github.com

結果は次のようになりました。値は3回実行したときの平均をとっています。結果を見ると、今回の設定の場合、M1版のほうがおおよそ4.3倍程度高速という結果になっています。

  • 通常のspaCy:680秒
  • M1版のspaCy:160秒

重たいモデルをローカルで学習することはほとんどないとは思いますが、インストールを除いて、ユーザー側でコードを変更する必要がないので、M1 Macであればお手軽にできる高速化といえます。今回は試していませんが、予測も高速化されるので、ちょっとした分析をローカルでするときに使ってみることにします。

参考資料