# llama.cpp

[llama.cpp](https://github.com/ggml-org/llama.cpp) هو محرك استدلال بلغة C/C++ لنشر نماذج اللغة الكبيرة محليًا. إنه خفيف الوزن ولا يتطلب Python أو CUDA أو أي بنية تحتية ثقيلة للخوادم. يستخدم llama.cpp صيغة الملفات [GGUF](https://huggingface.co/blog/ngxson/common-ai-model-formats#gguf). تدعم GGUF أوزان النماذج المُكمّمة (quantized) وتعيين الذاكرة (memory-mapping) لتقليل عرض نطاق الذاكرة على جهازك.

> [!TIP]
> تصفّح [Hub](https://huggingface.co/models?apps=llama.cpp&sort=trending) للبحث عن النماذج المتاحة بالفعل بتنسيق GGUF.

قم بتحويل أي نموذج من نماذج Transformers إلى صيغة GGUF باستخدام سكربت [convert_hf_to_gguf.py](https://github.com/ggml-org/llama.cpp/blob/master/convert_hf_to_gguf.py).

```bash
python3 convert_hf_to_gguf.py ./models/openai/gpt-oss-20b \
  --outfile gpt-oss-20b.gguf \
```

انشر النموذج محليًا من سطر الأوامر باستخدام [llama-cli](https://github.com/ggml-org/llama.cpp/tree/master#llama-cli) أو ابدأ واجهة ويب باستخدام [llama-server](https://github.com/ggml-org/llama.cpp/tree/master#llama-server). أضف العلم `-hf` للإشارة إلى أن النموذج من Hub.

```bash
llama-cli -hf ggml-org/gpt-oss-20b-GGUF
```

```bash
llama-server -hf ggml-org/gpt-oss-20b-GGUF
```

## تكامل Transformers

1. تحمّل [AutoConfig.from_pretrained()](/docs/transformers/main/ar/model_doc/auto#transformers.AutoConfig.from_pretrained) ملف `config.json` الخاص بالنموذج لاستخراج البيانات الوصفية.
2. يستخرج [AutoTokenizer.from_pretrained()](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer.from_pretrained) مفردات النموذج وإعدادات المرمّز.
3. بناءً على حقل `architectures` في ملف الإعداد، يختار السكربت فئة المحوّل من سجلّه الداخلي. يقوم السجل بربط أسماء معماريات Transformers (مثل [LlamaForCausalLM](/docs/transformers/main/ar/model_doc/llama2#transformers.LlamaForCausalLM)) بفئات المحوّل المقابلة لها.
4. يقوم المحوّل بربط أسماء تensors في Transformers (على سبيل المثال، `model.layers.0.self_attn.q_proj.weight`) بأسماء تensors في GGUF، وتحويل التensors، وتغليف المفردات.
5. المخرَج هو ملف GGUF واحد يحتوي على أوزان النموذج ومُقسِّم الرموز (tokenizer) والبيانات الوصفية.

## الموارد

- توثيق [llama.cpp](https://github.com/ggml-org/llama.cpp)
- مقال [مقدمة إلى ggml](https://huggingface.co/blog/introduction-to-ggml)

