Help us understand the problem. What is going on with this article?

conda Numpyのようにscikit-learnも高速化する方法

最近、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命令で複数の演算を実行できる機能です」

https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0SIMD%E6%8B%A1%E5%BC%B5%E5%91%BD%E4%BB%A4

この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テクノロジー部開発チームではメンバを募集中です。興味がある方はこちらからお願い致します

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


sugulu_Ogawa_ISID
(株)電通国際情報サービス、AI トランスフォーメーションセンター、AIテクノロジー部に所属。小川雄太郎。 主著「つくりながら学ぶ! PyTorchによる発展ディープラーニング」。 twitter @ISID_AI_team で情報発信しています。フォローお待ちしています。 機械学習、ディープラーニング関連技術を活用したアジャイルなサービス構築、人材教育に興味があります。
https://github.com/YutaroOgawa/about_me
isid
電通国際情報サービス(Information Services International-Dentsu, Ltd. 通称ISID)は、アメリカのGE社と電通の合弁会社として創業しました。 2000年に東証一部上場し、現在は単体で社員数約1,500人の会社です。ISIDにおける先端技術を活用した挑戦と事例、 検証した技術などを紹介します。
https://www.isid.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away