칭위(听雨), 아페이쓰(凹非寺)에서 발송
量子位 | 위챗 공식계정 QbitAI
바이두의 OCR이 또 업그레이드되었다,문심Unlimited OCR 2가 정식 출시 및 오픈소스화되었다!
이번에는 소설 전체를 한 번에 읽는 것에 바로 도전했다.
《해리 포터》 7부작, 《마법사의 돌》부터 《죽음의 성물》까지, 연속 인식·전사로 3600+페이지를 끝까지 읽어냈다.
《삼체》 전집으로 바꿔도 마찬가지로 한 번에 다 읽을 수 있었고, 세 권 1200+페이지, 수십만 자를 중간에 숨도 쉬지 않고 읽었다.
다만 이렇게 많은 페이지를 연속해서 읽으려면, 모델은 먼저 하나의 관문을 통과해야 한다:메모리(显存)。
문서가 길어질수록 추론 시 유지해야 하는 중간 정보(KV 캐시)가 많아진다. 이는 모델이 읽으면서 적어두는 꼬리표(note)로 이해할 수 있는데, 페이지가 많을수록 꼬리표는 두꺼워진다. 꼬리표가 두껍고 무거우면 공간을 차지할 뿐만 아니라 넘겨보는 것도 느리다.
기술 보고서의 백 페이지급 단일 시퀀스 테스트에서 문심Unlimited OCR 2는 다음과 같은 비교를 제시했다:
표준 디코딩(모든 페이지의 비주얼 캐시를 메모리에 동시에 유지) 시의 피크 KV 캐시 사용량이47GB에서 1.77GB로 낮아져, 한 번에 약 96% 감소했다.
47GB가 어느 정도인가? 적지 않은 노트북의 전체 메모리보다도 크다. 그리고 이것은 어디까지나 KV 캐시일 뿐, 모델 가중치 등 다른 오버헤드는 별도이다.
그 이전 세대인 Unlimited OCR는 이미 다중 페이지 문서 연속 파싱 능력으로 오픈소스 커뮤니티에서 상당한 인기를 얻었다: 누적 다운로드 1000만 회 초과, GitHub에서 약 2.86만 Star를 획득했다.
커뮤니티 제작 온라인 Demo부터 SGlang 추론 지원까지, 이를 둘러싼 적응 작업도 계속 진행되고 있다.
2세대에 이르러 업그레이드의 초점은 더 긴 문서를 연속 처리하는 동시에 계산과 캐시 부담을 낮추는 데 있다.
이를 위해 문심Unlimited OCR 2는희소 참조 슬라이딩 윈도우 어텐션 메커니즘 SR-SWA를 제안하여모델이 필요에 따라 관련 페이지와 비주얼 정보를 선택하게 하고 반복 계산을 줄인다.
지속 디코딩 메커니즘과 결합하여, 모델은 초장문서를 연속 처리할 수 있으며 단일 스텝 디코딩 비용도 문서가 길어진다고 해서 함께 늘어나지 않는다.
현재 문심Unlimited OCR 2는 Hugging Face와 GitHub에서 정식 오픈소스로 공개되었다.
오픈소스 주소:
*GitHub:https://github.com/baidu/Unlimited-OCR*
*HuggingFace:https://huggingface.co/baidu/Unlimited-OCR-2*
핵심 기술 해부: SR-SWA는 어떻게 계산을 줄이고, 청크 디코딩은 어떻게 저장을 줄이는가
수백만 자, 3600+페이지에 달하는 《해리 포터》 전집을 연속으로 끝까지 읽어낸 문심Unlimited OCR 2는 대체 어떻게 해낸 것일까?
그것이 참고한 것은 사실 인간이 책을 베끼는 방식이다.
사람이 손으로 책을 베낄 때의 과정은 무엇일까? 한 단락을 보고 한 단락을 베끼며, 눈은 주로 지금 베끼고 있는 페이지에 두고, 앞뒤로 대조할 필요가 있는 부분을 만났을 때만 관련 페이지를 다시 넘겨본다.
책 베끼기라는 일은 인간이 모델보다 훨씬 일찍 이해하고 있었다: 누구도 『논어』를 베끼면서 머릿속에 『논어』 전체 페이지를 펼쳐놓고 동시에 훑어보지 않는다.
하지만 이전 세대 Unlimited OCR은 그렇게 하지 않았다: R-SWA를 통해 추론 단계의 KV 캐시를 크게 줄였음에도, 다시 되돌아보는 과정에서는 모든 입력 페이지의 시각 정보가 여전히 어텐션 계산에 참여해야 했다.
문서가 길어질수록 계산하는 정보가 많아지는데, 그중 상당 부분은 지금 식별 중인 몇 줄의 글자와는 아무 상관이 없다——전형적인 '구경꾼'이다.
△SR-SWA는 인간이 책을 베낄 때의 국소적 집중 방식을 참고했다
인간이 책을 베끼는 방식에서 착안하여, 文心Unlimited OCR 2는 다음을 도입했다희소 참조 슬라이딩 윈도우 어텐션 메커니즘(SR-SWA)。
그 필터링은 두 단계로 이루어진다: 먼저 참고가 필요한 페이지를 걸러낸 다음, 걸러낸 페이지 중에서 실제로 관련된 국소 정보를 골라 무관한 계산을 차단한다.
전체 아키텍처를 보면, 文心Unlimited OCR 2는 이전 세대의 기본 설계를 그대로 이어갔다.
△文心Unlimited OCR 2 전체 아키텍처
책 페이지 이미지는 먼저 DeepEncoder에 들어가 모델이 처리할 수 있는 시각 Token으로 변환된다——페이지 내용과 레이아웃 특징을 기록한 데이터 카드 묶음이라고 이해할 수 있다.
이어서 언어 모델이 이러한 카드들을 바탕으로 한 단계씩 인식 결과를 생성한다.
핵심 변화는 언어 모델 내부에서 일어났다: 이전 세대에서 채택했던참조 슬라이딩 윈도우 어텐션 메커니즘(R-SWA)이 이번 세대에서 SR-SWA로 업그레이드되었다.
아키텍처 그림의 왼쪽 아래에 보여지는 것이 바로 SR-SWA의 두 단계 필터링 과정이다.
첫 번째 단계는 Page Gate로, '몇 페이지를 봐야 하는가'를 담당한다.
Page Gate는 모델이 현재 해석 중인 위치에 따라 후보 시각 정보를 관련 페이지 범위 안으로 모아, 무관한 페이지가 끼어들지 못하게 한다.
책을 베끼는 상황에 비유하면, 어느 한 페이지를 읽을 때 처음부터 책 전체를 넘겨보는 것이 아니라 이 페이지와 관련된 몇 개 페이지를 먼저 찾는 것과 같다.
두 번째 단계는 Token Sieve로, '이 페이지 안에서 어느 몇 줄을 봐야 하는가'를 담당한다.
올바른 페이지를 고르는 것은 첫걸음일 뿐이다: 이러한 페이지 안에서도 모든 시각 Token이 계산에 참여할 필요는 없다. Token Sieve는 한 번 더 필터링을 수행하여, 페이지에서 현재 내용과 더 관련된 시각 정보 블록을 골라냄으로써 장거리 시각 의존 관계를 포착한다.
아키텍처 그림의 오른쪽에는 이 과정이 펼쳐져 있다: 먼저 각 정보 블록의 요약 표현으로 관련성을 계산한 다음, TopK를 통해 점수가 가장 높고 개수가 고정된 정보 블록을 골라낸다.
고른 후에도 모델은 여전히 이 블록들 안의 구체적인 시각 정보를 살펴보며, 요약만 보는 것이 아니다.
두 단계 메커니즘이 협력함으로써, 모델은 긴 문서에서 관련 페이지를 찾을 수 있을 뿐만 아니라 매 단계 처리해야 할 시각 정보를 줄여 긴 문서 해석 효율을 높일 수 있다.
△Token Sieve 세부 사항
필터링된 시각 정보는 그림 속의Local Window(국소 슬라이딩 윈도우)와 함께 해석에 참여한다.
이 윈도우의 크기는 고정되어 있으며 최근의 문맥을 담고 있고, 생성 과정을 따라 한 칸씩 앞으로 이동하며, 모델이 방금의 내용을 이어받아 계속 써 내려가도록 담당한다.
정보 블록의 수가 고정되어 있고 국소 윈도우의 크기도 고정되어 있으므로, 매 단계 참고해야 할 정보량이 틀 안에 갇히게 된다——문서가 아무리 길어도 이 단계의 작업량은 그대로다. '책이 두꺼워질수록 글자 하나를 쓰는 데 더 힘들어지는' 상황은 발생하지 않는다.
SR-SWA가 담당하는 것은 매 단계 계산량을 줄이는 것이고, 메모리에 얼마나 많은 정보를 남겨둘지는 별개의 문제이다.
각 페이지의 이미지는 인코딩을 거치면 일련의 시각 토큰(visual Token)이 됩니다. 모델이 파싱 결과를 생성할 때 이를 참조해야 하므로 해당 KV 캐시를 저장해 두어 이후 계산에서 재사용합니다.
문서 전체를 한 번에 읽어 들여 모든 페이지의 시각 캐시를 GPU 메모리에 그대로 두면, 페이지 수가 많을수록 차지하는 공간이 커집니다.
더 곤란한 점은, 이 페이지들이 현재 계산에 전혀 사용되지 않더라도 캐시가 해제되지 않는 한 계속 GPU 메모리를 차지한다는 것입니다. 이는 책을 베껴 쓸 때 각 페이지의 초고를 한 장도 버리지 않고 책상 위에 펼쳐 놓는 것과 같아서, 책상이 아무리 커도 모자랍니다.
따라서 계산을 줄이는 동시에 저장도 줄여야 합니다.
문심Unlimited OCR 2는 이를 위해무한 디코딩 메커니즘(Unlimited-Horizon Decoding Paradigm)을 도입하여 블록 단위 처리로 캐시 점유를 제어합니다.
△블록 디코딩 개념도
이 메커니즘은 문서를 크기가 조절 가능한 페이지 블록으로 나누어 순서대로 파싱합니다. 인접한 두 블록은 한 페이지씩 겹치며, 이전 블록의 마지막 페이지가 다음 블록의 시작점, 즉 하나의 준비된 책갈피 역할을 합니다.
다음 블록으로 넘어갈 때, 모델은 겹치는 이 페이지의 시각 KV 캐시를 그대로 재사용하고, 이전 출력 끝부분의 텍스트 캐시도 유지하여 앞뒤 내용이 자연스럽게 이어지게 합니다. 더 이상 쓸모없는 나머지 페이지의 시각 캐시는 즉시 해제하여 GPU 메모리를 확보합니다.
이렇게 하면 GPU 메모리에 유지해야 하는 시각 캐시가 현재 처리 중인 블록의 규모 안으로 압축됩니다. 한 블록의 처리를 마치면 이어지는 데 필요한 정보만 남기고 다음 블록을 시작하며, 문서 전체의 시각 캐시가 처음부터 끝까지 자리를 차지할 필요가 없습니다.
*SR-SWA는 각 단계의 계산량을 줄이고, 무한 디코딩 메커니즘은 캐시 점유를 제어합니다.두 기술이 맞물려야 모델이 초장문 문서를 지속적으로 파싱할 수 있습니다. 884페이지 『반지의 제왕』을 42분 만에 읽고, 캐시는 1.77GB로 감소 기술 설명이 길었으니, 우리도 효과를 직접 확인하고 싶었습니다. 바로 문서 한 권을 던져 주었습니다:884페이지 분량의 영어판 『반지의 제왕』。
약 42분 56초 후 파싱이 완료되었습니다. 884페이지 입력에 884페이지 출력이 대응하며, 페이지당 평균 약 2.9초가 걸렸습니다. TV 드라마 한 편 볼 만한 시간 동안 『중간계(中土世界)』가 한 바퀴를 다 돌았습니다. 이렇게 긴 문서의 뒷부분에서도 인식 품질이 유지될까요? 저희는 특별히 600페이지와 750페이지의 본문을 표본 조사했는데, 인식된 텍스트가 원문과 일치했습니다. 750페이지에서도 한 글자도 틀리지 않았다는 것은 모델이 앞부분에서 「흥분해서 대충 읽지」 않았음을 보여줍니다.
전체 작업에서 시스템은 또한466곳의 페이지 간 병합을 표시했습니다. 예를 들어 책 끝에 가까운 873~874페이지에서, 페이지 나눔으로 억지로 잘린 문장도 출력에서 다시 이어졌습니다.
실측은 책 전체의 연속 파싱 과정을 보여주었고, 기술 보고서는 세 가지 질문에 답했습니다. 얼마나 많은 캐시가 필요한가, 얼마나 빠를 수 있는가, 그리고 인식 품질은 어떠한가. 백 페이지급 벤치마크 MarathonDocBench에서 팀은 표준 디코딩과 Unlimited-Horizon Decoding을 나란히 놓고 비교했습니다. 단일 시퀀스 추론 시, 블록 처리와 경계 캐시 재사용을 적용한 후최대 KV 캐시 점유가 47GB에서 1.77GB로 감소, 약 96% 절감되었습니다.*
원래 GPU 메모리에 동시에 있어야 했던 대량의 페이지 정보를 이제 분할 처리하고 적시에 해제할 수 있습니다. 여기서 1.77GB는 KV 캐시만을 의미하며, 모델 가중치 등 기타 GPU 메모리 사용량은 별도입니다.
캐시 절감 외에도 보고서는 여러 문서를 동시 처리할 때의 성능도 측정했습니다.
또 다른16-way 동시성 테스트에서 이 디코딩 방식을 적용한 후 엔드투엔드 처리량이 360에서 1315 Token/초로 향상되어, 표준 디코딩의 약 3.65배에 달했습니다.
△디코딩 방식 비교: 단일 시퀀스 최대 KV 캐시와 16-way 동시성 처리량
연차 보고서나 기술 매뉴얼을 대량으로 처리해야 하는 서비스에게 이 두 가지 변화는 모두 실질적인 의미가 있습니다. GPU 메모리 점유가 낮아지면 같은 카드 한 장으로 더 많은 작업을 넣을 수 있고, 동시성이 올라가면 단위 시간당 출력 내용도 더 많아집니다.
사용자도 신경 쓸 필요가 없습니다. 여전히 문서 전체를 제출하면, 블록 나누기와 이어 붙이기는 모델이 내부에서 처리하여 파일을 수동으로 쪼개고 분할 제출한 뒤 다시 붙이는 번거로움을 없애 줍니다.
더 빠르고 더 절약하는 것 외에도, 파싱 품질 역시 지켜야 합니다.
MPDocBench는 다중 페이지 문서의 파싱 품질을 평가합니다. 수십 페이지 길이의 문서를 상대로 모델은 내용을 정확히 식별하는 동시에 문서 구조도 복원해야 합니다.
이 테스트에서 문심Unlimited OCR 2는84.59의 종합 점수를 기록했습니다。
백 페이지 규모 문서를 추가로 테스트하기 위해 팀은 새로MarathonDocBench를 만들었다. 이 벤치마크는 100개의 문서를 포함하며, 각 문서는 103페이지에서 300페이지에 이른다. 많은 단락과 표가 다음 페이지로 이어지며, 모델이 앞뒤 내용을 올바르게 연결할 수 있는지를 시험하도록 설계되었다.
이 더 길고 까다로운 벤치마크에서 文心Unlimited OCR 2는종합 점수 77.06을 기록했다. 두 평가 모두에서 종합 점수는 보고서에 나열된 참가 모델 중 최고치였다.
△ 기술 보고서 발췌: 다중 페이지 문서 파싱 평가 결과
긴 문서 처리 속도의 변화 역시 뚜렷했다. 보고서의 백 페이지 규모 테스트에서 SR-SWA의단일 스텝 디코딩 속도는 Full Attention(전체 어텐션 메커니즘)의7.0배, 이전 세대에 사용된 R-SWA의5.6배。
에 달했다.그래프를 보면 더 직관적이다. 문서가 길어질수록 앞의 두 방식은 단일 스텝 디코딩 소요 시간이 계속 올라가는 반면, SR-SWA의 단일 스텝 소요 시간은 거의 수평선이다.
이는 모델이 토큰 하나를 생성하는 데 필요한 시간이 입력 페이지 수가 늘어난다고 해서 눈에 띄게 길어지지 않는다는 것을 의미한다. 책이 두꺼워져도 글쓰는 속도는 그대로인 셈이다.
△ 문서 길이별 단일 스텝 디코딩 지연 시간
이전 세대와 비교하면 文心Unlimited OCR 2의 페이지당 종합 점수는 거의 비슷한 수준이다.
진짜 격차가 벌어지는 지점은문서가 길어진 이후에 나타난다: 연속 처리 가능한 페이지가 더 많고, 페이지 경계를 넘는 내용을 더 정확하게 인식하며, 긴 문서 파싱의 계산 및 캐시 비용도 함께 줄어든다.
그렇다면 사람들은 어떻게 활용할까……
수백 페이지짜리 연차 보고서나 두꺼운 기술 매뉴얼을 입력할 수 있다.
특히 스캔본의 경우: 먼저 모델에 연속 파싱을 맡겨 텍스트로 변환한 뒤, 정보를 검색하고 내용을 대조하면 페이지를 나누고 수작업으로 이어 붙이는 번거로움도 상당히 줄일 수 있다.
하지만 이렇게 강력한 OCR을 두고 누가 업무용으로 쓰겠는가……
물론 소설을 읽으려고 쓰는 것이다!
OCR 3.0 시대가 왔다
물론 몇 페이지짜리 자료에서 책 한 권 전체로 범위가 넓어지면서 OCR이 해결해야 할 문제도 달라지고 있다.
기술 보고서에서 팀은 문서 파싱의 발전을OCR 1.0, 2.0, 3.0의 세 단계로 요약했다.
초기의 OCR은 분업이 명확한 파이프라인에 가까웠다. 먼저 문자의 위치를 찾고, 그 안의 내용을 인식한 뒤, 마지막으로 레이아웃을 정리하고 결과를 출력했다. 다중 페이지 파싱이 필요한 경우에는 일반적으로 한 페이지씩 처리한 후 결과를 이어 붙였다.이것이 바로 OCR 1.0이다。
각 모듈은 제 역할을 하지만, 앞 단계의 오류가 그대로 뒤까지 전달될 수 있다. 한 환절에서 재채기를 하면 뒤쪽이 모두 감기에 걸리는 식이다.
에 이르러OCR 2.0시각 언어 모델이 페이지 이미지에서 직접 파싱 결과를 생성하기 시작하면서 여러 모듈 간의 인계를 줄였다. 첫 세대 Unlimited OCR은 이러한 엔드투엔드 파싱을 수십 페이지 분량의 문서로 확장했다.
△AI 생성
문서가 수십 페이지에서 수백 페이지로 늘어나면, 연속 해석은 앞뒤 내용의 연결을 보장하는 동시에 계산 및 캐시 비용도 통제해야 한다.
文心Unlimited OCR 2는 온디맨드 참조와 청크 디코딩을 통해, 모델이 더 많은 페이지를 처리할 때도 각 단계의 계산 범위가 페이지 수에 비례해 확대되지 않고, 모든 페이지의 시각 캐시를 계속 유지할 필요도 없게 한다.
팀은 이 단계를 다음과 같이 부른다OCR 3.0: 문서 전체를 지속적으로 처리하는 것을 새로운 기술 목표로 삼는다——한 번에, 페이지 나눔 없이, 무한 해석, 다운 없이.
게다가 이 목표에는 2차원 버전도 있다.
Unlimited OCR Works라는 이름 자체가 《Fate/stay night》의 「언리미티드 블레이드 워크스」, 즉Unlimited Blade Works。
△《Fate/stay night》 애니메이션 공식 홈페이지 메인 화면
원작 설정에서 이것은 「고유결계」라 불리는 마술로, 발동하면 무수한 검이 꽂힌 특수 공간이 펼쳐진다.
전 세대 발표 후, Hugging Face 사용자 Snarcy가 이 명명 패러디를 발견하고는 그 유명한 영창을 OCR 버전으로 바꿔버렸다.
2세대에 이르자 팀은 실제로 이 개사를 기술 보고서 서론에 수록했고, Snarcy의 서명도 그대로 남겼다.
그리하여 어텐션 메커니즘과显存(비디오 메모리) 비용을 다루는 이 보고서를 펼치면, 첫 장에서 다음과 같은 영창을 보게 된다:
픽셀은 내 몸이며, 토큰은 내 피다.
픽셀은 몸이 되고, Token은 피가 된다.
I have parsed over a thousand pages.
나는 이미 천여 페이지의 문서를 읽었다.
Unknown to KV cache.
KV Cache에 알려지지 않으며,
Nor known to context limits.
컨텍스트 길이의 한계에 묶이지도 않는다.
So, as I pray: Unlimited OCR Works
그리하여 나는 여기서 기원한다: Unlimited OCR Works.
47GB에서 1.77GB로 줄었으니, 「KV 캐시에 묶이지 않는다」는 말은 헛된 영창이 아니었다.
참으로 능청스러운 중2병이다.
—끝—
@양자위(量子位) · AI 기술과 제품의 새 소식 추적
깊은 공감을 느낀 분들은 좋아요·팔로우·공유 삼연타 վ’ᴗ’ ի ❤ 환영합니다