ナンピーとマルチプロセッシング

現在、多くの人がpythonプログラムでnumpyライブラリを使用しています。これは、データ処理と数学演算を大幅に高速化するためです。 ただし、多くの場合、 numpyは1つだけのプロセッサを使用しますが、持っているものはすべて使用できますが、 numpyの速度は何倍も遅くなります。

実際、多くの操作を実行するために、 numpyは線形代数ライブラリから関数を呼び出します。 これは、通常問題が存在する場所です。 幸いなことに、すべてが非常に簡単に修正可能です。

したがって、3つの状況があります。


簡単なテストをしましょう。 このプログラムを実行します:

import numpy as np size = 10000 a = np.random.random_sample((size, size)) b = np.random.random_sample((size, size)) n = np.dot(a,b) 

その後、Linuxで作業している場合はtopを実行し、Windowsで作業している場合はタスクマネージャーの[パフォーマンス]タブに移動します(Ctrl + Shift + Escで呼び出されます)... topが負荷を100%で表示し、インジケーター反対に、「パフォーマンス」タブの「CPU使用率」は100%よりも何倍も低い値を示しています。つまり、1つのコアだけが計算でビジーです-この記事はあなたのためです。 関係するすべてのプロセッサを備えた人は喜ぶことができます-彼らは順番にすべてを持っています-あなたはこれ以上読むことができません。

Windowsソリューション

理論的には、もちろん、ライブラリのソースを見つけ、それらを再コンパイルしてnumpyを再構築できます。 成功したと言った人を見たと誰かが書いたと聞いたこともあります...一般的に、最も簡単な方法は、科学的なPythonディストリビューション、たとえばAnacondaCanopyをインストールすることです。 配布物にはpythonnumpyだけでなく、計算と視覚化のための便利なライブラリも含まれています。

その後、初期テストを再開して、速度が大幅に向上したことを確認できます。

Linuxソリューション

実際、すべてのライブラリを使用して、既製のAnacondaCanopyなどをすぐにインストールすることもできます。 しかし、あなたがそれを自分でやりたい場合は、読み進めてください-すべてのレシピがあります。

図書館チェック


覚えているように、2つのオプションが可能です。


numpyの新しいバージョン(> 1.10)がある場合、numpyがインストールされているディレクトリに移動します(通常、これは/usr/local/lib/python2.7/dist-packages/numpyですが、LinuxおよびPythonのバージョンによって異なります)異なる場合があります)、コンソールで次のコマンドを実行します:

 cd core ldd multiarray.so 

numpyの以前のバージョンにはmultiarray.soライブラリはありませんが、 _dotblas.soはあります

 ldd _dotblas.so 

numpyがサードパーティの線形代数ライブラリを使用する場合、 lddコマンドからの出力が表示されます。

 linux-vdso.so.1 => (0x00007fffe58a2000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8adbff4000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8adbdd6000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8adba10000) /lib64/ld-linux-x86-64.so.2 (0x00007f8adc68c000) 

リストにlibblas.soが表示されない場合、 numpyは独自の内部ライブラリを使用しています。 表示されている場合、ATLASまたはBLASがあります。

いずれにせよ、最初に正しい線形代数ライブラリが必要です。

OpenBLASをインストールする


OpenBLASは、最新のデータ分析と機械学習技術の基礎となる線形代数アルゴリズムと関数の優れたライブラリです。

まず、OpenBLASは標準のg77コンパイラーと互換性がないため、Fortranコンパイラーが必要です。

 sudo apt-get install gfortran 

githubからOpenBLASをダウンロードします(適切なインストールディレクトリに戻った後):

 git clone https://github.com/xianyi/OpenBLAS.git 

次に、ディレクトリに移動してアセンブリを実行します。

 cd OpenBLAS make FC=gfortran 

コンパイルとアセンブリが成功したら、ライブラリをインストールします。

 sudo make install 

デフォルトでは、ライブラリは/ opt / OpenBLASにインストールされます 。 別の場所にインストールする場合は、 PREFIXキーを使用してmake installを実行します。

 sudo make install PREFIX=/your/preferred/location 

ライブラリの再割り当て


以前に何らかの線形代数ライブラリが既にインストールされていることがわかった場合は、ライブラリ再割り当てコマンドを実行するだけで済みます。

 sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 \ /opt/OpenBLAS/lib/libopenblas.so 50 

その後、OpenBLASはデフォルトでnumpyの線形代数ライブラリになるだけでなく、一般にすべてのプログラムとライブラリの線形代数ライブラリになります。

そして、テストを再度実行して、すべてのプロセッサが現在どのように計算に関与しているかを確認します。

適切なnumpyを置く


numpyが組み込みライブラリで機能した場合、新しくインストールされたOpenBLASをピックアップするように再構築する必要があります。

最初に欠陥のあるライブラリを取り除きます:

 sudo pip uninstall numpy 

次に、次の内容の.numpy-site.cfgファイルをホームディレクトリに作成します。

 [default] include_dirs = /opt/OpenBLAS/include library_dirs = /opt/OpenBLAS/lib [openblas] openblas_libs = openblas include_dirs = /opt/OpenBLAS/include library_dirs = /opt/OpenBLAS/lib [lapack] lapack_libs = openblas [atlas] atlas_libs = openblas libraries = openblas 

以前にOpenBLASの非標準の場所を選択した場合は、ファイルのパスを変更します。 numpyを再度インストールします。

 sudo pip install numpy 

コンパイルとインストールが完了したら、初期テストを実行して、プロセッサが現在アイドル状態になっていないことを確認します。 以上です。

Source: https://habr.com/ru/post/J274331/


All Articles