torch.distributed.set_timeout으로 초기화 뒤에도 집단통신 타임아웃을 늘리거나 줄입니다 | DAKER 커뮤니티

타임아웃 재설정
설명용 생성 이미지입니다.

한 줄 요약
PyTorch 2.14의 torch.distributed.set_timeout은 ProcessGroup을 만든 뒤에도 집단통신 타임아웃을 바꿉니다. 느린 체크포인트 로드 구간만 늘리고, 끝난 뒤에는 다시 짧게 둘 수 있습니다. 예전 _set_pg_timeout 자리를 이 API가 대신합니다.

기본 타임아웃이 길면 한 랭크가 멈춰도 오래 기다립니다. 너무 짧으면 체크포인트 로드처럼 원래 느린 구간에서 잡이 끊깁니다. 오늘은 작은 월드에서 그룹을 연 뒤, set_timeout으로 값을 늘렸다가 줄인 다음, 그 값이 이후 콜렉티브에 반영되는지부터 확인하십시오. 참가자 노트에는 초기화 직후 값, 바꾼 값, 콜렉티브 종류를 적습니다. “행이 줄었다”보다 “초기화 뒤에 타임아웃을 바꿨는지”가 재현에 도움이 됩니다.

재현해 볼 실험 조건

  1. 작은 ProcessGroup을 열고, 초기화 직후 타임아웃을 기록합니다.
  2. torch.distributed.set_timeout으로 값을 늘린 뒤 느린 구간(예: 큰 상태 로드를 흉내 낸 sleep 또는 체크포인트 로드)을 한 번 두고, 그 구간에서 타임아웃으로 죽지 않는지 봅니다.
  3. 같은 API로 값을 다시 짧게 줄인 뒤, 의도적으로 느린 콜렉티브가 빨리 실패하는지 비교합니다. 가능하면 연산별 타임아웃도 한 줄로 적어 둡니다.

Flight Recorder 훅이나 nccl2 백엔드는 다른 글에서 다룹니다. 이번 글에서는 “그룹을 만든 뒤에 타임아웃을 다시 설정”하는 조건에만 초점을 둡니다. 실험이 끝나면 사용한 백엔드·월드 사이즈·타임아웃 초 값을 한 줄로 고정해 두면, 다음 참가자가 같은 조건을 바로 따라올 수 있습니다.

실무에서 바로 볼 포인트

관련 DAKER 학습

설명용 생성 이미지입니다. 동작은 로컬 ProcessGroup 타임아웃 변경 결과로 확인하십시오.