「raise ValueError(f”found {cpu_count_physical} physical cores < 1″)」の解消方法

Python

はじめに

競馬の順位予測システムを作成しています。
順位予測モデルをLightGBMで作成したとき、下記の警告が出ました。
モデルの作成に影響はなかったのですが、実行するたびに警告が出るので、警告が出ないようにするための対処方法をまとめました。

C:\xxxxx\.venv_new\Lib\site-packages\joblib\externals\loky\backend\context.py:136: UserWarning: Could not find the number of physical cores for the following reason:
found 0 physical cores < 1
Returning the number of logical cores instead. You can silence this warning by setting LOKY_MAX_CPU_COUNT to the number of cores you want to use.
  warnings.warn(
  File "C:\xxxxx\.venv_new\Lib\site-packages\joblib\externals\loky\backend\context.py", line 282, in _count_physical_cores
    raise ValueError(f"found {cpu_count_physical} physical cores < 1")

警告メッセージの内容

この警告メッセージは、joblibライブラリの内部で物理コア(physical cores)の数を検出しようとした際に、物理コアの数が「0」として報告されているため、これを基に計算を続行することができず、代わりに論理コア(logical cores)の数を使用することを示しています。

joblibは物理コアの数を取得しようとしましたが、何らかの理由で「0」が返されたため、物理コアの数が「1」未満であるとして、代わりに論理コアの数を使用します。

この警告は通常、プログラムの実行に重大な影響を与えるものではありませんが、パフォーマンス最適化を行う際に注意が必要です。

対処方法

joblibの警告メッセージを回避するために、LOKY_MAX_CPU_COUNT環境変数を適切に設定する必要があります。

下記のコードは、psutilライブラリのcpu_count関数を使用して、物理コアと論理コアの数を取得し、LOKY_MAX_CPU_COUNT環境変数を設定します。下記のコードを呼び出すことで、警告が出なくなります。

def set_loky_max_cpu_count():
    physical_cores = psutil.cpu_count(logical=False)
    logical_cores = psutil.cpu_count(logical=True)
    cpu_count = max(1, min(physical_cores, logical_cores))
    os.environ['LOKY_MAX_CPU_COUNT'] = str(cpu_count)
    print(f"LOKY_MAX_CPU_COUNT set to {cpu_count}")

psutilライブラリを使用しているので、実行環境に下記のパッケージをインストールしてください。

(.venv)> pip install psutil

コードの補足

cpu_count = max(1, min(physical_cores, logical_cores))

物理コアと論理コアの少ない方の数を選択します(min(physical_cores, logical_cores))。
その後、その値が最低でも1になるようにmax(1, …)で補正します。これにより、コア数が0やマイナスになることを防ぎます

コア数が少ない方を選ぶ理由

  • リソース共有の影響:
    論理コアは、物理コアのリソースを共有して動作します。そのため、物理コアが実際に持つ計算能力を超えて、論理コアが多数稼働しても、逆にリソースの競合が生じてパフォーマンスが低下する可能性があります。
  • 物理コアの効率性:
    特に重い計算やCPUに負荷がかかる処理では、物理コアのほうが論理コアよりも効率的に作業を行えるため、少ないほうのコア数を選ぶことで無理のないパフォーマンスを維持する狙いがあります。

以上です。

コメント

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