Дорожная карта / Статус проекта / Манифест / ggml
Вывод модели LLaMA Меты (и других) на чистом C/C++
Журнал изменений API libllama
Журнал изменений для REST API llama-server
Представляем GGUF-my-LoRA № 10123
Конечные точки Hugging Face Inference теперь поддерживают GGUF «из коробки»! #9669
Hugging Face Редактор GGUF: обсуждение | инструмент
Основная цель llama.cpp
— обеспечить возможность вывода LLM с минимальной настройкой и высочайшей производительностью на широком спектре оборудования — локально и в облаке.
Простая реализация C/C++ без каких-либо зависимостей.
Apple Silicon — первоклассный гражданин, оптимизированный с помощью платформ ARM NEON, Accelerate и Metal.
Поддержка AVX, AVX2, AVX512 и AMX для архитектур x86.
1,5-битное, 2-битное, 3-битное, 4-битное, 5-битное, 6-битное и 8-битное квантование целых чисел для более быстрого вывода и уменьшения использования памяти.
Пользовательские ядра CUDA для запуска LLM на графических процессорах NVIDIA (поддержка графических процессоров AMD через HIP и графических процессоров Moore Threads MTT через MUSA)
Поддержка серверной части Vulkan и SYCL.
Гибридный вывод ЦП+ГП для частичного ускорения моделей, размер которых превышает общую емкость видеопамяти.
С момента своего создания проект значительно улучшился благодаря многочисленным вкладам. Это основная площадка для разработки новых функций библиотеки ggml.
Поддерживаемые модели:
Обычно также поддерживаются точные настройки базовых моделей, указанных ниже.
ЛАМА ?
ЛЛаМА 2 ??
ЛЛаМА 3 ???
Мистраль 7Б
Микстрал МО
ДБРКС
Сокол
Китайская LLaMA/Альпака и китайская LLaMA-2/Альпака-2
Вигонь (французский)
БЕРТ
Коала
Байчуань 1 и 2 + производные
Аквила 1 и 2
Модели старкодера
Рефакт
МПТ
Цвести
модели Йи
Стабильные моделиLM
Модели глубокого поиска
модели Квен
ПЛАМо-13Б
Фи-модели
ГПТ-2
Орион 14Б
СтажерLM2
КодШелл
Джемма
Мамба
Грок-1
Xverse
Модели Command-R
МОРСКОЙ ЛЕВ
ГритЛМ-7Б + ГритЛМ-8х7Б
ОЛМо
ОЛМоЭ
Гранитные модели
GPT-NeoX + Пифия
Снежинка-Арктика МЧС
Смауг
Поро 34Б
Модели Bitnet b1.58
Флан Т5
Открытые модели Elm
ЧатGLM3-6b + ЧатGLM4-9b
СмолЛМ
EXAONE-3.0-7.8B-Инструкция
Модели FalconMamba
Джейс
Белик-11Б-v2.3
РВКВ-6
(инструкции по поддержке большего количества моделей: HOWTO-add-model.md)
Мультимодальные модели:
Модели LLaVA 1.5, модели LLaVA 1.6
БакЛаВА
Обсидиан
ПоделитьсяGPT4V
Модели MobileVLM 1.7B/3B
Йи-ВЛ
Мини-цена за тысячу показов
Лунная мечта
Кролик
Привязки:
Python: abetlen/llama-cpp-python
Перейти: go-skynet/go-llama.cpp
Node.js: withcatai/node-llama-cpp
JS/TS (серверный клиент llama.cpp): lgrammel/modelfusion
JS/TS (программируемый интерфейс командной строки подсказки): offline-ai/cli
JavaScript/Wasm (работает в браузере): tangledgroup/llama-cpp-wasm
Typescript/Wasm (более удобный API, доступен на npm): ngxson/wllama
Рубин: yoshoku/llama_cpp.rb
Rust (дополнительные возможности): Edgenai/llama_cpp-rs
Rust (более удобный API): mdrokz/rust-llama.cpp
Rust (более прямые привязки): Utilities/llama-cpp-rs
C#/.NET: SciSharp/LLamaSharp
C#/VB.NET (дополнительные возможности — лицензия сообщества): LM-Kit.NET
Скала 3: дондером/llm4s
Clojure: phronmophobic/llama.clj
React Native: mybigday/llama.rn
Java: херуд/java-llama.cpp
Зигзаг: deins/llama.cpp.zig
Флаттер/Дротик: netdur/llama_cpp_dart
PHP (привязки и функции API, созданные на основе llama.cpp): distancemagic/resonance (подробнее)
Схема обмана: guile_llama_cpp
Swift srgtuszy/llama-cpp-swift
Swift ShenghaiWang/SwiftLlama
Пользовательский интерфейс:
Если не указано иное, эти проекты имеют открытый исходный код и разрешенное лицензирование:
MindWorkAI/AI-Studio (FSL-1.1-MIT)
йохаб/коллама
янк/ян (AGPL)
естественная/открытая площадка
Фарадей (собственный)
LMStudio (собственность)
Лейла (собственность)
Рамалама (МТИ)
Локальный ИИ (MIT)
LostRuins/кобольдкпп (AGPL)
Mozilla-Очо/llamafile
nomic-ai/gpt4all
оллама/оллама
oobabooga/text-generation-webui (AGPL)
псугихара/FreeChat
cztomsik/ava (MIT)
пцочантарис/эмельтал
питопс/тенере (AGPL)
RAGNA Desktop (собственный)
RecurseChat (собственный)
семперай/амика
скатаи/катаи
Мобильный искусственный интеллект/горничная (MIT)
Мсты (собственный)
LLMFarm (MIT)
КанТВ(Apachev2.0 или новее)
Точка (GPL)
MindMac (собственный)
КодиБот (GPL)
Ева (МТИ)
Плагин AI Sublime Text (MIT)
АИКит (MIT)
LARS - LLM и расширенное решение для ссылок (AGPL)
LLMUnity (MIT)
Лама-помощник (GPL)
PocketPal AI — приложение для iOS и Android (MIT)
(чтобы проект был указан здесь, в нем должно быть четко указано, что он зависит от llama.cpp
)
Инструменты:
akx/ggify — загрузите модели PyTorch из HuggingFace Hub и преобразуйте их в GGML.
akx/ollama-dl – загрузить модели из библиотеки Ollama для использования напрямую с llama.cpp.
сбойr/gppm – запуск экземпляров llama.cpp с использованием графических процессоров NVIDIA Tesla P40 или P100 с пониженным энергопотреблением в режиме ожидания.
gpustack/gguf-parser — просмотреть/проверить файл GGUF и оценить использование памяти.
Styled Lines (собственная лицензия, асинхронная оболочка части вывода для разработки игр в Unity3d с готовыми оболочками для мобильных и веб-платформ и примером модели)
Инфраструктура:
Paddler — балансировщик нагрузки с отслеживанием состояния, специально разработанный для llama.cpp.
GPUStack — управление кластерами графических процессоров для запуска LLM.
llama_cpp_canister — llama.cpp как смарт-контракт на компьютере в Интернете с использованием WebAssembly.
Игры:
Lucy's Labyrinth — простая игра-лабиринт, в которой агенты, управляемые моделью искусственного интеллекта, попытаются вас обмануть.
$ 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
А вот еще одна демонстрация запуска LLaMA-7B и chunk.cpp на одном MacBook M1 Pro:
Ниже приведены этапы комплексной сборки двоичных файлов и преобразования моделей для большинства поддерживаемых моделей.
Во-первых, вам нужно получить двоичный файл. Существуют различные методы, которым вы можете следовать:
Способ 1. Клонируйте этот репозиторий и выполните сборку локально. Узнайте, как выполнить сборку.
Способ 2. Если вы используете MacOS или Linux, вы можете установить llama.cpp через Brew, Flox или Nix.
Способ 3. Используйте образ Docker, см. документацию Docker.
Способ 4. Загрузите готовый двоичный файл из выпусков.
Вы можете запустить базовое завершение с помощью этой команды:
llama-cli -m your_model.gguf -p "Я верю, что смысл жизни есть" -n 128# Вывод:# Я верю, что смысл жизни в том, чтобы найти свою собственную истину и жить в соответствии с ней. Для меня это означает быть верным себе и следовать своим увлечениям, даже если они не соответствуют ожиданиям общества. Думаю, именно это мне и нравится в йоге – это не только физическая практика, но и духовная. Речь идет о соединении с самим собой, прислушивании к своему внутреннему голосу и уважении к своему уникальному путешествию.
Полный список параметров см. на этой странице.
Если вам нужен более похожий на ChatGPT опыт, вы можете запустить его в режиме разговора, передав -cnv
в качестве параметра:
llama-cli -m your_model.gguf -p "Ты полезный помощник" -cnv# Вывод:# > привет, кто ты?# Привет! Я твой полезный помощник! Я чат-бот на базе искусственного интеллекта, созданный для оказания помощи и предоставления информации таким пользователям, как вы. Я здесь, чтобы помочь ответить на ваши вопросы, дать рекомендации и предложить поддержку по широкому кругу тем. Я дружелюбный и знающий ИИ, и я всегда рад помочь со всем, что вам нужно. Что у вас на уме и чем я могу вам помочь сегодня?## > что такое 1+1?# Легко! Ответ на вопрос 1+1 —... 2!
По умолчанию шаблон чата будет взят из входной модели. Если вы хотите использовать другой шаблон чата, передайте --chat-template NAME
в качестве параметра. Посмотреть список поддерживаемых шаблонов
./llama-cli -m your_model.gguf -p "Вы полезный помощник" -cnv --chat-templatechatml
Вы также можете использовать свой собственный шаблон с помощью параметров префикса, суффикса и обратного приглашения:
./llama-cli -m your_model.gguf -p «Вы полезный помощник» -cnv --in-prefix 'Пользователь:' --reverse-prompt 'Пользователь:'
Веб-сервер llama.cpp — это легкий HTTP-сервер, совместимый с OpenAI API, который можно использовать для обслуживания локальных моделей и легкого подключения их к существующим клиентам.
Пример использования:
./llama-server -m your_model.gguf --port 8080# Доступ к базовому веб-интерфейсу можно получить через браузер: http://localhost:8080# Конечная точка завершения чата: http://localhost:8080/v1/chat/completions
Примечание
Если вы предпочитаете базовое использование, рассмотрите возможность использования режима разговора вместо интерактивного режима.
В этом режиме вы всегда можете прервать генерацию, нажав Ctrl+C и введя одну или несколько строк текста, которые будут преобразованы в токены и добавлены в текущий контекст. Вы также можете указать обратный запрос с помощью параметра -r "reverse prompt string"
. Это приведет к тому, что пользовательский ввод будет запрашиваться всякий раз, когда при генерации встречаются точные токены строки обратного приглашения. Типичное использование — использование приглашения, которое заставляет LLaMA эмулировать чат между несколькими пользователями, скажем, Алисой и Бобом, и передать -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
, чтобы различать пользовательский ввод и сгенерированный текст. Другие параметры более подробно описаны в README для примера программы llama-cli
.
Приглашение, вводимые пользователем данные и создание моделей можно сохранять и возобновлять при вызовах ./llama-cli
, используя --prompt-cache
и --prompt-cache-all
. Скрипт ./examples/chat-persistent.sh
демонстрирует это с поддержкой длительных возобновляемых сеансов чата. Чтобы использовать этот пример, вы должны предоставить файл для кэширования начального приглашения чата и каталог для сохранения сеанса чата, а также при необходимости можете предоставить те же переменные, что и в chat-13B.sh
. Тот же кэш подсказок можно повторно использовать для новых сеансов чата. Обратите внимание, что и кэш приглашений, и каталог чата привязаны к исходному приглашению ( PROMPT_TEMPLATE
) и файлу модели.
# Начать новый чатPROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.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-persistent.sh# Разный кэш подсказок для разных приглашений/modelPROMPT_TEMPLATE=./prompts/chat-with-bob.txt PROMPT_CACHE_FILE=bob. подсказка.bin CHAT_SAVE_DIR=./chat/bob ./examples/chat-persistent.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 вы также можете воспользоваться https://grammar.intrinsiclabs.ai/, браузерным приложением, которое позволяет писать интерфейсы TypeScript, которые компилируются в грамматики GBNF, которые вы можете сохранить для локального использования. Обратите внимание, что приложение создано и поддерживается членами сообщества, поэтому о любых проблемах или FR следует сообщать в его репозитории, а не в этом.
См. сборку llama.cpp локально.
Бэкэнд | Целевые устройства |
---|---|
Металл | Яблочный кремний |
БЛАС | Все |
БЛИС | Все |
СИКЛ | Графический процессор Intel и Nvidia |
МУСА | Графический процессор Moore Threads MTT |
КУДА | графический процессор NVIDIA |
хипBLAS | AMD графический процессор |
Вулкан | графический процессор |
КАНН | Восхождение НПУ |
Примечание
Вы также можете использовать пространство GGUF-my-repo на Hugging Face для квантования веса вашей модели без какой-либо настройки. Он синхронизируется с основным файлом llama.cpp
каждые 6 часов.
Чтобы получить официальные веса LLaMA 2, см. раздел «Получение и использование модели Facebook LLaMA 2». На Hugging Face также доступен большой выбор предварительно квантованных моделей gguf
.
Примечание. convert.py
был перенесен в examples/convert_legacy_llama.py
и не должен использоваться ни для чего, кроме моделей Llama/Llama2/Mistral
и их производных. Он не поддерживает LLaMA 3, вы можете использовать convert_hf_to_gguf.py
с LLaMA 3, загруженным с Hugging Face.
Чтобы узнать больше о модели квантования, прочтите эту документацию.
Вы можете использовать пример perplexity
, чтобы измерить недоумение по поводу заданной подсказки (чем меньше недоумения, тем лучше). Для получения дополнительной информации см. https://huggingface.co/docs/transformers/perplexity.
Чтобы узнать больше о том, как измерить недоумение с помощью llama.cpp, прочтите эту документацию.
Авторы могут открывать PR
Соавторы могут отправлять запросы в ветки репозитория llama.cpp
и объединять запросы запросов в master
ветку.
Соавторы будут приглашены на основе вкладов
Любая помощь в решении проблем, PR и проектов очень ценится!
См. хорошие первые выпуски для задач, подходящих для первого вклада.
Прочтите CONTRIBUTING.md для получения дополнительной информации.
Обязательно прочитайте это: Вывод на краю
Немного предыстории для тех, кому интересно: подкаст Changelog
основной (кли)
сервер
опасность
Грамматики ГБНФ
Разработочная документация
Как построить
Запуск в Докере
Создан на базе Android
Устранение неполадок производительности
Советы и рекомендации по GGML
Исходные документы и справочная информация о моделях
Если ваша проблема связана с качеством генерации модели, просмотрите хотя бы следующие ссылки и документы, чтобы понять ограничения моделей LLaMA. Это особенно важно при выборе подходящего размера модели и понимании как существенных, так и тонких различий между моделями LLaMA и ChatGPT:
ЛАМА:
Представляем LLaMA: фундаментальную модель большого языка с 65 миллиардами параметров.
LLaMA: открытые и эффективные модели базового языка
ГПТ-3
Языковые модели — это немногие ученики
GPT-3.5/InstructGPT/ChatGPT:
Приведение языковых моделей в соответствие с инструкциями
Обучение языковых моделей следованию инструкциям с обратной связью от человека