Peta Jalan / Status proyek / Manifesto / ggml
Inferensi model LLaMA Meta (dan lainnya) dalam C/C++ murni
Changelog untuk libllama
API
Changelog untuk REST API llama-server
Memperkenalkan GGUF-saya-LoRA #10123
Titik Akhir Inferensi Memeluk Wajah kini mendukung GGUF secara langsung! #9669
Editor GGUF Memeluk Wajah: diskusi | alat
Tujuan utama llama.cpp
adalah mengaktifkan inferensi LLM dengan pengaturan minimal dan kinerja canggih pada berbagai perangkat keras - secara lokal dan di cloud.
Implementasi C/C++ biasa tanpa ketergantungan apa pun
Silikon Apple adalah warga negara kelas satu - dioptimalkan melalui kerangka kerja ARM NEON, Accelerate, dan Metal
Dukungan AVX, AVX2, AVX512 dan AMX untuk arsitektur x86
Kuantisasi bilangan bulat 1,5-bit, 2-bit, 3-bit, 4-bit, 5-bit, 6-bit, dan 8-bit untuk inferensi yang lebih cepat dan pengurangan penggunaan memori
Kernel CUDA khusus untuk menjalankan LLM pada GPU NVIDIA (dukungan untuk GPU AMD melalui HIP dan GPU Moore Threads MTT melalui MUSA)
Dukungan backend Vulkan dan SYCL
Inferensi hybrid CPU+GPU untuk mempercepat sebagian model yang lebih besar dari total kapasitas VRAM
Sejak awal, proyek ini telah mengalami kemajuan yang signifikan berkat banyak kontribusi. Ini adalah tempat bermain utama untuk mengembangkan fitur baru untuk perpustakaan ggml.
Model yang didukung:
Biasanya penyempurnaan model dasar di bawah ini juga didukung.
LLAMA?
LLaMA 2 ??
LLaMA 3 ???
Mistral 7B
Campuran MoE
DBRX
Elang
LLaMA / Alpaca Cina dan LLaMA-2 / Alpaca-2 Cina
Vigogne (Perancis)
BERT
Koala
Derivasi Baichuan 1 & 2+
Akuila 1 & 2
Model pembuat kode bintang
Fakta ulang
MPT
Bunga
model Yi
Model StableLM
Model pencarian mendalam
model Qwen
PLaMo-13B
model phi
GPT-2
Orion 14B
MagangLM2
CodeShell
permata
Mamba
Grok-1
Xvers
Model Command-R
SINGA LAUT
GritLM-7B + GritLM-8x7B
OLMo
OLMoE
Model granit
GPT-NeoX + Pythia
MoE Kepingan Salju-Arktik
Smaug
Poro 34B
Model Bitnet b1.58
Fla T5
Buka model Elm
ObrolanGLM3-6b + ObrolanGLM4-9b
SmolLM
EXAONE-3.0-7.8B-Instruksikan
Model FalconMamba
Jais
Bielik-11B-v2.3
RWKV-6
(instruksi untuk mendukung lebih banyak model: HOWTO-add-model.md)
Model multimoda:
Model LLaVA 1.5, model LLaVA 1.6
BakLLaVA
Obsidian
BagikanGPT4V
Model MobileVLM 1.7B/3B
Yi-VL
BPS Mini
Mimpi bulan
Kelinci
Binding:
Python: abetlen/llama-cpp-python
Buka: go-skynet/go-llama.cpp
Node.js: dengancatai/node-llama-cpp
JS/TS (klien server llama.cpp): lgrammel/modelfusion
JS/TS (CLI Mesin Prompt yang Dapat Diprogram): offline-ai/cli
JavaScript/Wasm (berfungsi di browser): tangledgroup/llama-cpp-wasm
TypeScript/Wasm (API yang lebih bagus, tersedia di npm): ngxson/wllama
Ruby: yoshoku/llama_cpp.rb
Rust (fitur lebih lanjut): edgenai/llama_cpp-rs
Rust (API yang lebih bagus): mdrokz/rust-llama.cpp
Rust (ikatan lebih langsung): utilityai/llama-cpp-rs
C#/.NET: SciSharp/LLamaSharp
C#/VB.NET (lebih banyak fitur - lisensi komunitas): LM-Kit.NET
Skala 3: donderom/llm4s
Clojure: phronmofobia/llama.clj
Bereaksi Asli: mybigday/llama.rn
Jawa: kherud/java-llama.cpp
Zig: deins/llama.cpp.zig
Flutter/Dart: netdur/llama_cpp_dart
PHP (pengikatan API dan fitur yang dibangun di atas llama.cpp): distancemagic/resonance (info lebih lanjut)
Skema Tipuan: guile_llama_cpp
Swift srgtuszy/llama-cpp-swift
Swift ShenghaiWang/SwiftLlama
UI:
Kecuali disebutkan lain, proyek-proyek ini bersifat open-source dengan lisensi permisif:
MindWorkAI/AI-Studio (FSL-1.1-MIT)
iohub/collama
janhq/jan (AGPL)
nat/openplayground
Faraday (kepemilikan)
LMStudio (kepemilikan)
Layla (kepemilikan)
Ramalama (MIT)
AI Lokal (MIT)
Reruntuhan Hilang/koboldcpp (AGPL)
Mozilla-Ocho/llamafile
nomic-ai/gpt4all
ollama/ollama
oobabooga/pembuatan teks-webui (AGPL)
psugihara/Obrolan Gratis
cztomsik/ava (MIT)
ptsochantaris/emeltal
pythops/tenere (AGPL)
RAGNA Desktop (kepemilikan)
RecurseChat (kepemilikan)
semparai/amica
dengancatai/catai
Kecerdasan Buatan Seluler/pembantu (MIT)
Msty (kepemilikan)
LLMFarm (MIT)
KanTV (Apachev2.0 atau lebih baru)
Titik (GPL)
MindMac (kepemilikan)
KodiBot (GPL)
Eva (MIT)
Plugin Teks Sublime AI (MIT)
AIKit (MIT)
LARS - LLM & Solusi Referensi Tingkat Lanjut (AGPL)
LLM Persatuan (MIT)
Asisten Llama (GPL)
PocketPal AI - Aplikasi iOS dan Android (MIT)
(agar proyek terdaftar di sini, harus dinyatakan dengan jelas bahwa proyek tersebut bergantung pada llama.cpp
)
Peralatan:
akx/ggify – unduh model PyTorch dari HuggingFace Hub dan konversikan ke GGML
akx/ollama-dl – unduh model dari perpustakaan Ollama untuk digunakan langsung dengan llama.cpp
crashr/gppm – meluncurkan instance llama.cpp menggunakan GPU NVIDIA Tesla P40 atau P100 dengan konsumsi daya idle yang lebih rendah
gpustack/gguf-parser - meninjau/memeriksa file GGUF dan memperkirakan penggunaan memori
Styled Lines (bagian inferensi async berlisensi eksklusif untuk pengembangan game di Unity3d dengan wrapper platform Seluler dan Web prebuild dan contoh model)
Infrastruktur:
Paddler - Penyeimbang beban stateful yang dirancang khusus untuk llama.cpp
GPUStack - Kelola cluster GPU untuk menjalankan LLM
llama_cpp_canister - llama.cpp sebagai kontrak pintar di Komputer Internet, menggunakan WebAssembly
Pertandingan:
Labirin Lucy - Sebuah permainan labirin sederhana di mana agen yang dikendalikan oleh model AI akan mencoba menipu Anda.
$ 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
Dan berikut ini demo lain untuk menjalankan LLaMA-7B dan Whisper.cpp di satu MacBook M1 Pro:
Berikut adalah langkah-langkah pembuatan biner end-to-end dan konversi model untuk sebagian besar model yang didukung.
Pertama, Anda perlu mendapatkan binernya. Ada beberapa metode berbeda yang dapat Anda ikuti:
Metode 1: Kloning repositori ini dan buat secara lokal, lihat cara membuatnya
Metode 2: Jika Anda menggunakan MacOS atau Linux, Anda dapat menginstal llama.cpp melalui brew, flox atau nix
Metode 3: Gunakan image Docker, lihat dokumentasi untuk Docker
Metode 4: Unduh biner bawaan dari rilis
Anda dapat menjalankan penyelesaian dasar menggunakan perintah ini:
llama-cli -m your_model.gguf -p "Saya percaya arti hidup adalah" -n 128# Keluaran:# Saya percaya arti hidup adalah menemukan kebenaran Anda sendiri dan hidup sesuai dengannya. Bagi saya, ini berarti jujur pada diri sendiri dan mengikuti hasrat saya, meskipun hal tersebut tidak sejalan dengan harapan masyarakat. Saya pikir itulah yang saya sukai dari yoga – ini bukan hanya latihan fisik, tapi juga latihan spiritual. Ini tentang berhubungan dengan diri sendiri, mendengarkan suara hati, dan menghormati perjalanan unik Anda sendiri.
Lihat halaman ini untuk daftar lengkap parameter.
Jika Anda menginginkan pengalaman yang lebih mirip ChatGPT, Anda dapat menjalankannya dalam mode percakapan dengan meneruskan -cnv
sebagai parameter:
llama-cli -m model_anda.gguf -p "Anda adalah asisten yang sangat membantu" -cnv# Output:# > hai, siapa kamu?# Hai! Saya asisten Anda yang membantu! Saya adalah chatbot bertenaga AI yang dirancang untuk membantu dan memberikan informasi kepada pengguna seperti Anda. Saya di sini untuk membantu menjawab pertanyaan Anda, memberikan panduan, dan menawarkan dukungan pada berbagai topik. Saya seorang AI yang ramah dan berpengetahuan, dan saya selalu senang membantu apa pun yang Anda butuhkan. Apa yang Anda pikirkan, dan bagaimana saya bisa membantu Anda hari ini?## > apa itu 1+1?# Mudah sekali! Jawaban 1+1 adalah... 2!
Secara default, template obrolan akan diambil dari model masukan. Jika Anda ingin menggunakan templat obrolan lain, teruskan --chat-template NAME
sebagai parameter. Lihat daftar templat yang didukung
./llama-cli -m your_model.gguf -p "Anda adalah asisten yang membantu" -cnv --chat-template chatml
Anda juga dapat menggunakan templat Anda sendiri melalui parameter in-prefix, in-suffix, dan reverse-prompt:
./llama-cli -m your_model.gguf -p "Anda adalah asisten yang membantu" -cnv --in-prefix 'Pengguna:' --reverse-prompt 'Pengguna:'
Server web llama.cpp adalah server HTTP ringan yang kompatibel dengan OpenAI API yang dapat digunakan untuk melayani model lokal dan dengan mudah menghubungkannya ke klien yang ada.
Contoh penggunaan:
./llama-server -m your_model.gguf --port 8080# UI web dasar dapat diakses melalui browser: http://localhost:8080# Titik akhir penyelesaian obrolan: http://localhost:8080/v1/chat/completions
Catatan
Jika Anda lebih menyukai penggunaan dasar, harap pertimbangkan untuk menggunakan mode percakapan daripada mode interaktif
Dalam mode ini, Anda selalu dapat menghentikan pembuatan dengan menekan Ctrl+C dan memasukkan satu atau lebih baris teks, yang akan diubah menjadi token dan ditambahkan ke konteks saat ini. Anda juga dapat menentukan prompt terbalik dengan parameter -r "reverse prompt string"
. Hal ini akan mengakibatkan input pengguna diminta setiap kali token yang tepat dari string prompt terbalik ditemukan dalam pembuatan. Penggunaan yang umum adalah menggunakan prompt yang membuat LLaMA meniru obrolan antara banyak pengguna, misalnya Alice dan Bob, dan meneruskan -r "Alice:"
.
Berikut adalah contoh interaksi beberapa kali, yang dipanggil dengan perintah
# argumen default menggunakan model 7B./examples/chat.sh# chat lanjutan dengan model 13B./examples/chat-13B.sh# argumen khusus menggunakan model 13B./llama-cli -m ./models/13B/ ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "Pengguna:" -f prompt/obrolan-dengan-bob.txt
Perhatikan penggunaan --color
untuk membedakan antara masukan pengguna dan teks yang dihasilkan. Parameter lainnya dijelaskan lebih detail di README untuk program contoh llama-cli
.
Perintah, masukan pengguna, dan pembuatan model dapat disimpan dan dilanjutkan di seluruh panggilan ke ./llama-cli
dengan memanfaatkan --prompt-cache
dan --prompt-cache-all
. Skrip ./examples/chat-persistent.sh
menunjukkan hal ini dengan dukungan untuk sesi obrolan yang berjalan lama dan dapat dilanjutkan. Untuk menggunakan contoh ini, Anda harus menyediakan file untuk menyimpan pesan obrolan awal dan direktori untuk menyimpan sesi obrolan, dan secara opsional dapat menyediakan variabel yang sama seperti chat-13B.sh
. Cache prompt yang sama dapat digunakan kembali untuk sesi obrolan baru. Perhatikan bahwa cache prompt dan direktori obrolan terkait dengan prompt awal ( PROMPT_TEMPLATE
) dan file model.
# Mulai chatPROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh# Lanjutkan chatPROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat- persisten.sh# Mulai obrolan lain dengan yang sama prompt/modelPROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/another ./examples/chat-persistent.sh# Cache prompt berbeda untuk prompt/modelPROMPT_TEMPLATE=./prompts/chat-with-bob.txt berbeda PROMPT_CACHE_FILE=bob. prompt.bin CHAT_SAVE_DIR=./chat/bob ./examples/chat-persistent.sh
llama.cpp
mendukung tata bahasa untuk membatasi keluaran model. Misalnya, Anda dapat memaksa model untuk mengeluarkan JSON saja:
./llama-cli -m ./models/13B/ggml-model-q4_0.gguf -n 256 --grammar-file grammars/json.gbnf -p 'Permintaan: jadwalkan panggilan pada jam 8 malam; Memerintah:'
Folder grammars/
berisi beberapa contoh tata bahasa. Untuk menulis sendiri, lihat Panduan GBNF.
Untuk membuat tata bahasa JSON yang lebih kompleks, Anda juga dapat memeriksa https://grammar.intrinsiclabs.ai/, aplikasi browser yang memungkinkan Anda menulis antarmuka TypeScript yang dikompilasi ke tata bahasa GBNF yang dapat Anda simpan untuk penggunaan lokal. Perhatikan bahwa aplikasi ini dibuat dan dikelola oleh anggota komunitas, harap ajukan masalah atau FR apa pun di reponya dan bukan yang ini.
Silakan merujuk ke Build llama.cpp secara lokal
Bagian belakang | Perangkat sasaran |
---|---|
Logam | silikon apel |
BLAS | Semua |
KEBAHAGIAAN | Semua |
SIKL | GPU Intel dan Nvidia |
MUSA | GPU MTT Moore Threads |
CUDA | GPU Nvidia |
hipBLAS | GPU AMD |
Vulkan | GPU |
MENGENDARAI KAPAL | Naik NPU |
Catatan
Anda dapat menggunakan ruang GGUF-repo saya di Hugging Face untuk mengukur bobot model Anda tanpa pengaturan apa pun juga. Itu disinkronkan dari llama.cpp
main setiap 6 jam.
Untuk mendapatkan bobot resmi LLaMA 2 silakan lihat bagian Memperoleh dan menggunakan model LLaMA 2 Facebook. Ada juga banyak pilihan model gguf
pra-kuantisasi yang tersedia di Hugging Face.
Catatan: convert.py
telah dipindahkan ke examples/convert_legacy_llama.py
dan tidak boleh digunakan untuk apa pun selain model Llama/Llama2/Mistral
dan turunannya. Itu tidak mendukung LLaMA 3, Anda dapat menggunakan convert_hf_to_gguf.py
dengan LLaMA 3 yang diunduh dari Hugging Face.
Untuk mempelajari lebih lanjut tentang model kuantisasi, baca dokumentasi ini
Anda dapat menggunakan contoh perplexity
untuk mengukur kebingungan pada perintah tertentu (kebingungan yang lebih rendah lebih baik). Untuk informasi lebih lanjut, lihat https://huggingface.co/docs/transformers/perplexity.
Untuk mempelajari lebih lanjut cara mengukur kebingungan menggunakan llama.cpp, baca dokumentasi ini
Kontributor dapat membuka PR
Kolaborator dapat melakukan push ke cabang di repo llama.cpp
dan menggabungkan PR ke dalam cabang master
Kolaborator akan diundang berdasarkan kontribusi
Bantuan apa pun dalam mengelola masalah, PR, dan proyek sangat kami hargai!
Lihat terbitan pertama yang bagus untuk tugas yang cocok untuk kontribusi pertama
Baca CONTRIBUTING.md untuk informasi lebih lanjut
Pastikan untuk membaca ini: Inferensi di tepian
Sedikit latar belakang bagi mereka yang tertarik: Changelog podcast
utama (kli)
server
bahaya
Tata bahasa GBNF
Dokumentasi pengembangan
Bagaimana cara membangun
Berjalan di Docker
Bangun di Android
Pemecahan masalah kinerja
Kiat & trik GGML
Makalah penting dan latar belakang model
Jika masalah Anda terkait dengan kualitas pembuatan model, setidaknya pindai tautan dan makalah berikut untuk memahami keterbatasan model LLaMA. Hal ini sangat penting saat memilih ukuran model yang sesuai dan memahami perbedaan signifikan dan halus antara model LLaMA dan ChatGPT:
LLAMA:
Memperkenalkan LLaMA: Model bahasa besar yang mendasar dengan 65 miliar parameter
LLaMA: Model Bahasa Dasar yang Terbuka dan Efisien
GPT-3
Model Bahasa adalah Pembelajar yang Sedikit Berkesempatan
GPT-3.5 / InstruksikanGPT / ObrolanGPT:
Menyelaraskan model bahasa untuk mengikuti instruksi
Melatih model bahasa untuk mengikuti instruksi dengan umpan balik manusia