← AI Document Processing
🚀

08 / 11

배포 & 운영

Tesseract/LayoutLM 배치, 한글 문서 적용, S3 권한, 백업

BatchKorean NLPS3Backup
개요환경 구성OCR 파이프라인모델 학습모델 / 데이터 처리LayoutLM 분석성능 관리배포 & 운영PaddleOCR 도입BIO 라벨 & 학습 개선문제 해결

배포 & 운영 개요

운영 목표

PoC 단계에서 검증된 Document AI 파이프라인을 안정적으로 운영하기 위한 배포 전략. Tesseract/PaddleOCR 배치 추론, 한글 문서 지원, S3 권한 관리, 백업 체계를 포함.

운영 아키텍처

PDF UploadS3 Bucket전처리 (Lambda)OCR 배치LayoutLM 추론후처리JSON Output

Tesseract / PaddleOCR 배치 추론

대량 문서 처리를 위한 배치 추론 파이프라인. 단건 처리 대비 처리량을 극대화하고, OCR 엔진별 특성에 맞는 배치 전략을 적용.

Tesseract 배치

1.

PDF → PNG 변환 (PyMuPDF, 300 DPI)

2.

이미지별 순차 OCR 처리

3.

텍스트 + bbox JSON 저장

4.

Label Studio Task 자동 생성

PaddleOCR 배치

1.

언어별 모델 자동 분기 (latin/korean)

2.

Detection → Recognition 2단계 처리

3.

배치 단위 GPU 추론 (batch_size=8)

4.

결과 → LayoutLM 입력 포맷 변환

배치 처리 성능

6~9초/문서

단건 처리

~60초

배치 처리 (10건)

~40%↑

처리량 향상

batch_predict.py 핵심 로직

import glob
from pathlib import Path

def batch_predict(input_dir: str, output_dir: str):
    pdf_files = glob.glob(f"{input_dir}/*.pdf")
    
    for pdf_path in pdf_files:
        # 1. PDF → PNG 변환
        images = convert_pdf_to_images(pdf_path, dpi=300)
        
        # 2. OCR 처리 (PaddleOCR)
        ocr_results = []
        for img in images:
            lang = detect_language(img)
            result = paddle_ocr.ocr(img, lang=lang)
            ocr_results.append(result)
        
        # 3. LayoutLM 추론
        predictions = layoutlm_predict(ocr_results, images)
        
        # 4. 후처리 & JSON 저장
        structured = post_process(predictions)
        save_json(structured, output_dir / Path(pdf_path).stem)

LayoutLM 배치 추론

OCR 결과를 LayoutLM 모델에 입력하여 각 토큰에 라벨을 예측. CPU 서버에서도 안정적으로 동작하며, GPU 대비 약 2~3배 느리지만 운영 비용 절감.

CPU 추론 (운영)

인스턴스: t3a.xlarge (4 vCPU, 16GB)

추론 속도: ~3초/문서

월 비용: ~$120 (상시 운영)

GPU 추론 (학습 겸용)

인스턴스: ml.g4dn.xlarge (T4 GPU)

추론 속도: ~1초/문서

월 비용: ~$9 (25분/일 기준)

운영 전략: CPU 서버에서 상시 추론 + GPU 서버는 학습/재학습 시에만 가동하여 비용 최적화. 대량 배치 처리가 필요한 경우에만 GPU 서버를 추론에 활용.

한글 문서 적용

기존 영문 Invoice 중심 파이프라인을 한글 문서로 확장. OCR 엔진, 토크나이저, 후처리 로직 각각에 한글 지원을 추가.

OCR 엔진 한글 지원

엔진한글 지원비고
Tesseractkor 언어팩tessdata에서 kor.traineddata 설치
PaddleOCRkorean 모델rec_model 한글 전용 모델 분기
EasyOCRko 언어 코드Reader(['ko', 'en']) 멀티 언어

LayoutLM 토크나이저 한글 처리

LayoutLM는 RoBERTa 기반 토크나이저(BPE)를 사용. 한글은 자모 단위로 분리되어 sub-token이 많아지는 특성이 있음. max_length 512 제한에 더 빨리 도달할 수 있어 주의 필요.

# 한글 토큰화 예시
"인보이스" → ["▁", "인", "보", "이", "스"]  # 5 tokens
"Invoice"  → ["▁Invoice"]                    # 1 token

# → 한글 문서는 토큰 소비가 3~5배 많음

한글 후처리 규칙

자모 분리 복원: ㅎㅏㄴㄱㅜㄱ → 한국 (NFC 정규화)

조사 처리: '주식회사의' → '주식회사' (조사 제거)

숫자+한글 혼합: '1,234원' → amount: 1234, currency: KRW

주소 정규화: '서울특별시 강남구' → 표준 주소 포맷

한글 문서 적용 시 고려사항

한글 전용 학습 데이터 최소 50~100개 문서 필요. 영문 모델과 별도 checkpoint로 관리하여 영문 성능 저하(catastrophic forgetting) 방지. 언어 감지 → 모델 분기 로직 필수.

S3 권한 설정

Document AI 파이프라인에서 S3는 학습 데이터, 모델 checkpoint, 추론 결과, 원본 PDF 등 모든 데이터의 중앙 저장소 역할. 최소 권한 원칙(Least Privilege)에 따라 버킷별 IAM 정책을 분리.

S3 버킷 구조

s3://document-ai-{env}/
├── raw-documents/          # 원본 PDF 업로드
│   └── {project_id}/{date}/
├── preprocessed/           # 전처리된 PNG 이미지
│   └── {project_id}/{doc_id}/
├── ocr-results/            # OCR 추출 결과 (JSON)
│   └── {project_id}/{doc_id}/
├── train-data/             # Label Studio export 학습 데이터
│   └── {version}/
├── models/                 # 학습된 모델 checkpoint
│   └── {model_name}/{checkpoint}/
├── predictions/            # LayoutLM 추론 결과
│   └── {project_id}/{doc_id}/
└── backups/                # 정기 백업
    └── {date}/

역할별 IAM 정책

역할허용 경로권한
PDF Uploader (Lambda)raw-documents/, preprocessed/PutObject, GetObject
OCR Workerpreprocessed/, ocr-results/GetObject, PutObject
LayoutLM 추론ocr-results/, models/, predictions/GetObject, PutObject
학습 서버 (GPU)train-data/, models/GetObject, PutObject, DeleteObject
Label Studioraw-documents/, preprocessed/, train-data/GetObject, PutObject, ListBucket
백업 스케줄러backups/PutObject, ListBucket

암호화

• SSE-S3 기본 암호화 활성화

• 모델 checkpoint: SSE-KMS 적용

• 전송 중 암호화: HTTPS 강제

접근 제어

• 퍼블릭 액세스 전면 차단

• VPC Endpoint 통한 프라이빗 접근

• S3 Access Logging 활성화

백업 전략

학습 데이터와 모델 checkpoint는 재생산이 어려운 핵심 자산. 데이터 유실 방지를 위한 다층 백업 전략을 적용.

🧠

모델 Checkpoint 백업

학습 완료 시 자동으로 S3 models/ 경로에 업로드

최근 5개 checkpoint 유지, 이전 버전은 S3 Glacier로 이동

checkpoint 메타데이터 (epoch, f1, accuracy) JSON으로 함께 저장

모델 레지스트리: MLflow에 등록하여 버전 관리

📦

학습 데이터 백업

Label Studio export 데이터: 주 1회 자동 백업

S3 버전 관리(Versioning) 활성화로 실수 삭제 방지

Cross-Region Replication: Seoul → Oregon 복제 (DR 연계)

보존 기간: 학습 데이터 1년, 원본 PDF 6개월

💾

운영 데이터 백업

Label Studio PostgreSQL DB: 일 1회 pg_dump

설정 파일 (label_config, ML backend 설정): Git 관리

Docker 이미지: ECR에 태그별 보관

로그: CloudWatch Logs → S3 아카이브 (30일 보존)

백업 스케줄

대상주기방식보존
모델 checkpoint학습 완료 시S3 자동 업로드최근 5개 + Glacier
학습 데이터주 1회 (일요일)S3 Sync + Versioning1년
Label Studio DB일 1회 (03:00)pg_dump → S330일
원본 PDF업로드 즉시S3 Versioning6개월
추론 결과실시간S3 저장90일

MLflow 운영 연동 (진행 중)

성능 측정 체계에서 구축한 MLflow Tracking Server를 운영 환경에 연동. 모델 배포 시 MLflow Model Registry를 통해 버전 관리 및 스테이징/프로덕션 전환을 자동화.

MLflow 운영 연동 흐름

학습 완료MLflow 메트릭 기록Model Registry 등록Staging 검증Production 전환

None

학습 직후 자동 등록

Staging

테스트 데이터 검증 통과

Production

운영 배포 승인 완료

자동 배포 조건 (예정)

• F1 Score ≥ 0.95 (기존 Production 모델 대비)

• eval_accuracy ≥ 0.98

• 테스트 데이터셋 전체 통과 (regression test)

도메인별 학습 데이터 분기 (진행 예정)

고객사/문서 유형별로 특화된 모델을 운영하기 위한 학습 데이터 분기 전략. Base 모델에서 도메인별 Fine-tuning을 수행하여 각 도메인에 최적화된 모델을 생성.

모델 분기 전략

Base Model도메인별 Fine-tuning

해운 Invoice

BL_NUMBER, POL, POD, VESSEL

일반 Invoice

TOTAL_AMOUNT, TAX, DUE_DATE

기간 Invoice

DURATION, START/END_DATE

분기 기준

도메인특화 라벨최소 학습 데이터상태
해운/물류 InvoiceBL_NUMBER, POL, POD, VESSEL_VOYAGE150+ 문서운영 중
일반 비용 InvoiceTOTAL_AMOUNT, TAX_AMOUNT, CURRENCY100+ 문서데이터 수집 중
기간/구독 InvoiceDURATION_VALUE, START_DATE, END_DATE50+ 문서계획
한글 문서전체 라벨 (한글 토크나이저)50~100 문서계획

운영 모니터링

파이프라인 각 단계의 상태를 모니터링하여 장애를 조기에 감지하고 대응.

파이프라인 모니터링

OCR 처리 성공/실패율

LayoutLM 추론 latency (p50, p95, p99)

배치 처리 큐 대기 시간

일일 처리 문서 수

모델 성능 모니터링

추론 confidence score 분포

low-confidence 문서 비율 추적

주간 성능 리포트 (F1, Precision, Recall)

데이터 드리프트 감지 (예정)

인프라 모니터링

CPU/메모리 사용률 (CloudWatch)

S3 스토리지 사용량

GPU 사용률 (학습 서버)

디스크 I/O 및 네트워크 트래픽

알람 설정

OCR 실패율 > 5% → Slack 알림

추론 latency p95 > 10초 → 경고

디스크 사용률 > 80% → 긴급 알림

배치 큐 적체 > 100건 → 경고

Summary

Tesseract/PaddleOCR 배치 추론으로 대량 문서 처리 (10건 ~60초)

CPU 상시 추론 + GPU 학습 전용 운영으로 비용 최적화

한글 문서 지원: OCR 엔진 + 토크나이저 + 후처리 한글 확장

S3 최소 권한 원칙 기반 역할별 IAM 정책 분리

다층 백업: checkpoint 자동 업로드, 학습 데이터 주간 백업, DB 일간 백업

MLflow Model Registry 기반 모델 버전 관리 및 자동 배포 (진행 중)

도메인별 특화 모델 분기 전략으로 정확도 극대화 (예정)

성능 관리PaddleOCR 도입