로드맵 / 프로젝트 현황 / 선언문 / ggml
순수 C/C++에서 Meta의 LLaMA 모델(및 기타 모델) 추론
libllama
API에 대한 변경 로그
llama-server
REST API에 대한 변경 로그
GGUF-my-LoRA #10123을 소개합니다
포옹 얼굴 추론 엔드포인트는 이제 즉시 GGUF를 지원합니다! #9669
포옹 얼굴 GGUF 편집자: 토론 | 도구
llama.cpp
의 주요 목표는 로컬 및 클라우드의 다양한 하드웨어에서 최소한의 설정과 최첨단 성능으로 LLM 추론을 활성화하는 것입니다.
종속성이 없는 일반 C/C++ 구현
Apple 실리콘은 ARM NEON, Accelerate 및 Metal 프레임워크를 통해 최적화된 일류 시민입니다.
x86 아키텍처에 대한 AVX, AVX2, AVX512 및 AMX 지원
추론 속도를 높이고 메모리 사용량을 줄이기 위한 1.5비트, 2비트, 3비트, 4비트, 5비트, 6비트 및 8비트 정수 양자화
NVIDIA GPU에서 LLM을 실행하기 위한 맞춤형 CUDA 커널(HIP를 통한 AMD GPU 및 MUSA를 통한 Moore Threads MTT GPU 지원)
Vulkan 및 SYCL 백엔드 지원
전체 VRAM 용량보다 큰 모델을 부분적으로 가속하는 CPU+GPU 하이브리드 추론
프로젝트가 시작된 이래 많은 기여 덕분에 이 프로젝트는 크게 개선되었습니다. ggml 라이브러리의 새로운 기능을 개발하기 위한 주요 놀이터입니다.
지원되는 모델:
일반적으로 아래 기본 모델의 미세 조정도 지원됩니다.
라마?
LLaMA 2 ??
라마 3 ???
미스트랄 7B
믹스트랄 MoE
DBRX
매
중국어 LLaMA/알파카 및 중국어 LLaMA-2/Alpaca-2
비고뉴(프랑스어)
버트
코알라
Baichuan 1 & 2 + 파생
아퀼라 1 & 2
스타코더 모델
리팩트
MPT
꽃
이순신 모델
StableLM 모델
Deepseek 모델
Qwen 모델
PLAMo-13B
파이 모델
GPT-2
오리온 14B
인턴LM2
코드쉘
아체
맘바
그록-1
엑스버스
Command-R 모델
바다사자
GritLM-7B + GritLM-8x7B
OLMo
올모에
화강암 모델
GPT-NeoX + 피티아
눈송이-북극 환경부
스마우그
포로 34B
Bitnet b1.58 모델
플랜 T5
Elm 모델 열기
채팅GLM3-6b + 채팅GLM4-9b
SmolLM
EXAONE-3.0-7.8B-지시
FalconMamba 모델
자이스
비엘릭-11B-v2.3
RWKV-6
(더 많은 모델을 지원하기 위한 지침: HOWTO-add-model.md)
다중 모드 모델:
LLaVA 1.5 모델, LLaVA 1.6 모델
박라VA
흑요석
공유GPT4V
MobileVLM 1.7B/3B 모델
이-VL
미니 CPM
문드림
토끼
바인딩:
파이썬: abetlen/llama-cpp-python
이동: go-skynet/go-llama.cpp
Node.js: withcatai/node-llama-cpp
JS/TS(llama.cpp 서버 클라이언트): lgrammel/modelfusion
JS/TS(프로그래밍 가능한 프롬프트 엔진 CLI): 오프라인-ai/cli
JavaScript/Wasm(브라우저에서 작동): tangledgroup/llama-cpp-wasm
Typescript/Wasm(npm에서 사용 가능한 더 좋은 API): ngxson/wllama
루비: yoshoku/llama_cpp.rb
Rust(더 많은 기능): edgenai/llama_cpp-rs
Rust(더 좋은 API): mdrokz/rust-llama.cpp
Rust(보다 직접적인 바인딩):utilai/llama-cpp-rs
C#/.NET: SciSharp/LLamaSharp
C#/VB.NET(추가 기능 - 커뮤니티 라이센스): LM-Kit.NET
스칼라 3: donderom/llm4s
클로저: phronmophobic/llama.clj
리액트 네이티브: mybigday/llama.rn
자바: kherud/java-llama.cpp
지그: deins/llama.cpp.zig
Flutter/Dart: netdur/llama_cpp_dart
PHP(llama.cpp를 기반으로 구축된 API 바인딩 및 기능): distancemagic/resonance(추가 정보)
간계 계획: guile_llama_cpp
스위프트 srgtuszy/llama-cpp-swift
Swift ShenghaiWang/SwiftLlama
UI:
달리 명시하지 않는 한 이러한 프로젝트는 허용된 라이선스를 갖춘 오픈 소스입니다.
MindWorkAI/AI-스튜디오(FSL-1.1-MIT)
아이오허브/콜라마
janhq/jan (AGPL)
nat/오픈플레이그라운드
패러데이(독점)
LMStudio(고유)
레일라(고유)
라말라마(MIT)
로컬AI(MIT)
LostRuins/koboldcpp (AGPL)
Mozilla-Ocho/llama파일
nomic-ai/gpt4all
올라마/올라마
oobabooga/텍스트 생성-webui(AGPL)
psugihara/FreeChat
cztomsik/ava (MIT)
프소찬타리스/에멜탈
파이톱스/테네레(AGPL)
RAGNA 데스크탑(독점)
RecurseChat(독점)
셈페라이/아미카
카타이/카타이와 함께
모바일-인공지능/메이드(MIT)
엠스티(고유)
LLMF팜(MIT)
KanTV(Apachev2.0 이상)
도트(GPL)
마인드맥(독점)
코디봇(GPL)
에바(MIT)
AI Sublime Text 플러그인(MIT)
AIKit(MIT)
LARS - LLM 및 고급 참조 솔루션(AGPL)
LLMUnity(MIT)
라마 도우미(GPL)
PocketPal AI - iOS 및 Android 앱(MIT)
(여기에 프로젝트를 나열하려면 llama.cpp
에 의존한다는 점을 명확하게 명시해야 합니다)
도구:
akx/ggify – HuggingFace Hub에서 PyTorch 모델을 다운로드하고 GGML로 변환합니다.
akx/ollama-dl – Ollama 라이브러리에서 모델을 다운로드하여 llama.cpp에서 직접 사용할 수 있습니다.
crashr/gppm – 유휴 전력 소비를 줄인 NVIDIA Tesla P40 또는 P100 GPU를 활용하여 llama.cpp 인스턴스를 시작합니다.
gpustack/gguf-parser - GGUF 파일을 검토/확인하고 메모리 사용량을 추정합니다.
Styled Lines(사전 빌드된 모바일 및 웹 플랫폼 래퍼와 모델 예제가 포함된 Unity3d의 게임 개발을 위한 추론 부분의 독점 라이선스, 비동기 래퍼)
하부 구조:
Paddler - llama.cpp에 맞게 맞춤화된 상태 저장 로드 밸런서
GPUStack - LLM 실행을 위한 GPU 클러스터 관리
llama_cpp_canister - WebAssembly를 사용하여 인터넷 컴퓨터에서 스마트 계약으로 사용되는 llama.cpp
계략:
Lucy's Labyrinth - AI 모델에 의해 제어되는 에이전트가 당신을 속이려고 하는 간단한 미로 게임입니다.
$ make -j && ./llama-cli -m models/llama-13b-v2/ggml-model-q4_0.gguf -p "Building a website can be done in 10 simple steps:nStep 1:" -n 400 -e I llama.cpp build info: I UNAME_S: Darwin I UNAME_P: arm I UNAME_M: arm64 I CFLAGS: -I. -O3 -std=c11 -fPIC -DNDEBUG -Wall -Wextra -Wpedantic -Wcast-qual -Wdouble-promotion -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes -pthread -DGGML_USE_K_QUANTS -DGGML_USE_ACCELERATE I CXXFLAGS: -I. -I./common -O3 -std=c++11 -fPIC -DNDEBUG -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wno-multichar -pthread -DGGML_USE_K_QUANTS I LDFLAGS: -framework Accelerate I CC: Apple clang version 14.0.3 (clang-1403.0.22.14.1) I CXX: Apple clang version 14.0.3 (clang-1403.0.22.14.1) make: Nothing to be done for `default'. main: build = 1041 (cf658ad) main: seed = 1692823051 llama_model_loader: loaded meta data with 16 key-value pairs and 363 tensors from models/llama-13b-v2/ggml-model-q4_0.gguf (version GGUF V1 (latest)) llama_model_loader: - type f32: 81 tensors llama_model_loader: - type q4_0: 281 tensors llama_model_loader: - type q6_K: 1 tensors llm_load_print_meta: format = GGUF V1 (latest) llm_load_print_meta: arch = llama llm_load_print_meta: vocab type = SPM llm_load_print_meta: n_vocab = 32000 llm_load_print_meta: n_merges = 0 llm_load_print_meta: n_ctx_train = 4096 llm_load_print_meta: n_ctx = 512 llm_load_print_meta: n_embd = 5120 llm_load_print_meta: n_head = 40 llm_load_print_meta: n_head_kv = 40 llm_load_print_meta: n_layer = 40 llm_load_print_meta: n_rot = 128 llm_load_print_meta: n_gqa = 1 llm_load_print_meta: f_norm_eps = 1.0e-05 llm_load_print_meta: f_norm_rms_eps = 1.0e-05 llm_load_print_meta: n_ff = 13824 llm_load_print_meta: freq_base = 10000.0 llm_load_print_meta: freq_scale = 1 llm_load_print_meta: model type = 13B llm_load_print_meta: model ftype = mostly Q4_0 llm_load_print_meta: model size = 13.02 B llm_load_print_meta: general.name = LLaMA v2 llm_load_print_meta: BOS token = 1 '<s>' llm_load_print_meta: EOS token = 2 '</s>' llm_load_print_meta: UNK token = 0 '<unk>' llm_load_print_meta: LF token = 13 '<0x0A>' llm_load_tensors: ggml ctx size = 0.11 MB llm_load_tensors: mem required = 7024.01 MB (+ 400.00 MB per state) ................................................................................................... llama_new_context_with_model: kv self size = 400.00 MB llama_new_context_with_model: compute buffer total size = 75.41 MB system_info: n_threads = 16 / 24 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 | sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.800000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000 generate: n_ctx = 512, n_batch = 512, n_predict = 400, n_keep = 0 Building a website can be done in 10 simple steps: Step 1: Find the right website platform. Step 2: Choose your domain name and hosting plan. Step 3: Design your website layout. Step 4: Write your website content and add images. Step 5: Install security features to protect your site from hackers or spammers Step 6: Test your website on multiple browsers, mobile devices, operating systems etc… Step 7: Test it again with people who are not related to you personally – friends or family members will work just fine! Step 8: Start marketing and promoting the website via social media channels or paid ads Step 9: Analyze how many visitors have come to your site so far, what type of people visit more often than others (e.g., men vs women) etc… Step 10: Continue to improve upon all aspects mentioned above by following trends in web design and staying up-to-date on new technologies that can enhance user experience even further! How does a Website Work? A website works by having pages, which are made of HTML code. This code tells your computer how to display the content on each page you visit – whether it’s an image or text file (like PDFs). In order for someone else’s browser not only be able but also want those same results when accessing any given URL; some additional steps need taken by way of programming scripts that will add functionality such as making links clickable! The most common type is called static HTML pages because they remain unchanged over time unless modified manually (either through editing files directly or using an interface such as WordPress). They are usually served up via HTTP protocols – this means anyone can access them without having any special privileges like being part of a group who is allowed into restricted areas online; however, there may still exist some limitations depending upon where one lives geographically speaking. How to llama_print_timings: load time = 576.45 ms llama_print_timings: sample time = 283.10 ms / 400 runs ( 0.71 ms per token, 1412.91 tokens per second) llama_print_timings: prompt eval time = 599.83 ms / 19 tokens ( 31.57 ms per token, 31.68 tokens per second) llama_print_timings: eval time = 24513.59 ms / 399 runs ( 61.44 ms per token, 16.28 tokens per second) llama_print_timings: total time = 25431.49 ms
다음은 단일 M1 Pro MacBook에서 LLaMA-7B와 Whisper.cpp를 모두 실행하는 또 다른 데모입니다.
다음은 지원되는 대부분의 모델에 대한 엔드투엔드 바이너리 빌드 및 모델 변환 단계입니다.
먼저 바이너리를 구해야 합니다. 따를 수 있는 방법은 다양합니다.
방법 1: 이 저장소를 복제하고 로컬로 빌드합니다. 빌드 방법을 확인하세요.
방법 2: MacOS 또는 Linux를 사용하는 경우 Brew, flox 또는 nix를 통해 llama.cpp를 설치할 수 있습니다.
방법 3: Docker 이미지 사용, Docker 설명서 참조
방법 4: 릴리스에서 사전 빌드된 바이너리 다운로드
다음 명령을 사용하여 기본 완성을 실행할 수 있습니다.
llama-cli -m your_model.gguf -p "나는 삶의 의미를 믿는다" -n 128# 출력:# 나는 삶의 의미가 자신의 진실을 찾고 그에 따라 사는 것이라고 믿습니다. 나에게 이는 사회적 기대와 일치하지 않더라도 나 자신에게 진실하고 열정을 따르는 것을 의미합니다. 저는 그것이 제가 요가를 좋아하는 이유라고 생각합니다. 그것은 육체적인 수련일 뿐만 아니라 영적인 수련이기도 합니다. 그것은 자신과 연결되고, 내면의 목소리에 귀를 기울이고, 자신의 독특한 여정을 존중하는 것입니다.
매개변수의 전체 목록은 이 페이지를 참조하세요.
ChatGPT와 더 유사한 경험을 원한다면 -cnv
매개변수로 전달하여 대화 모드에서 실행할 수 있습니다.
llama-cli -m your_model.gguf -p "당신은 도움이 되는 조수입니다" -cnv# 출력:# > 안녕하세요, 당신은 누구입니까?# 안녕하세요! 나는 당신의 도움이 되는 조수입니다! 저는 여러분과 같은 사용자에게 정보를 지원하고 제공하도록 설계된 AI 기반 챗봇입니다. 저는 귀하의 질문에 답변하고 지침을 제공하며 다양한 주제에 대한 지원을 제공하기 위해 왔습니다. 저는 친절하고 지식이 풍부한 AI이며, 필요한 모든 것을 항상 기꺼이 도와드리겠습니다. 무슨 생각을 하고 계시나요? 오늘은 어떻게 도와드릴까요?## > 1+1이 무엇인가요?# 진정하세요! 1+1의 답은... 2!
기본적으로 채팅 템플릿은 입력 모델에서 가져옵니다. 다른 채팅 템플릿을 사용하려면 --chat-template NAME
매개변수로 전달하세요. 지원되는 템플릿 목록 보기
./llama-cli -m your_model.gguf -p "당신은 도움이 되는 조수입니다" -cnv --chat-template chatml
접두사, 접미사 및 역방향 프롬프트 매개변수를 통해 자신만의 템플릿을 사용할 수도 있습니다.
./llama-cli -m your_model.gguf -p "당신은 도움이 되는 조수입니다." -cnv --in-prefix '사용자: ' --reverse-prompt '사용자:'
llama.cpp 웹 서버는 로컬 모델을 제공하고 기존 클라이언트에 쉽게 연결하는 데 사용할 수 있는 경량 OpenAI API 호환 HTTP 서버입니다.
사용 예:
./llama-server -m your_model.gguf --port 8080# 기본 웹 UI는 브라우저를 통해 액세스할 수 있습니다: http://localhost:8080# 채팅 완료 엔드포인트: http://localhost:8080/v1/chat/completions
메모
기본적인 사용법을 선호한다면 대화형 모드 대신 대화 모드를 사용해 보세요.
이 모드에서는 Ctrl+C를 누르고 하나 이상의 텍스트 줄을 입력하여 생성을 중단할 수 있습니다. 텍스트 줄은 토큰으로 변환되어 현재 컨텍스트에 추가됩니다. -r "reverse prompt string"
매개변수를 사용하여 역방향 프롬프트를 지정할 수도 있습니다. 이로 인해 생성 시 역방향 프롬프트 문자열의 정확한 토큰이 발견될 때마다 사용자 입력이 프롬프트됩니다. 일반적인 용도는 LLaMA가 여러 사용자(예: Alice와 Bob) 간의 채팅을 에뮬레이트하고 -r "Alice:"
전달하도록 하는 프롬프트를 사용하는 것입니다.
다음은 명령으로 호출되는 몇 번의 상호작용의 예입니다.
# 7B 모델을 사용하는 기본 인수./examples/chat.sh# 13B 모델을 사용하는 고급 채팅./examples/chat-13B.sh# 13B 모델을 사용하는 사용자 지정 인수./llama-cli -m ./models/13B/ ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "사용자:" -f 프롬프트/chat-with-bob.txt
사용자 입력과 생성된 텍스트를 구별하려면 --color
를 사용하십시오. 다른 매개변수는 llama-cli
예제 프로그램의 README에 자세히 설명되어 있습니다.
--prompt-cache
및 --prompt-cache-all
을 활용하여 ./llama-cli
호출 전반에 걸쳐 프롬프트, 사용자 입력 및 모델 생성을 저장하고 재개할 수 있습니다. ./examples/chat-persistent.sh
스크립트는 장기 실행, 재개 가능한 채팅 세션 지원을 통해 이를 보여줍니다. 이 예제를 사용하려면 초기 채팅 프롬프트를 캐시할 파일과 채팅 세션을 저장할 디렉터리를 제공해야 하며 선택적으로 chat-13B.sh
와 동일한 변수를 제공할 수 있습니다. 새 채팅 세션에 동일한 프롬프트 캐시를 재사용할 수 있습니다. 프롬프트 캐시와 채팅 디렉터리는 모두 초기 프롬프트( PROMPT_TEMPLATE
)와 모델 파일에 연결되어 있습니다.
# 새 채팅 시작PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-pertant.sh# 채팅 재개PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat- persist.sh# 동일한 내용으로 다른 채팅을 시작합니다. 프롬프트/modelPROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/another ./examples/chat-percious.sh# 다양한 프롬프트 캐시/모델PROMPT_TEMPLATE=./prompts/chat-with-bob.txt PROMPT_CACHE_FILE=bob. 프롬프트.bin CHAT_SAVE_DIR=./chat/bob ./examples/chat-pertant.sh
llama.cpp
모델 출력을 제한하는 문법을 지원합니다. 예를 들어 모델이 JSON만 출력하도록 강제할 수 있습니다.
./llama-cli -m ./models/13B/ggml-model-q4_0.gguf -n 256 --grammar-file Grammars/json.gbnf -p '요청: 오후 8시에 통화 예약; 명령:'
grammars/
폴더에는 몇 가지 샘플 문법이 포함되어 있습니다. 직접 작성하려면 GBNF 가이드를 확인하세요.
더 복잡한 JSON 문법을 작성하려면 로컬 사용을 위해 저장할 수 있는 GBNF 문법으로 컴파일하는 TypeScript 인터페이스를 작성할 수 있는 브라우저 앱인 https://grammar.intrinsiclabs.ai/를 확인해 보세요. 이 앱은 커뮤니티 구성원에 의해 구축되고 유지 관리됩니다. 이 저장소가 아닌 해당 저장소에 문제나 FR을 제출하십시오.
로컬에서 llama.cpp 빌드를 참조하세요.
백엔드 | 대상 장치 |
---|---|
금속 | 애플실리콘 |
BLAS | 모두 |
블리스 | 모두 |
SYCL | 인텔과 엔비디아 GPU |
무사 | 무어 스레드 MTT GPU |
쿠다 | 엔비디아 GPU |
hipBLAS | AMD GPU |
불칸 | GPU |
칸 | NPU 상승 |
메모
Hugging Face의 GGUF-my-repo 공간을 사용하여 설정 없이도 모델 가중치를 정량화할 수 있습니다. 6시간마다 llama.cpp
메인에서 동기화됩니다.
공식 LLaMA 2 가중치를 얻으려면 Facebook LLaMA 2 모델 획득 및 사용 섹션을 참조하세요. Hugging Face에는 다양한 사전 양자화된 gguf
모델이 있습니다.
참고: convert.py
examples/convert_legacy_llama.py
로 이동되었으며 Llama/Llama2/Mistral
모델 및 그 파생 모델 이외의 다른 용도로는 사용하면 안 됩니다. LLaMA 3을 지원하지 않습니다. Hugging Face에서 다운로드한 LLaMA 3와 함께 convert_hf_to_gguf.py
사용할 수 있습니다.
양자화 모델에 대해 자세히 알아보려면 이 문서를 읽어보세요.
perplexity
예를 사용하여 주어진 프롬프트에 대한 당혹감을 측정할 수 있습니다(복잡도가 낮을수록 좋습니다). 자세한 내용은 https://huggingface.co/docs/transformers/perplexity를 참조하세요.
llama.cpp를 사용하여 혼란을 측정하는 방법에 대해 자세히 알아보려면 이 문서를 읽어보세요.
기여자는 PR을 열 수 있습니다.
공동 작업자는 llama.cpp
저장소의 브랜치로 푸시하고 PR을 master
브랜치에 병합할 수 있습니다.
기여도에 따라 공동작업자가 초대됩니다.
문제, PR 및 프로젝트 관리에 도움을 주시면 매우 감사하겠습니다!
첫 번째 기여에 적합한 작업에 대한 좋은 첫 번째 이슈를 확인하세요.
자세한 내용은 CONTRIBUTING.md를 읽어보세요.
다음 내용을 꼭 읽어보세요: 가장자리에서의 추론
관심 있는 사람들을 위한 약간의 뒷이야기: Changelog 팟캐스트
메인(cli)
섬기는 사람
위험
GBNF 문법
개발 문서
구축 방법
도커에서 실행
Android에서 빌드
성능 문제 해결
GGML 팁과 요령
모델에 대한 중요한 논문 및 배경
모델 생성 품질에 문제가 있는 경우 최소한 다음 링크와 문서를 스캔하여 LLaMA 모델의 제한 사항을 이해하십시오. 이는 적절한 모델 크기를 선택하고 LLaMA 모델과 ChatGPT 간의 중요하고 미묘한 차이점을 모두 인식할 때 특히 중요합니다.
야마:
LLaMA 소개: 650억 매개변수의 기초적인 대규모 언어 모델
LLaMA: 개방적이고 효율적인 기초 언어 모델
GPT-3
언어 모델은 소수의 학습자입니다
GPT-3.5 / InstructGPT / ChatGPT:
지침을 따르도록 언어 모델 정렬
인간의 피드백을 통해 지침을 따르도록 언어 모델 훈련