「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.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年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 |
1 | 0:00:06.060242 |
2 | 0:00:03.266651 |
3 | 0:00:02.403775 |
4 | 0:00:02.048596 |
5 | 0:00:02.114884 |
6 | 0:00:02.088471 |
7 | 0:00:02.133479 |
8 | 0:00:02.250358 |
検証したマシンのCPUの情報は、以下。
物理コア数 | 4 |
論理コア数 | 8 |
結果を見比べると、物理コア数次第というのがわかります。
物理コアの数だけ並列処理が可能と言えます。
以上、Joblibの動作確認を説明しました。