b11436: ggml-openvino: CI 테스트 수정 및 GPU 회귀 문제 해결 (#30037)
요약
본 기사는 ggml-openvino 프로젝트의 CI 테스트 수정 및 여러 GPU 회귀 문제를 해결한 내용을 다룹니다. 특히, 혼합 토큰/임베드 브랜치 처리, 동적 임베딩 스케일링, 양자화 가중치 연산 오류 등 복잡한 모델 구조와 관련된 다양한 기술적 개선 사항을 포함합니다.
핵심 포인트
- 혼합 토큰/임베드 브랜치 처리를 통해 그래프 분할 및 DUP 지원 문제를 해결했습니다.
- 토큰별 임베딩 스케일링에 동적 토큰 차원을 부여하고 정적 경로에서 패딩하는 기능을 추가했습니다.
- GPU 플러그인 결함 우회 및 상태 저장(stateful) 그래프 처리 로직을 개선하여 안정성을 높였습니다.
- ggml-openvino: 선택되지 않은 그래프 브랜치 건너뛰기 및 DUP 지원
Upstream #29622는 모든 입력 임베딩 그래프에 ggml_build_forward_select()를 통해 혼합된 토큰/임베드 브랜치를 추가합니다. 이 노드는 compute용으로 플래그가 지정되지 않았지만, 백엔드가 이를 어쨌든 번역했고 해당 브랜치의 DUP이 지원되지 않아 스케줄러가 그래프를 분할하고 고정된 토큰 카운트를 가지고 임베딩을 분할하여 전달했습니다. 첫 번째 단일 토큰 디코딩에서 실패했습니다 (CPU 및 GPU에서의 test-thread-safety).
Compute 노드만으로 OV 모델을 빌드하고, CONT와 같은 동일 유형의 연속적인 DUP을 TRANSLATE하여 그래프가 하나의 백엔드에 머무르게 합니다.
-
ggml-openvino: inp_scale_rows 토큰 차원 동적화
#29622는 또한 토큰별 임베딩 스케일(gemma3, gemma3n, gemma4)을 새로운 [1, n_tokens] 입력으로 이동시킵니다. 여기에 동적 토큰 차원을 부여하고 정적 (NPU) 경로에서 청크별로 패딩합니다. -
ggml-openvino: 바인딩되지 않은 Q4_1/Q4_K 가중치에 대한 GPU MUL_MAT 연산 테스트 건너뛰기
Op 테스트는 Q4_1/Q4_K 가중치를 f16 제로 포인트가 있는 u4로 빌드합니다. GPU 플러그인은 일부 행 카운트에 대해 해당 형태를 컴파일하는 데 실패하며
양자화된 입력(Quantized inputs)은 변환될 때 역양자화되므로, 백엔드는 양자화된 CONCAT 출력을 작성할 수 없습니다. 이는 CPY를 양자화된 타입으로 할 경우 지원되지 않는 것으로 보고해야 합니다.
- ggml-openvino: build_rs의 단일 순환 상태 획득(single recurrent state gather) 처리
#29856은 build_rs를 s_copy 리프에서 하나의 GET_ROWS로 모든 순환 상태를 획득하고, ubatch 및 추가 상태(extra states)를 그 뷰(view)로 가져가도록 변경했습니다. 이 상태 저장 경로(stateful path)는 이전 형태만 일치했기 때문에 Qwen3.5는 CPU와 GPU에서 상태 저장 실행 시 실패했습니다("is_axis_valid(axis, r)" in a Concat).
단일 슬롯 캐시(single-slot cache)의 경우, s_copy 리프에서의 GET_ROWS를 활성 상태 획득으로 처리하고, 이를 읽는 reshape의 랭크-4 레이아웃을 유지하며, 빈 추가 상태 뷰(empty extra-state view)의 복사본을 단일 슬롯 잔여 쓰기백(single-slot remainder writeback)에 매핑합니다. 빈 뷰의 동적 차원(dynamic dim)에 대해 경고하지 마십시오.
-
openvino: GPU 플러그인 결함을 우회하기 위해 요소별 연산자(eltwise operand) 랭크 정렬
-
openvino: 랭크-3 상태 저장 그래프에서 MoE 융합 일치시키기
-
ggml-openvino: AlignEltwiseOperandRanks에서 RMS norm 출력에 unsqueeze하지 않기
이 패스(pass)는 연산자 랭크가 다른 Add/Multiply/Subtract의 낮은 랭크 연산자에 대해 unsqueeze를 수행합니다. gemma-3의 경우, 어텐션 후 잔여 추가(post-attention residual add)의 낮은 랭크 연산자는 norm 출력이며, 이를 unsqueeze하면 GPU 플러그인이 레이어를 잘못 계산하게 만듭니다: gemma-3는 상태 저장 실행 시 GPU에서 빈 답변을 반환합니다.
낮은 랭크 연산자가 RMS norm 출력인 경우 리라이트(rewrite)를 건너뜁니다.
- docs : OpenVINO 검증 모델 업데이트
공동 작성자: Mustafa Cavus [email protected]
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기