feat(embed): candle Metal (Apple Silicon GPU) opt-in build feature #200

Merged
altair823 merged 2 commits from feat/embed-candle-metal into main 2026-06-02 11:40:54 +00:00
Owner

요약

candle CPU 임베딩은 e5-large/512-tok 에서 1.51.9 s/chunk 로 느리고, 코어를 더 줘도(rayon/MKL) 빨라지지 않는다(병목 = 커널 효율, 코어 수 아님). 대용량 코퍼스(수만 청크)는 CPU 로는 수 시간이 걸린다. 이를 구조적으로 풀기 위해 candle 을 Apple Silicon GPU(Metal)에서 돌리는 opt-in build feature 를 추가한다.

워크플로: M-시리즈 맥에서 GPU 로 빠르게 색인 → kebab.sqlite + lancedb/ 만 Linux NUMA 서버로 복사 → 서버는 CPU candle 로 질의. 벡터는 동일 e5-large 모델이라 GPU/CPU 산출물이 호환되고(패리티 2.01e-7), KB 는 이식 가능하다(workspace_path 상대경로 + chunks.text 저장 → 검색에 원본 파일 불필요).

설계: docs/superpowers/specs/2026-06-01-embed-candle-track-spec.md (§10 후속 — GPU 가속)

변경

  • kebab-embed-candlemetal feature → candle-core/-nn/-transformers 의 metal 백엔드 활성. select_device() 가 metal 빌드 시 Device::new_metal(0) 선택(실패 시 CPU fallback), 비-metal 빌드는 기존 Device::Cpu 그대로.
  • host 복사 전 .contiguous() 추가 — Metal 의 strided view 를 to_vec2 가 거부(CPU 는 허용).
  • feature passthrough: kebab-app/embed_metalkebab-cli/embed_metal. 빌드(macOS): cargo build --release --features embed_metal.
  • README + HOTFIXES: Mac-GPU-색인 → 데이터 복사 → 서버 CPU-질의 워크플로 문서화.
  • 버전 0.22.0 → 0.23.0 (신규 opt-in build surface).

검증

  • default(비-metal) 경로 불변 (이 PR 의 CI/Linux 검증 범위): cargo clippy -p kebab-embed-candle -p kebab-cli --all-targets -- -D warnings exit 0; cargo test -p kebab-embed-candle exit 0 (candle 단위 6 + thread_cap 1 + parity 1 ignored); cargo check -p kebab-cli exit 0.
  • select_device() 의 Metal 분기는 #[cfg(feature="metal")] 로 격리 → 비-metal 빌드엔 Metal 심볼 0.

비범위 / 검증 분담

  • metal feature 는 macOS 전용 컴파일 — Linux CI/dev/서버 머신에서는 빌드 불가, 따라서 Metal 실행·속도·GPU vs CPU 벡터 패리티는 M4 Pro 에서 사용자 검증 (Claude 의 Linux 환경에서 불가). 확인 지표: ingest 로그에 candle device = Metal (GPU).
  • 서버(Linux)는 기존대로 CPU candle(provider=candle) 로 질의 — 본 PR 의 영향 없음.

시험 항목 (Test Plan)

  • default(비-metal) clippy -D warnings / candle 단위·thread_cap·parity / cli check 통과
  • (사용자, M4 Pro) cargo build --release --features embed_metal 빌드 성공
  • (사용자, M4 Pro) 소량 ingest → 로그 candle device = Metal (GPU) + CPU 대비 속도 향상 확인
  • (사용자) Mac-GPU 색인 KB(sqlite+lancedb)를 서버로 복사 → CPU candle 질의 정상 (벡터 호환 확인)

Assisted-by: Claude Code

## 요약 candle CPU 임베딩은 e5-large/512-tok 에서 ~1.5~1.9 s/chunk 로 느리고, 코어를 더 줘도(rayon/MKL) 빨라지지 않는다(병목 = 커널 효율, 코어 수 아님). 대용량 코퍼스(수만 청크)는 CPU 로는 수 시간이 걸린다. 이를 구조적으로 풀기 위해 **candle 을 Apple Silicon GPU(Metal)에서 돌리는 opt-in build feature** 를 추가한다. 워크플로: **M-시리즈 맥에서 GPU 로 빠르게 색인 → `kebab.sqlite` + `lancedb/` 만 Linux NUMA 서버로 복사 → 서버는 CPU candle 로 질의.** 벡터는 동일 e5-large 모델이라 GPU/CPU 산출물이 호환되고(패리티 2.01e-7), KB 는 이식 가능하다(`workspace_path` 상대경로 + `chunks.text` 저장 → 검색에 원본 파일 불필요). 설계: docs/superpowers/specs/2026-06-01-embed-candle-track-spec.md (§10 후속 — GPU 가속) ## 변경 - `kebab-embed-candle` 에 `metal` feature → `candle-core/-nn/-transformers` 의 metal 백엔드 활성. `select_device()` 가 metal 빌드 시 `Device::new_metal(0)` 선택(실패 시 CPU fallback), 비-metal 빌드는 기존 `Device::Cpu` 그대로. - host 복사 전 `.contiguous()` 추가 — Metal 의 strided view 를 `to_vec2` 가 거부(CPU 는 허용). - feature passthrough: `kebab-app/embed_metal` → `kebab-cli/embed_metal`. 빌드(macOS): `cargo build --release --features embed_metal`. - README + HOTFIXES: Mac-GPU-색인 → 데이터 복사 → 서버 CPU-질의 워크플로 문서화. - 버전 0.22.0 → **0.23.0** (신규 opt-in build surface). ## 검증 - **default(비-metal) 경로 불변** (이 PR 의 CI/Linux 검증 범위): `cargo clippy -p kebab-embed-candle -p kebab-cli --all-targets -- -D warnings` exit 0; `cargo test -p kebab-embed-candle` exit 0 (candle 단위 6 + thread_cap 1 + parity 1 ignored); `cargo check -p kebab-cli` exit 0. - `select_device()` 의 Metal 분기는 `#[cfg(feature="metal")]` 로 격리 → 비-metal 빌드엔 Metal 심볼 0. ## 비범위 / 검증 분담 - **metal feature 는 macOS 전용 컴파일** — Linux CI/dev/서버 머신에서는 빌드 불가, 따라서 **Metal 실행·속도·GPU vs CPU 벡터 패리티는 M4 Pro 에서 사용자 검증** (Claude 의 Linux 환경에서 불가). 확인 지표: ingest 로그에 `candle device = Metal (GPU)`. - 서버(Linux)는 기존대로 CPU candle(`provider=candle`) 로 질의 — 본 PR 의 영향 없음. ## 시험 항목 (Test Plan) - [x] default(비-metal) clippy -D warnings / candle 단위·thread_cap·parity / cli check 통과 - [ ] **(사용자, M4 Pro)** `cargo build --release --features embed_metal` 빌드 성공 - [ ] **(사용자, M4 Pro)** 소량 ingest → 로그 `candle device = Metal (GPU)` + CPU 대비 속도 향상 확인 - [ ] **(사용자)** Mac-GPU 색인 KB(sqlite+lancedb)를 서버로 복사 → CPU candle 질의 정상 (벡터 호환 확인) Assisted-by: Claude Code
altair823 added 2 commits 2026-06-02 11:38:34 +00:00
- kebab-embed-candle: `metal` feature → candle metal backend; select_device()
  picks Device::new_metal(0) (CPU fallback) under the feature, else Device::Cpu.
  .contiguous() before to_vec2 (Metal rejects strided views; CPU tolerates).
- feature passthrough: kebab-app/embed_metal → kebab-cli/embed_metal.
  Build on macOS: cargo build --release --features embed_metal.
- default (non-metal) path unchanged: clippy 0, candle units + thread_cap + parity pass.
- README + HOTFIXES: Mac-GPU-ingest → copy sqlite+lancedb → server CPU-query workflow.
- version 0.22.0 → 0.23.0 (opt-in build surface).

macOS-only compile; Metal execution/speed/parity validated by user on M4 Pro
(not buildable on the Linux CI/dev machine).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
claude-reviewer-01 approved these changes 2026-06-02 11:39:40 +00:00
claude-reviewer-01 left a comment
Member

회차 1 — candle Metal opt-in build feature 검토. select_device() 가 #[cfg(feature=metal)] 로 Metal 분기를 격리(성공 시 new_metal, 실패 시 CPU fallback; 비-metal 빌드는 Device::Cpu 그대로) → default 경로 무영향. feature passthrough(cli→app→candle) 정확, .contiguous() host-copy 가드 적절, 버전 0.23.0 + README(빌드/)/HOTFIXES 동기화. default(비-metal) clippy -D warnings 0 / candle 단위·thread_cap·parity / cli check 모두 exit 0 확인. Metal feature 는 macOS 전용 컴파일이라 GPU 실행·속도·패리티는 M4 Pro 사용자 검증 영역(Linux 에서 불가) — 코드 레벨 머지 동의. 잔여 actionable 0.

회차 1 — candle Metal opt-in build feature 검토. select_device() 가 #[cfg(feature=metal)] 로 Metal 분기를 격리(성공 시 new_metal, 실패 시 CPU fallback; 비-metal 빌드는 Device::Cpu 그대로) → default 경로 무영향. feature passthrough(cli→app→candle) 정확, .contiguous() host-copy 가드 적절, 버전 0.23.0 + README(빌드/)/HOTFIXES 동기화. default(비-metal) clippy -D warnings 0 / candle 단위·thread_cap·parity / cli check 모두 exit 0 확인. Metal feature 는 macOS 전용 컴파일이라 GPU 실행·속도·패리티는 M4 Pro 사용자 검증 영역(Linux 에서 불가) — 코드 레벨 머지 동의. 잔여 actionable 0.
altair823 merged commit c17d6e67a8 into main 2026-06-02 11:40:54 +00:00
altair823 deleted branch feat/embed-candle-metal 2026-06-02 11:40:56 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: altair823-org/kebab#200