llama.cpp
روابط Python البسيطة لمكتبة llama.cpp
الخاصة بـ @ggerganov . توفر هذه الحزمة:
ctypes
.الوثائق متاحة على https://llama-cpp-python.readthedocs.io/en/latest.
متطلبات:
لتثبيت الحزمة قم بتشغيل:
pip install llama-cpp-python
سيؤدي هذا أيضًا إلى إنشاء llama.cpp
من المصدر وتثبيته بجانب حزمة python هذه.
إذا فشل هذا، أضف --verbose
إلى pip install
راجع سجل إنشاء cmake الكامل.
عجلة مسبقة الصنع (جديدة)
من الممكن أيضًا تثبيت عجلة مدمجة مسبقًا مع دعم وحدة المعالجة المركزية الأساسية.
pip install llama-cpp-python
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
يدعم llama.cpp
عددًا من الواجهات الخلفية لتسريع الأجهزة لتسريع الاستدلال بالإضافة إلى خيارات محددة للواجهة الخلفية. راجع الملف التمهيدي llama.cpp للحصول على القائمة الكاملة.
يمكن تعيين جميع خيارات إنشاء llama.cpp
cmake عبر متغير البيئة CMAKE_ARGS
أو عبر علامة --config-settings / -C
cli أثناء التثبيت.
# Linux and Mac
CMAKE_ARGS= " -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS "
pip install llama-cpp-python
# Windows
$ env: CMAKE_ARGS = " -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS "
pip install llama - cpp - python
يمكن أيضًا ضبطها عبر أمر pip install -C / --config-settings
وحفظها في ملف requirements.txt
:
pip install --upgrade pip # ensure pip is up to date
pip install llama-cpp-python
-C cmake.args= " -DGGML_BLAS=ON;-DGGML_BLAS_VENDOR=OpenBLAS "
# requirements.txt
llama-cpp-python -C cmake.args="-DGGML_BLAS=ON;-DGGML_BLAS_VENDOR=OpenBLAS"
فيما يلي بعض الواجهات الخلفية الشائعة وأوامر البناء الخاصة بها وأي متغيرات بيئة إضافية مطلوبة.
للتثبيت باستخدام OpenBLAS، قم بتعيين متغيرات البيئة GGML_BLAS
و GGML_BLAS_VENDOR
قبل التثبيت:
CMAKE_ARGS= " -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS " pip install llama-cpp-python
للتثبيت بدعم CUDA، قم بتعيين GGML_CUDA=on
متغير البيئة قبل التثبيت:
CMAKE_ARGS= " -DGGML_CUDA=on " pip install llama-cpp-python
عجلة مسبقة الصنع (جديدة)
من الممكن أيضًا تثبيت عجلة مسبقة الصنع بدعم CUDA. طالما أن نظامك يلبي بعض المتطلبات:
pip install llama-cpp-python
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/ < cuda-version >
حيث <cuda-version>
هو واحد مما يلي:
cu121
: كودا 12.1cu122
: كودا 12.2cu123
: كودا 12.3cu124
: كودا 12.4cu125
: كودا 12.5على سبيل المثال، لتثبيت عجلة CUDA 12.1:
pip install llama-cpp-python
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu121
للتثبيت باستخدام Metal (MPS)، قم بتعيين متغير البيئة GGML_METAL=on
قبل التثبيت:
CMAKE_ARGS= " -DGGML_METAL=on " pip install llama-cpp-python
عجلة مسبقة الصنع (جديدة)
من الممكن أيضًا تركيب عجلة مسبقة الصنع بدعم معدني. طالما أن نظامك يلبي بعض المتطلبات:
pip install llama-cpp-python
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/metal
للتثبيت مع دعم hipBLAS / ROCm لبطاقات AMD، قم بتعيين GGML_HIPBLAS=on
لمتغير البيئة قبل التثبيت:
CMAKE_ARGS= " -DGGML_HIPBLAS=on " pip install llama-cpp-python
للتثبيت بدعم Vulkan، قم بتعيين GGML_VULKAN=on
لمتغير البيئة قبل التثبيت:
CMAKE_ARGS= " -DGGML_VULKAN=on " pip install llama-cpp-python
للتثبيت بدعم SYCL، قم بتعيين GGML_SYCL=on
متغير البيئة قبل التثبيت:
source /opt/intel/oneapi/setvars.sh
CMAKE_ARGS= " -DGGML_SYCL=on -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx " pip install llama-cpp-python
للتثبيت بدعم RPC، قم بتعيين GGML_RPC=on
متغير البيئة قبل التثبيت:
source /opt/intel/oneapi/setvars.sh
CMAKE_ARGS= " -DGGML_RPC=on " pip install llama-cpp-python
إذا واجهت مشكلات حيث تشكو من عدم تمكنها من العثور على 'nmake'
'?'
أو CMAKE_C_COMPILER، يمكنك استخراج w64devkit كما هو مذكور في llama.cpp repo وإضافتها يدويًا إلى CMAKE_ARGS قبل تشغيل تثبيت pip
:
$env:CMAKE_GENERATOR = "MinGW Makefiles"
$env:CMAKE_ARGS = "-DGGML_OPENBLAS=on -DCMAKE_C_COMPILER=C: /w64devkit/bin/gcc.exe -DCMAKE_CXX_COMPILER=C: /w64devkit/bin/g++.exe"
راجع التعليمات المذكورة أعلاه وقم بتعيين CMAKE_ARGS
على الواجهة الخلفية لـ BLAS التي تريد استخدامها.
تتوفر وثائق تثبيت MacOS Metal GPU التفصيلية على docs/install/macos.md
ملاحظة: إذا كنت تستخدم Apple Silicon (M1) Mac، فتأكد من تثبيت إصدار Python الذي يدعم بنية Arm64. على سبيل المثال:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh
بخلاف ذلك، أثناء تثبيته، سيتم إنشاء إصدار llama.cpp x86 والذي سيكون أبطأ بمقدار 10 مرات على جهاز Apple Silicon (M1) Mac.
حاول التثبيت باستخدام
CMAKE_ARGS= " -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_APPLE_SILICON_PROCESSOR=arm64 -DGGML_METAL=on " pip install --upgrade --verbose --force-reinstall --no-cache-dir llama-cpp-python
لترقية وإعادة بناء llama-cpp-python
أضف علامات --upgrade --force-reinstall --no-cache-dir
إلى أمر pip install
لضمان إعادة بناء الحزمة من المصدر.
مرجع واجهة برمجة التطبيقات
توفر واجهة برمجة التطبيقات عالية المستوى واجهة مُدارة بسيطة من خلال فئة Llama
.
فيما يلي مثال قصير يوضح كيفية استخدام واجهة برمجة التطبيقات عالية المستوى لإكمال النص الأساسي:
from llama_cpp import Llama
llm = Llama (
model_path = "./models/7B/llama-model.gguf" ,
# n_gpu_layers=-1, # Uncomment to use GPU acceleration
# seed=1337, # Uncomment to set a specific seed
# n_ctx=2048, # Uncomment to increase the context window
)
output = llm (
"Q: Name the planets in the solar system? A: " , # Prompt
max_tokens = 32 , # Generate up to 32 tokens, set to None to generate up to the end of the context window
stop = [ "Q:" , " n " ], # Stop generating just before the model would generate a new question
echo = True # Echo the prompt back in the output
) # Generate a completion, can also call create_completion
print ( output )
افتراضيًا، يُنشئ llama-cpp-python
عمليات إكمال بتنسيق متوافق مع OpenAI:
{
"id" : "cmpl-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ,
"object" : "text_completion" ,
"created" : 1679561337 ,
"model" : "./models/7B/llama-model.gguf" ,
"choices" : [
{
"text" : "Q: Name the planets in the solar system? A: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune and Pluto." ,
"index" : 0 ,
"logprobs" : None ,
"finish_reason" : "stop"
}
],
"usage" : {
"prompt_tokens" : 14 ,
"completion_tokens" : 28 ,
"total_tokens" : 42
}
}
يتوفر إكمال النص من خلال طريقتي __call__
و create_completion
لفئة Llama
.
يمكنك تنزيل نماذج Llama
بتنسيق gguf
مباشرةً من Hugging Face باستخدام طريقة from_pretrained
. ستحتاج إلى تثبيت حزمة huggingface-hub
لاستخدام هذه الميزة ( pip install huggingface-hub
).
llm = Llama . from_pretrained (
repo_id = "Qwen/Qwen2-0.5B-Instruct-GGUF" ,
filename = "*q8_0.gguf" ,
verbose = False
)
افتراضيًا، سيقوم from_pretrained
بتنزيل النموذج إلى دليل Huggingface Cache، ويمكنك بعد ذلك إدارة ملفات النماذج المثبتة باستخدام أداة huggingface-cli
.
توفر واجهة برمجة التطبيقات عالية المستوى أيضًا واجهة بسيطة لإكمال الدردشة.
يتطلب إكمال الدردشة أن يعرف النموذج كيفية تنسيق الرسائل في موجه واحد. تقوم فئة Llama
بذلك باستخدام تنسيقات الدردشة المسجلة مسبقًا (مثل chatml
و llama-2
و gemma
وما إلى ذلك) أو من خلال توفير كائن معالج دردشة مخصص.
سيقوم النموذج بتنسيق الرسائل في موجه واحد باستخدام ترتيب الأسبقية التالي:
chat_handler
إذا تم توفيرهchat_format
إذا تم توفيرهtokenizer.chat_template
من البيانات التعريفية لنموذج gguf
(يجب أن يعمل مع معظم النماذج الجديدة، وقد لا تحتوي النماذج القديمة على هذا)llama-2
تعيين verbose=True
لرؤية تنسيق الدردشة المحدد.
from llama_cpp import Llama
llm = Llama (
model_path = "path/to/llama-2/llama-model.gguf" ,
chat_format = "llama-2"
)
llm . create_chat_completion (
messages = [
{ "role" : "system" , "content" : "You are an assistant who perfectly describes images." },
{
"role" : "user" ,
"content" : "Describe this image in detail please."
}
]
)
إكمال الدردشة متاح من خلال طريقة create_chat_completion
لفئة Llama
.
للتوافق مع OpenAI API v1، يمكنك استخدام طريقة create_chat_completion_openai_v1
التي ستعيد نماذج pydantic بدلاً من الإملاءات.
لتقييد استجابات الدردشة بـ JSON صالح فقط أو مخطط JSON محدد، استخدم وسيطة response_format
في create_chat_completion
.
سيقيد المثال التالي الاستجابة لسلاسل JSON الصالحة فقط.
from llama_cpp import Llama
llm = Llama ( model_path = "path/to/model.gguf" , chat_format = "chatml" )
llm . create_chat_completion (
messages = [
{
"role" : "system" ,
"content" : "You are a helpful assistant that outputs in JSON." ,
},
{ "role" : "user" , "content" : "Who won the world series in 2020" },
],
response_format = {
"type" : "json_object" ,
},
temperature = 0.7 ,
)
لتقييد الاستجابة بشكل أكبر بمخطط JSON محدد، قم بإضافة المخطط إلى خاصية schema
للوسيطة response_format
.
from llama_cpp import Llama
llm = Llama ( model_path = "path/to/model.gguf" , chat_format = "chatml" )
llm . create_chat_completion (
messages = [
{
"role" : "system" ,
"content" : "You are a helpful assistant that outputs in JSON." ,
},
{ "role" : "user" , "content" : "Who won the world series in 2020" },
],
response_format = {
"type" : "json_object" ,
"schema" : {
"type" : "object" ,
"properties" : { "team_name" : { "type" : "string" }},
"required" : [ "team_name" ],
},
},
temperature = 0.7 ,
)
تدعم واجهة برمجة التطبيقات عالية المستوى استدعاء الوظائف والأدوات المتوافقة مع OpenAI. يكون ذلك ممكنًا من خلال تنسيق الدردشة للنماذج functionary
المدربة مسبقًا أو من خلال تنسيق الدردشة العام chatml-function-calling
.
from llama_cpp import Llama
llm = Llama ( model_path = "path/to/chatml/llama-model.gguf" , chat_format = "chatml-function-calling" )
llm . create_chat_completion (
messages = [
{
"role" : "system" ,
"content" : "A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. The assistant calls functions with appropriate input when necessary"
},
{
"role" : "user" ,
"content" : "Extract Jason is 25 years old"
}
],
tools = [{
"type" : "function" ,
"function" : {
"name" : "UserDetail" ,
"parameters" : {
"type" : "object" ,
"title" : "UserDetail" ,
"properties" : {
"name" : {
"title" : "Name" ,
"type" : "string"
},
"age" : {
"title" : "Age" ,
"type" : "integer"
}
},
"required" : [ "name" , "age" ]
}
}
}],
tool_choice = {
"type" : "function" ,
"function" : {
"name" : "UserDetail"
}
}
)
يمكن العثور على الملفات المختلفة المحولة إلى gguf لهذه المجموعة من النماذج هنا. الوظيفة قادرة على استدعاء الوظائف بذكاء وكذلك تحليل أي مخرجات وظيفة مقدمة لتوليد استجابات متماسكة. تدعم جميع نماذج v2 من الوظائف استدعاء الوظائف المتوازية . يمكنك توفير إما functionary-v1
أو functionary-v2
لتنسيق chat_format
عند تهيئة فئة Llama.
نظرًا للتناقضات بين llama.cpp ورموز HuggingFace، يلزم توفير HF Tokenizer للموظف. يمكن تهيئة فئة LlamaHFTokenizer
وتمريرها إلى فئة Llama. سيؤدي هذا إلى تجاوز رمز llama.cpp الافتراضي المستخدم في فئة Llama. تم تضمين ملفات الرمز المميز بالفعل في مستودعات HF المعنية التي تستضيف ملفات gguf.
from llama_cpp import Llama
from llama_cpp . llama_tokenizer import LlamaHFTokenizer
llm = Llama . from_pretrained (
repo_id = "meetkai/functionary-small-v2.2-GGUF" ,
filename = "functionary-small-v2.2.q4_0.gguf" ,
chat_format = "functionary-v2" ,
tokenizer = LlamaHFTokenizer . from_pretrained ( "meetkai/functionary-small-v2.2-GGUF" )
)
ملاحظة : ليست هناك حاجة لتوفير رسائل النظام الافتراضية المستخدمة في الوظيفة حيث تتم إضافتها تلقائيًا في معالج الدردشة الوظيفية. وبالتالي، يجب أن تحتوي الرسائل فقط على رسائل الدردشة و/أو رسائل النظام التي توفر سياقًا إضافيًا للنموذج (على سبيل المثال: التاريخ والوقت وما إلى ذلك).
يدعم llama-cpp-python
مثل llava1.5 الذي يسمح لنموذج اللغة بقراءة المعلومات من النص والصور.
فيما يلي النماذج متعددة الوسائط المدعومة ومعالجات الدردشة الخاصة بها (Python API) وتنسيقات الدردشة (Server API).
نموذج | LlamaChatHandler | chat_format |
---|---|---|
اللافا-v1.5-7b | Llava15ChatHandler | llava-1-5 |
اللافا-v1.5-13b | Llava15ChatHandler | llava-1-5 |
اللافا-v1.6-34b | Llava16ChatHandler | llava-1-6 |
moondream2 | MoondreamChatHandler | moondream2 |
نانولافا | NanollavaChatHandler | nanollava |
اللاما-3-رؤية-ألفا | Llama3VisionAlphaChatHandler | llama-3-vision-alpha |
مينيكبم-v-2.6 | MiniCPMv26ChatHandler | minicpm-v-2.6 |
ستحتاج بعد ذلك إلى استخدام معالج دردشة مخصص لتحميل نموذج المقطع ومعالجة رسائل وصور الدردشة.
from llama_cpp import Llama
from llama_cpp . llama_chat_format import Llava15ChatHandler
chat_handler = Llava15ChatHandler ( clip_model_path = "path/to/llava/mmproj.bin" )
llm = Llama (
model_path = "./path/to/llava/llama-model.gguf" ,
chat_handler = chat_handler ,
n_ctx = 2048 , # n_ctx should be increased to accommodate the image embedding
)
llm . create_chat_completion (
messages = [
{ "role" : "system" , "content" : "You are an assistant who perfectly describes images." },
{
"role" : "user" ,
"content" : [
{ "type" : "text" , "text" : "What's in this image?" },
{ "type" : "image_url" , "image_url" : { "url" : "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg" } }
]
}
]
)
يمكنك أيضًا سحب النموذج من Hugging Face Hub باستخدام طريقة from_pretrained
.
from llama_cpp import Llama
from llama_cpp . llama_chat_format import MoondreamChatHandler
chat_handler = MoondreamChatHandler . from_pretrained (
repo_id = "vikhyatk/moondream2" ,
filename = "*mmproj*" ,
)
llm = Llama . from_pretrained (
repo_id = "vikhyatk/moondream2" ,
filename = "*text-model*" ,
chat_handler = chat_handler ,
n_ctx = 2048 , # n_ctx should be increased to accommodate the image embedding
)
response = llm . create_chat_completion (
messages = [
{
"role" : "user" ,
"content" : [
{ "type" : "text" , "text" : "What's in this image?" },
{ "type" : "image_url" , "image_url" : { "url" : "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg" } }
]
}
]
)
print ( response [ "choices" ][ 0 ][ "text" ])
ملاحظة : تدعم النماذج متعددة الوسائط أيضًا استدعاء الأدوات ووضع JSON.
يمكن تمرير الصور كمعرفات URI للبيانات المشفرة باستخدام Base64. يوضح المثال التالي كيفية القيام بذلك.
import base64
def image_to_base64_data_uri ( file_path ):
with open ( file_path , "rb" ) as img_file :
base64_data = base64 . b64encode ( img_file . read ()). decode ( 'utf-8' )
return f"data:image/png;base64, { base64_data } "
# Replace 'file_path.png' with the actual path to your PNG file
file_path = 'file_path.png'
data_uri = image_to_base64_data_uri ( file_path )
messages = [
{ "role" : "system" , "content" : "You are an assistant who perfectly describes images." },
{
"role" : "user" ,
"content" : [
{ "type" : "image_url" , "image_url" : { "url" : data_uri }},
{ "type" : "text" , "text" : "Describe this image in detail please." }
]
}
]
يدعم llama-cpp-python
فك التشفير التخميني الذي يسمح للنموذج بإنشاء عمليات إكمال بناءً على مسودة النموذج.
أسرع طريقة لاستخدام فك التشفير التخميني هي من خلال فئة LlamaPromptLookupDecoding
.
ما عليك سوى تمرير هذا كنموذج مسودة إلى فئة Llama
أثناء التهيئة.
from llama_cpp import Llama
from llama_cpp . llama_speculative import LlamaPromptLookupDecoding
llama = Llama (
model_path = "path/to/model.gguf" ,
draft_model = LlamaPromptLookupDecoding ( num_pred_tokens = 10 ) # num_pred_tokens is the number of tokens to predict 10 is the default and generally good for gpu, 2 performs better for cpu-only machines.
)
لإنشاء تضمينات نصية، استخدم create_embedding
أو embed
. لاحظ أنه يجب عليك تمرير embedding=True
إلى المُنشئ عند إنشاء النموذج حتى تعمل هذه العناصر بشكل صحيح.
import llama_cpp
llm = llama_cpp . Llama ( model_path = "path/to/model.gguf" , embedding = True )
embeddings = llm . create_embedding ( "Hello, world!" )
# or create multiple embeddings at once
embeddings = llm . create_embedding ([ "Hello, world!" , "Goodbye, world!" ])
هناك فكرتان أساسيتان للتضمين في نموذج نمط المحول: مستوى الرمز المميز ومستوى التسلسل . يتم إنتاج عمليات تضمين مستوى التسلسل عن طريق "تجميع" عمليات تضمين مستوى الرمز المميز معًا، عادةً عن طريق حساب متوسطها أو استخدام الرمز المميز الأول.
عادةً ما تُرجع النماذج الموجهة بشكل صريح نحو عمليات التضمين عمليات تضمين على مستوى التسلسل بشكل افتراضي، واحدة لكل سلسلة إدخال. عادةً ما تقوم النماذج غير المضمنة، مثل تلك المصممة لإنشاء النص، بإرجاع عمليات التضمين على مستوى الرمز المميز فقط، واحدة لكل رمز مميز في كل تسلسل. وبالتالي فإن أبعاد نوع الإرجاع ستكون أعلى بالنسبة للتضمينات على مستوى الرمز المميز.
من الممكن التحكم في سلوك التجميع في بعض الحالات باستخدام علامة pooling_type
عند إنشاء النموذج. يمكنك التأكد من التضمين على مستوى الرمز المميز من أي نموذج باستخدام LLAMA_POOLING_TYPE_NONE
. على العكس من ذلك، فإن الحصول على نموذج موجه نحو الجيل لإنتاج عمليات تضمين على مستوى التسلسل غير ممكن حاليًا، ولكن يمكنك دائمًا القيام بالتجميع يدويًا.
تحدد نافذة السياق الخاصة بنماذج Llama الحد الأقصى لعدد الرموز المميزة التي يمكن معالجتها مرة واحدة. افتراضيًا، يتم تعيين هذا على 512 رمزًا مميزًا، ولكن يمكن تعديله بناءً على متطلباتك.
على سبيل المثال، إذا كنت تريد العمل مع سياقات أكبر، فيمكنك توسيع نافذة السياق عن طريق تعيين المعلمة n_ctx عند تهيئة كائن Llama:
llm = Llama ( model_path = "./models/7B/llama-model.gguf" , n_ctx = 2048 )
يقدم llama-cpp-python
خادم ويب يهدف إلى العمل كبديل مباشر لواجهة برمجة تطبيقات OpenAI. يتيح لك ذلك استخدام النماذج المتوافقة مع llama.cpp مع أي عميل متوافق مع OpenAI (مكتبات اللغات والخدمات وما إلى ذلك).
لتثبيت حزمة الخادم والبدء:
pip install ' llama-cpp-python[server] '
python3 -m llama_cpp.server --model models/7B/llama-model.gguf
على غرار قسم تسريع الأجهزة أعلاه، يمكنك أيضًا التثبيت باستخدام دعم GPU (cuBLAS) مثل هذا:
CMAKE_ARGS= " -DGGML_CUDA=on " FORCE_CMAKE=1 pip install ' llama-cpp-python[server] '
python3 -m llama_cpp.server --model models/7B/llama-model.gguf --n_gpu_layers 35
انتقل إلى http://localhost:8000/docs للاطلاع على وثائق OpenAPI.
للربط بـ 0.0.0.0
لتمكين الاتصالات عن بعد، استخدم python3 -m llama_cpp.server --host 0.0.0.0
. وبالمثل، لتغيير المنفذ (الافتراضي هو 8000)، استخدم --port
.
ربما تريد أيضًا تعيين تنسيق المطالبة. بالنسبة للدردشة استخدم
python3 -m llama_cpp.server --model models/7B/llama-model.gguf --chat_format chatml
سيؤدي ذلك إلى تنسيق المطالبة وفقًا للكيفية التي يتوقعها النموذج. يمكنك العثور على التنسيق الفوري في بطاقة النموذج. للحصول على الخيارات الممكنة، راجع llama_cpp/llama_chat_format.py وابحث عن السطور التي تبدأ بـ "@register_chat_format".
إذا قمت بتثبيت huggingface-hub
، فيمكنك أيضًا استخدام علامة --hf_model_repo_id
لتحميل نموذج من Hugging Face Hub.
python3 -m llama_cpp.server --hf_model_repo_id Qwen/Qwen2-0.5B-Instruct-GGUF --model ' *q8_0.gguf '
صورة Docker متاحة على GHCR. لتشغيل الخادم:
docker run --rm -it -p 8000:8000 -v /path/to/models:/models -e MODEL=/models/llama-model.gguf ghcr.io/abetlen/llama-cpp-python:latest
يُعد Docker on termux (يتطلب الجذر) الطريقة الوحيدة المعروفة حاليًا لتشغيل هذا على الهواتف، راجع مشكلة دعم termux
مرجع واجهة برمجة التطبيقات
واجهة برمجة التطبيقات ذات المستوى المنخفض عبارة عن أنواع ctypes
مرتبطة مباشرة بواجهة برمجة تطبيقات C التي يوفرها llama.cpp
. يمكن العثور على واجهة برمجة التطبيقات (API) ذات المستوى المنخفض بالكامل في llama_cpp/llama_cpp.py وتعكس واجهة برمجة تطبيقات C مباشرة في llama.h.
فيما يلي مثال قصير يوضح كيفية استخدام واجهة برمجة التطبيقات ذات المستوى المنخفض لترميز المطالبة:
import llama_cpp
import ctypes
llama_cpp . llama_backend_init ( False ) # Must be called once at the start of each program
params = llama_cpp . llama_context_default_params ()
# use bytes for char * params
model = llama_cpp . llama_load_model_from_file ( b"./models/7b/llama-model.gguf" , params )
ctx = llama_cpp . llama_new_context_with_model ( model , params )
max_tokens = params . n_ctx
# use ctypes arrays for array params
tokens = ( llama_cpp . llama_token * int ( max_tokens ))()
n_tokens = llama_cpp . llama_tokenize ( ctx , b"Q: Name the planets in the solar system? A: " , tokens , max_tokens , llama_cpp . c_bool ( True ))
llama_cpp . llama_free ( ctx )
تحقق من مجلد الأمثلة للحصول على المزيد من الأمثلة على استخدام واجهة برمجة التطبيقات ذات المستوى المنخفض.
الوثائق متاحة عبر https://llama-cpp-python.readthedocs.io/. إذا وجدت أي مشاكل في الوثائق، فيرجى فتح مشكلة أو إرسال بيان علاقات عامة.
هذه الحزمة قيد التطوير النشط وأرحب بأي مساهمات.
للبدء، قم باستنساخ المستودع وتثبيت الحزمة في وضع قابل للتحرير/التطوير:
git clone --recurse-submodules https://github.com/abetlen/llama-cpp-python.git
cd llama-cpp-python
# Upgrade pip (required for editable mode)
pip install --upgrade pip
# Install with pip
pip install -e .
# if you want to use the fastapi / openapi server
pip install -e .[server]
# to install all optional dependencies
pip install -e .[all]
# to clear the local build cache
make clean
يمكنك أيضًا اختبار التزامات محددة لـ llama.cpp
عن طريق التحقق من الالتزام المطلوب في الوحدة الفرعية vendor/llama.cpp
ثم تشغيل make clean
and pip install -e .
مرة أخرى. ستتطلب أي تغييرات في واجهة برمجة التطبيقات llama.h
إجراء تغييرات على ملف llama_cpp/llama_cpp.py
لمطابقة واجهة برمجة التطبيقات الجديدة (قد تكون هناك حاجة إلى تغييرات إضافية في مكان آخر).