3 ポイント 投稿者 GN⁺ 2024-07-13 | 1件のコメント | WhatsAppで共有
  • 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 スタックの下層から作業を開始した
  • 各パッケージに対して次のような類似のアプローチを採用
    1. 最初の CI ジョブを追加
    2. スレッドセーフ性と共有/グローバル状態の問題を修正
    3. ホイールビルド用 CI ジョブに free-threaded 対応を追加
    4. ローカルでストレステストを行い、CI ジョブを監視
    5. 拡張モジュールが GIL なしで実行できるようにマーク
    6. 次のパッケージへ進む

GN⁺ のまとめ

  • Free-threaded CPython は、マルチスレッド性能を大きく向上させうる重要な変化
  • スレッドセーフ性の問題と ABI 互換性の問題を解決することが主要課題
  • Python 3.13 では、多くのプロジェクトが互換性対応を進め、実験できることを期待
  • PyTorch のような主要パッケージや多くの小規模パッケージがこの変化を受け入れる必要がある
  • 関連プロジェクトには PyO3 と PyTorch がある

1件のコメント

 
GN⁺ 2024-07-13
Hacker Newsのコメント
  • PythonのGIL除去により、多くの組織やプロジェクトでほぼ追加の労力なしにパフォーマンスを大幅に向上させられる機会が生まれる

    • 古いライブラリがこの変化に適時に対応しなければ、新しいプロジェクトが市場シェアを獲得する可能性がある
    • マルチプロセシングの複雑さやバグを避け、単純なスレッドを使って大規模マシンの全コアを活用できるようになる
  • macOSでGILを除去したPythonをインストールして動かした経験が共有されている

    • インストール手順と違いを説明する短いスクリプトを書いた
    • リンク
  • Pythonの書きやすさとロジックを気に入っているユーザーが、GILを除去したアプローチも従来のPythonの書き方に近いことを期待している

    • マルチスレッドは難しく、深く掘り下げてこなかったと述べている
  • Python 3の進捗状況を要約している

    • [x] Async
    • [x] Optional static typing
    • [x] Threading
    • [ ] JIT
    • [ ] Efficient dependency management
  • 2007年ごろに並列処理が必須になったことを振り返っている

    • Rustが速度と並列処理で優位に立っていることに触れている
  • PEP703で、GIL除去後にリストのappend演算がどのようにスレッド安全性を維持するかを説明している

    • リストごとのロックが追加される
    • 単純な整数のインクリメント演算は、現在はGILによってスレッド安全になっていることに触れている
  • GIL除去がMLの学習と推論の性質をどう変えるのかに期待している

    • メモリ受け渡しやプロセス調整の複雑さを減らせる可能性がある
    • PyTorchのようなライブラリが最適化される可能性に期待している
  • 実際のマルチスレッドを扱ったことのないプログラマーが、新たな微妙なバグを持ち込む可能性を懸念している

  • シングルスレッド性能の低下が深刻なのかという疑問を呈している

    • ベンチマークが見つからず、一般的な安心材料しか示されていない
  • asyncとどう連携するのかに興味を示している

    • I/OバウンドなコードとCPUバウンドなコードの間には自然な境界がある
    • より柔軟なモデルを見てみたい
    • CPUバウンドなコルーチンで"gather"を行うときにJITが可能なのか気になっている
    • 類似したインターフェースで素早く切り替えられる柔軟なプログラミングモデルがあれば素晴らしいと考えている