ggml : MoE 모델에서 tensor-parallel + -ncmoe 충돌 수정 (#25028)
텐서 병렬화 (Tensor parallelism, -sm tensor)가 -ncmoe (CPU-offloaded MoE experts)와 결합될 경우, MoE 모델의 웜업 (warm-up) 단계에서 ggml-backend-meta.cpp 내의 GGML_ASSERT(ggml_is_contiguous(tensor))로 인해 중단됩니다.
문제가 발생하는 텐서는 MoE 라우터 출력 (ffn_moe_topk)입니다. 이 텐서는 미러링 (mirrored, GGML_BACKEND_SPLIT_AXIS_MIRRORED, 라우팅이 동일해야 하므로 백엔드 간에 복제됨)되어 있으며, 우연히 비연속적 뷰 (non-contiguous view)인 상태입니다.
ggml_backend_meta_buffer_{get,set}_tensor는 분할 상태 (split state)를 확인하기 전에 텐서의 연속성 (contiguity)을 검사(assert)했습니다. 이로 인해 바로 아래의 GGML_BACKEND_SPLIT_AXIS_MIRRORED 케이스가 이미 이를 처리하고 있음에도 불구하고, 미러링된 비연속적 텐서가 어설션 (assert)을 발생시켰습니다.
분할 상태 조회 (split-state lookup)를 어설션 위로 이동하고, get_tensor와 set_tensor 모두에서 미러링 케이스를 허용하도록 수정했습니다.
진단 도움: 제보자 (@nathanmp).
Fixes #24886
Signed-off-by: liminfei-amd [email protected]
macOS/iOS:
Linux:
<strong>Linux:</strong>
<strong>Android:</strong>
<strong>Windows:</strong>
<strong style="font-size: 1.2em;">Windows:</strong>
openEuler:
- DISABLED
- openEuler x86 (310p)
- openEuler x86 (910b, ACL Graph)
- openEuler aarch64 (310p)
- openEuler aarch64 (910b, ACL Graph)
UI: