안녕하세요.
현재 Furiosa 컴파일러로 ONNX 모델을 ENF로 변환하는 과정에서 문제가 발생하고 있습니다.
MatMul 또는 Gemm 연산(또는 이에 대응하는 1×1 Conv 표현)을 포함한 모델을 furiosa-compiler로 컴파일할 때, 행렬의 모든 차원이 64 이하인 경우에는 정상적으로 ENF가 생성되지만, 한 차원이라도 65 이상이면 컴파일 중 내부 오류(panic)가 발생하여 ENF 생성이 실패합니다. 예를 들어 27×32, 64×64 크기는 정상 처리되나, 65×32, 32×65, 65×100, 100×65 등 행 또는 열 중 하나만 65 이상이어도 컴파일러가 종료됩니다.
이 현상은 MatMul, Gemm, 그리고 MatMul을 1×1 Conv로 변환한 모델 모두에서 동일하게 재현됩니다.오류 발생 시 출력되는 로그는 다음과 같습니다.
[1/6] 🔍 Compiling from onnx to dfg
Done in 0.014610008s
[2/6] 🔍 Compiling from dfg to ldfg
thread 'main' panicked at 'attempt to shift left with overflow',
crates/npu-compiler/src/compile/dfg_to_ldfg/lower/tactic/tensor/hcp.rs:52:72
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: failed to fill whole buffer
Error: Failed to generate ENF
MatMul과 Gemm 모두에서 동일하게 발생하며, 연산 종류와 무관하게 행렬 크기가 65 이상이면 컴파일러가 종료됩니다.
이 오류가 발생하는 정확한 이유가 무엇인지, 그리고 행렬 차원이 65 이상인 연산을 현재 컴파일러에서 어떻게 처리해야 하는지 궁금하여 문의드립니다.
추가로 sparse matrix 연산은 구현이 불가능한지 궁금하여 문의드립니다.
감사합니다.