피드로 돌아가기
Dev.toDevOps
원문 읽기
Linux AI 서버 관리자가 fuser 명령어로 고아 CUDA 프로세스를 식별해 GPU 메모리 즉시 해제
Fix Zombie VRAM: Clear GPU Memory Without Rebooting
AI 요약
Context
Docker 컨테이너 비정상 종료 시 NVIDIA 드라이버가 PID 매핑을 잃으면서 호스트 프로세스가 살아있어 GPU 메모리가 영구 점유되는 문제가 발생한다. nvidia-smi에서 실행 중인 프로세스가 없다고 표시되지만 80GB 메모리 전체가 점유되어 CUDA OOM 에러가 발생하는 상황이 반복된다.
Technical Solution
- fuser 명령어로 GPU 디바이스 파일(/dev/nvidia*)을 직접 조회하여 메모리를 점유 중인 숨겨진 프로세스 PID 식별
- docker restart 또는 sudo fuser -k -9 /dev/nvidia* 명령어로 SIGKILL 신호 전송하여 고아 프로세스 강제 종료
- 필요 시 sudo nvidia-smi --gpu-reset -i [GPU_ID]를 실행하여 하드웨어 레벨 CUDA 컨텍스트 초기화
- 실시간 VRAM 모니터링을 위해 watch -n 1 nvidia-smi 또는 nvtop 도구 활용하여 지속적인 메모리 누수 추적
Impact
95% 시나리오에서 VRAM이 즉시 0MiB로 복구되어 서버 재부팅 없이 10분 이상의 가동 중단 시간 제거.
Key Takeaway
Linux 커널 레벨에서 파일 디스크립터를 직접 조회하면 NVIDIA 드라이버 추상화 계층을 우회하여 OS 수준의 프로세스 관리로 GPU 메모리 누수를 신속하게 복구할 수 있다.
실천 포인트
LLM 또는 ComfyUI 워크플로우를 실행하는 Linux AI 서버 관리자는 torch.cuda.empty_cache()가 아닌 fuser 명령어로 디바이스 파일을 직접 조회한 후 SIGKILL로 고아 프로세스를 강제 종료하면 재부팅 없이 GPU 메모리를 완전히 해제할 수 있다.