クイズ: 動的な軸と固まった軸
한국어 원문으로 표시합니다.
모델 입력이 [1, 64] 로 선언되어 있는데 64행을 한 번에 넣었다. 어디서 막히는가?
- 파일을 읽을 때 onnx.checker 가 먼저 거절한다
- 세션은 정상적으로 열리고 값을 넣는 순간 거절당한다
- 세션을 여는 데서 거절당하므로 모델을 열 수조차 없다
- 막히지 않고 앞의 1행만 계산한 뒤 나머지를 버린다
두 입력이 모두 0번 축에 batch 라고 적혀 있다. 이 선언의 뜻은?
- 두 입력이 각각 독립적으로 어떤 행수든 가질 수 있다
- 첫 번째 입력의 행수만 동적이고 두 번째는 거기에 맞춰 잘린다
- 런타임이 둘 중 큰 쪽에 맞춰 작은 쪽을 자동으로 늘린다
- 실행할 때 두 입력의 행수가 서로 같아야 한다
onnx.shape_inference.infer_shapes 를 돌렸더니 value_info 가 비어 있었다. 가장 먼저 확인할 것은?
- 노드가 하나뿐이라 채울 중간 텐서가 아예 없는 그래프인지
- 모델이 손상되어 추론이 중간에 예외를 삼켰는지
- opset 이 너무 낮아 추론 규칙이 등록되지 않았는지
- 가중치가 initializer 가 아니라 입력으로 선언되어 있는지
입력은 [batch, 4] 로 열려 있는데 그래프 안의 Reshape 목표 형이 상수 [3, 6] 이다. 어떤 일이 생기는가?
- onnx.checker 가 full_check 에서 반드시 거절한다
- 런타임이 상수를 무시하고 실제 배치에 맞춰 준다
- 모양 추론이 그 상수를 믿어 뒤쪽 축이 3으로 굳고, 오류 없이 배치 축이 죽는다
- 세션을 열 때 동적 축과 상수가 충돌해 즉시 실패한다
상수 형이 박힌 Reshape 를 고칠 때 배치 자리에 넣어야 하는 값은?
- 실제로 넣을 최대 행수
- 0 — 입력의 그 축을 그대로 쓰라는 뜻이므로 가장 안전하다
- 1 — 한 건씩 처리하도록 두고 바깥에서 반복한다
- -1 — 나머지 축에서 계산되므로 행수가 무엇이든 따라간다
축 문제를 양자화 전에 확인하라고 권하는 이유로 가장 정확한 것은?
- 양자화가 동적 축을 정수로 굳혀 버리기 때문이다
- 양자화된 그래프는 노드가 바뀌고 Q/DQ 가 끼어들어 원인을 읽기 어려워지기 때문이다
- 양자화 도구가 축이 열린 모델을 거부하기 때문이다
- 양자화 후에는 모양 추론을 돌릴 수 없기 때문이다