mlmodelc: 컴파일된 모델 형식 및 컴파일이란

저자: IT Sectr 게시일: 2026-07-17 읽는 시간: 7 분

mlmodelc는 iOS, macOS 및 iPadOS를 실행하는 Apple 기기에서 실행하도록 최적화된 Core ML 모델의 컴파일된 버전입니다. 원래 .mlmodel 형식과 달리 mlmodelc 파일은 컴파일 단계를 거쳐 모델이 Core ML Runtime이 이해할 수 있는 내부 표현으로 변환됩니다. Apple Developer Documentation, 2025에 따르면 컴파일은 Xcode에서 애플리케이션을 빌드할 때와 네트워크에서 모델을 다운로드한 후 기기에서 자동으로 수행됩니다. mlmodelc는 해석 가능한 형식에 비해 더 빠른 시작과 더 적은 메모리 소비를 제공합니다.

핵심 포인트

  • mlmodelc는 Apple 기기에서 실행하기 위한 컴파일된 Core ML 모델 형식입니다.
  • .mlmodel에서 mlmodelc로의 컴파일은 앱 빌드 시 Xcode에서 또는 기기에서 MLModel.compile()을 통해 수행됩니다.
  • 형식에는 Model Description, MIL의 바이너리 계산 그래프 및 weights.bin 파일이 포함됩니다.
  • mlmodelc는 사전 그래프 최적화를 통해 30~60%의 시작 가속을 제공합니다.
  • Core ML Runtime을 통해 Apple Neural Engine, GPU 및 CPU를 지원합니다.

mlmodelc란 무엇이며 .mlmodel과 어떻게 다른가

mlmodelc는 Apple 기기에서 직접 실행하도록 설계된 컴파일된 바이너리 Core ML 모델 형식입니다. 원래 .mlmodel 형식은 protobuf 모델 설명, 배열 형태의 가중치 및 JSON 형식의 메타데이터를 포함하는 패키지입니다. 컴파일 중에 이 구조는 특정 하드웨어 플랫폼에 최적화된 컴팩트한 바이너리 표현으로 변환됩니다.

mlmodelc의 주요 차이점은 추론 중에 해석 단계가 없다는 것입니다. Core ML Runtime은 protobuf 스키마를 구문 분석하거나 계산 그래프를 동적으로 구축하지 않습니다. 이러한 모든 단계는 컴파일 타임에 수행됩니다. 이는 아키텍처 복잡성에 따라 모델의 첫 로드 시간을 30%에서 60%까지 개선합니다.

WWDC 2023 세션 “Core ML Tools 및 모델 최적화”에 따르면 컴파일에는 부동 소수점 연산 최적화, 연속 레이어 병합 및 Apple Neural Engine이 이해할 수 있는 형식으로의 변환이 포함됩니다. 개발자가 이 프로세스를 수동으로 관리할 필요는 없습니다. Xcode가 빌드 타임에 자동으로 컴파일을 수행합니다.

mlmodelc와 .mlmodel 비교

특성.mlmodelmlmodelc
저장 형식패키지 (protobuf + 가중치)바이너리, 플랫폼별
실행 준비 상태컴파일 필요추론 준비 완료
디스크 크기원래 크기10~20% 더 작음
첫 실행 속도느림 (파싱 + 컴파일)즉시 시작
ANE 지원추가 최적화 필요자동

mlmodelc 컴파일 프로세스 작동 방식

모델의 mlmodelc로의 컴파일은 세 단계를 거칩니다. 첫 번째 단계에서 Core ML Tools는 .mlmodel의 protobuf 사양을 읽고 MIL(Model Intermediate Language) 형식으로 내부 계산 그래프를 구축합니다. 도구는 각 작업의 대상 기기와의 호환성을 확인하고 지원되지 않는 레이어를 CPU 실행용으로 표시합니다.

두 번째 단계에서는 그래프 최적화가 수행됩니다: 연속 레이어 병합(컨볼루션 + 배치 정규화 → 융합 컨볼루션), 데드 노드 제거, FP32에서 FP16 또는 INT8로의 가중치 양자화. Apple Engineering Report “Core ML Optimization Pipeline”(2024)에 따르면 레이어 병합은 추론 작업 수를 최대 40%까지 줄입니다.

세 번째 단계는 바이너리 표현 생성입니다. 최적화된 그래프는 독점 Core ML Runtime 형식으로 직렬화됩니다. 가중치는 CPU 캐시 라인에 맞춰 정렬되어 저장되며, 메타데이터는 빠른 액세스를 위해 별도의 인덱스에 저장됩니다. 결과는 .mlmodelc 확장자를 가진 폴더로, 앱 번들에 포함될 준비가 되었습니다.

mlmodelc의 내부 아키텍처

mlmodelc 구조에는 세 가지 주요 구성 요소가 포함됩니다. Model Description에는 모델 메타데이터(입출력 유형, 차원, 텐서 이름 및 전처리 매개변수)가 포함됩니다. 이 섹션은 Core ML API와의 호환성을 위해 JSON 유사 형식으로 저장됩니다.

Program은 내부 MIL 언어로 된 계산 그래프의 바이너리 표현입니다. Apple은 TensorFlow의 MLIR 또는 ONNX와 유사한 중간 표현으로 MIL을 사용합니다. MIL 프로그램은 각각 유형, 입력 및 출력 텐서, 속성을 가진 작업으로 구성됩니다. MIL 형식은 Apple Neural Engine에서 효율적으로 실행되도록 최적화되었습니다.

세 번째 구성 요소는 weights.bin입니다. 모델의 모든 훈련된 가중치를 포함하는 파일입니다. 가중치는 최적의 캐시 로딩을 위해 64바이트로 정렬되어 저장됩니다. 컴파일 중에 양자화가 지정된 경우 가중치는 FP16 또는 INT8로 저장되어 파일 크기를 줄이고 이러한 형식을 하드웨어 지원하는 Apple A17 및 M4 칩에서 추론을 가속화합니다.

애플리케이션에 mlmodelc 배포 방법

Apple은 애플리케이션에 mlmodelc를 포함하는 세 가지 방법을 지원합니다. 첫 번째는 번들에 정적 포함입니다. mlmodelc 파일을 Xcode 프로젝트에 추가하면 빌드 시 .app에 포함됩니다. 이 방법은 100MB까지의 소규모 모델에 최적이며 첫 실행을 위해 네트워크 액세스가 필요하지 않습니다.

두 번째 방법은 MLModel.compile(at:)을 통한 네트워크 다운로드 및 기기에서 컴파일입니다. 개발자가 .mlmodel을 다운로드하여 임시 디렉토리에 넣고 Core ML 컴파일러를 호출합니다. 결과는 mlmodelc이며 이후 실행을 위해 캐시할 수 있습니다. Core ML용 Apple HIG에 따르면 이 방법은 100MB 이상의 모델과 새 앱 버전을 게시하지 않고 동적으로 업데이트해야 하는 경우에 권장됩니다.

세 번째 방법은 필요에 따라 다운로드되는 모델을 위한 온디맨드 리소스(On-Demand Resources)입니다. Apple ODR을 사용하면 mlmodelc를 클라우드에 저장하고 필요할 때만 다운로드할 수 있습니다. 이는 사용자가 몇 개의 모델만 사용하는 수십 개의 모델을 가진 애플리케이션에서 일반적인 시나리오입니다.

기기에서 비동기 컴파일

네트워크에서 모델을 다운로드할 때 컴파일 시간을 고려하는 것이 중요합니다. MLModel.compile(at:)은 동기적으로 실행되며 A12 및 이전 기기에서 중간 크기 모델의 경우 최대 5~10초 동안 UI를 차단할 수 있습니다. 백그라운드 스레드에서 컴파일을 수행하고 로딩 표시기를 통해 사용자에게 진행 상황을 알리는 것이 좋습니다.

mlmodelc의 성능 이점

mlmodelc의 주요 이점은 모델 로딩 속도입니다. Apple Performance Benchmarks(2024)에 따르면 100MB ResNet-50 모델은 .mlmodel에 비해 mlmodelc 형식에서 58% 더 빠르게 로드됩니다. 이는 여러 모델을 순차적으로 작업하는 애플리케이션에서 특히 중요합니다.

두 번째 이점은 피크 메모리 소비 감소입니다. .mlmodel을 로드할 때 Core ML Runtime은 protobuf 구문 분석을 위한 버퍼와 그래프 컴파일을 위한 두 번째 버퍼를 할당합니다. mlmodelc는 이러한 단계를 건너뛰고 직접 시작됩니다. 컴퓨터 비전 모델의 경우 피크 메모리 소비가 30~45% 감소합니다.

세 번째는 하드웨어 최적화입니다. coremlc 컴파일러는 빌드 타임에 대상 기기를 분석하고 ANE, GPU 및 CPU 간의 최적의 작업 분할을 선택합니다. 빌드가 유니버설인 경우 컴파일은 첫 실행 시 기기로 연기되고 결과는 후속 세션을 위해 캐시됩니다.

Swift에서 mlmodelc 작업을 위한 코드 예제

앱 번들에서 컴파일된 모델을 로드하는 예제입니다. 모델의 URL을 지정하고 MLModel.load(contentsOf:)를 호출하기만 하면 됩니다. Core ML Runtime이 확장자로 mlmodelc 형식을 자동으로 감지하고 초기화를 수행합니다.

swift
import CoreML

guard let modelURL = Bundle.main.url(
    forResource: "MyModel",
    withExtension: "mlmodelc"
) else { return }

let model = try await MLModel.load(contentsOf: modelURL)
let prediction = try await model.prediction(from: input)

기기에서 .mlmodel을 컴파일하고 캐싱하는 예제입니다. MLModel.compile(at:)을 사용하여 mlmodelc의 임시 경로를 가져온 다음 캐시 디렉토리로 복사합니다.

swift
let sourceURL = FileManager.default.temporaryDirectory
    .appendingPathComponent("MyModel.mlmodel")

let compiledURL = try await MLModel.compile(at: sourceURL)

let cacheURL = FileManager.default.urls(
    for: .cachesDirectory, in: .userDomainMask
)[0].appendingPathComponent("MyModel.mlmodelc")

try FileManager.default.copyItem(at: compiledURL, to: cacheURL)

자주 묻는 질문

iOS 시뮬레이터에서 mlmodelc를 사용할 수 있나요?

네, mlmodelc는 iOS 시뮬레이터에서 작동하지만 ANE 가속 없이 작동합니다. Neural Engine은 Mac에 없는 하드웨어 구성 요소이기 때문입니다. 추론은 Accelerate 프레임워크를 통해 CPU에서 수행됩니다.

mlmodelc와 .mlpackage의 차이점은 무엇인가요?

mlmodelc는 실행을 위한 컴파일된 형식입니다. .mlpackage는 Xcode 15+용 컨테이너로 원본 모델과 여러 구성을 결합합니다. .mlpackage는 앱 빌드 시 mlmodelc로 컴파일됩니다.

모델이 이미 mlmodelc로 컴파일되었는지 확인하는 방법은?

파일 확장자를 확인하세요: .mlmodelc. 모델의 확장자가 .mlmodel이면 컴파일되지 않은 것입니다. Xcode에서 빌드한 후 준비된 mlmodelc는 앱의 DerivedData 폴더에 있습니다.

mlmodelc를 .mlmodel로 역컴파일할 수 있나요?

아니요, 역컴파일은 존재하지 않습니다. mlmodelc는 Apple의 바이너리 독점 형식입니다. 원본 .mlmodel은 버전 관리 시스템에 별도로 보관됩니다.

mlmodelc는 INT8 양자화 모델을 지원하나요?

네, mlmodelc는 Core ML Tools를 통해 INT8 양자화를 지원합니다. 컴파일 중에 가중치가 FP32에서 INT8로 변환되어 크기가 4분의 1로 줄어들고 ANE에서 최대 2배 속도 향상을 제공합니다.

요약

  • mlmodelc는 Apple 기기에서 실행하도록 최적화된 컴파일된 Core ML 모델 형식입니다.
  • 컴파일에는 대상 플랫폼에 대한 그래프 최적화, 레이어 병합 및 가중치 양자화가 포함됩니다.
  • 이 형식은 로딩 시간 30~60% 감소와 피크 메모리 소비 30~45% 감소를 제공합니다.
  • 배포는 정적 번들, 컴파일과 함께 네트워크 다운로드 또는 온디맨드 리소스를 통해 가능합니다.
  • mlmodelc는 Core ML Runtime을 통해 Apple Neural Engine, GPU 및 CPU에서 실행을 지원합니다.
  • 로드하려면 오류 처리를 포함하여 백그라운드 스레드에서 MLModel.load(contentsOf:)를 사용하세요.
  • 모델의 성능 모니터링은 Core ML 템플릿을 사용하여 Instruments를 통해 수행됩니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기