vulkan: 셰이더 컴파일 실패 시 빌드 실패 처리 ([#24450](https://github.com/ggml-org/llama.cpp/pu
요약
llama.cpp의 Vulkan 셰이더 컴파일 과정에서 발생하는 빌드 오류 감지 로직을 개선했습니다. 기존에는 셰이더 컴파일 실패 시에도 빌드가 성공으로 처리되어 손상된 라이브러리가 생성될 위험이 있었으나, 이제는 종료 코드를 정확히 확인하여 빌드를 중단합니다.
핵심 포인트
- Vulkan 셰이더 컴파일 실패 시 빌드가 즉시 중단되도록 수정
- 자식 프로세스의 종료 코드(exit code)를 정확히 감지하도록 개선
- 원자적 플래그(atomic flag)를 사용하여 멀티스레드 환경의 안정성 확보
- 손상된 libggml-vulkan 백엔드 생성 방지
vulkan: 셰이더 컴파일 실패 시 빌드 실패 처리 (#24450)
- vulkan-shaders-gen: 셰이더 컴파일 실패 시 빌드 실패 처리
vulkan-shaders-gen이 셰이더 컴파일 서브프로세스(subprocess)의 실패를 감지하지 못하여, 빌드는 성공으로 보고되었으나 런타임(run time)에서만 오류가 발생하는 손상된 libggml-vulkan이 생성될 수 있었습니다. execute_command()는 자식 프로세스의 종료 코드(exit code)를 버렸으며 (POSIX에서는 status에 nullptr을 전달했고, Windows 분기에서는 GetExitCodeProcess를 호출하지 않았습니다), string_to_spv는 stderr가 비어 있는지 여부로만 성공 여부를 결정했습니다. 이로 인해 stderr가 비어 있는 상태에서의 비제로(non-zero) 종료 또는 서브프로세스 실행 실패가 성공으로 처리되었습니다.
execute_command()에서 자식 종료 코드(POSIX의 WEXITSTATUS, Windows의 GetExitCodeProcess)를 반환하고, 비제로 종료 또는 비어 있지 않은 stderr, 또는 실행 예외(launch exception)를 실패로 취급하여 이를 원자적 플래그(atomic flag)에 기록하도록 수정했습니다. main()은 process_shaders() 이후에 이 플래그를 확인하고 출력 파일을 작성하기 전에 EXIT_FAILURE를 반환하므로, 손상된 백엔드(backend)를 생성하는 대신 빌드가 중단됩니다.
Fixes #24393
Signed-off-by: liminfei-amd 91481003+liminfei-amd@users.noreply.github.com
- vulkan-shaders-gen: compile_failed 접근 방식 단순화 및 도달 불가능한 return 제거
#24450에 대한 리뷰 피드백 반영:
- .store()/.load() 대신 std::atomic compile_failed에 직접 접근 (= / 암시적 bool) 합니다. process_shaders()의 워커 스레드(worker threads)들이 동시에 이를 설정하므로 플래그는 원자성(atomic)을 유지합니다.
- execute_command()의 도달 불가능한 마지막 return -1을 제거합니다. POSIX에서는 자식이 execvp 이후 _exit()하고 부모가 반환하며 (fork()<0 시 예외 발생), Windows에서는 해당 블록이 종료 코드를 반환합니다.
Signed-off-by: liminfei-amd 91481003+liminfei-amd@users.noreply.github.com
macOS/iOS:
- macOS Apple Silicon (arm64)
- macOS Apple Silicon (arm64, KleidiAI enabled) DISABLED
- 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:
<strong>Android:</strong>
<strong>Windows:</strong>
- Windows x64 (CPU)
- Windows arm64 (CPU)
- Windows arm64 (OpenCL Adreno)
- Windows x64 (CUDA 12) - CUDA 12.4 DLLs
- Windows x64 (CUDA 13) - CUDA 13.3 DLLs
- Windows x64 (Vulkan)
- Windows x64 (OpenVINO)
- Windows x64 (SYCL)
- Windows x64 (HIP)
<strong>openEuler:</strong>
- DISABLED
- openEuler x86 (310p)
- openEuler x86 (910b, ACL Graph)
- openEuler aarch64 (310p)
- openEuler aarch64 (910b, ACL Graph)
<strong>UI:</strong>
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기