피드로 돌아가기
WWDC 24: Running Mistral 7B with Core ML
Hugging Face BlogHugging Face Blog
AI/ML

Apple가 WWDC 24에서 Core ML의 Swift Tensor와 Stateful Buffers를 도입해 Mistral 7B(70억 파라미터 LLM)을 Mac에서 4GB 미만의 메모리로 실행 가능하게 변화

WWDC 24: Running Mistral 7B with Core ML

2024년 7월 22일12intermediate

Context

Core ML의 기존 MLMultiArray와 MLShapedArray는 데이터 저장과 모델 입출력만 지원했으며, 텐서 데이터 조작은 저수준 포인터 접근이 필요해 시간이 많이 걸리고 오류 유발이 쉬웠다. 언어 모델처럼 이전 계산 결과에 의존하는 상태를 유지해야 할 때는 상태 데이터를 매번 입출력으로 송수신해야 해 오버헤드가 발생했다.

Technical Solution

  • Swift Tensor 타입 도입: Python의 numpy 배열이나 torch 텐서처럼 고수준 인터페이스를 제공하는 새로운 MLTensor 데이터 타입으로 다차원 배열 조작 단순화
  • 내장 연산 제공: softmax 같은 자주 사용되는 텐서 연산을 Core ML에 기본 포함시켜 custom 코드 제거
  • Stateful Buffers 추가: 이전 계산 결과를 모델 내부에 유지할 수 있도록 해 상태 데이터를 매번 입출력으로 주고받지 않도록 변경
  • Int4 양자화 적용: Mistral 7B 모델을 Hugging Face에서 제공하는 Pre-converted Core ML 모델로 받아 메모리 사용량 감소
  • swift-transformers 라이브러리 활용: WWDC 24 새 기능을 활용한 preview 브랜치에서 LLM 추론 구현

Impact

Mistral 7B(70억 파라미터)를 Mac에서 4GB 미만의 메모리로 실행.

Key Takeaway

오픈소스 LLM을 Apple Silicon에서 효율적으로 실행하려면 단순히 모델만 이식하는 것이 아니라 Core ML의 새로운 고수준 추상화(Swift Tensor, Stateful Buffers)를 활용한 구조 설계와 Int4 양자화 같은 최적화를 함께 적용해야 한다. 수직 통합된 소프트웨어 스택이 소비자 하드웨어에서 대규모 LLM 실행을 가능하게 한다.


macOS Sequoia 또는 iOS 18을 대상으로 하는 개발자는 MLTensor 타입을 사용해 기존 MLMultiArray 기반 저수준 포인터 조작 코드를 제거할 수 있고, Stateful Buffers로 매번 상태를 송수신하지 않아도 되므로 추론 오버헤드를 줄일 수 있다. swift-transformers 미리보기 브랜치의 Mistral 예제를 참고해 자신의 미세조정된 모델을 Core ML로 변환하고 On-Device에서 실행할 수 있다.

원문 읽기