- Free-threaded CPython は、同一インタープリタ内で複数のスレッドを並列実行できるようにする大きな変化
- CPython 3.13 で実験的機能として提供される
- PEP 703 により、GIL を無効化した状態で実行できるようになった
- 性能向上、特にマルチスレッド性能のために重要
- 複数の CPU コアを効果的に活用できるようにする
すばらしいが、問題点は?
- CPython 自体で free-threading を実装するのは大きな労力
- 主な問題は 2 つ: スレッドセーフ性と ABI 互換性
- スレッドセーフ性: 純粋な Python コードは変更なしで動作するが、他の言語で書かれたコードや CPython C API を使うコードはそうでない可能性がある
- ABI 互換性: free-threaded インタープリタは異なる ABI を持つため、拡張モジュールを含む各パッケージは追加のホイールをビルドする必要がある
- スレッドセーフ性の問題は、理解・改善・テストが難しい
- 例: numpy#26690、pywavelets#758 などで断続的な失敗が発生
今後の計画とチームの作業
- free-threaded CPython がデフォルトになるまでには数年かかる見込み
- Python 3.13 では、多くのプロジェクトが互換性対応を進め、
cp313t ホイールを PyPI にリリースすることを期待
- チームは数か月にわたり、PyData スタックの下層から作業を開始した
- 各パッケージに対して次のような類似のアプローチを採用
- 最初の CI ジョブを追加
- スレッドセーフ性と共有/グローバル状態の問題を修正
- ホイールビルド用 CI ジョブに free-threaded 対応を追加
- ローカルでストレステストを行い、CI ジョブを監視
- 拡張モジュールが GIL なしで実行できるようにマーク
- 次のパッケージへ進む
GN⁺ のまとめ
- Free-threaded CPython は、マルチスレッド性能を大きく向上させうる重要な変化
- スレッドセーフ性の問題と ABI 互換性の問題を解決することが主要課題
- Python 3.13 では、多くのプロジェクトが互換性対応を進め、実験できることを期待
- PyTorch のような主要パッケージや多くの小規模パッケージがこの変化を受け入れる必要がある
- 関連プロジェクトには PyO3 と PyTorch がある
1件のコメント
Hacker Newsのコメント
PythonのGIL除去により、多くの組織やプロジェクトでほぼ追加の労力なしにパフォーマンスを大幅に向上させられる機会が生まれる
macOSでGILを除去したPythonをインストールして動かした経験が共有されている
Pythonの書きやすさとロジックを気に入っているユーザーが、GILを除去したアプローチも従来のPythonの書き方に近いことを期待している
Python 3の進捗状況を要約している
2007年ごろに並列処理が必須になったことを振り返っている
PEP703で、GIL除去後にリストの
append演算がどのようにスレッド安全性を維持するかを説明しているGIL除去がMLの学習と推論の性質をどう変えるのかに期待している
実際のマルチスレッドを扱ったことのないプログラマーが、新たな微妙なバグを持ち込む可能性を懸念している
シングルスレッド性能の低下が深刻なのかという疑問を呈している
asyncとどう連携するのかに興味を示している