Llama.cpp: различия между версиями

Материал из in.wiki
Перейти к навигации Перейти к поиску
 
(не показано 9 промежуточных версий этого же участника)
Строка 6: Строка 6:
 
| released = {{Start date and age|2023|3|10}}<ref name="githubrelease">{{cite web |title=Initial release · ggerganov/llama.cpp@26c0846 |url=https://github.com/ggerganov/llama.cpp/commit/26c084662903ddaca19bef982831bfb0856e8257 |website=GitHub |access-date=15 May 2024 |language=en}}</ref>
 
| released = {{Start date and age|2023|3|10}}<ref name="githubrelease">{{cite web |title=Initial release · ggerganov/llama.cpp@26c0846 |url=https://github.com/ggerganov/llama.cpp/commit/26c084662903ddaca19bef982831bfb0856e8257 |website=GitHub |access-date=15 May 2024 |language=en}}</ref>
 
| programming language =  [[C++]], [[C (Язык программирования)|C]]
 
| programming language =  [[C++]], [[C (Язык программирования)|C]]
| genre = [[Библиотека (программирование_|Библиотека]] для [[инференс]]а LLM.
+
| genre = [[Библиотека (программирование)|Библиотека]] для [[инференс]]а LLM.
 
| license = [[MIT License]]
 
| license = [[MIT License]]
 
<ref name="license">{{cite web |title=llama.cpp/LICENSE at master · ggerganov/llama.cpp |url=https://github.com/ggerganov/llama.cpp/blob/master/LICENSE |website=GitHub |language=en}}</ref>
 
<ref name="license">{{cite web |title=llama.cpp/LICENSE at master · ggerganov/llama.cpp |url=https://github.com/ggerganov/llama.cpp/blob/master/LICENSE |website=GitHub |language=en}}</ref>
Строка 34: Строка 34:
  
 
== Архитектура ==
 
== Архитектура ==
llama.cpp поддерживает несколько целевых аппаратных платформ, включая x86, ARM, [[CUDA]], [[Metal]], [[Vulkan]] (версии 1.2 или выше) и [[SYCL]]<ref name="Gerganov Slaren Nguyen Introduction to ggml">{{cite web |last1=Gerganov |first1=Georgi |last2=Nguyen |first2=Xuan Son |author3=Slaren |title=Introduction to ggml |url=https://huggingface.co/blog/introduction-to-ggml |website=Huggingface |date=August 13, 2024}}</ref><ref name="Kluska">{{cite journal |last1=Kluska |first1=Piotr |last2=Castell´o |first2=Adri´an |last3=Scheidegger |first3=Florian |last4=I. Malossi |first4=A. Cristiano |last5=Quintana-Ort´ı |first5=Enrique |title=QAttn: Efficient GPU Kernels for mixed-precision Vision Transformers |journal=Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops |date=June 2024 |url=https://openaccess.thecvf.com/content/CVPR2024W/ELVM/papers/Kluska_QAttn_Efficient_GPU_Kernels_for_Mixed-precision_Vision_Transformers_CVPRW_2024_paper.pdf}}</ref><ref name="Run LLMs on Intel GPUs Using llama.cpp">{{cite magazine |last1=Jianyu |first1=Zhang |last2=Hengyu |first2=Meng |last3=Ying |first3=Hu |last4=Yu |first4=Luo |last5=Xiaoping |first5=Duan |last6=Corporation |first6=Majumder Abhilash Intel |title=Run LLMs on Intel GPUs Using llama.cpp|journal=The Parallel Universe |date=July 2024 |issue=57 |pages=34–37 |url=https://www.intel.com/content/www/us/en/developer/articles/technical/run-llms-on-gpus-using-llama-cpp.html |publisher=Intel |language=en}}</ref><ref name="Bolz">{{cite web |last1=Bolz |first1=Jeff |title=Machine Learning in Vulkan with Cooperative Matrix 2 |url=https://vulkan.org/user/pages/09.events/vulkanised-2025/T47-Jeff-Bolz-NVIDIA.pdf |publisher=The Khronos Group/Nvidia |location=Cambridge, UK |language=en |date=February 11–13, 2025}}</ref>. Эта поддержка реализована в тензорной библиотеке [[GGML (библиотека машинного обучения)|GGML]], которая используется кодом llama.cpp, специфичным для модели фронтенда.[21] llama.cpp поддерживает предварительное квантование модели, а не квантование «на лету».[22] llama.cpp использует несколько [[Расширения набора команд x86|расширений набора команд x86]] для ускорения выполнения матричных операций: [[AVX]], [[AVX2]] и [[AVX-512]] для [[x86-64]], а также [[Neon]] на ARM. [[Apple Silicon]] также является важной целевой платформой для проекта<ref name="llama.cpprepo" />.[23]
+
llama.cpp поддерживает несколько целевых аппаратных платформ, включая x86, ARM, [[CUDA]], [[Metal]], [[Vulkan]] (версии 1.2 или выше) и [[SYCL]]<ref name="Gerganov Slaren Nguyen Introduction to ggml">{{cite web |last1=Gerganov |first1=Georgi |last2=Nguyen |first2=Xuan Son |author3=Slaren |title=Introduction to ggml |url=https://huggingface.co/blog/introduction-to-ggml |website=Huggingface |date=August 13, 2024}}</ref><ref name="Kluska">{{cite journal |last1=Kluska |first1=Piotr |last2=Castell´o |first2=Adri´an |last3=Scheidegger |first3=Florian |last4=I. Malossi |first4=A. Cristiano |last5=Quintana-Ort´ı |first5=Enrique |title=QAttn: Efficient GPU Kernels for mixed-precision Vision Transformers |journal=Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops |date=June 2024 |url=https://openaccess.thecvf.com/content/CVPR2024W/ELVM/papers/Kluska_QAttn_Efficient_GPU_Kernels_for_Mixed-precision_Vision_Transformers_CVPRW_2024_paper.pdf}}</ref><ref name="Run LLMs on Intel GPUs Using llama.cpp">{{cite magazine |last1=Jianyu |first1=Zhang |last2=Hengyu |first2=Meng |last3=Ying |first3=Hu |last4=Yu |first4=Luo |last5=Xiaoping |first5=Duan |last6=Corporation |first6=Majumder Abhilash Intel |title=Run LLMs on Intel GPUs Using llama.cpp|journal=The Parallel Universe |date=July 2024 |issue=57 |pages=34–37 |url=https://www.intel.com/content/www/us/en/developer/articles/technical/run-llms-on-gpus-using-llama-cpp.html |publisher=Intel |language=en}}</ref><ref name="Bolz">{{cite web |last1=Bolz |first1=Jeff |title=Machine Learning in Vulkan with Cooperative Matrix 2 |url=https://vulkan.org/user/pages/09.events/vulkanised-2025/T47-Jeff-Bolz-NVIDIA.pdf |publisher=The Khronos Group/Nvidia |location=Cambridge, UK |language=en |date=February 11–13, 2025}}</ref>. Эта поддержка реализована в тензорной библиотеке [[GGML (библиотека машинного обучения)|GGML]], которая используется кодом llama.cpp, специфичным для модели фронтенда<ref name="tomshardware">{{cite web |last1=Pounder |first1=Les |title=How To Create Your Own AI Chatbot Server With Raspberry Pi 4 |url=https://www.tomshardware.com/how-to/create-ai-chatbot-server-on-raspberry-pi |website=tomshardware.com |date=25 March 2023 |access-date=16 April 2024}}</ref>. llama.cpp поддерживает предварительное квантование модели, а не квантование «на лету»<ref name="Walkowiak">{{cite journal |last1=Walkowiak |first1=Bartosz |last2=Walkowiak |first2=Tomasz |journal=International Journal of Electronics and Telecommunications|date=2024 |volume=70 |issue=1 |pages=153–159 |doi=10.24425/ijet.2024.149525 |url=https://journals.pan.pl/Content/130704/18_4466_Walkowiak_L_sk.pdf |access-date=8 May 2024| title=Implementation of language models within an infrastructure designed for Natural Language Processing}}</ref>. llama.cpp использует несколько [[Расширения набора команд x86|расширений набора команд x86]] для ускорения выполнения матричных операций: [[AVX]], [[AVX2]] и [[AVX-512]] для [[x86-64]], а также [[Neon]] на ARM. [[Apple Silicon]] также является важной целевой платформой для проекта<ref name="llama.cpprepo" /><ref name="Walkowiak">{{cite journal |last1=Walkowiak |first1=Bartosz |last2=Walkowiak |first2=Tomasz |journal=International Journal of Electronics and Telecommunications|date=2024 |volume=70 |issue=1 |pages=153–159 |doi=10.24425/ijet.2024.149525 |url=https://journals.pan.pl/Content/130704/18_4466_Walkowiak_L_sk.pdf |access-date=8 May 2024| title=Implementation of language models within an infrastructure designed for Natural Language Processing}}</ref>.
  
 
llama.cpp поддерживает форматирование выходных данных на основе грамматики в формате JSON<ref name="Wiest" /> и [[Спекулятивное декодирование модели|спекулятивное декодирование]]<ref name="theregister 15 December 2024" />.
 
llama.cpp поддерживает форматирование выходных данных на основе грамматики в формате JSON<ref name="Wiest" /> и [[Спекулятивное декодирование модели|спекулятивное декодирование]]<ref name="theregister 15 December 2024" />.
 +
 +
Для хранения моделей
 +
 +
== Файлы GGUF ==
 +
{{Основная статья|GGUF}}
 +
[[GGML Universal File]]<ref>[https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/README.md]</ref> — это двоичный формат, который хранит как тензоры, так и метаданные в одном файле и предназначен для быстрого сохранения и загрузки данных модели<ref name="huggingface">{{cite web |title=GGUF |url=https://huggingface.co/docs/hub/gguf |website=huggingface.co |access-date=9 May 2024}}</ref>. Он был представлен в августе 2023 года проектом llama.cpp для лучшей обратной совместимости в связи с добавлением поддержки других архитектур моделей<ref name="Rajput" /><ref name="ibm-gguf-vs-ggml">{{cite web |last1=Mucci |first1=Tim |title=GGUF versus GGML |url=https://www.ibm.com/think/topics/gguf-versus-ggml |website=www.ibm.com |access-date=26 July 2024 |language=en-us |date=3 July 2024}}</ref>. Он заменил предыдущие форматы, использовавшиеся проектом, такие как [[GGML (формат файла)|GGML]]. Файлы GGUF обычно создаются путём конвертации моделей, разработанных с помощью другой [[библиотеки машинного обучения]], например, [[PyTorch]]<ref name="huggingface"/>.
 +
 +
== Поддерживаемые модели ==
 +
{{div col|colwidth=15em}}
 +
* [[Llama]]
 +
* [[Llama 2]]
 +
* [[Llama 3]]
 +
* [[Mistral AI#Mistral 7B|Mistral 7B]]
 +
* [[Mistral AI#Mixtral 8x7B|Mixtral 8x7B]]
 +
* [[Mistral AI#Mixtral 8x22B|Mixtral 8x22B]]
 +
* [[DBRX]]
 +
* [[BERT (языковая модель)|BERT]]
 +
* [[GPT-2]]
 +
* [[BLOOM (языковая модель)|BLOOM]]
 +
* [[Gemini (языковая модель)|Gemma]]
 +
* [[Grok]]
 +
* [[Mamba (архитектура глубокого обучения)|Mamba]]
 +
* [[EleutherAI#Модели GPT|GPT-NeoX]]
 +
* [[T5 (языковая модель)|Flan T5]]
 +
* [[DeepSeek]]
 +
* [[IBM Granite]]
 +
{{div col end}}
  
 
== Примечания ==
 
== Примечания ==
 
[[Категория:Программное обеспечение для машинного обучения]]
 
[[Категория:Программное обеспечение для машинного обучения]]

Текущая версия от 09:34, 1 августа 2025

Llama1-logo.svg
llama.cpp
Язык программирования:
C++, C и C++, C




Разработчик:
Георгий Герганов и сообщество



Дата появления:
март 10, 2023; 2 years ago (2023-03-10)[1]




Лицензия:
MIT License [2]

со строчной буквы

llama.cpp — это библиотека с открытым исходным кодом, которая выполняет инференс с использованием различных больших языковых моделей, таких как Llama[3].

Она разрабатывается совместно с проектом GGML, тензорной библиотекой общего назначения[4].

Вместе с библиотекой поставляются утилиты командной строки[5], а также сервер с простым веб-интерфейсом[6][7].

Предыстория[править | править код]

В конце сентября 2022 года Георгий Герганов начал работу над библиотекой GGML, библиотекой на языке C, реализующей тензорную алгебру. Герганов разрабатывал библиотеку с учётом строгого управления памятью и многопоточности. Создание GGML было вдохновлено работой Фабриса Беллара над LibNC[8]. До llama.cpp Герганов работал над аналогичной библиотекой whisper.cpp, которая реализовала Whisperмодель преобразования речи в текст от OpenAI[9].

Разработка[править | править код]

Разработка llama.cpp началась в марте 2023 года Георгием Гергановым как реализация кода инференса Llama на чистом C/C++ без зависимостей.

Это резко повысило производительность на компьютерах без графического процессора или другого выделенного оборудования, что и было целью проекта[3][10][11]

llama.cpp завоевала популярность у пользователей, не имеющих специализированного оборудования, поскольку могла работать только на CPU в том числе на устройствах Android[10][12][13] . Изначально проект разрабатывался для CPU, но позже была добавлена поддержка инференса на GPU[14].

По состоянию на ноябрь 2024 года проект имел более 67 000 звёзд на GitHub[15].

В марте 2024 года Джастин Танни представила новые оптимизированные ядра умножения матриц для процессоров x86 и ARM, повысив производительность вычисления промптов для FP16 и Q8_0[16]. Эти улучшения были внесены в основную ветку разработки llama.cpp[16]. Танни также создала инструмент под названием llamafile, который объединяет модели и llama.cpp в один файл, работающий на нескольких операционных системах с помощью библиотеки Cosmopolitan Libc, также созданной Танни, которая позволяет C/C++ быть более переносимым между операционными системами[16].

Архитектура[править | править код]

llama.cpp поддерживает несколько целевых аппаратных платформ, включая x86, ARM, CUDA, Metal, Vulkan (версии 1.2 или выше) и SYCL[17][18][19][20]. Эта поддержка реализована в тензорной библиотеке GGML, которая используется кодом llama.cpp, специфичным для модели фронтенда[21]. llama.cpp поддерживает предварительное квантование модели, а не квантование «на лету»[22]. llama.cpp использует несколько расширений набора команд x86 для ускорения выполнения матричных операций: AVX, AVX2 и AVX-512 для x86-64, а также Neon на ARM. Apple Silicon также является важной целевой платформой для проекта[15][22].

llama.cpp поддерживает форматирование выходных данных на основе грамматики в формате JSON[11] и спекулятивное декодирование[7].

Для хранения моделей

Файлы GGUF[править | править код]

GGML Universal File[23] — это двоичный формат, который хранит как тензоры, так и метаданные в одном файле и предназначен для быстрого сохранения и загрузки данных модели[24]. Он был представлен в августе 2023 года проектом llama.cpp для лучшей обратной совместимости в связи с добавлением поддержки других архитектур моделей[14][25]. Он заменил предыдущие форматы, использовавшиеся проектом, такие как GGML. Файлы GGUF обычно создаются путём конвертации моделей, разработанных с помощью другой библиотеки машинного обучения, например, PyTorch[24].

Поддерживаемые модели[править | править код]

Примечания[править | править код]

  1. Initial release · ggerganov/llama.cpp@26c0846 (англ.). GitHub. Дата обращения: 15 мая 2024.
  2. llama.cpp/LICENSE at master · ggerganov/llama.cpp (англ.). GitHub.
  3. 3,0 3,1 Connatser, Matthew. How this open source LLM chatbot runner hit the gas on x86, Arm CPUs. theregister.com. Дата обращения: 15 апреля 2024.
  4. Gerganov, Georgi. ggerganov/ggml. GitHub (17 мая 2024).
  5. Mann, Tobias. Honey, I shrunk the LLM! A beginner's guide to quantization – and testing it. theregister (14 июля 2024).
  6. Alden, Daroc. Portable LLMs with llamafile [LWN.net]. lwn.net. Дата обращения: 30 июля 2024.
  7. 7,0 7,1 Mann, Tobias. Intro to speculative decoding: Cheat codes for faster LLMs (англ.). theregister (15 декабря 2024).
  8. Bringing Whisper and LLaMA to the masses with Georgi Gerganov (Changelog Interviews #532) (англ.). Changelog (22 марта 2023). Дата обращения: 28 июля 2024.
  9. ggerganov/whisper.cpp. GitHub.
  10. 10,0 10,1 Edwards, Benj. You can now run a GPT-3-level AI model on your laptop, phone, and Raspberry Pi. arstechnica.com (13 марта 2023). Дата обращения: 15 апреля 2024.
  11. 11,0 11,1 Wiest, Isabella Catharina; Ferber, Dyke; Zhu, Jiefu; van Treeck, Marko; Meyer, Meyer, Sonja K.; Juglan, Radhika; Carrero, Zunamys I.; Paech, Daniel; Kleesiek, Jens; Ebert, Matthias P.; Truhn, Daniel; Kather, Jakob Nikolas (2024). "Privacy-preserving large language models for structured medical information retrieval". npj Digital Medicine. 7 (257): 257. doi:10.1038/s41746-024-01233-2. PMC 11415382. PMID 39304709.{{cite journal}}: Проект:Обслуживание CS1 (множественные имена: authors list) (ссылка)
  12. Hood, Stephen. llamafile: bringing LLMs to the people, and to your own computer (англ.). Mozilla Innovations. Дата обращения: 28 июля 2024.
  13. Democratizing AI with open-source language models. lwn.net. Дата обращения: 28 июля 2024.
  14. 14,0 14,1 Rajput, Saurabhsingh. Benchmarking Emerging Deep Learning Quantization Methods for Energy Efficiency // 2024 IEEE 21st International Conference on Software Architecture Companion (ICSA-C) / Saurabhsingh Rajput, Tushar Sharma. — 4 June 2024. — P. 238–242. — ISBN 979-8-3503-6625-9. — doi:10.1109/ICSA-C63560.2024.00049.
  15. 15,0 15,1 ggerganov/llama.cpp. GitHub.
  16. 16,0 16,1 16,2 Connatser, Matthew. Llamafile LLM driver project boosts performance on CPU cores (англ.). www.theregister.com. Дата обращения: 10 мая 2024.
  17. Nguyen, Xuan Son; Gerganov, Georgi; Slaren. Introduction to ggml. Huggingface (13 августа 2024).
  18. Kluska, Piotr; Castell´o, Adri´an; Scheidegger, Florian; I. Malossi, A. Cristiano; Quintana-Ort´ı, Enrique (June 2024). "QAttn: Efficient GPU Kernels for mixed-precision Vision Transformers" (PDF). Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops.
  19. Jianyu, Zhang; Hengyu, Meng; Ying, Hu; Yu, Luo; Xiaoping, Duan; Corporation, Majumder Abhilash Intel (July 2024). "Run LLMs on Intel GPUs Using llama.cpp". The Parallel Universe (англ.). No. 57. Intel. pp. 34–37.
  20. Bolz, Jeff. Machine Learning in Vulkan with Cooperative Matrix 2 (англ.). Cambridge, UK: The Khronos Group/Nvidia (February 11–13, 2025).
  21. Pounder, Les. How To Create Your Own AI Chatbot Server With Raspberry Pi 4. tomshardware.com (25 марта 2023). Дата обращения: 16 апреля 2024.
  22. 22,0 22,1 Walkowiak, Bartosz; Walkowiak, Tomasz (2024). "Implementation of language models within an infrastructure designed for Natural Language Processing" (PDF). International Journal of Electronics and Telecommunications. 70 (1): 153–159. doi:10.24425/ijet.2024.149525. Дата обращения: 8 мая 2024.
  23. [1]
  24. 24,0 24,1 GGUF. huggingface.co. Дата обращения: 9 мая 2024.
  25. Mucci, Tim. GGUF versus GGML (амер. англ.). www.ibm.com (3 июля 2024). Дата обращения: 26 июля 2024.