Core ML로 dots.ocr를 옮길 때 보인 문자인식 병목

Hugging Face가 2025년 10월 2일에 「SOTA OCR with Core ML and dots.ocr」를 게시했습니다. 이 글은 dots.ocr를 기기 내에서 돌리는 과정을 설명합니다. 원문은 비전 인코더와 언어 백본을 나누고, 변환을 단계적으로 풀어 갑니다.

Hugging Face는 dots.ocr를 Core ML과 MLX로 나눠 옮깁니다

Hugging Face의 글은 dots.ocr를 기기 내 OCR로 옮기는 흐름을 다룹니다.

dots.ocr는 RedNote의 3B 파라미터 OCR 모델입니다.

원문은 이 모델이 OmniDocBench에서 Gemini 2.5 Pro를 넘는다고 밝힙니다.

또한 dots.ocr는 1.2B 파라미터 비전 인코더와 Qwen2.5-1.5B 백본으로 나뉩니다.

저자들은 비전 인코더는 Core ML로, 언어 백본은 MLX로 옮깁니다.

변환은 torch.jit.trace 또는 torch.export로 그래프를 잡고, coremltools.mlpackage를 만드는 방식입니다.

초반에는 단일 이미지 처리와 기본 sdpa만 남겨 모델을 단순화합니다.

dots.ocr를 비전 인코더와 언어 백본으로 나눠 Core ML과 MLX에 배치하는 흐름 도해
dots.ocr를 비전 인코더와 언어 백본으로 나눠 Core ML과 MLX에 배치하는 흐름 도해

원문 수치는 모델 크기와 전력 효율을 함께 보여 줍니다

원문은 성능과 전력 효율, 모델 규모를 같이 제시합니다.

아래 표는 확인된 값과 그 측정 대상을 정리한 것입니다.

항목 원문 값 무엇을 재는가
전체 모델 크기 3B 파라미터 OCR 모델의 전체 파라미터 수
성능 비교 Gemini 2.5 Pro를 상회 OmniDocBench에서의 상대 성능
비전 인코더 크기 1.2B 파라미터 시각 인코더의 파라미터 수
언어 백본 Qwen2.5-1.5B 언어 쪽 백본의 규모
Neural Engine 탑재 시작 2017년부터 모든 Apple 기기에 실린 시점
CPU 대비 전력 효율 12x 일부 테스트에서의 효율 차이
GPU 대비 전력 효율 4x 일부 테스트에서의 효율 차이

수치 외의 핵심 사실도 있습니다.

Neural Engine은 Core ML을 통해서만 접근할 수 있습니다.

Core ML은 Apple의 비공개 머신러닝 프레임워크입니다.

Some of our testing has found the Neural Engine to be 12x more power efficient than CPU , and 4x more power efficient than GPU .

이 문장은 기기 내 추론에서 전력 예산이 얼마나 중요한지 보여 줍니다.

Neural Engine, CPU, GPU, Core ML의 관계와 전력 효율 차이를 비교하는 도해
Neural Engine, CPU, GPU, Core ML의 관계와 전력 효율 차이를 비교하는 도해

Neural Engine이 있어도 바로 쓰기 어려운 이유가 있습니다

Neural Engine은 2017년부터 모든 Apple 기기에 들어갔습니다.

원문은 이 가속기가 높은 성능과 낮은 배터리 사용량을 함께 노린다고 설명합니다.

하지만 접근 경로는 Core ML로 제한됩니다.

그래서 하드웨어가 좋아도 변환 경로가 막히면 실무 속도는 떨어집니다.

원문도 PyTorch에서 Core ML로 옮길 때 까다로운 지점이 생긴다고 말합니다.

이 글의 핵심은 모델 크기만 줄인다고 끝나지 않는다는 점입니다.

지원 연산과 그래프 형태가 맞아야 변환이 안정적으로 갑니다.

저자들은 슬라이딩 윈도우 어텐션을 끄고, sdpa만 남겨 다음 단계로 갑니다.

실무에서는 모델을 먼저 줄이고 그래프를 나눠야 합니다

내일 시스템을 손볼 때는 모델부터 최소 형태로 줄여야 합니다.

원문은 한 장의 이미지 처리만 남기고, 불필요한 변형을 덜어 냅니다.

또한 torch.jit.tracetorch.export로 실행 그래프를 포착한 뒤, coremltools로 컴파일합니다.

처음에는 FLOAT32, 고정 shape, GPU 실행으로 성공 여부를 봅니다.

그다음에 정밀도를 낮추고 Neural Engine으로 옮깁니다.

비전 인코더와 언어 백본도 같은 방식으로 다루지 않습니다.

각자 다른 실행 환경과 제약을 기준으로 나누어 봐야 합니다.

단순화된 모델이 그래프 포착, Core ML 컴파일, 정밀도 조정으로 이어지는 변환 흐름 도해
단순화된 모델이 그래프 포착, Core ML 컴파일, 정밀도 조정으로 이어지는 변환 흐름 도해

자주 묻는 질문

dots.ocr는 왜 기기 내 실행에 적합합니까?

기기 내 실행은 비용과 네트워크 의존도를 줄입니다.

원문도 외부 API 키를 숨길 필요가 없고, 네트워크도 필요 없다고 말합니다.

다만 계산 자원과 전력 예산은 여전히 제한적입니다.

Neural Engine이 좋아도 왜 Core ML이 필요합니까?

Neural Engine은 Core ML로만 접근할 수 있기 때문입니다.

즉, 하드웨어가 있어도 프레임워크가 받쳐 주지 않으면 바로 쓰지 못합니다.

원문은 Core ML을 Apple의 비공개 머신러닝 프레임워크라고 설명합니다.

변환을 시작할 때 왜 단순화가 중요합니까?

변환 성공률을 높이기 위해서입니다.

한 번에 하나의 이미지와 기본 sdpa만 남기면, 오류 원인을 좁히기 쉽습니다.

그 뒤에 정밀도와 대상 하드웨어를 단계적으로 조정할 수 있습니다.

원문: 「SOTA OCR with Core ML and dots.ocr」