0.5から始める機械学習

Machine Learning, Deep Learning, Computer Vision に関する備忘録

【kubernetes】Podのshared memory sizeを変更する

こんにちは

今日はkubernetesにおいてPodのshared memory size(shm)を変更する方法についてまとめます。

以前deepopsを使ったkubernetesクラスターの立ち上げについてまとめました。

nodaki.hatenablog.com

このdeepopsを使ったkubernetesではデフォルトで shm=1G に設定されています。

Tensorflowであればこのサイズでも問題ないのですが、Pytorchではdata loaderの仕様上で結構なサイズのshmサイズが要求されることもあるようです。

Docker 上で Pytorch を実行している際に DataLoader worker (pid xxx) is killed by signal: Bus error. というエラーが出る - Qiita

そのためdeepopsでPytorchの学習を開始すると

DataLoader worker (pid xxx) is killed by signal: Bus error. 

というメッセージとともにお亡くなりになってた...ということが起こるかと思います。

そこでこのエラーを回避するためにPodのshmサイズを変更する必要があります。

/dev/shmをPodにマウントする設定を追記することでホストの/dev/shmを使えるようになります。

spec:
     containers:
       - name: <container-name>
         image: <image-tag>
         volumeMounts:
           - mountPath: /dev/shm
             name: dshm
     volumes:
       - name: dshm
         emptyDir:
            medium: Memory

ただこの方法はあくまでワークアラウンド(対処療法)っぽいので自己責任で使いましょう。

How to increase shm size of a kubernetes container (--shm-size equivalent of docker) - Stack Overflow