TL;DR
TensileLite의 탐색 공간은 optimizer가 넘어설 수 없는 완전한 후보 집합이므로, 기존 커널을 포함하지 않은 대규모 grid는 더 많은 후보를 써도 시작점보다 느린 결과를 반환할 수 있습니다. 글에서는 기존 pool kernel에서 warm start한 뒤 Tile, Split-K, Mapping, read-side vector width, store·LDS vector width, Stream-K를 순서대로 열고, 매 라운드 현재 최선값을 후보에 포함해 엄격히 더 빠른 경우에만 갱신하는 coordinate descent를 사용합니다. AMD Instinct MI325X의 144개 GEMM에서 이 방식은 shape당 중앙값 1,126개 조합을 열거하고 156개 커널을 compile했으며, 최종 커널은 시작 baseline보다 중앙값 1.139배 빨라졌습니다. 약 10,000개 후보를 한 번에 탐색한 방식은 144개 중 116개에서 더 느렸고 tuning 시간도 1,691분 대 431분으로 길었으므로, 탐색 범위보다 기존 성능을 보존하는 anchor와 단계적 확장이 중요합니다.
섹션별 상세
이미지 분석

가로축은 shape별 tile landscape 중 이미 pool에서 튜닝된 비율을 젊은 pool에서 성숙한 pool 방향으로 나누고, 세로축은 tile grid를 추가했을 때의 중앙값 개선율입니다. pool이 5% 미만만 포함할 때 이득은 22.3%이고 50~99%를 포함하면 5.8%로 낮아져, Tile 라운드를 pool 성숙도에 따라 선택해야 한다는 본문의 결론을 뒷받침합니다.
AMD Instinct MI325X의 144개 GEMM에서 pool이 보유한 tile landscape 비율에 따른 tile 확장 이득을 나타낸 그래프입니다.

점이 1배 기준선의 오른쪽에 있을수록 one-shot kernel이 iterative kernel보다 느리며, geomean은 fp16 1.19배, bf16 1.13배, fp8 1.21배입니다. 모든 정밀도에서 one-shot 방식이 불리하고, 한 사례에서는 429마이크로초로 library default보다 8.6배 느린 결과가 표시되어 기존 kernel을 후보에 포함하지 않은 탐색의 위험을 드러냅니다.
144개 GEMM에서 약 10,000개 후보를 탐색한 one-shot kernel과 iterative kernel의 정밀도별 상대 성능을 비교한 산점도입니다.

모든 점이 동일 비용 기준선 위에 있어 one-shot sweep이 각 shape에서 더 긴 튜닝 시간을 사용했으며, 다수의 점은 4배 기준선보다도 위에 있습니다. 전체 비용은 one-shot 1,691분, iterative warm-start 431분이고 최악의 shape에서는 비용 차이가 21.9배까지 벌어져, 더 많은 후보가 더 나은 커널이나 더 효율적인 탐색으로 이어지지 않음을 보여줍니다.
144개 GEMM shape에서 one-shot sweep과 iterative warm-start tuning의 shape당 wall-clock 시간을 로그 축으로 비교한 산점도입니다.
용어 해설
- Coordinate Descent
- — 전체 파라미터 조합을 한꺼번에 탐색하지 않고, 서로 관련된 파라미터 그룹을 차례로 열어 최적값을 찾는 탐색 방식입니다. 한 라운드에서 한 그룹만 바꾸고 나머지는 현재 최선 구성으로 고정하므로 후보 수가 축소됩니다. 이 글에서는 기존 커널을 후보에 포함해 각 단계의 성능이 이전보다 나빠지지 않도록 만드는 핵심 원리로 사용됩니다.
- Warm Start
- — 이미 성능이 검증된 구성에서 탐색을 시작하는 방법입니다. TensileLite에서는 기존 pool kernel의 파라미터를 해독해 초기 구성으로 사용하므로, 기본값에서 다시 최적점을 찾는 비용을 피할 수 있습니다. 이후 탐색은 이 기준점에서 작은 파라미터 그룹을 순차적으로 확장합니다.
- Global-Split-K
- — 행렬 곱의 K 차원 연산을 여러 workgroup으로 나누고 부분 결과를 별도로 계산한 뒤 reduction하는 병렬화 방식입니다. 타일 수가 적거나 contraction이 짧아 연산 유닛이 충분히 채워지지 않는 경우 추가 작업을 만들어 활용도를 높입니다. 부분 합산 비용과 저장 방식 선택이 성능에 함께 영향을 줍니다.
- Stream-K
- — 행렬 곱의 contraction 작업을 고정된 workgroup 격자에 균등하게 배분하는 병렬화 방식입니다. 타일 분할만으로는 연산 유닛이 유휴 상태가 되기 쉬운 skinny 또는 low-tile-count shape에서 대안으로 사용됩니다. Global-Split-K와 상호 배타적이어서 별도 마지막 라운드에서 평가해야 합니다.
- MacroTile
- — 행렬 곱 결과를 workgroup과 wave가 처리할 출력 블록의 크기입니다. MacroTile은 출력 분할과 contraction 처리량에 영향을 주지만, 같은 MacroTile에서도 wave 분해 방식에 따라 다른 커널 성능이 나올 수 있습니다. 따라서 글의 tile 탐색은 MacroTile뿐 아니라 해당 타일의 wave-group 및 wave-tile 조합까지 확장합니다.
- 기하 평균(Geomean)
- — 여러 성능 비율을 곱한 뒤 항목 수의 역수 제곱근을 취해 전체 상대 성능을 집계하는 방식입니다. 이 글에서는 144개 GEMM에서 one-shot sweep이 iterative search보다 얼마나 느린지 정밀도별로 나타내는 데 사용됩니다. 산술 평균보다 비율 중심의 비교에서 극단값의 영향을 상대적으로 줄일 수 있습니다.
기술
- hipBLASLt
- TensileLite
- AMD Instinct MI325X
- gfx942
- ROCm 7.2.0
- GlobalSplitU
- GlobalSplitUAlgorithm
- WorkGroupMapping
- WorkGroupMappingXCC
- StaggerU
- StreamK
- MatrixInstruction
- GlobalReadVectorWidthA
- GlobalReadVectorWidthB
- LocalReadVectorWidth
- VectorWidthA
- VectorWidthB
- StoreVectorWidth
- LdsPadA
- LdsPadB
활용 사례
- LLM serving의 prefill projection GEMM 최적화
- LLM serving의 decode projection GEMM 최적화
- MoE expert projection 커널 튜닝
- 새 GPU architecture 또는 datatype의 kernel pool bring-up
- AMD Instinct MI325X용 hipBLASLt GEMM 성능 개선
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.
