[vision.mxq 양자화] RoPE 처리된 중간 텐서를 그래프 출력으로 노출하는 방법 문의 (qbcompiler 1.1.2+aries2)

Product & Environment

  • Product: ARISE2
  • OS: Ubuntu 24.04.3 LTS

Description

[vision.mxq 양자화] RoPE 처리된 중간 텐서를 그래프 출력으로 노출하는 방법 문의 (qbcompiler 1.1.2+aries2)

  • qbcompiler==1.1.2+aries2
  • 대상 모델: Qwen3-VL-2B-Instruct의 vision encoder (Qwen3VLVisionModel 기반, 24개 block)
  • 컴파일 대상: --target-device Aries2
    vision.mxq 컴파일 시, 원래 그래프 출력(merger + deepstack 3개, 총 4개)에 더해 딱 2개 레이어(16번째, 24번째/마지막)의 attention 정보만 추가로 출력하고 싶습니다. 이 attention 정보는:
  • 24개 레이어 전체가 아니라 이 2개 레이어에 대해서만
  • 원본 attention weight 행렬(seq×seq) 전체가 아니라, head 평균 후 4개씩 그룹 평균한 (64,) 크기의 벡터뿐
    토큰 프루닝(HiPrune) 알고리즘이 어떤 이미지 토큰을 유지할지 결정하는 데 이 값만 필요한 상황입니다.
    시도 1 — 해당 2개 레이어에서만 수동 softmax(QKᵀ)로 attention weight 계산 후 출력
    MBLT 컴파일은 성공(op 지원율 98.9%). 이어서 MXQ 컴파일 시 아래 에러로 실패:
    RuntimeError: rope matmul is not fully fused: fx_patched_fn0_14/cast/matmul
    시도 2 — attn_output 계산 경로(SDPA)는 24개 레이어 전부 원본 그대로 유지하고, 해당 2개 레이어의 post-RoPE Q,K 텐서 자체만 그래프 출력에 추가(신규 연산 없이 순수 passthrough)
    MBLT 컴파일은 100% 성공(op 지원율 100%, 새 연산 추가 없음). MXQ 컴파일 시 다른 에러로 실패:
    RuntimeError: Error. quantize failed. rotateOutWeight: Cout must be a multiple of D (block size)
    원인으로 추정한 것: HeadOutChRotation(언어 모델 쪽에서 만든 rotation matrix로 비전 출력을 정렬하는 스킴)이 원래 대상 레이어 4개(merger+deepstack)였는데, 새로 추가한 출력 2개(각 Q,K라 총 4개 텐서)까지 대상에 자동으로 포함시켜서 실패한 것으로 보입니다. EquivalentTransformationConfig.HeadOutChRotation의 필드는 apply/matrix_path 둘뿐이라, 레이어별로 이 스킴에서 제외하는 옵션을 API에서 찾지 못했습니다.
    시도 3 — 위 Q,K 출력을 merger/deepstack과 완전히 별개의 그래프(별도 MXQ)로 분리 컴파일, head_out_ch_rotation=False로 설정
    MBLT 컴파일은 다시 100% 성공. MXQ 컴파일 시 시도 1과 같은 계열의 에러:
    RuntimeError: rope is not fully fused: rope_k_23
    head_out_ch_rotation=False뿐 아니라, spin_r2=False, 그리고 qk/ud/vo/spin_r1/spin_r2/optimize_ffn 6개 equivalent-transformation 스킴을 전부 False로 설정해도 동일한 에러가 재현되어, 이 6개 스킴 중 어느 것도 원인이 아니라는 것까지 확인했습니다.
    이와 관련하여 질문이 있습니다.
  1. RoPE(StatefulRoPEWrapper로 추정)를 거친 중간 텐서(Q, K, 혹은 그로부터 계산한 attention weight)를 MXQ 컴파일 그래프의 최종 출력으로 노출하는 공식적으로 지원되는 방법이 있을까요?
  2. 있다면 어떤 설정/API를 사용해야할까요? (mxq_compile의 파라미터, 혹은 ModelParser/EquivalentTransformationConfig 레벨의 다른 옵션 등)
  3. 만약 없다면, 이게 qbcompiler==1.1.2+aries2의 알려진 제약인 것인지 아니면 저희가 놓친 우회 방법이 있는 지 문의 드리고 싶습니다.
    매번 빠르고 친절하게 답변해주셔서 감사합니다.

Logs & Attachments

안녕하세요, 모빌린트 이정승입니다.

내부 검토 결과, 말씀주신 기능은 현재 우회 방법이 없는 것 같습니다.

중간 Tensor를 output 목록에 추가하여 동작시키는 기능을 개발하여 추가해야될 것 같습니다.

빠르면 차기버전에 늦어도 차차기 버전에는 반영될 수 있을 것 같습니다.

감사합니다.

이정승 드림.