Ver5.0 ๐ฑ ๋ด ํฐ ์์ AI๊ฐ ์ฐ๋ค! Core ML๊ณผ TensorFlow Lite๋ก ๋ง๋๋ ์จ๋๋ฐ์ด์ค AI ์ฑ ์์ ์ ๋ณต

๐ฑ ๋ด ํฐ ์์ AI๊ฐ ์ฐ๋ค! Core ML๊ณผ TensorFlow Lite๋ก ๋ง๋๋ ์จ๋๋ฐ์ด์ค AI ์ฑ ์์ ์ ๋ณต
์น๊ตฌ์ผ, ์์ฆ AI๋ผ๊ณ ํ๋ฉด ๋ค๋ค ๊ฑฐ๋ํ ์๋ฒ์์ GPU ์์ฒ ์ฅ์ด ๋์๊ฐ๋ ์ฅ๋ฉด์ ๋ ์ฌ๋ฆฌ์์?
๊ทธ๋ฐ๋ฐ ์ฌ์ค ๋ค ์ฃผ๋จธ๋ ์ ์ค๋งํธํฐ๋ ์ด๋ฏธ ๊ฝค ๋๋ํ AI ๋จธ์ ์ด์ผ. ์ฌ์ง ์ฑ์์ "๊ฐ์์ง"๋ผ๊ณ ๊ฒ์ํ๋ฉด ๊ฐ์์ง ์ฌ์ง๋ง ์์ ๋ฝ์์ฃผ๋ ๊ธฐ๋ฅ, ๊ทธ๊ฑฐ ์๋น ๋ถ๋ถ์ด ํฐ ์์์ ์ง์ ๋์๊ฐ๋ AI ๋๋ถ์ด๊ฑฐ๋ .
์ค๋์ ์ด ์จ๋๋ฐ์ด์ค(On-Device) AI๋ฅผ ๋ด ์ฑ์ ๋ฃ๋ ๋ฐฉ๋ฒ์, iOS ์ง์์ Core ML๊ณผ ์๋๋ก์ด๋ยทํฌ๋ก์คํ๋ซํผ ์ง์์ TensorFlow Lite(ํ์ฌ ์ด๋ฆ์ LiteRT)๋ฅผ ์ค์ฌ์ผ๋ก ์๋ค ๋จ๋ฏ ํ์ด๋ณผ๊ฒ. ์ปคํผ ํ ์ ๋ค๊ณ ํธํ๊ฒ ๋ฐ๋ผ์! โ
๐ค 1. ์จ๋๋ฐ์ด์ค AI๊ฐ ๋์ฒด ๋ญ๊ธธ๋?
๊ฐ๋จํ ๋งํ๋ฉด AI ๋ชจ๋ธ์ "์ถ๋ก (inference)"์ ์๋ฒ๊ฐ ์๋๋ผ ์ฌ์ฉ์์ ๊ธฐ๊ธฐ ์์์ ์คํํ๋ ๊ฑฐ์ผ.
ํ์ต(training)์ ๋ณดํต ๋ฐ์ดํฐ์ผํฐ์์ ๋๋ด๊ณ , ์์ฑ๋ ๋ชจ๋ธ์ ๊ฐ๋ณ๊ฒ ๋ค๋ฌ์ด์ ์ฑ์ ๋ฃ์ด ๋ฐฐํฌํ๋ ๊ตฌ์กฐ์ง.
๊ทธ๋ผ ์ ๊ตณ์ด ํฐ์์ ๋๋ฆฌ๋๊ณ ? ์ด์ ๊ฐ ๊ฝค ํ์ค์ ์ด์ผ.
์ผ๊ตด ์ฌ์ง, ์์ฑ, ๊ฑด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๊ธฐ ๋ฐ์ผ๋ก ์ ๋๊ฐ. ๊ฐ์ธ์ ๋ณด ์ด์์ ๋ฏผ๊ฐํ ์์ฆ ์ด๊ฑด ์์ฒญ๋ ์ฅ์ ์ด์ผ.
๋คํธ์ํฌ ์๋ณต์ด ์์ผ๋ ์นด๋ฉ๋ผ ํ๋ ์๋ง๋ค ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด. AR ํํฐ๋ ์ค์๊ฐ ๋ฒ์ญ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์์ง.
์งํ์ฒ , ๋นํ๊ธฐ, ์ฐ์์์๋ ๋์ํด. ์๋ฒ๊ฐ ์ฃฝ์ด๋ ๊ธฐ๋ฅ์ ๋ฉ์ฉก!
์ถ๋ก ์ฐ์ฐ์ ์ฌ์ฉ์ ๊ธฐ๊ธฐ๊ฐ ๋๋ ๋งก์ผ๋ ์ฌ์ฉ์๊ฐ ๋์ด๋ GPU ์๋ฒ๋น๊ฐ ๊ทธ๋งํผ ํญ์ฆํ์ง ์์.
๋ฌผ๋ก ๊ณต์ง ์ ์ฌ์ ์์ด. ํฐ์ ๋ฉ๋ชจ๋ฆฌยท๋ฐฐํฐ๋ฆฌยท๋ฐ์ด์ด๋ผ๋ ๋นก๋นกํ ์ ์ฝ์ด ์์ด์, ์๋ฒ์์ ์ฐ๋ ๊ฑฐ๋ํ ๋ชจ๋ธ์ ๊ทธ๋๋ก ๋ฃ์ ์๋ ์๊ฑฐ๋ . ๊ทธ๋์ ๋ฑ์ฅํ๋ ๊ฒ ๋ฐ๋ก ๋ชจ๋ฐ์ผ ์ ์ฉ ์ถ๋ก ํ๋ ์์ํฌ, ์ค๋์ ์ฃผ์ธ๊ณต ๋์ด์ผ.
๐ 2. Core ML: ์ ํ ์ํ๊ณ์ ๊ณต์ AI ์์ง
Core ML์ ์ ํ์ด 2017๋ WWDC์์ iOS 11๊ณผ ํจ๊ป ๊ณต๊ฐํ ๋จธ์ ๋ฌ๋ ํ๋ ์์ํฌ์ผ. iPhone, iPad, Mac, Apple Watch, Apple TV, Vision Pro๊น์ง ์ ํ ๊ธฐ๊ธฐ ์ ๋ฐ์์ ์ธ ์ ์์ด.
Core ML์ ์ง์ง ๋งค๋ ฅ์ ํ๋์จ์ด๋ฅผ ์์์ ๊ณจ๋ผ ์ด๋ค๋ ์ ์ด์ผ. ๋ชจ๋ธ์ ์คํํ๋ฉด Core ML์ด ์ฐ์ฐ์ CPU, GPU, Neural Engine(ANE) ์ค ์ ์ ํ ๊ณณ์ ๋ถ๋ฐฐํด์ค. Neural Engine์ A11 Bionic๋ถํฐ ๋ค์ด๊ฐ ์ ํ์ ์ ์ฉ AI ๊ฐ์๊ธฐ์ธ๋ฐ, ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์์ค ์ฝ๋๋ฅผ ์งค ํ์ ์์ด Core ML์ ํตํด์ ํ์ฉํ๋ ๊ตฌ์กฐ์ผ.
| ๋๊ตฌ | ์ญํ |
|---|---|
| Core ML | ๋ชจ๋ธ ๋ก๋ฉยท์ถ๋ก ์คํ ์์ง |
| Vision | ์ด๋ฏธ์ง ๋ถ๋ฅ, ์ผ๊ตดยทํ ์คํธ ์ธ์, ๊ฐ์ฒด ์ถ์ ๋ฑ ๋น์ ์์ + Core ML ๋ชจ๋ธ ์ฐ๊ฒฐ |
| Natural Language | ์ธ์ด ๊ฐ์ง, ํ ํฐํ, ๊ฐ์ ๋ถ์ ๋ฑ ํ ์คํธ ์ฒ๋ฆฌ |
| Sound Analysis / Speech | ์๋ฆฌ ๋ถ๋ฅ, ์์ฑ ์ธ์ |
| Create ML | Mac์์ ์ฝ๋ ์์ด(๋๋ Swift๋ก) ๋ชจ๋ธ ํ์ต |
| coremltools | PyTorchยทTensorFlow ๋ชจ๋ธ์ Core ML ํฌ๋งท์ผ๋ก ๋ณํํ๋ Python ํจํค์ง |
๐ฆ ๋ชจ๋ธ ํฌ๋งท: .mlmodel๊ณผ .mlpackage
์์ ์ ๋ชจ๋ธ ํ์ผ์ด .mlmodel ํ๋์๋๋ฐ, ์ง๊ธ์ ML Program์ด๋ผ๋ ์ ๋ชจ๋ธ ํ์ ๊ณผ ํจ๊ป .mlpackage(ํด๋ ํํ ํจํค์ง)๊ฐ ํ์ค์ด ๋์ด. ML Program์ iOS 15 ์ด์์์ ๋์ํ๊ณ , ๊ฐ์ค์น๋ฅผ ๋ณ๋ ํ์ผ๋ก ๊ด๋ฆฌํด์ ํฐ ๋ชจ๋ธ๊ณผ ๋ค์ํ ์ ๋ฐ๋(Float16 ๋ฑ)๋ฅผ ๋ค๋ฃจ๊ธฐ ํธํด.
๐ ๋ณํ: coremltools๋ก PyTorch ๋ชจ๋ธ ๊ฐ์ ธ์ค๊ธฐ
์์ฆ ์ฐ๊ตฌยท์ค๋ฌด ๋ชจ๋ธ ๋๋ถ๋ถ์ด PyTorch๋ก ๋ง๋ค์ด์ง์์? coremltools๋ TorchScript๋ก traceํ ๋ชจ๋ธ์ด๋ ์ต์ ๋ฒ์ ์์ torch.export ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐ์์ Core ML๋ก ๋ณํํด์ค. ๋๋ต ์ด๋ฐ ๋๋์ด์ผ.
import torch, torchvision
import coremltools as ct
model = torchvision.models.mobilenet_v3_small(weights="DEFAULT").eval()
example = torch.rand(1, 3, 224, 224)
traced = torch.jit.trace(model, example)
mlmodel = ct.convert(
traced,
inputs=[ct.ImageType(name="image", shape=example.shape,
scale=1/255.0)],
convert_to="mlprogram",
minimum_deployment_target=ct.target.iOS16,
)
mlmodel.save("MobileNetV3.mlpackage")
ImageType์ผ๋ก ์
๋ ฅ์ ์ง์ ํ๋ฉด ์ฑ์์ CVPixelBuffer(์นด๋ฉ๋ผ ํ๋ ์)๋ฅผ ๋ฐ๋ก ๋ฃ์ ์ ์์ด์ ์ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ํ ์ค์ด. ๋จ, ImageNet ์ ๊ทํ(ํ๊ท ยทํ์คํธ์ฐจ)์ฒ๋ผ ์ฑ๋๋ณ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ชจ๋ธ์ scaleยทbias ๊ฐ์ ์ ํํ ๋ง์ถฐ์ค์ผ ๊ฒฐ๊ณผ๊ฐ ์ด์ํ๊ฒ ์ ๋์!๐ฒ Swift์์ ์คํํ๊ธฐ
.mlpackage ํ์ผ์ Xcode ํ๋ก์ ํธ์ ๋๋๊ทธํ๋ฉด, Xcode๊ฐ ํ์ ์ด ์ง์ ๋ Swift ํด๋์ค๋ฅผ ์๋ ์์ฑํด์ค. ์ด๊ฒ ์ง์ง ํธํด. ์ด๋ฏธ์ง ์์ ์ด๋ผ๋ฉด Vision๊ณผ ์ฎ์ด์ ์ฐ๋ ๊ฒ ์ ์์ด์ผ.
import Vision
import CoreML
let config = MLModelConfiguration()
config.computeUnits = .all // CPU + GPU + Neural Engine
let coreModel = try MobileNetV3(configuration: config).model
let vnModel = try VNCoreMLModel(for: coreModel)
let request = VNCoreMLRequest(model: vnModel) { req, _ in
guard let top = (req.results as? [VNClassificationObservation])?.first
else { return }
print("\(top.identifier): \(top.confidence)")
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage)
try handler.perform([request])
computeUnits๋ .all, .cpuAndGPU, .cpuOnly, ๊ทธ๋ฆฌ๊ณ iOS 16๋ถํฐ ์๊ธด .cpuAndNeuralEngine ์ค์ ๊ณ ๋ฅผ ์ ์์ด. ๊ธฐ๋ณธ์ .all์ด๊ณ , ๋๋ถ๋ถ ์ด๊ฒ ์ ์ผ ๋ฌด๋ํด.
๐ ๏ธ Xcode ์ฑ๋ฅ ๋ฆฌํฌํธ๋ ๊ผญ ์จ๋ด
Xcode 14๋ถํฐ ๋ชจ๋ธ ํ์ผ์ ์ด๋ฉด Performance ํญ์์ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ์์์ ๋ก๋ ์๊ฐ, ์์ธก ์ง์ฐ ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ฐ์ฐ์ด CPU/GPU/ANE ์ค ์ด๋์ ๋์๋์ง๊น์ง ๋ณด์ฌ์ค. "์ Neural Engine์ ์ ํ์ง?" ์ถ์ ๋ ๋ฒ์ธ์ ์ฐพ๋ ๋ฐ ์ต๊ณ ์ผ. Instruments์ Core ML ํ ํ๋ฆฟ๋ ๊ฐ์ด ์ฐ๋ฉด ๋ณ๋ชฉ์ ์ ํํ ์ก์ ์ ์์ด.
๐ค 3. TensorFlow Lite โ LiteRT: ์ด๋์๋ ๋๋ ๋ง๋ฅ ์ผ๊พผ
TensorFlow Lite(TFLite)๋ ๊ตฌ๊ธ์ด 2017๋ ๊ณต๊ฐํ ๋ชจ๋ฐ์ผยท์๋ฒ ๋๋์ฉ ๊ฒฝ๋ ์ถ๋ก ํ๋ ์์ํฌ์ผ. ๊ทธ๋ฆฌ๊ณ ์ค์ํ ์์! ๊ตฌ๊ธ์ 2024๋ 9์์ TFLite์ ์ด๋ฆ์ LiteRT(Lite Runtime)๋ก ๋ฐ๊ฟจ์ด. TensorFlow๋ง์ด ์๋๋ผ PyTorch, JAX, Keras ๋ชจ๋ธ๋ ํ๋ "๋ฒ์ฉ ์จ๋๋ฐ์ด์ค ๋ฐํ์"์ด ๋๊ฒ ๋ค๋ ์๋ฏธ์ง.
์ด๋ฆ์ ๋ฐ๋์์ง๋ง .tflite ํ์ผ ํฌ๋งท์ ๊ทธ๋๋ก์ผ. ๊ธฐ์กด TFLite ์ฝ๋ยท๋ชจ๋ธ๋ ๊ณ์ ๋์ํ๊ณ , ์ ๊ธฐ๋ฅ์ LiteRT ํจํค์ง ์ชฝ์ผ๋ก ๋ค์ด์ค๋ ํ๋ฆ์ด๋ ์ ๊ท ํ๋ก์ ํธ๋ผ๋ฉด ๊ณต์ LiteRT ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ ๊ฑธ ์ถ์ฒํด.
๐ ์ฅ์ : ํฌ๋ก์คํ๋ซํผ
Core ML์ด ์ ํ ์ ์ฉ์ด๋ผ๋ฉด, LiteRT๋ Android, iOS, ๋ฆฌ๋ ์ค, macOS, ์น, ๊ทธ๋ฆฌ๊ณ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ(LiteRT for Microcontrollers)๊น์ง ์์ธ๋ฌ. ํ๋์ .tflite ๋ชจ๋ธ๋ก ์๋๋ก์ด๋์ iOS ์์ชฝ ์ฑ์ ์ปค๋ฒํ ์ ์๋ค๋ ๊ฒ ํฐ ๋ฌด๊ธฐ์ผ.
๐ Delegate: ๊ฐ์๊ธฐ๋ก ์ผ ๋๊ธฐ๊ธฐ
TFLite์๋ Delegate(๋ธ๋ฆฌ๊ฒ์ดํธ)๋ผ๋ ๊ฐ๋ ์ด ์์ด. ๊ธฐ๋ณธ์ CPU(XNNPACK ์ต์ ํ ์ปค๋)๋ก ๋๊ณ , ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ๋ถ์ด๋ฉด ์ฐ์ฐ ์ผ๋ถ ํน์ ์ ์ฒด๋ฅผ ๊ฐ์๊ธฐ๋ก ๋๊ฒจ.
| Delegate | ๋์ | ํน์ง |
|---|---|---|
| XNNPACK | CPU | ๊ธฐ๋ณธ ํ์ฑํ, ๋ถ๋์์ยท์์ํ ๋ชจ๋ ๋น ๋ฆ |
| GPU Delegate | AndroidยทiOS GPU | OpenGL ES/OpenCL/Metal ๊ธฐ๋ฐ, ํฐ ๋น์ ๋ชจ๋ธ์ ์ ๋ฆฌ |
| Core ML Delegate | iOS (Neural Engine) | iOS์์ TFLite ๋ชจ๋ธ์ ANE๋ก ๊ฐ์ |
| NNAPI Delegate | Android | Android 15๋ถํฐ NNAPI๊ฐ ์ง์ ์ค๋จ(deprecated)๋์ด ์ ๊ท ์ฌ์ฉ ๋น๊ถ์ฅ |
| ๋ฒค๋ NPU | ํ์ปดยท๋ฏธ๋์ดํ ๋ฑ | LiteRT๋ ์นฉ ๋ฒค๋ NPU ๊ฐ์ ์ฐ๋์ ํ๋ ์ค |
๐ ๋ณํ: TFLiteConverter ๊ธฐ๋ณธ๊ธฐ
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model("my_saved_model")
converter.optimizations = [tf.lite.Optimize.DEFAULT] # ๋์ ๋ฒ์ ์์ํ
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)
PyTorch ๋ชจ๋ธ์ด๋ผ๋ฉด? ๊ตฌ๊ธ์ด ๋ง๋ AI Edge Torch(Python ํจํค์ง ai-edge-torch)๋ก PyTorch ๋ชจ๋ธ์ ๋ฐ๋ก .tflite๋ก ๋ณํํ ์ ์์ด. ์์ ์ฒ๋ผ ONNX โ TF โ TFLite๋ก ์ธ ๋ฒ ๊ฐ์ํ๋ ๊ณ ์์ด ํฌ๊ฒ ์ค์์ง.
๐ฒ Android(Kotlin)์์ ์คํํ๊ธฐ
val options = Interpreter.Options().apply {
setNumThreads(4)
}
val interpreter = Interpreter(loadModelFile(context, "model.tflite"), options)
val input = Array(1) { Array(224) { Array(224) { FloatArray(3) } } }
val output = Array(1) { FloatArray(1000) }
interpreter.run(input, output)
val best = output[0].withIndex().maxBy { it.value }
Log.d("AI", "class=${best.index}, score=${best.value}")
์๋๋ก์ด๋์์๋ TFLite ๋ฐํ์์ ์ฑ์ ์ง์ ๋ฃ๋ ๋์ Google Play ์๋น์ค์ ํฌํจ๋ ๋ฐํ์์ ์ฐ๋ ๋ฐฉ์๋ ์์ด. ์ฑ ์ฉ๋์ด ์ค๊ณ ๋ฐํ์ ์ ๋ฐ์ดํธ๊ฐ ์๋์ผ๋ก ๋๋ค๋ ์ฅ์ ์ด ์์ง.
โ๏ธ 4. ๊ทธ๋์ ๋ญ ์จ์ผ ํด? ๋์ ๋น๊ต
โ๏ธ ์ ํ ๊ธฐ๊ธฐ์์ Neural Engine ํ์ฉ ์ต์ ํ
โ๏ธ Xcode ์๋ ์ฝ๋ ์์ฑยท์ฑ๋ฅ ๋ฆฌํฌํธ
โ๏ธ VisionยทNL ๋ฑ ์์ ํ๋ ์์ํฌ์ ์ฐฐ๋ก
โ๏ธ Create ML๋ก ๋ ธ์ฝ๋ ํ์ต ๊ฐ๋ฅ
โ ์ ํ ํ๋ซํผ ์ ์ฉ
โ๏ธ AndroidยทiOSยท์นยท์๋ฒ ๋๋ ํฌ๋ก์คํ๋ซํผ
โ๏ธ ๋ค์ํ Delegate๋ก ํ๋์จ์ด ๊ฐ์
โ๏ธ MediaPipe ๋ฑ ๊ตฌ๊ธ ์ํ๊ณ ์ฐ๊ณ
โ๏ธ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๊น์ง ์ง์
โ iOS์์๋ Core ML ๋๋น ANE ํ์ฉ์ด ๊ฐ์ ์
์ค๋ฌด์์ ์์ฃผ ์ฐ๋ ๊ณต์์ ์ด๋.
๐ฏ Android ์ ์ฉ ์ฑ โ LiteRT(TFLite)
๐ฏ ์์ชฝ ๋ค + ๊ฐ์ ๋ชจ๋ธ โ ์๋ณธ์ PyTorch๋ก ๊ด๋ฆฌํ๊ณ ๊ฐ๊ฐ Core ML / .tflite๋ก ๋ณํํ๊ฑฐ๋, FlutterยทReact Native์์ TFLite ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ
๐ฏ ์ผ๊ตดยท์ยทํฌ์ฆ ๊ฐ์ ํํ ๊ธฐ๋ฅ โ ์ง์ ๋ง๋ค๊ธฐ ์ ์ Apple Vision, Google ML Kit, MediaPipe์ ์์ฑ ์๋ฃจ์ ๋ถํฐ ํ์ธ!
๐๏ธ 5. ๋ค์ด์ดํธ์ ๊ธฐ์ : ๋ชจ๋ธ ์ต์ ํ
๋ชจ๋ฐ์ผ AI์ ํต์ฌ์ ๊ฒฐ๊ตญ "์๊ณ ๋น ๋ฅด๊ฒ, ๊ทธ๋ฐ๋ฐ ์ ํ๋๋ ์ต๋ํ ์ ์ง"์ผ. ๋ํ ๊ธฐ๋ฒ์ ๊ทธ๋ฆผ์ผ๋ก ๋จผ์ ๋ณด์.
โ ์์ํ(Quantization)
32๋นํธ ๋ถ๋์์ ๊ฐ์ค์น๋ฅผ 16๋นํธ๋ 8๋นํธ, ์ฌ์ง์ด 4๋นํธ๋ก ์ค์ด๋ ๊ฑฐ์ผ. INT8๋ก๋ง ๋ฐ๊ฟ๋ ๊ฐ์ค์น ํฌ๊ธฐ๊ฐ ์ฝ 4๋ถ์ 1์ด ๋ผ.
โก ๊ฐ์ง์น๊ธฐ(Pruning)ยทํ๋ ํ์ด์ ์ด์ (Palettization)
์ค์๋ ๋ฎ์ ๊ฐ์ค์น๋ฅผ 0์ผ๋ก ๋ง๋๋ ๊ฒ ๊ฐ์ง์น๊ธฐ, ๊ฐ์ค์น ๊ฐ๋ค์ ์์์ ๋ํ๊ฐ(๋ฃฉ์
ํ
์ด๋ธ)์ผ๋ก ๋ฌถ๋ ๊ฒ ํ๋ ํ์ด์ ์ด์
์ด์ผ. coremltools์ coremltools.optimize ๋ชจ๋์ด ์ด๋ฐ ์์ถ ๊ธฐ๋ฒ๋ค์ ์ง์ํ๊ณ , ์ ํ์ ํนํ ํ๋ ํ์ด์ ์ด์
์ Neural Engine ์นํ์ ์ธ ์์ถ์ผ๋ก ์์ฃผ ์๊ฐํด.
โข ์ ์ด์ ๊ฐ๋ฒผ์ด ๊ตฌ์กฐ ๊ณ ๋ฅด๊ธฐ
MobileNet, EfficientNet-Lite, YOLO ๊ณ์ด์ ๊ฒฝ๋ ๋ฒ์ ์ฒ๋ผ ๋ชจ๋ฐ์ผ์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋ ์ํคํ ์ฒ๋ฅผ ์ฐ๋ ๊ฒ ์ต์ ํ์ ์ ๋ฐ์ด์ผ. ๋ฌด๊ฑฐ์ด ๋ชจ๋ธ์ ์ต์ง๋ก ๊น๋ ๊ฒ๋ณด๋ค ํจ์จ์ ์ผ ๋๊ฐ ๋ง๊ฑฐ๋ .
๐งญ 6. ์จ๋๋ฐ์ด์ค AI ์ฑ ์ ์ ์ ์ฒด ํ๋ฆ
๊ฐ ๋จ๊ณ์์ ๋์น๊ธฐ ์ฌ์ด ํฌ์ธํธ๋ฅผ ์ง์ด๋ณผ๊ฒ.
"๋ชจ๋ ๊ฑธ ๋ค ํ๋ AI"๋ณด๋ค "์์ ์ฌ์ง 10์ข ๋ถ๋ฅ"์ฒ๋ผ ๋ฒ์๋ฅผ ์ขํ์๋ก ์์ ๋ชจ๋ธ๋ก๋ ๋์ ์ ํ๋๊ฐ ๋์.
ํ์ต ๋์ ๋ฆฌ์ฌ์ด์ฆ ๋ฐฉ์, ์์ ์ฑ๋ ์์(RGB/BGR), ์ ๊ทํ ๊ฐ์ด ์ฑ์์๋ ๋๊ฐ์์ผ ํด. ์จ๋๋ฐ์ด์ค AI ๋ฒ๊ทธ์ ์๋น์๊ฐ ์ฌ๊ธฐ์ ๋์.
์ถ๋ก ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์! UI๊ฐ ๋ฉ์ถ๋ฉด ์ฌ์ฉ์๋ AI๊ฐ ๋๋ํ์ง ๋ฐ์ง๊ธฐ ์ ์ ์ฑ์ ๊บผ๋ฒ๋ ค.
๋ชจ๋ธ ๋ก๋ฉ์ ์๊ฐ๋ณด๋ค ๋น์ธ. ํนํ Core ML์ ์ฒซ ๋ก๋ ๋ ๊ธฐ๊ธฐ๋ณ ์ปดํ์ผยทํน์ํ๊ฐ ์ผ์ด๋์ ๋๋ฆด ์ ์์ผ๋, ๋ฏธ๋ฆฌ ๋ก๋ํ๊ณ ์ฌ์ฌ์ฉํ์.
์ต์ ํ๋๊ทธ์ญ์์ 30ms๋ฉด 3~4๋ ๋ ๋ณด๊ธํ์์ ๋ช ๋ฐฐ ๋๋ฆด ์ ์์ด. ํ๊น ์ฌ์ฉ์ ๊ธฐ๊ธฐ ๋ถํฌ๋ฅผ ๊ผญ ๊ณ ๋ คํด.
์ฑ ์ ๋ฐ์ดํธ ์์ด ๋ชจ๋ธ๋ง ๊ต์ฒดํ๊ณ ์ถ๋ค๋ฉด, iOS๋ ๋ชจ๋ธ์ ๋ด๋ ค๋ฐ์
MLModel.compileModel(at:)๋ก ๊ธฐ๊ธฐ์์ ์ปดํ์ผํ๋ ๋ฐฉ์์ด, ์๋๋ก์ด๋๋ Firebase ๋ฑ์ ํตํ ์๊ฒฉ ๋ชจ๋ธ ๋ฐฐํฌ ๋ฐฉ์์ด ์์ด.๐ง 7. ์์ฆ ํซํ ์ด์ผ๊ธฐ: ํฐ์์ ๋์๊ฐ๋ ์์ฑํ AI
๋ช ๋ ์ ๋ง ํด๋ "ํฐ์์ LLM ๋๋ฆฌ๊ธฐ"๋ ๋๋ด ๊ฐ์๋๋ฐ, ์ง๊ธ์ ํ์ค์ด์ผ.
Core ML์ ์ํ ์ ์ง ๋ชจ๋ธ(stateful model)๋ก LLM์ KV ์บ์๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ฅ, 4๋นํธ ๋ฑ ์ ๋นํธ ์์ถ ๊ฐ์ ์์ฑํ ๋ชจ๋ธ ์นํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์์ด. ๋ Apple Intelligence์ ์จ๋๋ฐ์ด์ค ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์ฑ์์ ์ธ ์ ์๋ Foundation Models ํ๋ ์์ํฌ๋ ๋ฐํํ์ง(์ง์ ๊ธฐ๊ธฐยทOS ์กฐ๊ฑด์ด ์์ด). Apple Silicon Mac์์๋ ์คํ์์ค ๋ฐฐ์ด ํ๋ ์์ํฌ MLX๋ก LLM์ ๋๋ฆฌ๋ ๊ฐ๋ฐ์๋ ๋ง์.
๐ค ๊ตฌ๊ธ ์ชฝ
์๋๋ก์ด๋์๋ ์์คํ ์์ค ์จ๋๋ฐ์ด์ค ๋ชจ๋ธ Gemini Nano๊ฐ ์๊ณ (์ง์ ๊ธฐ๊ธฐ ํ์ ), ์คํ ๋ชจ๋ธ(Gemma ๋ฑ)์ LiteRT ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๊ธฐ์์ ๋๋ฆฌ๋ MediaPipe LLM Inference API ๊ฐ์ ๋๊ตฌ๋ ์ ๊ณต๋๊ณ ์์ด.
๋ค๋ง LLM์ ์์ต~์์ญ์ต ํ๋ผ๋ฏธํฐ๋ผ ๋ฉ๋ชจ๋ฆฌยท์ ์ฅ ๊ณต๊ฐยท๋ฐ์ด์ด ์ผ๋ฐ ๋น์ ๋ชจ๋ธ๊ณผ ์ฐจ์์ด ๋ฌ๋ผ. "๋ชจ๋ ์ฌ์ฉ์ ๊ธฐ๊ธฐ์์ ๋์๊ฐ๋?"๋ฅผ ๊ผญ ํ์ธํ๊ณ , ๋ฏธ์ง์ ๊ธฐ๊ธฐ๋ฅผ ์ํ ๋์ฒด ๊ฒฝ๋ก(์๋ฒ ํธ์ถ ๋ฑ)๋ฅผ ์ค๊ณํด๋๋ ๊ฒ ์์ ํด.
๐ก 8. ์ด๋ฐ ์ฑ ๋ง๋ค์ด๋ณผ ์ ์์ด!
์์ ์ฌ์ง ๋ถ๋ฅ + ์์ ์ ๋ณด ๋งค์นญ
ํฌ์ฆ ์ถ์ ์ผ๋ก ์ค์ฟผํธ ๊ฐ์ยท์์ธ ์ฒดํฌ
๋ฌธ์ ์ธ์(OCR)์ผ๋ก ๊ฐ๊ณ๋ถ ์๋ ์ ๋ ฅ
๋ฑ์ฐ ์ค ์คํ๋ผ์ธ์ผ๋ก ๊ฝยท๋๋ฌด ํ๋ณ
์ด๋ฐ ์์ด๋์ด๋ ์๋๋ฐ ๋ชจ๋ธ ํ์ต์ด๋ ์ฑ ๊ฐ๋ฐ ์ค ํ์ชฝ์ด ๋งํ๋ค๋ฉด? ์ฌ๋ฅ๋ท ๊ฐ์ ์ฌ๋ฅ ๊ณต์ ํ๋ซํผ์์ iOSยท์๋๋ก์ด๋ ๊ฐ๋ฐ์๋ ๋จธ์ ๋ฌ๋ ์ ๋ฌธ๊ฐ์ ๋์์ ๋ฐ์ MVP๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด๋ณด๋ ๊ฒ๋ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ด์ผ. ํผ์ ๋๋๋๋ ์๊ฐ๋ณด๋ค ํจ์ฌ ๋น ๋ฅผ ์ ์๊ฑฐ๋ ๐
๐งฏ 9. ์์ฃผ ๋ง์ฃผ์น๋ ํจ์ TOP 5
| ์ฆ์ | ํํ ์์ธ | ์ฒ๋ฐฉ |
|---|---|---|
| ๊ฒฐ๊ณผ๊ฐ ์๋ฑํจ | ์ ์ฒ๋ฆฌ ๋ถ์ผ์น | ํ์ต ์ฝ๋์ ์ ๊ทํยท์ฑ๋ ์์ ์ฌํ์ธ |
| ๋ณํ ์คํจ | ๋ฏธ์ง์ ์ฐ์ฐ(op) | ๋ชจ๋ธ ๊ตฌ์กฐ ์์ , TFLite Select TF ops, ์ต์ ๋ณํ๊ธฐ ์ฌ์ฉ |
| ๊ฐ์๊ธฐ๋ฅผ ์ ํ | ๊ฐ์๊ธฐ ๋ฏธ์ง์ ๋ ์ด์ด | Xcode ์ฑ๋ฅ ๋ฆฌํฌํธยทLiteRT ๋ฒค์น๋งํฌ ๋๊ตฌ๋ก ํ์ธ |
| ์ฒซ ์คํ์ด ๋๋ฆผ | ๋ชจ๋ธ ์ปดํ์ผยท์ด๊ธฐํ | ์ฑ ์์ ์ ๋ฏธ๋ฆฌ ๋ก๋(์๋ฐ์ ) |
| ํฐ์ด ๋จ๊ฑฐ์์ง | ๋งค ํ๋ ์ ๋ฌด๋ฆฌํ ์ถ๋ก | ์ถ๋ก ์ฃผ๊ธฐ ์กฐ์ , ํด์๋ ์ถ์, ๊ฒฝ๋ ๋ชจ๋ธ ์ ํ |
๐ ๋ง๋ฌด๋ฆฌ: ํต์ฌ๋ง ์ธ ์ค ์์ฝ
1๏ธโฃ ์จ๋๋ฐ์ด์ค AI = ํ๋ผ์ด๋ฒ์ยท์๋ยท์คํ๋ผ์ธยท๋น์ฉ, ๋ค ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ์ก๋ ๋ฐฉ๋ฒ.
2๏ธโฃ Core ML์ ์ ํ ๊ธฐ๊ธฐ์ Neural Engine์ ๊ฐ์ฅ ์ ์ฐ๋ ๊ณต์ ๋ฃจํธ, LiteRT(๊ตฌ TFLite)๋ ์ด๋์๋ ๋๋ ํฌ๋ก์คํ๋ซํผ ๋ฃจํธ.
3๏ธโฃ ์ฑ๊ณต์ ์ด์ ๋ ์์ ๋ฌธ์ ์ ์ + ์ ์ฒ๋ฆฌ ์ผ์น + ์์ํ + ์ค๊ธฐ๊ธฐ ์ธก์ !
์ฒ์์ MobileNet ๊ฐ์ ๊ณต๊ฐ ๋ชจ๋ธ ํ๋ ๋ณํํด์ ์นด๋ฉ๋ผ์ ๋ถ์ฌ๋ณด๋ ๊ฒ๋ถํฐ ์์ํด๋ด. ํ๋ฉด์ "๊ณ ์์ด 97%"๊ฐ ์ฒ์ ๋จ๋ ์๊ฐ, ์ง์ง ์ง๋ฆฟํ๊ฑฐ๋ ๐ฑโจ
์ฌ๋ฅ๋ท ์ง์์ธ์ ์ฒ์์ ๋ค์์๋ ์ฌ๋ฐ๋ ๊ฐ๋ฐ ์ด์ผ๊ธฐ๋ก ๋ ๋ง๋์!
์ฐธ๊ณ ์๋ฃ
ยท Apple Developer โ Core ML: https://developer.apple.com/documentation/coreml
ยท coremltools ๊ณต์ ๋ฌธ์: https://apple.github.io/coremltools/docs-guides/
ยท Google AI Edge โ LiteRT ๊ฐ์: https://ai.google.dev/edge/litert
ยท Google Developers Blog โ "TensorFlow Lite is now LiteRT"(2024): https://developers.googleblog.com/en/tensorflow-lite-is-now-litert/
ยท AI Edge Torch (GitHub): https://github.com/google-ai-edge/ai-edge-torch
ยท Android Developers โ NNAPI ์ง์ ์ค๋จ ์๋ด: https://developer.android.com/ndk/guides/neuralnetworks/migration-guide
ยท โป ๋ฒ์ ยท์ง์ ๊ธฐ๊ธฐ ์ ๋ณด๋ ์์๋ก ๋ฐ๋๋ฏ๋ก ๊ฐ๋ฐ ์ ๊ณต์ ๋ฌธ์์ ์ต์ ๋ด์ฉ์ ํ์ธํ์ธ์.
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.