데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      iOS 기기에서의 독립적 AI 실행: MLX 기반 온디바이스 모델

      Jacob 25.06.03
      2,348 2 2
      DEVOTEE 요약
      본 블로그는 인터넷 없이도 AI 모델을 실행하는 온디바이스 AI와 Apple Silicon에 최적화된 MLX 프레임워크를 소개합니다. 온디바이스 AI는 개인정보 보호와 빠른 응답, 오프라인 사용이 장점이며, MLX는 Apple 디바이스에서 최적화된 성능과 Swift와의 호환성을 제공하여 AI 앱 개발을 효율적으로 지원합니다. MLX를 사용할 때는 모델의 크기, 메모리 관리, 성능 최적화를 고려해야 하며, 이는 iOS 앱에 AI 기능을 통합하는 좋은 선택지가 될 수 있습니다.
      DEVOTEE 추천 블로그

      인터넷 없이도 똑똑한 iOS 앱, MLX로 만들기

      안녕하세요.

      이번 포스팅에서는 iOS 개발 환경에서 주목받고 있는 온디바이스(On-device) AI 모델 실행 방식과,

      Apple Silicon에 최적화된 머신러닝 프레임워크 MLX에 대해 소개합니다.

      기술적 배경이 없는 비개발자부터 전문 개발자까지 모두 쉽게 이해할 수 있도록 구성했습니다.


      1. 온디바이스(On-device) AI란?

      온디바이스 AI는 인터넷 연결 없이 스마트폰이나 태블릿과 같은 기기에서

      직접 인공지능(AI) 모델을 실행하여 데이터를 처리하는 기술입니다.

      데이터를 외부로 전송하지 않기 때문에 보안 측면에서 우수하며, 빠르고 안정적인 사용자 경험을 제공합니다.

      온디바이스 AI의 주요 장점

      개인 정보 보호

      데이터가 기기 외부로 전송되지 않기 때문에 개인정보 유출 위험이 낮습니다.

      즉각적인 응답 속도

      네트워크 상태와 무관하게 빠른 응답을 제공할 수 있습니다.

      네트워크 독립성

      오프라인 환경에서도 AI 기능을 사용할 수 있어 활용 범위가 넓습니다.


      2. MLX란?

      image.png

      MLX는 Apple Silicon 기반의 기기에서 머신러닝 모델을 효과적으로 실행하기 위해 설계된

      경량화된 머신러닝 프레임워크입니다.

      PyTorch, TensorFlow처럼 배열 기반 연산을 지원하며,

      특히 Apple 하드웨어(iOS 및 macOS)에서 최적화된 성능을 제공합니다.


      MLX의 특징

      image.png

      Apple Silicon 최적화

      iPhone, iPad, Mac 등에서 높은 성능과 전력 효율을 제공합니다.

      모델 학습 및 추론 지원

      모델을 학습하거나 추론하는 작업을 모두 기기 내에서 수행할 수 있습니다.

      Swift와의 뛰어난 호환성

      Swift, SwiftUI와 쉽게 통합되어 앱 개발 생산성이 높아집니다.


      지원 모델

      현재 MLX는 다음과 같은 다양한 LLM을 지원하고 있습니다:

      image.png

      자세한 지원 모델은 Hugging Face MLX 문서에서 확인할 수 있습니다.


      3. Swift 구현

      SPM을 통해 MLX 라이브러리 추가

      .package(
          url: "https://github.com/ml-explore/mlx-swift-examples",
          exact: "2.21.2"
      )
      .product(name: "MLXLLM", package: "mlx-swift-examples")


      모델 로드

      // 모델이 사용하는 캐시 제한
      MLX.GPU.set(cacheLimit: 20 * 1024 * 1024)
      
      // HF에서 MLX로 구현된 llm 모델을 다운로드 후 사용
      let modelConfiguration = LLMRegistry.qwen2_5_1_5b
      // local에 저장된 모델도 사용 가능 
      //let modelConfiguration = ModelConfiguration(directory: URL(fileURLWithPath: resourcePath))
      
      // 모델 다운로드
      let modelContainer = try await LLMModelFactory.shared.loadContainer(
          configuration: modelConfiguration
      ) {
          [modelConfiguration] progress in
          Task { @MainActor in
              self.modelInfo =
                  "Downloading \(modelConfiguration.name): \(Int(progress.fractionCompleted * 100))%"
          }
      }
      
      // modelContainer 객체를 통해 사용


      Inference (추론 실행)

      
      try await modelContainer.perform { (context: ModelContext) -> Void in
          let lmInput = try await context.processor.prepare(input: userInput)
          let stream = try MLXLMCommon.generate(input: lmInput, parameters: generateParameters, context: context)
          // generate and output in batches
          for await batch in stream._throttle(for: updateInterval, reducing: Generation.collect) {
              let output = batch.compactMap { $0.chunk }.joined(separator: "")
              if !output.isEmpty {
                  Task { @MainActor [output] in
                      self.output += output
                  }
              }
      
              if let completion = batch.compactMap({ $0.info }).first {
                  Task { @MainActor in
                      self.stat = "\(completion.tokensPerSecond) tokens/s"
                  }
              }
          }
      }


      모델 언로드 (메모리 해제)

      // model unload를 위해 제공되는 API는 없습니다.
      modelContainer = nil
      // cache를 제거해 메모리 공간 확보
      MLX.GPU.set(cacheLimit: 0)
      MLX.GPU.clearCache()


      4. MLX 기반 개발 시 유의사항

      온디바이스 AI는 성능과 효율 모두 중요합니다. MLX를 활용해 개발할 때 다음 사항을 고려해보세요.

      모델 크기와 성능의 균형

      • 모델이 너무 크면 앱 성능이 저하되거나 충돌이 발생할 수 있습니다.

      • 가능한 한 경량화된 모델을 선택하고, 양자화(quantization) 또는 프루닝(pruning) 기법을 통해 최적화하세요.

      • 경우에 따라 사전 학습 모델을 파인튜닝(fine-tuning) 해 실제 사용 시 연산량을 줄일 수 있습니다.

      메모리 관리

      • 실시간 입력 처리(예: 음성 스트리밍)에서는 버퍼 관리가 핵심입니다.

      • 입력/출력 데이터는 정제된 형태로 전달하고, 불필요한 중간 캐시는 즉시 해제하세요.

      • 모델을 여러 번 호출하는 구조라면, 인스턴스를 재사용하거나 컨텍스트를 관리하는 방식도 고려할 수 있습니다.


      5. 테스트 영상

      첨부


      6. MLX의 미래와 전망

      궁극적으로 MLX는 Apple 생태계에서의 온디바이스 AI 구현을 훨씬 더 실용적으로 만들어주는 도구입니다.

      개발자에게는 성능과 프라이버시를 모두 챙길 수 있는 좋은 선택지가 될 수 있습니다.

      iOS 기반 앱에 AI 기능을 통합하고자 한다면 MLX는 반드시 눈여겨볼 만한 프레임워크입니다.


      Github MLX

      Github MLX Swift

      Github MLX Swift Examples

      Hugging Face - MLX Hub


      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Jacob 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기