質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • Ubuntu

    1198questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • Chainer

    118questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

  • MPI

    5questions

    MPIは、並列プログラミングを利用するための標準化規格、及び実装自体のことを指します。バイト列で構成されたメッセージとして、いくつかのCPUが情報を送受信することにより協調動作を可能にします。

ChainerMN mpirunでexited on signal 9 (Killed).

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 71

YukiSato

score 1

ChainerでマルチGPU化をしようと思い、既存のコードを改変しGPU9台で学習できるようにしました。が、自作で組み立てたUbuntuマシンがmpirunコマンドを実行するとシグナル9で強制停止してしまいます。

mpirun noticed that process rank 5 with PID 0 on node ホスト名 exited on signal 9 (Killed).
↑エラーメッセージ
ちょっと調べて見るとメモリが足りないうんちゃらという感じで若干情報はヒットするのですが、いかんせん対応方法がわかりません。

もし、少しでも知見がある方いらしゃればご教授いただければ幸いです。

以下環境です
Ubuntu16.04
Chainer 3.5.0
ChainerMN 1.2.0
cupy 2.4.0
Cython 0.28.2
CUDA 8.0

以下参考にしたサイトです
ネットに落ちてたchainerコードをchainermn対応させて使っています。

リンク内容
↑競馬予想ニューラルネット

リンク内容
↑chainerMNのQiita記事

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

ちょっと調べて見るとメモリが足りないうんちゃらという感じで若干情報はヒットするのですが、

いえ、実際問題として signal 9 で kill されるとなると、マシン自体のメモリが足りないというのが第一感です。おそらくOom-killerでしょうから、当該ノードの syslog ( /var/log/messages あたり? ) に記録があると思います。
※ulimitによるメモリ制限の場合は signal 9 (SIGKILL) ではなく signal 11 (SIGSEGV) になるはずですから…

なので…。マシンの空きメモリと、動かすプログラムに必要なメモリ量が見合ってますか? というところから確認するしかないと思います。
※万が一として、cgroups の機能を使ってメモリ制限をかけてたり…しませんよね。

追記:
kill 9 の発生条件で「ulimitによるCPU時間制限超過」というのもあったのを思い出しました。なので Oom-killer とは断言できませんね。いずれにせよ、syslog で Oom-killer の発生有無は確認した方が良いと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/24 01:27 編集

    ありがとうございます!
    該当箇所をsudo cat syslog.1 | grep Killedで確認させていただきましたが、
    Jun 22 23:03:19 ホスト名 kernel: [ 4382.373047] Killed process 4044 (python3) total-vm:82927152kB, anon-rss:47696kB, file-rss:573920kB
    という形でログが残っていました。
    こちらがメモリー不足でKillされたという事でしょうか?もしそうであれば対応方法を教えていただければ大変助かります!

    キャンセル

  • 2018/06/24 02:14

    > こちらがメモリー不足でKillされたという事でしょうか?

    そうですね。おそらく直前のログに"Out of Memory: Killed process 4044 (python3)"というのもあるはずです。( Out Of Memory で kill するから Oom-killer )
    で、本当にメモリが足りないのならシステム的にはどうしようもありません。アプリ側で省メモリできないかどうかの話になります。

    ただ、killされたプロセスのメモリ使用状況からすると、どうも本当にメモリが不足しているわけではないのかも知れませんね。
    一旦切ります。

    キャンセル

  • 2018/06/24 02:37

    killされたプロセスのメモリ使用状況ですが、total-vm約80GB(!)、2種類のrssで計600MB程度、大きな乖離があります。前者が確保した仮想メモリ空間量 ( 実際にそれだけ使うとは限らない ) 後者が実メモリ量なので、前者が引っかかっているとすれば対策があるかも知れません。

    Linuxの場合、overcommitという機能がありまして、平たく言えば「実メモリ・スワップかき集めても足りない量の仮想メモリを(たとえ使わないにしても)割り当てていいの?」というところ、ポリシーを調整できるようになっています。で、そのポリシーによっては、実メモリ消費が少なくとも仮想メモリを大量に確保するアプリがOOMに引っかかることがあります。

    このポリシーはカーネルのパラメータとして、/proc/sys/vm/overcommit_memory で変更でき、値 1 が制限なし ( 仮想メモリはいくらでも割り当ててあげるけど、後で実メモリ足りなくなっても知らんで ) 状態です。これを試してみる価値はあると思います。

    …で、思い出したのですが、この仮想メモリと実メモリの乖離というのは、CUDAアプリでは昔 ( Unified Addressが導入されたCUDA4あたり? ) からある話でして。ただ、それがOom-killerに引っかかる要因になるかは、申し訳ないですが把握していません。

    キャンセル

  • 2018/06/25 00:10

    懇切丁寧なご指導をありがとうございます。
    一つ前のログを確認したところ確かに
    Jun 22 23:03:19 ホスト名 kernel: [ 4382.373034] Out of memory: Kill process 4044 (python3) score 52 or sacrifice child とありました。

    sshでUbuntuにログインしてましたので、sudo su - でroot化し
    echo 1 > /proc/sys/vm/overcommit_memory
    と、しました。が
    kernel: [76886.654634] Out of memory: Kill process 4002 (python3) score 56 or sacrifice child
    kernel: [76886.654647] Killed process 4002 (python3) total-vm:84588060kB, anon-rss:209024kB, file- rss:636640kB
    となりまたしても終了してしまいました。
    kernel: [ 0.000000] Initializing cgroup subsys cpuset
    kernel: [ 0.000000] Initializing cgroup subsys cpu
    kernel: [ 0.000000] Initializing cgroup subsys cpuacct
    ログ上に上記が残っていましたが、何か関係はあるでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ubuntu

    1198questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • Chainer

    118questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

  • MPI

    5questions

    MPIは、並列プログラミングを利用するための標準化規格、及び実装自体のことを指します。バイト列で構成されたメッセージとして、いくつかのCPUが情報を送受信することにより協調動作を可能にします。