[iOS/CoreML] Core ML로 구현하는 온디바이스 AI

2025. 5. 11. 23:10·Apple/iOS
목차
  1. 온디바이스 ML의 의미와 중요성
  2. Core ML 아키텍처와 핵심 개념
  3. MLModel 객체
  4. 모델 입출력: MLFeatureValue, MLDictionaryFeatureProvider
  5. 텐서(Tensor)란?
  6. 모델 변환 및 최적화 with CoreMLTools
  7. 변환이 필요한 이유
  8. 변환 시 주요 옵션 및 최적화 전략
  9. 압축 및 경량화 기법
  10. Float16 변환 (정밀도 절반 -> 크기 절반)
  11. 정적 리튬 분석 (Constant folding)
  12. Layer Fusion
  13. Core ML 최신 기능 요약 (WWDC 2024 기준)
  14. Apple의 오픈소스 연구 생태계
728x90
반응형

안녕하세요! 피피아노입니다 🎵

 

WWDC 24 세션 중 "Deploying Machine Learning Models on Device with Core ML" 세션에서 머신 러닝 모델을 실제 iOS 앱에 통합하고, 성능 최적화를 이루는 방법에 대해서 소개를 하고 있습니다. 이번 포스팅에서는 해당 세션의 주요 내용을 정리를 해보려고 합니다.

 

그럼 바로 시작하겠습니다!

온디바이스 ML의 의미와 중요성

Apple의 모든 플랫폼(iOS, iPadOS, watchOS, macOS, visionOS)은 수많은 온디바이스 AI 기능으로 구동되고 있습니다. 대표적으로는 아래와 같은 예시가 있습니다.

  • Vision Pro의 손 제스처 인식
  • iPhone의 인물 사진 모드
  • Apple Watch의 심전도 분석
  • Siri의 자연어 이해 개선

iOS에서 머신 러닝은 주로 Core ML을 사용하게 되는데 Apple은 이 Core ML을 온디바이스에서 처리를 할 수 있도록 제작하였습니다. 온디바이스 머신 러닝의 장점은 아래처럼 정리를 해볼 수 있습니다.

  • 오프라인 환경에서도 사용 가능
  • 데이터가 클라우드에 전송되지 않기 때문에 개인정보 보호 강화
  • Apple Silicon의 CPU, GPU, Neral Engine을 모두 활용하는 고성능 추론

Core ML 아키텍처와 핵심 개념

MLModel 객체

Core ML 모델의 중심이 되는 클래스로, .mlmodel -> .mlmodelc 형식으로 컴파일된 모델을 로딩하여 사용할 수 있습니다.

let model = try MyModel(configuration: MLModelConfiguration())

 

모델 입출력: MLFeatureValue, MLDictionaryFeatureProvider

Core ML은 입력 데이터를 텐서(Tensor) 형식으로 처리합니다. 예를 들어 이미지, 오디오, 숫자 배열 등과 같은 데이터는 모두 텐서로 변환되어야 모델이 이해할 수 있습니다.

 

텐서(Tensor)란?

텐서란 간단히 말하면, 다차원 배열입니다.

  • 1D 텐서 → 벡터 (e.g. [1, 2, 3])
  • 2D 텐서 → 행렬 (e.g. [[1, 2], [3, 4]])
  • 3D 이상 → 이미지, 오디오 등 고차원 데이터 

Core ML은 이를 위해 MLMultiArray, MLShapedArray, MLTensor 등의 구조를 제공합니다.

 

모델 변환 및 최적화 with CoreMLTools

모델을 학습한 뒤 iOS/macOS 앱에서 실행하려면, 반드시 Core ML 포맷으로 변환해야 합니다. Apple은 이를 위해 Python 기반의 도구인 coremltools를 제공합니다.

 

변환이 필요한 이유

딥러닝 모델은 대부분 PyTorch, TensorFlow, JAX 등의 포맷으로 학습됩니다. 그러나 Core ML은 Apple 기기에서 고성능 추론을 위해 .mlmodel이라는 자체 모델 포맷을 사용합니다.

 

coremltools는 이러한 모델을 Core ML 포맷으로 변환해주는 브릿지 역할을 합니다.

import coremltools as ct
import torch

# 예시 PyTorch 모델
model = torch.jit.load("MyModel.pt")
model.eval()

# 입력 텐서 형태 명시
example_input = torch.rand(1, 3, 224, 224)

# 변환
mlmodel = ct.convert(
    model,
    inputs=[ct.TensorType(shape=example_input.shape)]
)
mlmodel.save("MyModel.mlmodel")

위 코드를 통해 .mlmodel 파일을 생성하면, Xcode에 추가 시 자동으로 .mlmodelc로 컴파일되어 앱에 통합할 수 있습니다.

 

변환 시 주요 옵션 및 최적화 전략

Core ML은 단순히 변환하는 데 그치지 않고, 아래와 같은 다양한 최적화 옵션을 제공하고 있습니다.

옵션 설명
compute_units .cpuOnly, .cpuAndGPU, .all (Neural Engine까지) 선택
minimum_deployment_target 지원할 최소 OS 버전 (예: iOS 15, macOS 12) 지정
precision float32 → float16 변환으로 모델 크기와 메모리 최적화
predicted_probabilities_output 출력 노드 설정 시 softmax 등의 레이블 포함 여부

 

압축 및 경량화 기법

coremltools.optimize 모듈을 통해 다음과 같은 압축을 수행할 수 있습니다.

Float16 변환 (정밀도 절반 -> 크기 절반)

from coremltools.optimize import convert_neural_network_weights_to_fp16
mlmodel_fp16 = convert_neural_network_weights_to_fp16(mlmodel)
mlmodel_fp16.save("MyModel_fp16.mlmodel")

 

정적 리튬 분석 (Constant folding)

계산 그래프 상의 불필요한 연산을 사전에 정리하여 추론 속도 향상 

Layer Fusion

BatchNorm + ReLU 등을 하나의 연산으로 합쳐 연산 속도 개선

 

실전에서는 float16 + layer fusion 조합이 가장 효과적인 경량화 전략입니다.

 

Core ML 최신 기능 요약 (WWDC 2024 기준)

  • Transformer 최적화: attention, layer norm 연산이 Metal 기반으로 고속화됨
  • 상태 유지 모델 지원: LLM 실행 시 key-value 캐시를 통한 디코딩 성능 향상
  • 멀티 input/output 처리 강화: 복잡한 모델 구조도 이제 안전하게 지원
  • MLTensor 도입: 그래프 연결 최적화 및 유연한 tensor 구성 가능

Apple의 오픈소스 연구 생태계

Apple은 최근 ML 연구를 오픈소스로도 공유하고 있다고 합니다. 

 

  • MLX: Swift / Python 기반 고성능 ML 연구 프레임워크
  • CoreNet: 새로운 모델 아키텍처 실험을 위한 툴킷
  • OpenELM: Core ML 형식으로도 실행 가능한 경량 LLM 모델

모두 Apple Silicon에 최적화되어 있어 iOS 앱에 직접 배포 가능합니다.

 

 

이제 변환된 모델을 Xcode 프로젝트에 추가하고, MLModel 클래스를 사용해 실제 앱에서 모델을 로딩하고 추론을 실행할 수 있습니다.


감사합니다.

 

잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!

궁금하신 부분은 댓글로 질문 부탁드립니다!

    

728x90
반응형

'Apple > iOS' 카테고리의 다른 글

[iOS] CocoaPods 알아보기  (7) 2024.08.13
[iOS] Live Activity 알아보기  (0) 2024.08.09
[iOS] RESTful API 완벽 이해하기  (0) 2024.07.22
[iOS] Core Data는 뭘까?  (0) 2024.05.24
[iOS] Open API 연결하는 방법  (0) 2024.05.19
  1. 온디바이스 ML의 의미와 중요성
  2. Core ML 아키텍처와 핵심 개념
  3. MLModel 객체
  4. 모델 입출력: MLFeatureValue, MLDictionaryFeatureProvider
  5. 텐서(Tensor)란?
  6. 모델 변환 및 최적화 with CoreMLTools
  7. 변환이 필요한 이유
  8. 변환 시 주요 옵션 및 최적화 전략
  9. 압축 및 경량화 기법
  10. Float16 변환 (정밀도 절반 -> 크기 절반)
  11. 정적 리튬 분석 (Constant folding)
  12. Layer Fusion
  13. Core ML 최신 기능 요약 (WWDC 2024 기준)
  14. Apple의 오픈소스 연구 생태계
'Apple/iOS' 카테고리의 다른 글
  • [iOS] CocoaPods 알아보기
  • [iOS] Live Activity 알아보기
  • [iOS] RESTful API 완벽 이해하기
  • [iOS] Core Data는 뭘까?
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (202) N
      • Apple (120) N
        • iOS (22)
        • visionOS (4)
        • Swift (65)
        • UIKit (2)
        • SwiftUI (21) N
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    visionOS
    메서드
    함수
    combine
    Xcode
    Vision Pro
    옵셔널
    스위프트
    비동기
    코딩테스트
    변수
    티스토리챌린지
    ios
    제어문
    연산자
    swiftUI
    디자인패턴
    오블완
    Optional
    배열
    자바스크립트
    Initializers
    이니셜라이저
    SWIFT
    클래스
    UIKit
    프로퍼티 래퍼
    네트워크
    운영체제
    프로세스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[iOS/CoreML] Core ML로 구현하는 온디바이스 AI

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.