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 のページを確認する
TensorFlowのGitHubのページは以下です。
今回はコードから Tensorflow モジュールや TensorBoard モジュールが関連していると考えられるので、両者のリポジトリのIssueで検索をかけます。
TensorFlow: https://github.com/tensorflow/tensorflow
TensorBoard: https://github.com/tensorflow/tensorboard
今回はTensorBoardのリポジトリで Segmentation Fault というワードで検索をかけると以下のIssueが見つかります。
この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にはたくさん情報があるので、
検索して関連情報を探し当てよう!
コメント