Swift Transformers 출시: Apple 기기에서 온디바이스 LLM 실행
오늘 출시됨
Hugging Face가 swift-transformers, swift-chat, 업데이트된 exporters, 업데이트된 transformers-to-coreml Space, 그리고 Llama 2 7B와 Falcon 7B의 Core ML 버전을 출시하여 Apple 기기에서 온디바이스 LLM 실행을 가능하게 했습니다.
The swift-transformers package is an in‑progress Swift library that aims to provide a transformers‑like API for text generation. The swift‑chat app demonstrates how to use it. The exporters Python package and the transformers-to-coreml Space have been updated to convert models such as Llama 2 and Falcon to Core ML. Ready‑to‑use Core ML models, including Llama‑2-7b-chat-coreml and Falcon-7b-instruct, are available on the Hub.
작업 개요
Apple 기기에서 LLM을 실행하는 것은 Core ML로 모델 변환, 속도와 메모리 최적화, 토큰화, 모델 로드 및 텍스트 생성을 위한 Swift‑친화적 API 제공을 포함합니다. 변환은 첫 번째 단계이지만, 최적화와 사용 가능한 Swift 인터페이스는 igualmente 중요합니다. 이 게시물은 각 영역을 단계별로 안내하며, 이미 존재하는 도구와 아직 필요한 작업 부분을 지적합니다.
Core ML로 변환
Llama 2와 같은 모델을 Core ML로 변환하는 것은 transformers-to-coreml Space, exporters Python 패키지, 또는 직접 coremltools를 사용하여 수행할 수 있으며, Llama 2 코드의 타입 불일치 문제를 수정한 후 프로세스가 성공했습니다. 권장되는 접근 방식은 먼저 no‑code transformers-to-coreml Space를 시도하는 것이며, 실패하면 더 많은 제어를 위해 exporters를 사용하고, 최대 유연성을 위해 coremltools로 fallback하는 것입니다. Llama 2의 경우, 이전 실패를 해결한 후 세 가지 방법 모두에서 변환이 성공했습니다.
중요한 교훈
coremltools를 사용해야 한다면 최신 버전인 7.0b1을 사용하세요. 베타임에도 불구하고 안정적이며, 수정이 포함되어 있고, PyTorch 2를 지원하며, 고급 양자화 도구를 제공합니다. exporters는 이제 텍스트 생성 작업 변환 시 출력에 softmax를 적용하지 않습니다. 이는 일부 생성 알고리즘에 필요했기 때문입니다. exporters는 이제 텍스트 모델에 대해 고정 시퀀스 길이를 기본값으로 사용합니다. 유연한 형태는 CPU에서만 실행되고 GPU나 Neural Engine에서는 실행되지 않으므로, GPU/Neural Engine 실행에는 고정 형태가 필요합니다.
최적화
Core ML LLM에 대한 주요 최적화 전략은 키‑값 페어 캐싱, 유연한 입력 대신 discrete fixed shapes 사용, 그리고 6‑bit 팔레타이제이션 또는 mixed‑bit 양자화와 같은 양자화 기술 적용입니다. 캐싱이 없으면 모델은 매 단계마다 전체 기록에 대한 attention scores를 다시 계산합니다. discrete shapes를 사용하면 유연한 입력의 CPU‑only 제한을 피할 수 있으며, 캐싱과 결합하면 더 큰 컨텍스트 크기를 가능하게 합니다. 양자화는 모델 크기와 리소스 사용량을 줄이며, 6‑bit 팔레타이제이션과 mixed‑bit 양자화는 유망한 접근 방식으로 강조됩니다.
swift-transformers
swift-transformers 패키지는 Swift‑네이티브 토크나이저 모듈, Hub‑인식 모델 래퍼, 그리고 증가하는 모델 집합에 대한 기본 생성 알고리즘(greedy 및 top‑k 샘플링)을 제공합니다.
토크나이저
토큰화는 텍스트를 모델이 사용할 수 있는 ID로 변환하고 다시 되돌립니다. swift-transformers는 actualmente GPT, Falcon, Llama 모델에서 사용되는 BPE 토크나이저를 지원하며, Hugging Face 토크나이저 라이브러리를 반영하는 코드를 제공합니다. 예시 사용법:
import Tokenizers
func testTokenizer() async throws {
let tokenizer = try await AutoTokenizer.from(pretrained: "pcuenq/Llama-2-7b-chat-coreml
let inputIds = tokenizer("Today she took a train to the West
assert(inputIds == [1, 20628, 1183, 3614, 263, 7945, 304, 278, 3122])
}
모델 및 Hub 래퍼
LanguageModel 프로토콜은 텍스트 생성을 위한 Core ML 모델을 간단히 래핑합니다. Hub 모듈은 변환 과정에서 Core ML 모델에 추가된 사용자 정의 메타데이터 필드를 사용하여 Hub에서 토크나이저 및 구성 파일을 다운로드합니다(이것은 exporters와 Space에서 자동으로 추가됩니다).
생성 알고리즘
두 가지 디코딩 전략이 구현되었습니다: greedy decoding(항상 가장 높은 확률의 토큰 선택)과 top‑k sampling(온도에 따라 변동성을 조절하면서 상위 k개 토큰에서 무작위로 샘플링). nucleus sampling과 같은 추가 방법은 계획 중입니다.
지원되는 모델
지금까지 이 패키지는 Llama 2, Falcon, StarCoder(GPT‑변형), 그리고 GPT2, distilgpt, GPT‑NeoX, GPT‑J을 포함한 GPT 계열 모델에서 테스트되었습니다.
swift-chat
swift-chat 데모 앱은 Swift 프로젝트에서 swift-transformers를 통합하는 방법을 보여주며, Hub에서 Core ML 모델을 로드하고 자동 메타데이터 다운로드를 통해 텍스트 생성을 실행합니다. 모델을 선택한 후, 앱은 필요한 구성 파일을 다운로드하고 Core ML을 통해 모델을 컴파일(결과 캐싱)한 후 생성을 실행합니다. UI는 의도적으로 간단하며 시스템 프롬프트와 같은 기능을 아직 지원하지 않습니다.
누락된 부분 / 향후 계획
향후 작업에서는 encoder‑decoder 모델 지원, Unigram 및 WordPiece 토크나이저, 추가 생성 전략, key‑value 캐싱, 그리고 더 큰 컨텍스트를 위한 discrete shape 변환이 추가될 예정입니다. 팀은 issues, pull requests, 또는 저장소에 대한 피드백을 통해 기여를 환영합니다.
결론
이러한 도구는 Swift 개발자가 Apple 앱에 온디바이스 LLM을 도입할 수 있는 시작점을 제공하며, 팀은 이를 개선하기 위해 커뮤니티의 기여를 환영합니다.