PyTorch TunableOp에서 cuBLASLt 후보 수를 늘릴 때 다시 봐야 할 GEMM 선택 | DAKER 커뮤니티

Tunable cuBLASLt

한 줄 답: PyTorch 2.14 CUDA TunableOp는 cuBLASLt 휴리스틱 후보를 함께 고를 수 있습니다. 공식 문서 기준 후보 수는 torch.cuda.tunable.set_cublaslt_requested_algo_count 또는 PYTORCH_TUNABLEOP_CUBLASLT_REQUESTED_ALGO_COUNT로 제어하며 기본값은 8입니다. 평균만 보지 말고 문제 GEMM 모양을 같은 입력으로 비교·캐시 확인하세요.

DAKER PyTorch 학습 독자를 위한 점검 노트입니다. 평균 성능은 비슷해 보여도 모양별 편차가 큰 워크로드에서는 일부 GEMM에서 차이가 벌어질 수 있습니다. 구체 벤치 숫자는 워크로드·GPU마다 다르므로, 이 글은 재현 항목만 고정합니다.

무엇이 바뀌었다고 보나

PyTorch 2.14부터 CUDA 환경의 TunableOp는 cuBLASLt 휴리스틱 후보까지 함께 고릅니다. 후보 수를 늘리면 기본 휴리스틱이 약했던 GEMM 모양을 다시 측정해 캐시에 남길 수 있습니다. 문서에 따르면 값이 1 미만이면 1로 클램프됩니다.

후보 수를 늘린 뒤에는 같은 GEMM 모양을 다시 측정하고, 캐시에 남은 선택까지 함께 확인해야 합니다.

문제 모양이 보일 때 먼저 비교할 것

TunableOp를 켠 상태에서 후보 수를 올린 설정과 기본 설정을 같은 입력으로 한 번씩 비교합니다. 재현 노트에는 PyTorch 버전, GPU, dtype, m·n·k·leading dimension, 후보 수, 스텝 시간을 남깁니다.

재현해 볼 실험 조건

  1. 같은 GEMM 모양으로 TunableOp off / on(기본 후보)을 각각 측정
  2. set_cublaslt_requested_algo_count로 후보를 늘린 뒤 같은 모양 재측정
  3. 캐시에 어떤 선택이 남았는지 기록
  4. 오프라인 튜닝 파일 사용 시, 패딩된 leading dimension이 m·n·k와 같아지는 경우 잘못된 모양으로 튜닝되지 않았는지 확인

실무에서 바로 볼 포인트

전역 기본값을 바로 올리기보다 핫 패스 GEMM만 골라 후보 수를 늘려 보는 편이 안정적입니다. 캐시와 환경 변수 설정도 재현 노트에 함께 남깁니다. NVGEMM·에필로그 융합 후보와 겹치면 TunableOp 결과만 분리해 기록하세요.

이번 점검의 범위

컴파일 구간 메모리 풀, CUDA Graph Trees 복제, FFT bfloat16과는 다른 축입니다. 이번에는 TunableOp와 cuBLASLt 후보 선택만 봅니다.

측정표 템플릿

오늘 바로 할 측정

핫 패스 GEMM 1~2개를 골라 위 표의 세 행만 채웁니다. 평균 배율만 보고 전역 기본값을 바꾸지 마세요.

마치며

TunableOp·cuBLASLt 후보는 “켜면 무조건 이득”이 아니라 “문제 모양을 재측정할 도구”에 가깝습니다. 공식 TunableOp 문서를 기준으로 옵션을 확인하고, 측정만 남기세요. 여러분의 환경에서는 후보 수를 늘렸을 때 특정 GEMM 모양에서 차이가 있었나요?

환경 변수와 Python API를 섞지 않기

공식 README는 환경 변수가 처음 읽힐 때 고정될 수 있다고 안내합니다. 실험 중에는 Python API(set_cublaslt_requested_algo_count)로 바꾸고, 확정된 운영 값만 환경 변수로 남기는 편이 재현에 유리합니다.

관련 DAKER 글과 주제를 나누는 법

CUDA Graph 다중 풀, warmup incomplete, mem_pool+compile은 인접 주제이지만 측정 축이 다릅니다. TunableOp 노트에는 GEMM shape·algo count·캐시 선택만 남기고, 그래프·풀 이슈는 별도 글로 링크하세요.

실패를 문서로 남기는 이유

후보 수를 올렸더니 특정 shape만 느려진 경우도 자산입니다. “평균 1.0x”만 남기면 다음 사람이 같은 실험을 반복합니다. 회귀 shape와 설정을 표에 한 줄로 남기세요.

출처