【Python高速化】並列処理が可能なJoblibのインストール

【Python高速化】並列処理が可能なJoblibのインストール プログラミング

「Pythonの処理を高速化したい」
「Pythonで並列処理を気軽に行いたい」
「Pythonでディスクキャッシュを利用したい」

このような場合には、Joblibがオススメです。
この記事では、Joblibのインストールを中心に解説しています。

本記事の内容

  • Joblibとは?
  • Joblibのシステム要件
  • Joblibのインストール
  • Joblibの動作確認

それでは、上記に沿って解説していきます。

Joblibとは?

Joblibは、Pythonの処理を高速化するライブラリです。
具体的には、主に次の技術で高速化を実現しています。

  • ディスクキャッシュ
  • 並列計算

Joblibと言うと、並列処理ばかりがフォーカスされています。
実は、Joblibではキャッシュ機能も提供されているのです。

以上、Joblibについて説明しました。
次は、Joblibのシステム要件を説明します。

Joblibのシステム要件

現時点(2022年6月末)でのJoblibの最新バージョンは、1.1.0となります。
この最新バージョンは、2021年10月7日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9

以下は、Python公式開発サイクルです。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Joblib自体は、Python 3.10でも問題なく動きます。
おそらく、次のバージョンではPython公式開発サイクルに準じるでしょう。

個人的には、Python 3.7以降を推奨しておきます。
サポート対象外(古い)は、できる限り使わない方向でいきましょう。

「古いバージョンを利用していたから、情報漏洩が発生したんだ!!」
昨今のセキュリティ事情では、こんなことすらも言われかねません。

以上、Joblibのシステム要件を説明しました。
次は、Joblibtのインストールを説明します。

Joblibのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.1.2
setuptools 62.6.0
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Joblibのインストールです。
Joblibのインストールは、以下のコマンドとなります。

pip install joblib

Joblibのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
joblib     1.1.0
pip        22.1.2
setuptools 62.6.0
wheel      0.36.2

Joblibには、依存するパッケージが存在していません。
そのため、既存環境への導入が容易に可能です。

以上、Joblibのインストールを説明しました。
次は、Joblibの動作確認を説明します。

Joblibの動作確認

ここでは、Joblibの並列処理の動作を確認しましょう。
まず、次のコードを実行してみてください。

from joblib import Parallel, delayed
from datetime import datetime

JOBS_COUNT = 1


def process(n):
    return sum([i * n for i in range(10000)])


start_time = datetime.now()
r = Parallel(n_jobs=JOBS_COUNT)([delayed(process)(i) for i in range(10000)])
print(sum(r))
end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

10000回ループで回る処理です。
この処理を分割せずにそのまま処理した場合、次のような結果となりました。

2499500025000000
Duration: 0:00:06.060242

次に、2つに処理を分割して処理してみましょう。
つまり、並列処理で対応してみるということです。

JOBS_COUNT = 2

上記の値を変更して、コードを実行します。
2分割で並列処理した結果は、以下。

2499500025000000
Duration: 0:00:03.266651

見事に処理時間が大体半分になりました。
JOBS_COUNTの値を変更して、計測した結果が以下となります。

並列処理数Duration
10:00:06.060242
20:00:03.266651
30:00:02.403775
40:00:02.048596
50:00:02.114884
60:00:02.088471
70:00:02.133479
80:00:02.250358

検証したマシンのCPUの情報は、以下。

物理コア数4
論理コア数8

結果を見比べると、物理コア数次第というのがわかります。
物理コアの数だけ並列処理が可能と言えます。

以上、Joblibの動作確認を説明しました。

タイトルとURLをコピーしました