GitHub Repo
PyTorchコミュニティがmacOSインストールパッケージの互換性問題を報告、Python 3.15でバックグラウンドスレッドがクラッシュする可能性
10月24日のPyTorchコミュニティからの報告によると、2.14.1のmacOS arm64向けPython 3.15インストールパッケージでは、バックグラウンドスレッドがテンソルを解放する際にプロセスがクラッシュする可能性がある。報告には最小再現例とバイナリ解析が含まれているが、根本原因と正式な修正はメンテナーによる確認待ちだ。

PyTorchコミュニティは10月24日、バイナリ互換性に関する報告を受け取った。macOS arm64、Python 3.15.0、torch 2.14.1の組み合わせで、バックグラウンドスレッドがPythonグローバルインタープリターロック(GIL)を再取得する際に、セグメンテーションフォルトが発生する可能性があるという。報告者によれば、問題は当初、動画デコードのワーカースレッドで発生し、その後、PyTorchと小規模なC++拡張だけに依存する再現プログラムに絞り込まれた。問題報告
問題を引き起こす処理には、言語をまたぐオブジェクトのライフサイクルが関係している。C++側でテンソルを保持し、Python側で対応するオブジェクトを削除した後、GILを解放した状態のバックグラウンドスレッドが、最後に残ったC++参照を解放する。報告にあるスタックトレースは、pybind11のGIL管理とテンソル参照の解放処理に位置している。pybind11の公式ドキュメントでは、C++からPythonの状態にアクセスする際にはGILを保持する必要があると説明されている。また、デストラクターや参照カウントの処理は問題が起きやすい箇所であり、テンソルの解放でもGILの再取得が必要になる可能性がある。GILのドキュメント
報告者による逆アセンブル解析では、ビルドに使われたヘッダーが疑われている。検証対象のパッケージがスレッド状態のフィールドにアクセスする位置はPython 3.15正式版の配置と異なっており、パッケージがより前のプレリリース版のヘッダーでビルドされた可能性があるという。ただし、これは投稿者による根本原因の見立てであり、公式な結論ではない。比較テストでは、同じPyTorchバージョンとPython 3.14の組み合わせは正常に動作し、検証対象のnightly版とPython 3.15の組み合わせも正常に動作した。これらの結果が対象としているのは、記載された環境に限られる。解析と比較テスト
ローカルのマルチモーダルパイプラインやC++拡張を保守するチームにとって、この報告は、アップグレードの検証にバックグラウンドスレッドとオブジェクトの解放を含める必要性を示している。パッケージを正常にインポートできるだけでは、互換性を確認したことにはならない。Pythonの公式情報によると、Python 3.15は10月9日にリリースされた。最近移行したチームは、この再現ケースを環境チェックに加えることができる。Pythonのバージョン情報
確認時点では、issueはオープンのままで、メンテナーによる確認や修正へのリンクは見当たらない。今後は、公式にパッケージが再ビルドされるか、影響を受けるプラットフォームが公表されるか、安定版が同じテストを通過するかを追う必要がある。現時点では、nightly版で一度成功したことを、修正が完了した証拠とみなすことはできない。