AOTInductor 외부 상수로 가중치를 넘기면 같은 GPU 복사본을 여러 컨테이너가 공유합니다 | DAKER 커뮤니티

가중치 한 번만
설명용 생성 이미지입니다.

한 줄 요약
PyTorch 2.14 AOTInductor의 AOTInductorModelContainerCreateWithExternalConstants는 호출자가 넘긴 가중치 텐서를 그대로 씁니다. 컨테이너마다 GPU 복사본을 다시 올리지 않고, 같은 버퍼를 여러 모델이 공유할 수 있습니다.

변형 모델 여러 개를 서빙할 때 가중치를 매번 로드하면 메모리가 모델 수만큼 늘어납니다. 오늘은 “외부 상수로 한 버퍼를 넘긴다”는 조건을 체크리스트로 적어 보십시오. 벤치 숫자를 만들지 않아도, 소유권과 수명만 맞으면 공유 경로가 성립합니다. 참가자는 “얼마나 빠른가”보다 “누가 메모리를 소유하는가”를 먼저 적어두면 됩니다.

재현해 볼 실험 조건

  1. 같은 베이스 가중치 버퍼 하나를 준비합니다.
  2. 컨테이너 A·B를 외부 상수 API로 만들어 같은 버퍼를 가리키게 한 경우와, 컨테이너마다 상수를 따로 로드한 경우를 비교 조건으로 둡니다.
  3. 컨테이너가 살아 있는 동안 호출자 버퍼가 유지되는지, 파괴 순서(버퍼가 컨테이너보다 먼저 죽지 않는지)를 확인합니다.

이 API는 C ABI로만 열려 있고 Python 진입점은 아직 없습니다. 기존 로드 경로는 외부 상수를 넘기지 않으면 그대로입니다. 서빙 코드에서는 “누가 메모리를 소유하는가”를 주석으로 남겨 두십시오. 프로세스 간 공유를 염두에 둘 때는 IPC로 넘긴 핸들과 컨테이너 수명을 같은 표에 적어 두면 실수가 줄어듭니다.

실무에서 바로 볼 포인트

서빙 체크리스트에는 C ABI 심볼 이름과 소유권 문구를 그대로 복사해 둡니다.

실험 노트를 남길 때는 컨테이너 개수, 공유 버퍼 개수, 파괴 순서를 표로 적어 둡니다. 외부 상수를 쓰지 않는 기본 생성자와 비교할 때도 같은 체크리스트를 쓰십시오.

관련 DAKER 학습

설명용 생성 이미지입니다. 외부 상수 공유는 로컬 컨테이너 수명·메모리 관찰로 확인하십시오.