본문으로 건너뛰기

© 2026 Molayo

llama.cpp헤드라인2026. 06. 09. 21:33

ggml: GGML_OP_COL2IM_1D 추가 및 관련 개선 사항

요약

llama.cpp의 ggml 라이브러리에 1D 전치 합성곱(ConvTranspose1d)을 처리하는 GGML_OP_COL2IM_1D 연산이 추가되었습니다. 이 커널은 오버랩-덧셈 방식을 사용하여 계산 효율성을 높였으며, CPU 백엔드에서 F32, F16, BF16 등 다양한 정밀도를 지원합니다. 테스트 케이스와 내부 검증 로직도 대폭 강화되어 안정성이 향상되었습니다.

핵심 포인트

  • ConvTranspose1d의 오버랩-덧셈(overlap-add) 단계를 추가하여 효율성을 높임.
  • CPU 백엔드는 F32, F16, BF16을 지원하며 병렬화된 gather 공식을 사용함.
  • 테스트 그리드가 11개 기하학적 구조로 확장되어 커버리지가 대폭 증가함.
  • 새로운 연산 추가에 따라 ggml-rpc.h의 프로토콜 패치 버전이 업데이트됨.

ggml : GGML_OP_COL2IM_1D 추가 (#24206)

  • cpu: GGML_OP_COL2IM_1D 추가

1D 전치 합성곱(ConvTranspose1d)의 오버랩-덧셈(overlap-add, scatter-add) 단계를 추가합니다. ConvTranspose1d는 GEMM에 이어 col2im 과정을 거쳐 분해될 수 있습니다. 가중치는 [IC, K_OC]로 사전 순열되어 [IC, T_in] 입력과 mul_mat으로 계약되어 [K_OC, T_in] 열 행렬을 생성하고, col2im_1d는 이 열들을 다시 [T_out, OC] 신호에 분산(scatters)합니다. 이때 T_out = (T_in - 1)_s0 + K - 2_p0 입니다.

계약 과정을 단순한 mul_mat으로 유지하면 무거운 작업은 최적화되고 양자화 가능한 matmul 커널들이 담당하므로, col2im_1d는 비용이 적게 드는 오버랩-덧셈만 수행합니다.

CPU는 출력 채널에 걸쳐 병렬화된 gather 공식을 사용하며, F32, F16 및 BF16을 지원하고 F32 누산기를 사용합니다.

  • tests: GGML_OP_COL2IM_1D 백엔드 커버리지 추가

conv_transpose_1d 케이스 옆에 test_col2im_1d를 추가하여, 8가지 기하학적 조건(canonical kernel = 2*stride DAC upsampling shape, overlap, no overlap, cropping (p0 = 1 및 p0 = stride/2), zeroed gaps가 있는 kernel < stride, stride의 배수가 아닌 kernel, 단일 열 펼치기)에 걸쳐 F32, F16 및 BF16을 커버합니다.

Perf 모드에서는 메모리 대역폭 측정을 위해 세 가지 실제 보코더 스테이지 모양을 보고하며, max_nmse_err는 F16과 BF16의 경우 5e-4로 완화됩니다.

  • cpu: GGML_OP_COL2IM_1D 강화

ggml_col2im_1d는 그래프 빌드 시간(oc 분할 전)에 s0, oc, p0 및 입력 연속성(contiguity)을 검증하여 모든 백엔드를 보호합니다. 이 커널은 자신이 가정하는 평면 인덱싱의 연속성을 단언하며, 문서에는 크롭 항을 포함한 전체 출력 길이 명시되어 있습니다.

이 커널은 시간 축에 걸쳐 병렬화되며, 이전 채널 분할이 싱글 스레드였던 OC = 1까지 균형 있게 유지됩니다. 값들은 세 가지 실제 보코더 체인에서 비트 단위로 동일하며, 그 중 두 개가 개선되었습니다.

  • tests: GGML_OP_COL2IM_1D 그리드 확장

평가 그리드는 11개의 기하학적 구조로 확장됩니다: OC = 1 (모노 출력 단계), K = 1이며 스트라이드가 1보다 큰 경우 (희소 산포, 모든 간격 위치는 0으로 설정됨), 그리고 T_out = 2까지 크롭되어 모든 게더 경계가 한 번에 작용합니다.

  • tests: col2im_1d 동등성 테스트 추가

tests/test-col2im-1d.cpp는 mul_mat + col2im_1d가 CPU 백엔드에서 네이티브 ggml_conv_transpose_1d와 일치함을 증명합니다. 이는 F32 비트 정확도, F16 및 BF16을 열 행렬(column matrix)의 캐스트를 통해 테스트합니다. test-backend-ops는 CPU 전용 연산에 대해서는 이 부분을 커버할 수 없습니다. 왜냐하면 CPU 백엔드가 자체적인 참조점이기 때문입니다.

  • rpc: GGML_OP_COL2IM_1D를 위한 프로토콜 패치 버전 증가

새로운 연산(op)으로 인해 ggml-rpc.h의 static_assert가 트리거되면서 GGML_OP_COUNT가 96에서 97로 증가합니다. 이 연산은 추가되었고 기존 op 코드가 이동하지 않았으므로 RPC_PROTO_PATCH_VERSION을 증가시켜야 합니다.

macOS/iOS:

Linux:

Linux:

Android:

Windows:

Windows:

openEuler:

  • DISABLED
  • openEuler x86 (310p)
  • openEuler x86 (910b, ACL Graph)
  • openEuler aarch64 (310p)
  • openEuler aarch64 (910b, ACL Graph)

UI:

AI 자동 생성 콘텐츠

본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0