CoreML을 활용한 Stable Diffusion 탐험기

버질·2024년 12월 6일

1.On-Device Machine Learning의 이해

정의: 모바일 기기에서 Machine Learning 모델을 실행하는 기술.

장점:
낮은 레이턴시: 서버와의 통신 없이 로컬에서 실행.
프라이버시 강화: 데이터가 클라우드로 전송되지 않아 개인 정보 보호.
네트워크 독립성: 인터넷 연결 없이도 ML 기능 사용 가능.
활용 예시:
React Native 기반 카메라 앱에서 셀카 필터 즉시 적용.
사용자가 자신의 얼굴 데이터를 클라우드에 업로드하지 않도록 보장.

2. CoreML이란?

Apple의 On-Device Machine Learning 프레임워크
Vision, Natural Language, Speech, Sound Analysis 등 다양한 API 제공.
Hugging Face 모델(Stable Diffusion, Llama 등)을 CoreML로 변환하여 사용 가능.
특징:
Apple의 하드웨어(특히 Neural Engine)를 최적 활용.
저전력, 고효율 학습 및 추론 가능.

3. Stable Diffusion 모델

Diffusion Models의 원리:
노이즈로부터 이미지를 복원하는 과정을 학습.
열역학의 확산 개념에서 영감을 받음.
Stable Diffusion:
효율적 모델 아키텍처(Latent Diffusion).
기존 GANs를 대체하며 다양한 결과물을 생성 가능.
Zero-shot editing 기능 제공.

4. PoC (Proof of Concept) 진행 과정

1) React Native 프로젝트 생성
새로운 라이브러리 생성:
npx create-react-native-library@latest ReactNativeMLStableDiffusion
2) Native Modules 연동
의존성 관리 도구:
Cocoapods 활용.
Git submodule로 Apple의 Stable Diffusion 라이브러리 추가.
bash
코드 복사
git submodule add -f https://github.com/apple/ml-stable-diffusion ml-stable-diffusion
3) CoreML 모델 설정
Hugging Face 오픈소스 모델 정의:

export const HuggingFaceDiffusionModel = {
  v14Palettized: new HuggingFaceModelInfo({
    modelId: 'apple/coreml-stable-diffusion-1-4-palettized',
    supportsEncoder: true,
    quantized: true,
  }),
};

양자화(Quantization):
모델 크기를 줄이고 On-Device 성능 최적화.
Trade-off: 크기가 줄어들수록 결과물 퀄리티 감소.
4) 모델 다운로드 및 로드
Hugging Face 모델 다운로드 및 압축 해제:

RNBlobUtil.config({ path: getDownloadModelPath(model) })
  .fetch("GET", model.getBestUrl())
  .then(async (result) => {
    const unzippedPath = await unzip(result.path(), getUnzippedModelPath(model));
    await StableDiffusion.loadModel(getCompiledModelPath(unzippedPath));
  });

iOS Native 코드로 모델 로드:

let config = MLModelConfiguration()
config.computeUnits = .cpuAndNeuralEngine
let pipelines = try StableDiffusionPipeline(resourcesAt: url, configuration: config)

5) 이미지 생성
사용자 입력값(prompt)과 옵션(seed, stepCount)을 받아 이미지 생성:

let config = StableDiffusionPipeline.Configuration(prompt: prompt)
config.schedulerType = .dpmSolverMultistepScheduler
config.stepCount = stepCount
config.seed = seed
let image = try pipelines.generateImages(configuration: config).first

5. PoC 결과

UI 구성:
모델 다운로드 상태 표시 Progress Bar.
프롬프트 입력창.
Step Count 및 Seed 값 슬라이더.
이미지 생성 Progress Bar.
생성된 이미지 예시:
Prompt: “Hyper masterpiece of dog in 4k”.
결과물: 고퀄리티 이미지 생성 성공.

6. On-Device 적용 한계점

퀄리티 부족:
Cloud 모델보다 낮은 생성 퀄리티.
Quantization으로 인해 이미지 디테일 손실.
리소스 소비:
모바일 기기 발열, 전력 소모, 과다 메모리 사용 가능성.
모델 다운로드 시간:
모델 크기가 1GB 이상으로, 사용자 대기 시간이 길어질 수 있음.

7. On-Device의 가능성과 미래

미래 가능성:
Text Recognition API처럼 모바일에서도 보편화 가능성.
사내 민감 데이터를 활용한 "코딩 전용 LLM" 등 활용 사례.
한계 예상:
On-Device와 클라우드 모델 간 성능 격차는 지속될 가능성.

8. 느낀 점

Huckleberry:
"On-Device ML을 접하면서 AI와 Mobile의 접점 가능성을 발견."
AI와 Native(Swift, Kotlin) 학습을 통해 더 발전된 엔지니어로 성장 다짐.
Sung:
"다른 분야 동료와 협력하며 ML에 대한 통찰과 동기부여를 얻었다."
On-Device 배포 가능한 수준의 ML 아이디어를 제품에 도입해보고 싶음.

마무리

이번 PoC를 통해 CoreML의 잠재력과 Stable Diffusion의 가능성을 확인했습니다. On-Device ML은 여전히 초기 단계지만, 모바일 AI 기술의 발전이 기대됩니다. 앞으로 제품에 실질적으로 적용할 수 있는 ML 아이디어를 구체화하고 협업을 이어갈 계획입니다. 🎉

profile
iOS Developer · SwiftUI & UIKit '가끔 되고 가끔 안 되는' 문제를 뿌리부터 잡습니다.

0개의 댓글