AOTInductor 핀드 비동기 상수 복사, 로드 중 H2D 겹침을 어떻게 확인할까 | DAKER 커뮤니티

가중치 비동기 복사

라이브 추론이 이미 돌아가는 환경에서는 모델을 다시 올리는 순간의 복사 방식이 생각보다 큰 차이를 만듭니다. 특히 AOTInductor 공유 객체 가중치를 로드할 때 기본 경로가 다른 스트림까지 기다리게 만드는지, 아니면 호스트 복사와 디바이스 전송이 겹치도록 바뀌는지가 관찰 포인트가 됩니다.

PyTorch 2.14의 AOTInductorSetUsePinnedAsyncConstantsCopy와 환경 변수 AOTI_COPY_USE_PINNED_ASYNC는 바로 이 지점을 확인할 때 중요합니다. 단순히 로드가 빨라졌는지만 보기보다, 생성 전에 설정했는지와 AOTI_LOG_LOADING 마커가 남았는지를 함께 기록해 두는 편이 재현에 더 도움이 됩니다.

PyTorch 2.14의 AOTInductorSetUsePinnedAsyncConstantsCopy(환경 변수 AOTI_COPY_USE_PINNED_ASYNC)는 AOTInductor 공유 객체 가중치를 페이지 가능 동기 호스트→디바이스 복사로 올릴 때 생기던 전역 동기화를, 핀드 스테이징 비동기 경로로 바꿉니다.

무엇이 바뀌는가

기본 경로에서는 AOTInductor 공유 객체 가중치를 페이지 가능 동기 호스트→디바이스 복사로 올립니다. 이때 라이브 멀티 스트림 추론 중이라면 다른 스트림이 함께 멈추는지부터 확인하는 것이 좋습니다.

반대로 AOTInductorSetUsePinnedAsyncConstantsCopy 또는 AOTI_COPY_USE_PINNED_ASYNC로 핀드 비동기 경로를 켜면, 호스트 복사와 디바이스 전송을 겹칠 수 있습니다. 이 차이는 컨테이너가 이미 떠 있는 상태에서 .so 가중치를 다시 올릴 때 더 분명하게 드러날 수 있습니다.

재현해 볼 실험 조건

실험은 같은 환경에서 복사 경로만 바꿔 비교하는 방식으로 잡으면 됩니다. 먼저 라이브 멀티 스트림 추론이 돌아가는 환경에서 AOTInductor 공유 객체 가중치를 기본 경로로 로드해, 다른 스트림이 기다리는지 관찰합니다.

그다음 모델·컨테이너 생성 전에 AOTInductorSetUsePinnedAsyncConstantsCopy 또는 AOTI_COPY_USE_PINNED_ASYNC를 켠 뒤 같은 로드를 반복합니다. 이때 호스트 복사와 디바이스 전송이 겹치는지 로그와 프로파일로 비교하면 됩니다.

선택적으로 AOTI_LOG_LOADING을 켜 두면 [AOTI_LOAD] 마커와 복사 타이밍, 핀드 풀 진단을 남길 수 있습니다. 버퍼 크기 설정용 동반 API가 있다면 스테이징 크기도 함께 기록해 두는 편이 좋습니다.

기본값은 꺼져 있으며, 생성 이후에 켜면 기대와 다르게 동작할 수 있습니다.

기록할 때 특히 중요한 항목

이 경우에는 결과보다 조건 기록이 더 중요할 수 있습니다. 참가자 노트에는 API 호출 시점이 생성 전이었는지, 어떤 환경 변수를 사용했는지, AOTI_LOG_LOADING 마커가 남았는지를 적어 두는 것이 좋습니다.

실험이 끝난 뒤에는 사용한 PyTorch 버전, 환경 변수, 생성 전·후 여부를 한 줄로 정리해 두면 다음 참가자가 같은 조건을 바로 따라오기 쉽습니다. DAKER 학습 보드에서도 생성 전에 켰다는 사실과 로드 중 다른 스트림이 멈췄는지를 함께 남기면 재현성이 높아집니다.

실무에서 구분해서 볼 점

외부 상수로 가중치를 공유하는 문제와, 핀드 비동기 복사로 로드 경로를 바꾸는 문제는 별개입니다. 둘 다 AOTInductor 계열이지만 실험 조건을 섞지 않는 편이 좋습니다.

따라서 이미 올려 둔 외부 상수 관련 실습과 이번 로드 경로 실험은 분리해서 보는 것이 맞습니다. 이번 글에서는 특히 동기 복사가 다른 스트림을 멈추는지, 그리고 핀드 비동기 경로에서 H2D가 겹치는지를 중심으로 보면 됩니다.

관련 DAKER 학습

PyTorch 실전 고급 트랙
AOTInductor 외부 상수 실습 글
DAKER 커뮤니티

참고 자료

https://daker.ai/public/learning/tracks/pytorch-practice-advanced-track
https://daker.ai/community/post-mu3emws4-548960b9
https://daker.ai/community

여러분은 AOTInductor 로드 실험에서 생성 전 설정 여부와 [AOTI_LOAD] 마커를 어떤 방식으로 기록하고 계신가요?