record_pinned_host_memory를 켜면 메모리 스냅샷에 핀드 호스트 세그먼트가 같이 남습니다 | DAKER 커뮤니티
한 줄 요약
PyTorch 2.14부터 torch.cuda.memory._record_memory_history에 record_pinned_host_memory=True를 주면, 디바이스 할당뿐 아니라 핀드(페이지 고정) 호스트 할당도 스냅샷에 남습니다. host_segments·host_traces로 스테이징 버퍼가 프로세스 수명 동안 불어나는지 오늘 바로 볼 수 있습니다.
DataLoader·H2D 복사·CUDA 그래프에 묶인 핀드 버퍼는 한 번 잡고 오래 두는 경우가 많습니다. 디바이스만 보던 스냅샷으로는 그 누수가 안 보였습니다. 같은 워크로드를 기록 전후로 한 번씩만 돌려 호스트 쪽 증가분을 확인하십시오.
재현해 볼 실험 조건
- 기존처럼 디바이스만 기록한 스냅샷을 한 장 저장합니다.
- 같은 구간을
record_pinned_host_memory=True로 다시 기록하고, 필요하면record_cuda=False로 호스트만 남깁니다. - 스냅샷 JSON의
host_segments·host_traces크기·개수·타임스탬프를 비교합니다. 웹 비주얼라이저는 아직 호스트를 그리지 않을 수 있으니 필드를 직접 읽습니다.
어제 다룬 메모리 풀·그래프 트리 복제와는 다른 축입니다. 오늘은 핀드 호스트 관측만 봅니다.
실무에서 바로 볼 포인트
- 그래프 캡처에 고정 호스트 주소가 필요해 핀드 버퍼를 오래 붙잡는 서빙·배치 경로부터 확인합니다.
- PyTorch 할당자 밖
cudaHostRegister만 쓴 버퍼는 이 기록에 안 잡힐 수 있습니다. - 재현 노트에 빌드 번호, 기록 플래그, 스냅샷 파일 경로를 남깁니다.
관련 DAKER 학습
설명용 생성 이미지입니다. 동작은 로컬에서 핀드 기록 전후 스냅샷 필드를 비교해 확인하십시오.