답변1
Unix 철학에 따라 특정 GPU를 사용하여 프로세스를 나열하는 도구와 프로세스를 종료하는 도구가 있습니다. 쉘 구성 및 텍스트 처리 도구를 사용하여 결합합니다.
예를 들어 GPU 2를 사용하여 모든 프로세스를 종료하려면 다음 명령을 실행할 수 있습니다.
kill $(nvidia-smi | awk '$2=="Processes:" {p=1} p && $2 == 2 && $3 > 0 {print $3}')
또는
kill $(nvidia-smi -g 2 | awk '$2=="Processes:" {p=1} p && $3 > 0 {print $3}')
답변2
lsof /dev/nvidia* | awk '{print $2}' | xargs -I {} kill {}
나를 위해 작동합니다.
내 경우에는 프로세스가 거기에 나열되지 않았습니다 nvidia-smi
.
답변3
어쩌면 이것이 당신에게 필요한 것일 수도 있습니다:
kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 == 2 {print $2}')
awk
더 복잡한 조건의 경우 두 번째 명령의 조건문을 변경할 수 있습니다. 예를 들어, 다음 명령을 사용하면 PID > 1000인 GPU-0부터 GPU-3을 사용하는 모든 프로세스를 종료할 수 있습니다.
kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}')
보시다시피 kill -9 PIDs
PID는 프로세스를 종료하는 데 필요하며 awk
종료할 유효한 PID를 찾는 데 두 번 사용됩니다.
보다 구체적으로, 첫 번째 awk
명령은 "GPU PID 유형 프로세스 이름" 줄 뒤의 줄을 선택한 다음 각 GPU ID와 PID 사이에 공백이 있는 GPU id 및 PID 줄을 인쇄합니다. 두 번째는 awk
특정 GPU ID 또는 PID(이 경우 GPU-2를 사용하는 모든 프로세스)를 찾고 PID를 인쇄합니다. 마지막으로 kill -9 PIDs
해당 PID를 기반으로 프로세스가 종료됩니다.
답변4
이것은 나에게 효과적입니다.
kill $(nvidia-smi -g 2 | awk '$5=="PID" {p=1} p {print $5}')
-g
종료할 프로세스의 GPU ID를 설정하는 PID $5
열입니다. -g
모든 GPU에서 프로세스를 종료하려는 경우 이 매개변수를 생략할 수 있습니다.
awkization은 GPU 메모리 사용량을 조정하여 더욱 향상시킬 수 있습니다. awk '$5==“PID” && $8>0 {p=1} p {print $5}'
여기서 $8
는 메모리 사용량 열입니다.