Llama.cpp
| نویسنده(های) اصلی | جورجی گرگانوف |
|---|---|
| توسعهدهنده(ها) | جورجی گرگانوف و انجمن |
| انتشار اولیه | ۱۰ مارس ۲۰۲۳[۱] |
| مخزن | github |
| نوشتهشده با | C++، C |
| نوع | کتابخانه برای مدلهای زبانی بزرگ |
| مجوز | پروانه امآیتی[۲] |
llama.cpp یک نرمافزار متنباز و یک کتابخانه نرمافزاری است که استنتاج را بر روی انواع مختلف مدلهای زبانی بزرگ مانند لاما انجام میدهد.[۳] این پروژه بهصورت مشترک و همزمان با پروژه GGML، که یک کتابخانه تنسور همهمنظوره است، توسعه داده میشود.[۴]
ابزارهای خط فرمان همراه با این کتابخانه ارائه شدهاند،[۵] و همچنین یک سرور وب با یک رابط کاربری وب ساده نیز در اختیار قرار میگیرد.[۶][۷]
پیشینه
[ویرایش]در اواخر سپتامبر ۲۰۲۲، گئورگی گِرگانوف کار بر روی کتابخانه GGML را آغاز کرد. این کتابخانه، به زبان C نوشته شده بود و جبر تنسوری را پیادهسازی میکند. گِرگانوف این کتابخانه را با هدف مدیریت سختگیرانه حافظه و پشتیبانی از چندریسمانی توسعه داد. ایجاد GGML از کارهای فابریس بلارد بر روی LibNC الهام گرفته بود.[۸]
پیش از llama.cpp، گِرگانوف بر روی کتابخانهای مشابه با نام whisper.cpp کار میکرد که ویسپر، یعنی یک مدل تبدیل گفتار به متن ساخته اوپنایآی را پیادهسازی میکرد.[۹]
توسعه
[ویرایش]توسعه llama.cpp در مارس ۲۰۲۳ ابتدا توسط گئورگی گِرگانوف به عنوان پیادهسازی کد استنتاج لاما در زبان C/C++ خالص و بدون وابستگی آغاز شد. این رویکرد عملکرد اسنتنتاج را در رایانههایی که فاقد جیپییو یا سختافزارهای تخصصی دیگر بودند، بهبود داد. این رویکرد هدف اصلی پروژه بود.[۳][۱۰][۱۱] llama.cpp در میان کاربرانی که سختافزار تخصصی نداشتند، از جمله بر روی دستگاههای اندرویدی محبوبیت یافت، زیرا میتوانست تنها بر روی سیپییو اجرا شود. .[۱۰][۱۲][۱۳] در حالی که این پروژه در ابتدا برای سیپییو طراحی شده بود، پشتیبانی از استنتاج بر روی جیپییو نیز بعدها افزوده شد.[۱۴] تا اوت ۲۰۲۵، این مخزن در گیتهاب بیش از ۸۵٬۰۰۰ ستاره دریافت کرده است.[۱۵]
در ۱۰ آوریل ۲۰۲۵، کتابخانه libmtmd معرفی شد که پشتیبانی از مدلهای چندوجهی را که پیشتر در وضعیت ایستایی قرار داشت، دوباره فعال و تقویت کرد.
معماری
[ویرایش]llama.cpp از سختافزارهای مختلف پشتیبانی میکند، از جمله x86، ARM، Metal، BLAS، BLIS، SYCL، MUSA، CUDA، HIP، CANN، OpenCL، RPC و Vulkan (نسخه ۱٫۲ یا بالاتر).[۱۶][۱۷][۱۸][۱۹] این پشتیبانیها در سختافزارها (بکاند) ستون اصلی اجرای کتابخانه تنسور GGML را تشکیل میدهند که توسط کدهای فرانتاند و مدلمحور llama.cpp به کار گرفته میشود.[۲۰] llama.cpp برای بهینهسازی از چندین افزونه پردازنده مرکزی استفاده میکند: AVX، AVX2 و AVX-512 برای X86-64، و نئون روی آرم. اپل سیلیکون یکی از اهداف مهم این پروژه به شمار میآید زیرا در معماری جدید پردازندههایش از آرم استفاده میکند.[۱۵][۲۱]
llama.cpp از مجموعهای از ویژگیها که با هدف بهینهسازی استنتاج روی دستگاههای لبه طراحی شدهاند پشتیبانی میکند، از جمله:
- کوانتش مدل پیش از اجرا و کوانتش لحظهای[۲۲]
- رمزگشایی حدسی[الف][۷]
- تخلیه جزئی لایههای مدل به رم سیستم، که امکان بارگذاری مدلهایی را فراهم میکند که برای جایگیری کامل در جیپییو و ویرم بیش از حد بزرگ هستند.
افزون بر این، llama.cpp از مجموعهای از قابلیتها و APIها برای برقراری ارتباط در بخش فرانتاند پشتیبانی میکند، از جمله:
قالب پرونده GGUF
[ویرایش]| پسوند(های) نام پرونده | .gguf |
|---|---|
| عدد جادویی | 0x47 0x47 0x55 0x46 |
| توسعهدهنده | جورجی گرگانوف و انجمن |
| ارائهٔ اولیه | ۲۲ اوت ۲۰۲۳[۲۳] |
| آخرین نسخه | v3[۲۴] |
| گونه | تنسور یادگیری ماشین |
قالب پرونده GGUF (مخفف GGML Universal File)[۲۵] یک قالب دودویی است که هم تنسورها و هم فرادادهها را در یک پرونده ذخیره میکند و برای ذخیرهسازی و بارگذاری سریع دادههای مدل طراحی شده است.[۲۶] این قالب در اوت ۲۰۲۳ توسط پروژه llama.cpp معرفی شد تا با افزودن پشتیبانی از معماریهای مدل دیگر، سازگاری با نسخههای پیشین بهتر حفظ شود.[۱۴][۲۷]
GGUF جایگزین قالبهای پیشین مانند GGML شد که قبلاً توسط پروژه به کار میرفتند.
پروندههای GGUF معمولاً با تبدیل مدلهایی ایجاد میشوند که با کتابخانههای یادگیری ماشین دیگری مانند پایتورچ توسعه یافتهاند.[۲۶]
طراحی
[ویرایش]GGUF بر کوانتش تمرکز دارد؛ فرایندی که در آن دقت وزنهای مدل کاهش مییابد. این کار میتواند موجب کاهش مصرف حافظه و افزایش سرعت شود، هرچند که به بهای کاهش دقت مدل تمام میشود.[۲۸][۲۷]
GGUF از انواع داده صحیح کوانتیدهشده ۲ تا ۸ بیتی پشتیبانی میکند،[۲۹] و همچنین از قالبهای متداول داده ممیز شناور مانند float32، float16 و bfloat16 پشتیبانی میکند؛ علاوه بر این، کوانتش ۱٫۵۸ بیتی نیز در آن وجود دارد.[۵]
GGUF شامل اطلاعاتی است که برای اجرای یک مدل زبانی مشابه GPT ضروری است؛ مانند واژگان توکنایزر، طول زمینه (context length)، اطلاعات تنسورها و دیگر ویژگیها.[۳۰]
ساختار سطح بایت (اندیانِ کوچک)
[ویرایش]| بایتها | توضیح[۳۱] |
|---|---|
| ۴ | عدد جادویی GGUF، که در حال حاضر برابر است با 0x47 0x47 0x55 0x46 |
| ۴ | نسخه GGUF، که در حال حاضر برابر است با 3 |
| ۸ | UINT64 tensor_count: تعداد تنسورها |
| ۸ | UINT64 metadata_kv_count: تعداد جفتکلیدهای فراداده |
| متغیر | بلوک فراداده، شامل تعداد metadata_kv_count جفتکلید |
| متغیر | بلوک اطلاعات تنسورها، شامل tensor_count مقدار |
| متغیر | uint8_t tensor_data[]، بلوک بیتهای وزنها |
بلوک فراداده
[ویرایش]// example metadata
general.architecture: 'llama',
general.name: 'LLaMA v2',
llama.context_length: 4096,
... ,
general.file_type: 10, // (typically indicates quantization level, here "MOSTLY_Q2_K")
tokenizer.ggml.model: 'llama',
tokenizer.ggml.tokens: [
'<unk>', '<s>', '</s>', '<0x00>', '<0x01>', '<0x02>',
'<0x03>', '<0x04>', '<0x05>', '<0x06>', '<0x07>', '<0x08>',
...
],
...
بلوک اطلاعات تنسورها
[ویرایش]// n-th tensor
name: GGUF string, // ex: "blk.0.ffn_gate.weight"
n_dimensions: UINT32, // ex: 2
dimensions: UINT64[], // ex: [ 4096, 32000 ]
type: UINT32, // ex: 10 (typically indicates quantization level, here "GGML_TYPE_Q2_K")
offset: UINT64 // starting position within the tensor_data block, relative to the start of the block
// (n+1)-th tensor
...
یادداشتها
[ویرایش]- ↑ Speculative decoding
مراجع
[ویرایش]- ↑ "Initial release · ggerganov/llama.cpp@26c0846". GitHub (به انگلیسی). Retrieved 15 May 2024.
- ↑ "llama.cpp/LICENSE at master · ggerganov/llama.cpp". GitHub (به انگلیسی).
- 1 2 Connatser, Matthew. "How this open source LLM chatbot runner hit the gas on x86, Arm CPUs". theregister.com. Retrieved 15 April 2024.
- ↑ Gerganov, Georgi (17 May 2024). "ggerganov/ggml". گیتهاب.
- 1 2 Mann, Tobias (14 Jul 2024). "Honey, I shrunk the LLM! A beginner's guide to quantization – and testing it". theregister.
- ↑ Alden, Daroc. "Portable LLMs with llamafile [LWN.net]". lwn.net. Retrieved 30 July 2024.
- 1 2 Mann, Tobias (15 December 2024). "Intro to speculative decoding: Cheat codes for faster LLMs". theregister (به انگلیسی).
- ↑ "Bringing Whisper and LLaMA to the masses with Georgi Gerganov (Changelog Interviews #532)". Changelog (به انگلیسی). 22 March 2023. Retrieved 28 July 2024.
- ↑ "ggerganov/whisper.cpp". گیتهاب.
- 1 2 Edwards, Benj (13 March 2023). "You can now run a GPT-3-level AI model on your laptop, phone, and Raspberry Pi". arstechnica.com. Retrieved 15 April 2024.
- 1 2 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}}: Check|pmc=value (help); Check|pmid=value (help) - ↑ Hood, Stephen. "llamafile: bringing LLMs to the people, and to your own computer". Mozilla Innovations (به انگلیسی). Retrieved 28 July 2024.
- ↑ "Democratizing AI with open-source language models". lwn.net. Retrieved 28 July 2024.
- 1 2 Rajput, Saurabhsingh; Sharma, Tushar (4 June 2024). "Benchmarking Emerging Deep Learning Quantization Methods for Energy Efficiency". 2024 IEEE 21st International Conference on Software Architecture Companion (ICSA-C). pp. 238–242. doi:10.1109/ICSA-C63560.2024.00049. ISBN 979-8-3503-6625-9.
- 1 2 "ggerganov/llama.cpp". گیتهاب.
- ↑ Gerganov, Georgi; Nguyen, Xuan Son; Slaren (August 13, 2024). "Introduction to ggml". Huggingface.
- ↑ 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.
- ↑ 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.
- ↑ Bolz, Jeff (February 11–13, 2025). "Machine Learning in Vulkan with Cooperative Matrix 2" (PDF) (به انگلیسی). Cambridge, UK: The Khronos Group/Nvidia.
- ↑ Pounder, Les (25 March 2023). "How To Create Your Own AI Chatbot Server With Raspberry Pi 4". tomshardware.com. Retrieved 16 April 2024.
- ↑ Larabel, Michael. "Llamafile 0.7 Brings AVX-512 Support: 10x Faster Prompt Eval Times For AMD Zen 4". www.phoronix.com (به انگلیسی).
- ↑ 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. Retrieved 8 May 2024.
- ↑ "GGUF by ggerganov · Pull Request #2398 · ggerganov/llama.cpp". GitHub (به انگلیسی).
- ↑ "ggml/docs/gguf.md at master · ggerganov/ggml". GitHub (به انگلیسی).
- ↑ "ggerganov/llama.cpp/gguf-py/README.md". GitHub. Retrieved 10 November 2024.
- 1 2 "GGUF". huggingface.co. Retrieved 9 May 2024.
- 1 2 Mucci, Tim (3 July 2024). "GGUF versus GGML". www.ibm.com (به انگلیسی). Retrieved 26 July 2024.
- ↑ Labonne, Maxime (29 November 2023). "Quantize Llama models with GGUF and llama.cpp". Medium (به انگلیسی). Towards Data Science. Retrieved 9 May 2024.
- ↑ Cabezas, Darío; Fonseca-Delgado, Rigoberto; Reyes-Chacón, Iván; Vizcaino-Imacaña, Paulina; Morocho-Cayamcela, Manuel (2024). "Integrating a LLaMa-based Chatbot with Augmented Retrieval Generation as a Complementary Educational Tool for High School and College Students". Proceedings of the 19th International Conference on Software Technologies. pp. 395–402. doi:10.5220/0012763000003753. ISBN 978-989-758-706-1.
- ↑ Dong, Bo; Lin, Jun; Yu, Zhentao; Xu, Zhenzhong; Luo, Yu; Chang, Hanwen; Shen, Haihao (July 2024). "Accelerating GGUF Models with Transformers". The Parallel Universe (به انگلیسی). No. 57. Intel. pp. 28–33.
- ↑ "GGUF specification (ggml/docs/gguf.md at master · ggml-org/ggml)" (به انگلیسی).