PyTorch 2.14 c10d 단방향 RMA 윈도우, 불규칙한 피어 메모리 접근에 왜 주목할까 | DAKER 커뮤니티

단방향 RMA 창

분산 학습에서 모든 데이터를 한 번에 모으는 방식은 익숙하지만, 항상 효율적인 것은 아닙니다. 특히 임베딩 조회나 전문가 라우팅처럼 특정 피어의 일부 데이터만 필요할 때는, 집단통신보다 더 잘 맞는 접근이 필요합니다.

PyTorch 2.14에 들어가는 c10d 단방향(RMA) 윈도우 인터페이스는 바로 이 지점을 겨냥합니다. 피어가 같은 시점에 맞춰 호출하지 않아도 한 랭크가 상대 메모리를 읽거나 쓸 수 있어, 불규칙한 접근 패턴을 다루는 실험에서 먼저 살펴볼 만합니다.

PyTorch 2.14에서 Backend·ProcessGroup에 단방향(RMA) 윈도우 인터페이스가 들어갑니다.
피어가 맞춰 호출하지 않아도 한 랭크가 상대 메모리를 읽거나 쓸 수 있어, 임베딩 조회·가중치 전달·전문가 라우팅처럼 불규칙한 접근에 맞습니다.

왜 단방향 윈도우가 필요한가

양방향 집단통신만으로는 한 피어의 데이터만 당겨오는 패턴이 비싸질 수 있습니다. 필요한 데이터가 일부에 그치는데도 전체를 모으는 경로를 타면, 지연과 트래픽 모두 불리해질 수 있기 때문입니다.

이번 변화의 핵심은 재작성 NCCL 경로의 Get/Put을 이 인터페이스로 노출한다는 점입니다. 즉, 한 랭크가 상대 메모리에 직접 접근하는 형태를 c10d 수준에서 다룰 수 있게 되는 셈입니다.

작게 시작하는 재현 실험

처음에는 작은 대칭 버퍼로 윈도우를 연 뒤, 단방향 Get 또는 Put 한 번이 통과하는지만 확인하면 됩니다. 이때 비교 기준으로 all-gather 경로를 함께 두고, 같은 데이터를 모았을 때의 지연과 트래픽 차이를 보는 것이 좋습니다.

실험 조건

  1. 작은 world size로 ProcessGroup을 열고, 문서화된 단방향 윈도우 API로 피어 버퍼를 등록합니다.
  2. 한 랭크에서 Get 또는 Put만 호출해 값이 맞는지 검사합니다. 피어는 맞춰 호출하지 않습니다.
  3. 같은 데이터를 all-gather로 모았을 때와 바이트·왕복 시간을 비교합니다. Flight Recorder·재구성 실험과 한 번에 섞지 않는 것이 좋습니다.

nccl2 백엔드 미리보기와 맞물릴 수 있지만, 여기서 중심은 단방향 창으로 불규칙 접근을 다루는 방식입니다. 재현 노트에는 백엔드·윈도우 크기·Get/Put 방향을 동일하게 남겨두면 비교가 쉬워집니다.

실무에서 먼저 볼 지점

이 기능은 임베딩·전문가 라우팅처럼 특정 피어의 데이터만 필요한 경우에 특히 눈여겨볼 만합니다. 먼저 단방향 창을 적용해 보고, 피어가 맞춰 호출하지 않는 조건에서도 값이 정확히 맞는지 확인하면 됩니다.

그다음에는 집단통신으로 전체를 모으는 경로와 비용 차이를 비교해 두는 것이 좋습니다. 같은 데이터를 얻는 데 필요한 바이트 수와 왕복 시간을 한 표로 정리하면, 어떤 접근이 실제 워크로드에 더 맞는지 판단하기 쉬워집니다.

관련 DAKER 학습

참고 자료

https://daker.ai/public/learning/tracks/pytorch-practice-advanced-track
https://daker.ai/community

여러분은 불규칙한 피어 접근이 많은 분산 작업에서 all-gather 대신 이런 단방향 Get/Put 경로를 어디에 먼저 시험해 보고 싶으신가요?