TensorFlow でモデル学習時に発生する Segmentation Fault (core dumped) もしくは 139(SIGSEGV) の対処法

メモリの不正読み込み AI
メモリの不正読み込み

TensorFlow でモデル学習のコードを動かしているケースを考えます。

model.fit(
   train_dataset,
   callbacks=TensorBoard(log_dir="logs"),
)

その際.fit()のタイミングで以下のエラーに遭遇することがあります。

Segmentation Fault (core dumped)
もしくは
139(SIGSEGV)

これはメモリの不正な読み込みが行われた旨のエラーです。

通常では発生するとは考えにくいエラーであり、利用しているライブラリなどに潜んでいるバグが原因であることが多いです。

このため Python や TensorFlow のコードを眺めただけでは原因の特定が困難でしょう。

今回のケースでは、Modelオブジェクトの .fit() メソッドを実行した際に発生しているため、TensorFlow関連モジュールに問題がある可能性があります。

従って、TensorFlowにバグが無いか否か、実際に Github の Issue を検索して確かめること考えます。

  • TensorFlow の GitHubのページで当該エラーで検索する
  • 見つけたIssueの中を読んで対処法を探る

TensorFlow の GitHub のページを確認する

TensorFlowのGitHubのページは以下です。

tensorflow
tensorflow has 109 repositories available. Follow their code on GitHub.

今回はコードから Tensorflow モジュールや TensorBoard モジュールが関連していると考えられるので、両者のリポジトリのIssueで検索をかけます。

TensorFlow: https://github.com/tensorflow/tensorflow

TensorBoard: https://github.com/tensorflow/tensorboard

今回はTensorBoardのリポジトリで Segmentation Fault というワードで検索をかけると以下のIssueが見つかります。

Tensorboard Callback profile_batch causes Segmentation Fault · Issue #3149 · tensorflow/tensorboard
Environment information Suggestion: Fix conflicting installations Namely: pip uninstall tensorboard tensorflow tensorflow-estimator tensorflow-gpu pip install t

このIssueを確認しながら具体的な対処法を説明していきます。

具体的な対処法

上記のIssueの中身を確認すると、CUDAのバージョンやTensorFlowのバージョンによっては当該のエラーが発生する旨が書いてあります。(英語で少々小難しい内容ですが、DeepLやGoogle翻訳を活用して読み解きます。

また、それはProfilerに問題があるようであり、明示的にProfierを無効化することでこのエラーが回避できると記載があります。

具体的にはTensorBoardの引数に profile_batch=0 を持たせることでエラーが回避できます。

model.fit(
   train_dataset,
   callbacks=TensorBoard(log_dir="logs", profile_batch=0), # ← 追加
)

まとめ

本記事ではSegmentation Fault (core dumped) もしくは 139(SIGSEGV) の原因の一例とその対処法についてまとめました。

なお、上記エラーは今回の原因以外でも様々な状況で発生する可能性があります。

外部モジュールを読み込まない状況では起きることは考えにくいエラーですので、このエラーが発生した場合は呼び出しているモジュールのバグなどを疑うのが良いでしょう。

GitHubは怖くない!Issueにはたくさん情報があるので、

検索して関連情報を探し当てよう!

コメント

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