cargo-furiosa-opt 0.3.0을 사용해 RNGD용 INT8 contraction 커널을 빌드하고 있습니다.
Rust 컴파일과 Opt typecheck backend는 정상 통과하지만, --backend npu로 artifact를 생성하면 VISA 단계에서 실패합니다.
문제가 발생하는 연산 흐름은 다음과 같습니다.
fetch()
.fetch_cast::()
.collect()
.contract_outer()
NPU compiler가 이 연산을 multi-shape FeedBuffer로 lowering한 뒤 아래 오류를 반환합니다.
OperationUnitArgs::try_into failed: FeedBuffer {
element_type: RawInt8,
collect_flits: Flit2,
…
}
Caused by:
unsupported element type
Location:
crates/npu-ir/tu-ops/src/renegade/
feed_buffer_multi_shape/verify.rs:19:9
fetch() API 자체는 i8을 허용하고 fetch_cast::()도 유효한 identity cast이므로, Rust 타입 검사 단계의 문제는 아닌 것으로 보입니다. 실제 실패 지점은 NPU backend의 RawInt8 FeedBuffer lowering 단계입니다.
동일한 tensor mapping과 contraction 구조를 BF16으로 변경하면 EDF 생성과 실제 NPU 실행까지 정상 통과합니다. i32 reduction 커널도 성공하며, RawInt8 경로를 사용하는 커널들만 동일한 오류로 실패합니다.
확인하고 싶은 내용은 다음과 같습니다.
- Opt 0.3의 feed_buffer_multi_shape 경로에서 RawInt8이 의도적으로 지원되지 않는 것인지
- INT8 contraction을 위해 다른 fetch/collect packet mapping을 사용해야 하는지
- 현재 지원되는 INT8 fetch → collect → contract 예제나 권장 패턴이 있는지
- 이 문제가 수정된 compiler 버전 또는 예정된 패치가 있는지
참고로 이 오류는 NPU 장치를 열기 전 artifact 컴파일 단계에서 발생하므로, 드라이버/펌웨어 버전 불일치 문제와는 별개의 현상으로 판단하고 있습니다. 감사합니다!