특정 GPU를 사용하여 모든 프로세스를 종료하는 방법은 무엇입니까?

특정 GPU를 사용하여 모든 프로세스를 종료하는 방법은 무엇입니까?

저는 Nvidia GPU에서 일부 계산을 수행하기 위해 CUDA 툴킷을 사용하고 있습니다. 특정 GPU를 사용하여 모든 프로세스를 종료하는 방법은 무엇입니까? (즉시 종료합니다. 즉, 후속 PID를 수동으로 입력할 필요가 없습니다 kill -9.)

예를 들어, GPU 2를 사용하여 모든 프로세스를 종료합니다.

여기에 이미지 설명을 입력하세요.

답변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.

인용하다:https://stackoverflow.com/questions/4354257/can-i-stop-all-processes-using-cuda-in-linux-without-rebooting

답변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 PIDsPID는 프로세스를 종료하는 데 필요하며 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는 메모리 사용량 열입니다.

관련 정보