본문으로 건너뛰기

© 2026 Molayo

llama.cpp헤드라인2026. 05. 21. 06:42

최신 NVIDIA GPU (Hopper+)에서 더 높은 성능을 위한 Programmatic Dependent Launch (PDL) ( #225

요약

NVIDIA Hopper+ 아키텍처 GPU의 성능 최적화를 위해 Programmatic Dependent Launch(PDL) 기능을 도입하고 다양한 커널을 등록했습니다. PDL을 통해 커널 간 실행 중첩과 효율적인 동기화를 구현하며, Hopper+ 외의 아키텍처(Ada 등)에서의 성능 저하 및 컴파일 문제를 방지하기 위한 보호 로직을 포함합니다.

핵심 포인트

  • NVIDIA Hopper+ GPU를 위한 Programmatic Dependent Launch(PDL) 기능 추가 및 최적화
  • Flash Attention, RMS Norm, RoPE 등 주요 LLM 커널의 PDL 등록을 통한 성능 향상
  • Hopper+ 아키텍처에서만 PDL이 활성화되도록 디바이스 측 아키텍처 검사 로직 강화
  • Ada 및 이전 아키텍처에서의 성능 저하(Regression) 및 컴파일 오류 방지 조치
  • GGML_CUDA_ENABLE_PDL 환경 변수를 통한 PDL 활성화 제어 기능 제공

최신 NVIDIA GPU (Hopper+)에서 더 높은 성능을 위한 Programmatic Dependent Launch (PDL) ( #22522 ) 추가. 초기 PDL 설정을 추가합니다. 간단한 휴리스틱(heuristic)을 기반으로 PDL 장벽(barriers)을 추가합니다: 첫 번째 입력 포인터 접근 전에 "sync"를 배치하고, dst와 같은 텐서에 대한 마지막 쓰기 후에 "launch"를 배치합니다. 커널의 전반부에 대한 추가 최적화 패스. 두 번째 커널 배치에 대해 최적화된 PDL 장벽. 리베이스(rebase) 후 추가적인 개선 사항. pdl 로직을 별도의 함수로 이동하고 일부 공백을 제거합니다. 사후 PDL 로직을 제거합니다. 스트림 캡처(stream capture) PDL 설정을 추가합니다. 이전 커널과의 실행 중첩을 위해 pdl을 활용하도록 quantize_q8_1을 등록합니다. mul_mat_vec_q, rms_norm_f32 및 k_bin_bcast (부분적으로)를 PDL에 등록합니다. gpt-oss를 위한 mmvf, rope, set-rows 및 topk 커널을 PDL에 등록합니다. hip/musa 호환성을 가능하게 하기 위해 cudaLaunchKernelEx를 추상화하는 ggml_cuda_kernel_launch를 도입합니다. cpy_scalar_contiguous, k_get_rows_float 및 rms_norm_f32를 등록합니다. flash_attn_combine_results를 등록합니다. 수정: PDL에 대한 불필요하고 고장 난 CUDA 아키텍처 체크를 제거합니다. PDL은 작동하거나 효과가 없을 뿐입니다. flash-attention 커널을 pdl에 등록합니다. 수정: ggml_cuda_kernel_launch를 인라인(inline)화하고 커널 인자에 대해 완벽한 전달(perfect forwarding)을 사용합니다. 이를 통해 PDL 문제를 해결합니다. 성능: 템플릿 별칭(template alias) 및 템플릿 확장(template expansion)을 통해 k_bin_bcast 가변 인자 템플릿 호출을 PDL에 등록합니다. qwen3-coder-next를 위한 나머지 모든 커널을 PDL에 등록합니다. 기준점(baseline)을 만들기 위해 모든 PDL LC 호출을 제거합니다. 내부 가이드에 따라 LC를 추가하고 커널 성능을 테스트했습니다. 누락된 qwen3.5 커널을 PDL에 수동적으로 등록합니다. qwen3.5를 위한 커널 최적화 (LC 신호). ssm-scan 커널을 PDL에 등록합니다. PDL을 토글할 수 있는 GGML_CUDA_PDL 명령줄 옵션을 추가합니다. 수정: PDL 호출을 올바르게 보호하여 Ada 및 그 이하 아키텍처에서의 컴파일 문제를 해결합니다. 정리: 주석 처리된 GGML_CUDA_PDL_LC를 제거합니다. 정리: 실험적 주석을 제거합니다. Hopper GPU가 PDL을 활용할 수 있도록 빌드 스크립트에 90-virtual을 추가합니다.

PDL (Parallel Data Loading)을 활성화하기 위한 더 엄격한 검사를 추가하고, 이를 비활성화하기 위한 env-check를 추가하며, 이제 불필요해진 PDL 활성화용 컴파일 옵션을 제거합니다. 수정: 디바이스 측 아키텍처 (arch) 확인을 기반으로 PDL 활성화/비활성화를 올바르게 수행합니다. 호스트 측 확인은 미정의 동작 (UB)입니다. 매크로 (macros)에서 인라인 함수 (inlined functions)로의 전환이 필요합니다. 수정: PDL을 기본적으로 비활성화합니다. GGML_CUDA_ENABLE_PDL=1을 설정하여 활성화합니다. Hopper+ 디바이스에 대해 PDL을 기본적으로 활성화합니다. softcap_f32 및 두 개의 flash_attn 커널을 PDL에 등록합니다. flash attn의 PDL 배리어 (barrier) 배치를 개선합니다. 수정: ada에서의 성능 저하 (Perf regression) 문제 해결; ada 및 그 이하 버전은 PDL 실행에서 제외합니다. 일부 동기화 배리어 (sync barrier) 배치를 개선합니다. 불필요한 생성자 (constructor)를 제거합니다. #endif 가드 주석을 추가합니다. 비용이 많이 드는 할당을 PDL 배리어 앞으로 이동시켰던 top-k-moe.cu의 실험적 변경 사항을 되돌립니다. 이는 유의미한 영향을 미치지 않았습니다. GGML_CUDA_DISABLE_PDL을 GGML_CUDA_PDL로 교체합니다. 단, GGML_CUDA_PDL=0인 경우에만 PDL이 비활성화됩니다. "불필요한 생성자 제거"를 되돌립니다. 남은 인자들에 const를 추가합니다. 이는 커밋 12b1d25를 되돌리는 것입니다. 정리: 일부 주석과 공백을 제거 및 수정합니다. 동기화 배리어 (sync-barrier) 위치에 대한 주석을 명확히 합니다. PDL 실행 함수 및 부속 함수들을 재배치하고 리팩토링 (refactor)합니다. 일반적인 커널 실행 경로에 에러 검사 (error checking)를 추가합니다. "auto" 대신 "ggml_cuda_kernel_params"를 사용합니다. ggml_cuda_kernel_launch_params에 "const"를 추가합니다. [공백] editorconfig CI 작업을 원활하게 하기 위해 common.cuh에 최종 줄바꿈을 추가합니다.

macOS/iOS: macOS Apple Silicon (arm64), macOS Apple Silicon (arm64, KleidiAI 활성화), macOS Intel (x64), iOS XCFramework
Linux: Ubuntu x64 (CPU), Ubuntu arm64 (CPU), Ubuntu s390x (CPU), Ubuntu x64 (Vulkan), Ubuntu arm64 (Vulkan), Ubuntu x64 (ROCm 7.2), Ubuntu x64 (OpenVINO), Ubuntu x64 (SYCL FP32), Ubuntu x64 (SYCL FP16)
Android: Android arm64 (CPU)
Windows: Windows x64 (CPU), Windows arm64 (CPU), Windows x64 (CUDA 12) - CUDA 12.4 DLLs, Windows x64 (CUDA 13) - CUDA 13.1 DLLs, Windows x64 (Vulkan), Windows x64 (SYCL), Windows x64 (HIP)
openEuler: openEuler x86 (310p), openEuler x86 (910b, ACL Graph), openEuler aarch64 (310p), openEuler aarch64

(910b, ACL Graph)

AI 자동 생성 콘텐츠

본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0