39
37

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 3 years have passed since last update.

最近、condaで入れるNumpyの方が、pipで入れるNumpyより動作が早いことが少し話題になっています(元記事は最近ではないのですが)。本記事では、scikit-learnもインストールを工夫すれば、より高速に動作することを解説します。

はじめに

記事、「Anaconda の NumPy が高速みたいなので試してみた」
https://tech.morikatron.ai/entry/2020/03/27/100000

を最近Twitterのタイムラインで何度も見かけました(元記事は20年3月に記載されたものですが)。

condaでインストールするNumpyの方が、pipでインストールするNumpyより早い、というお話です。

なぜ早いの?

上記の記事では、CPUで「Intel Core i7-9750H」を使用しています。

このCPUの仕様は以下です。
https://www.intel.co.jp/content/www/jp/ja/products/processors/core/i7-processors/i7-9750h.html

この仕様の**「命令セット拡張」「Intel® SSE4.1, Intel® SSE4.2, Intel® AVX2」**と記載さているのがミソです。

命令セット拡張にAVX2が搭載されています。

その他、割と新しい高性能のIntel CPUではAVX-512も搭載されています。

AVXについては、以下ページが詳しいですが、ストリーミングSIMD拡張命令の後継です。

「要は、1命令で複数の演算を実行できる機能です」

このAVXのAVX2以上を使用して、数学演算を高速化するインテルのCPUの機能が**Intel MKL(Math Kernel Library)**です。
https://www.xlsoft.com/jp/products/intel/perflib/mkl/index.html

種々計算をAVX2やAVX-512で実施することで、高速化してくれます。

condaでインストールするNumpyはCPUがAVX対応であれば、このIntel MKLを使用して計算するので、処理が早くなります。

Intelの頑張り

GPU時代のなか、Intelも頑張っていて、2017年あたり、
Intel MKL はじめ、Intel CPUでの高速化に対応した、Numpyやsckit-learnのライブラリを公開しました。

pip install intel-scikit-learn
https://pypi.org/project/intel-scikit-learn/

pip install intel-numpy
https://pypi.org/project/intel-numpy/

これらであれば、pipでインストールしても、はじめから高速バージョンを使えます。

こういうバージョンも昔Intelから出されたのですが、
本家のNumpyやsklearnにバージョンが追いついていない、保守されていないので、
これらの使用はおすすめはしないです。

scikit-learnの高速化

最初に紹介した記事、「Anaconda の NumPy が高速みたいなので試してみた」
https://tech.morikatron.ai/entry/2020/03/27/100000

の文中でも、

他にも色々なモジュールが Intel MKL を採用してました。素晴らしい!
NumPy
NumExpr
SciPy
Scikit-Learn
Tensorflow … Windows だと tensorflow-mkl という別パッケージになっている
PyTorch … こちらは pip 経由でも Intel MKL を採用しているそうです

とあるように、condaでインストールすると、Intel MKLを使用する高速なバージョンが勝手にインストールされます。

ただ、一番早く動作させたい場合は、scikit-learnのインストールのページの案内に沿いましょう。
https://scikit-learn.org/stable/install.html

こちらページの
「Third party distributions of scikit-learn」
に書かれている、


「Intel conda channel」
Intel conda channel
Intel maintains a dedicated conda channel that ships scikit-learn:

$ conda install -c intel scikit-learn
This version of scikit-learn comes with alternative solvers for some common estimators. Those solvers come from the DAAL C++ library and are optimized for multi-core Intel CPUs.

Note that those solvers are not enabled by default, please refer to the daal4py documentation for more details.

Compatibility with the standard scikit-learn solvers is checked by running the full scikit-learn test suite via automated continuous integration as reported on https://github.com/IntelPython/daal4py.


の、Intel conda channelでsckit-learnを入れれば、Intel MKLだけでなく、
scikit-learnのいくつかの処理が、Intel multi-coreに最適化された関数処理に置き換わります。

ですので、最速バージョンでのscikit-learnを使用したい場合は、

$ conda install scikit-learn

ではなく、

$ conda install -c intel scikit-learn

でのインストールをおすすめします(Intel AVX2以上対応CPU環境で)。

さいごに

AWSもDeepLearningイメージも、AzureのDSVM(Data Science Virtual Machines)もcondaをベースに管理されています。

そして、condaでscikit-learnがインストールされています。

それらがIntel最適化版かは私は知りません(誰かご存知であれば教えていただきたいです)。

自分で仮想環境をcondaで作り直した場合には、上記の高速版を入れれば良いのですが・・・
(IaaSのマシンのCPUを調べ、AVX2に対応しているかは調べる必要があります。やすいマシンだとAVXにしか対応していない場合がある)

以上、Conda Numpyのようにscikit-learnも高速化する方法でした。
(私はあまりCPU周り強くないので、勘違いしている点があればぜひコメントください)

備考

【情報発信】
最近私は、自分が面白いと思った記事やサイト、読んだ本の感想などのAIやビジネス、経営系の情報をTwitterで発信しています。

小川雄太郎@ISID_AI_team
https://twitter.com/ISID_AI_team

私が見ている情報、面白い、重要だ!と思った内容を共有しています。

【その他】私がリードする、AIテクノロジー部開発チームではメンバを募集中です。興味がある方はこちらからお願い致します

【免責】本記事の内容そのものは著者の意見/発信であり、著者が属する企業等の公式見解ではございません


39
37
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
39
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?