netdur/llama_cpp_dart
dart binding for llama.cpp
해결하는 문제
llama_cpp_dart는 llama.cpp용 고성능 Dart FFI 바인딩을 제공하며, 특히 iOS 및 Android의 Flutter 모바일 앱에 대규모 언어 모델(LLM)을 직접 통합하기 위해 최적화되어 있습니다. CMake 또는 Android NDK와 같은 네이티브 빌드 툴체인을 수동으로 관리하는 복잡성을 제거하기 위해, Snapdragon Hexagon NPU를 포함한 다양한 모바일 플랫폼용 사전 빌드된 바이너리를 제공합니다.
작동 방식
이 프로젝트는 Dart와 C++ llama.cpp 라이브러리 사이의 다리 역할을 합니다. 추론을 별도의 워커 이소레이트에서 실행하여, 토큰 생성 중에도 사용자 인터페이스(UI)가 반응성을 유지할 수 있도록 합니다. Dart 스트림을 통해 스트리밍 출력을 지원하며, mtmd 라이브러리를 통해 이미지 및 오디오 입력을 다중 모달로 처리합니다. 제한된 모바일 기기의 메모리 관리를 위해 KV 캐시 양자화를 구현하여, 제한된 RAM 내에서 더 긴 컨텍스트를 수용할 수 있도록 합니다.
대상 사용자
클라우드 API에 의존하지 않고, 모바일 앱에 로컬로 실행되는 AI 기능(예: 채팅, 비전, 오디오 처리)을 통합하고자 하는 Flutter 개발자.
주요 특징
- 모바일 중심 가속화: Apple Metal, Android CPU, Snapdragon Hexagon NPU/OpenCL 지원.
- 비동기 추론: UI 차단을 방지하기 위해 전용
LlamaEngine워커 이소레이트 사용. - 다중 모달 지원: 모델 내에서 이미지 및 오디오 비트맵을 직접 처리 가능.
- 메모리 최적화: KV 캐시 양자화(
q8_0,iq4_nl등)를 통해 긴 컨텍스트에 대한 RAM 사용량 감소. - 상태 지속성: 대화 기록과 KV 캐시를 단일 메타데이터 검증 파일에 저장 및 복원 가능.
- 고급 LLM 기능: 추측적 디코딩, 컨텍스트 이동(자동 이동), 통합 Jinja 채팅 템플릿 포함.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- Dispatch
- 프로젝트