본문으로 건너뛰기

TensileLite 커널 탐색을 작게 나눠 성능을 높이는 방법

기존 커널을 보존하는 단계적 탐색이 대규모 one-shot grid보다 빠르고 안정적입니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

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와 단계적 확장이 중요합니다.

섹션별 상세

01
TensileLite가 반환할 수 있는 커널은 configuration이 표현하는 탐색 공간 안에서만 결정되므로, 기존 커널을 포함하지 않은 generic grid에는 성능 하한선이 없습니다. 실제로 모든 유망 파라미터를 한 번에 연 grid는 144개 GEMM 중 109개에서 튜닝하지 않은 library default보다 느린 결과를 냈습니다. 반대로 현재 최선 커널의 값을 모든 후보 목록에 합치면 각 라운드가 시작점보다 나빠질 수 없다는 구조적 보장이 생깁니다.
02
제안된 방법은 coordinate descent 형태로 한 번에 하나의 관련 파라미터 그룹만 열고 나머지는 현재 최선 구성으로 고정합니다. 첫 라운드는 pool에서 해독한 커널로 시작하고, 각 라운드의 승자가 현재 값보다 엄격히 빠를 때만 다음 라운드의 기준으로 채택합니다. 파라미터 상호작용 때문에 전체 조합의 전역 최적점을 보장하지는 않지만, 후보 수가 그룹 수에 비례하고 모든 단계가 측정된 비교가 된다는 비용·안전성의 균형을 얻습니다.
03
TensileLite 탐색은 Tile, Split-K, Mapping, global-read vector width, store·LDS vector width, Stream-K의 여섯 라운드로 구성됩니다. Tile은 MatrixInstruction과 DepthU를 함께 열고, Split-K는 GlobalSplitU와 알고리즘을 함께 조정하며, Mapping은 WorkGroupMapping 계열과 StaggerU를 묶어 chiplet 배치를 바꿉니다. Stream-K는 Global-Split-K와 상호 배타적이고 일부 fp8 heavy-epilogue 커널에서 codegen이 실패하므로, 실패하면 기존 Global-Split-K 결과로 되돌리는 try-and-fallback이 필요합니다.
04
AMD Instinct MI325X, gfx942, 304 CUs와 ROCm 7.2.0 환경에서 24개 shape, 3개 precision, 2개 layout으로 144개 GEMM을 측정했습니다. 전체 여섯 라운드에서 latency가 증가한 사례는 없었고, 최종 커널은 시작 baseline 대비 중앙값 1.139배, 평균 1.196배, 최고 3.14배 빨라졌습니다. 다만 pool의 top-ranked 후보 하나만 초기값으로 사용했기 때문에 library default 대비 중앙값 개선은 1.067배였고, 144개 중 44개는 library default보다 낮은 성능에 머물렀습니다.
05
라운드별 효과는 Mapping이 136개 사례에서 작동해 중앙값 1.040배의 안정적인 개선을 냈고, Tile은 85개 사례에서만 작동하지만 최고 2.82배의 큰 개선을 만들었습니다. Split-K도 112개 사례에서 개선을 내 평균 1.039배를 기록했으며, read-side width와 store·LDS vector width는 각각 26개, Stream-K는 7개 사례에만 기여했습니다. 따라서 중앙값이 1.000배인 후반 라운드도 특정 shape에 필요한 병렬화 방식을 남겨두는 낮은 비용의 보험 역할을 합니다.
06
Tile 라운드의 가치는 커널 pool의 성숙도에 따라 달라집니다. shape별 tile landscape의 5% 미만만 pool에 포함된 젊은 pool에서는 tile 확장이 중앙값 22.29%의 개선 여지를 만들었지만, 대부분을 포함한 성숙한 pool에서는 그 수치가 5.83%로 낮아졌습니다. 새 architecture나 datatype을 bring-up할 때는 Tile을 먼저 실행하고, pool이 충분히 탐색된 뒤에는 비용 대비 효과가 낮아진 Tile 라운드를 우선 생략하는 방식이 적절합니다.
07
약 10,000개 후보를 한 번에 탐색한 one-shot grid는 iterative search가 찾은 커널보다 144개 중 116개에서 느렸고 전체 geomean은 1.18배였습니다. 정밀도별로도 fp8 1.21배, fp16 1.19배, bf16 1.13배 느렸으며, one-shot 결과가 429마이크로초로 나온 한 fp16 사례는 iterative kernel의 39.4마이크로초보다 10.9배 느리고 library default보다도 8.6배 느렸습니다. 튜닝 시간은 one-shot의 1,691분과 iterative warm-start 방식의 431분으로 측정되어, 후보를 늘리는 것보다 기존 커널을 anchor로 삼는 것이 성능과 비용 모두에 중요합니다.

이미지 분석

AMD Instinct MI325X의 144개 GEMM에서 pool이 보유한 tile landscape 비율에 따른 tile 확장 이득을 나타낸 그래프입니다.
Chart

가로축은 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 확장 이득을 나타낸 그래프입니다.

144개 GEMM에서 약 10,000개 후보를 탐색한 one-shot kernel과 iterative kernel의 정밀도별 상대 성능을 비교한 산점도입니다.
Chart

점이 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의 정밀도별 상대 성능을 비교한 산점도입니다.

144개 GEMM shape에서 one-shot sweep과 iterative warm-start tuning의 shape당 wall-clock 시간을 로그 축으로 비교한 산점도입니다.
Chart

모든 점이 동일 비용 기준선 위에 있어 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 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 09.수집 2026. 09. 10.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.