본문 바로가기
가끔 써서 기억 안나는 내용

nvidia 죽은 프로세스 메모리 해제하기, free interrupted memory

by 저녁추천좀 2022. 5. 16.

학습을 돌리다가 뭔가 잘못된거 같아서 Ctrl+c로 강제 종료를 할 경우에 웬만해서는 할당해제가 잘 되지만 가끔씩 할당해제가 안될 때가 있다. 

+ 추가적으로 multi-process 할 때 Ctrl+C할 떄도 메모리 할당해제 안됨

 

( 해결하면서 nvidia-smi 캡쳐 안해서 적당히 긁어옴 )

이 때

kill -p <PID>

로 프로세스를 죽여도. 

이렇게 남아있는 경우가 있다. 이 경우 child process가 제대로 죽지 않은 경우이다. 

ps -aux

 를 해보면 process가 남아있는 것을 볼 수 있다. 

 

 

 

kbh       544243  0.0  2.2 45244392 2979884 pts/4 T   13:14   0:02 python src/trainer.py -c config/dv2_v0.yaml -v dv2_v0 -d cuda:1
kbh       544307  0.0  2.2 45234368 2969784 pts/4 T   13:14   0:02 python src/trainer.py -c config/dv2_v0.yaml -v dv2_v0 -d cuda:1
kbh       544371  0.0  2.2 45230472 2966104 pts/4 T   13:14   0:02 python src/trainer.py -c config/dv2_v0.yaml -v dv2_v0 -d cuda:1
kbh       544435  0.0  2.2 45268524 3003896 pts/4 T   13:14   0:02 python src/trainer.py -c config/dv2_v0.yaml -v dv2_v0 -d cuda:1
kbh       544499  0.0  2.2 45260504 2995912 pts/4 T   13:14   0:02 python src/trainer.py -c config/dv2_v0.yaml -v dv2_v0 -d cuda:1

 

이럭식으로 엄청 많이 나오는데, 학습을 돌릴때 gpu 장치를 명시하기 때문에 

"cuda:1" 이 들어있는 프로세스를 죽이는

#!/bin/bash

list="$(ps -aux)"

while read -r p; do
  if grep -q "cuda:1" <<< $p; then
    a=${p[0]}
    idx=0
    for i in $a; do
      if [ $idx -eq 1 ]
        then
           sudo kill -9 $i
      fi
      idx=$(($idx+1))
    done
  fi
done <<<"$list"

스크립트를 돌리니까 할당해제가 되었다. 

 

https://gist.github.com/kooBH/49f27f69a8fa4fd9d9136945095bfb4c