정의: 모바일 기기에서 Machine Learning 모델을 실행하는 기술.
장점:
낮은 레이턴시: 서버와의 통신 없이 로컬에서 실행.
프라이버시 강화: 데이터가 클라우드로 전송되지 않아 개인 정보 보호.
네트워크 독립성: 인터넷 연결 없이도 ML 기능 사용 가능.
활용 예시:
React Native 기반 카메라 앱에서 셀카 필터 즉시 적용.
사용자가 자신의 얼굴 데이터를 클라우드에 업로드하지 않도록 보장.
Apple의 On-Device Machine Learning 프레임워크
Vision, Natural Language, Speech, Sound Analysis 등 다양한 API 제공.
Hugging Face 모델(Stable Diffusion, Llama 등)을 CoreML로 변환하여 사용 가능.
특징:
Apple의 하드웨어(특히 Neural Engine)를 최적 활용.
저전력, 고효율 학습 및 추론 가능.
Diffusion Models의 원리:
노이즈로부터 이미지를 복원하는 과정을 학습.
열역학의 확산 개념에서 영감을 받음.
Stable Diffusion:
효율적 모델 아키텍처(Latent Diffusion).
기존 GANs를 대체하며 다양한 결과물을 생성 가능.
Zero-shot editing 기능 제공.
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
UI 구성:
모델 다운로드 상태 표시 Progress Bar.
프롬프트 입력창.
Step Count 및 Seed 값 슬라이더.
이미지 생성 Progress Bar.
생성된 이미지 예시:
Prompt: “Hyper masterpiece of dog in 4k”.
결과물: 고퀄리티 이미지 생성 성공.
퀄리티 부족:
Cloud 모델보다 낮은 생성 퀄리티.
Quantization으로 인해 이미지 디테일 손실.
리소스 소비:
모바일 기기 발열, 전력 소모, 과다 메모리 사용 가능성.
모델 다운로드 시간:
모델 크기가 1GB 이상으로, 사용자 대기 시간이 길어질 수 있음.
미래 가능성:
Text Recognition API처럼 모바일에서도 보편화 가능성.
사내 민감 데이터를 활용한 "코딩 전용 LLM" 등 활용 사례.
한계 예상:
On-Device와 클라우드 모델 간 성능 격차는 지속될 가능성.
Huckleberry:
"On-Device ML을 접하면서 AI와 Mobile의 접점 가능성을 발견."
AI와 Native(Swift, Kotlin) 학습을 통해 더 발전된 엔지니어로 성장 다짐.
Sung:
"다른 분야 동료와 협력하며 ML에 대한 통찰과 동기부여를 얻었다."
On-Device 배포 가능한 수준의 ML 아이디어를 제품에 도입해보고 싶음.
이번 PoC를 통해 CoreML의 잠재력과 Stable Diffusion의 가능성을 확인했습니다. On-Device ML은 여전히 초기 단계지만, 모바일 AI 기술의 발전이 기대됩니다. 앞으로 제품에 실질적으로 적용할 수 있는 ML 아이디어를 구체화하고 협업을 이어갈 계획입니다. 🎉