برنامج دردشة بسيط من خلال سطر الأوامر لنماذج GPT-J وLLaMA وMPT المكتوبة بلغة C++. استنادًا إلى llama.cpp ويستخدم الواجهة الخلفية gpt4all للتوافق الكامل.
تحذير: تقدم مبكر جدًا، وقد يحتوي على أخطاء
نظرًا لأن البرنامج مصنوع باستخدام لغة c++، فيجب أن يتم إنشاؤه وتشغيله على معظم أنظمة Linux وMacOS وWindows. يحتوي رابط الإصدارات على ثنائيات جاهزة. يعد AVX2 أسرع ويعمل على معظم أجهزة الكمبيوتر الأحدث. إذا قمت بتشغيل البرنامج، فسوف يتحقق ويطبع ما إذا كان جهاز الكمبيوتر الخاص بك يدعم AVX2.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
تحتاج أيضًا إلى تنزيل ملف نموذج، راجع النماذج المدعومة للحصول على التفاصيل والروابط.
نظرًا لأن البرنامج مصنوع باستخدام لغة c++، فيجب أن يتم إنشاؤه وتشغيله على معظم أنظمة Linux وMacOS وWindows. في معظم الأنظمة، تحتاج فقط إلى هذا للإنشاء:
mkdir build
cd build
cmake ..
cmake --build . --parallel
ملحوظة
إذا كان لديك معالج قديم، فيمكنك إيقاف تشغيل تعليمات AVX2 في خطوة الإنشاء باستخدام علامة
-DAVX2=OFF
.إذا كان لديك معالج جديد، فيمكنك تشغيل تعليمات AVX512 في خطوة الإنشاء باستخدام العلامة
-DAVX512=ON
.في نظام التشغيل macOS القديم، اضبط
-DBUILD_UNIVERSAL=OFF
لجعل الإصدار x86 فقط بدلاً من الإصدار الثنائي العالمي Intel/ARM64. في نظام التشغيل macOS القديم، اضبط-DOLD_MACOS=ON
. يؤدي هذا إلى تعطيل/save
و/load
ولكن يتم تجميعه على Xcode القديم.على نظام التشغيل Windows، يمكنك الآن استخدام Visual Studio (MSVC) أو MinGW. إذا كنت تريد إنشاء MinGW بدلاً من ذلك، فاضبط
-G "MinGW Makefiles"
.لا توجد ثنائيات جاهزة في ARM64 Linux، ولكن يمكنك الآن بنائها من المصدر.
بعد التجميع، يقع الملف الثنائي في:
build/bin/chat
لكن لك الحرية في نقله إلى أي مكان. أمر بسيط لأربعة سلاسل للبدء:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
أو
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
دردشة سعيدة!
تدعم الواجهة الخلفية الحالية نماذج GPT-J وLLaMA وMPT.
تحتاج إلى تنزيل نموذج GPT-J أولاً. وهذه روابط مباشرة للنماذج:
- الإصدار الافتراضي هو v1.0 : ggml-gpt4all-j.bin
- في وقت كتابة هذا التقرير، كان الإصدار الأحدث هو 1.3-groovy : ggml-gpt4all-j-v1.3-groovy.bin
يبلغ حجم كل منهما حوالي 3.8 جيجا بايت. يقوم برنامج الدردشة بتخزين النموذج في ذاكرة الوصول العشوائي (RAM) في وقت التشغيل، لذا تحتاج إلى ذاكرة كافية للتشغيل. يمكنك الحصول على مزيد من التفاصيل حول نماذج GPT-J من gpt4all.io أو nomic-ai/gpt4all github.
وبدلاً من ذلك، تحتاج إلى تنزيل نموذج LLaMA أولاً. الأوزان الأصلية مخصصة لأغراض البحث ويمكنك التقدم بطلب للوصول هنا. فيما يلي روابط مباشرة للنماذج المشتقة:
- فيكونا 7ب v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- فيكونا 13ب v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-All l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
تعد نماذج LLaMA كبيرة جدًا: يبلغ حجم إصدارات المعلمة 7B حوالي 4.2 جيجا بايت والمعلمة 13B 8.2 جيجا بايت لكل منهما. يقوم برنامج الدردشة بتخزين النموذج في ذاكرة الوصول العشوائي (RAM) في وقت التشغيل، لذا تحتاج إلى ذاكرة كافية للتشغيل. يمكنك الحصول على مزيد من التفاصيل حول نماذج LLaMA من المستند التقني أو موقع META AI الإلكتروني.
يمكنك أيضًا تنزيل نموذج MPT واستخدامه بدلاً من ذلك. فيما يلي روابط مباشرة لنماذج MPT-7B:
- النموذج الأساسي MPT-7B الذي تم تدريبه مسبقًا بواسطة Mosaic ML: ggml-mpt-7b-base.bin
- نموذج تعليمات MPT-7B تم تدريبه بواسطة Mosaic ML: ggml-mpt-7b-instruct.bin
- نموذج الدردشة MPT-7B غير التجاري الذي تم تدريبه بواسطة Mosaic ML: ggml-mpt-7b-chat.bin
يبلغ حجم كل منهما حوالي 4.9 جيجا بايت. يقوم برنامج الدردشة بتخزين النموذج في ذاكرة الوصول العشوائي (RAM) في وقت التشغيل، لذا تحتاج إلى ذاكرة كافية للتشغيل. يمكنك الحصول على مزيد من التفاصيل حول نماذج MPT من موقع MosaicML أو موقع MosaicML/llm-foundry github.
يمكنك عرض المساعدة وقائمة المعلمات الكاملة باستخدام: ./chat -h
usage: ./bin/chat [options]
A simple chat program for GPT-J, LLaMA, and MPT models.
You can set specific initial prompt with the -p flag.
Runs default in interactive and continuous mode.
Type ' /reset ' to reset the chat context.
Type ' /save ' , ' /load ' to save network state into a binary file.
Type ' /save NAME ' , ' /load NAME ' to rename saves. Default: --save_name NAME.
Type ' /help ' to show this help dialog.
Type ' quit ' , ' exit ' or, ' Ctrl+C ' to quit.
options:
-h, --help show this help message and exit
-v, --version show version and license information
--run-once disable continuous mode
--no-interactive disable interactive mode altogether (uses given prompt only)
--no-animation disable chat animation
--no-saves disable ' /save ' , ' /load ' functionality
-s SEED, --seed SEED RNG seed for --random-prompt (default: -1)
-t N, --threads N number of threads to use during computation (default: 4)
-p PROMPT, --prompt PROMPT
prompt to start generation with (default: empty)
--random-prompt start with a randomized prompt.
-n N, --n_predict N number of tokens to predict (default: 200)
--top_k N top-k sampling (default: 40)
--top_p N top-p sampling (default: 0.9)
--temp N temperature (default: 0.9)
--n_ctx N number of tokens in context window (default: 0)
-b N, --batch_size N batch size for prompt processing (default: 20)
--repeat_penalty N repeat_penalty (default: 1.1)
--repeat_last_n N last n tokens to penalize (default: 64)
--context_erase N percent of context to erase (default: 0.8)
--b_token optional beginning wrap token for response (default: empty)
--e_token optional end wrap token for response (default: empty)
-j, --load_json FNAME
load options instead from json at FNAME (default: empty/no)
--load_template FNAME
load prompt template from a txt file at FNAME (default: empty/no)
--save_log FNAME
save chat log to a file at FNAME (default: empty/no)
--load_log FNAME
load chat log from a file at FNAME (default: empty/no)
--save_dir DIR
directory for saves (default: ./saves)
--save_name NAME
save/load model state binary at save_dir/NAME.bin (current: model_state)
context is saved to save_dir/NAME.ctx (current: model_state)
-m FNAME, --model FNAME
model path (current: ./models/ggml-vicuna-13b-1.1-q4_2.bin)
فيما يلي بعض الميزات والتفاصيل المفيدة حول كيفية تحقيقها باستخدام خيارات سطر الأوامر.
افتراضيًا، يقوم البرنامج بطباعة الدردشة إلى الإخراج القياسي (stdout)، لذلك إذا كنت تقوم بتضمين البرنامج في تطبيقك، فإنه يحتاج فقط إلى قراءة stdout. يمكنك أيضًا حفظ سجل الدردشة بالكامل في ملف نصي باستخدام خيار --save_log
. هناك طريقة أولية لتذكر محادثتك السابقة عن طريق تحميل سجل الدردشة المحفوظ باستخدام خيار --load_log
عند بدء جلسة جديدة.
إذا كنت تريد تشغيل البرنامج مرة واحدة فقط دون أي تفاعلات من المستخدم، فإحدى الطرق هي تعيين المطالبة باستخدام -p "prompt"
واستخدام علامتي --no-interactive
و-- --no-animation
. سيقوم البرنامج بقراءة المطالبة وطباعة الإجابة وإغلاقها.
إذا كنت تريد شخصية للذكاء الاصطناعي الخاص بك، فيمكنك تغيير prompt_template_sample.txt
واستخدام --load_template
لتحميل الملف المعدل. الثابت الوحيد هو أن مدخلاتك أثناء الدردشة سيتم وضعها في السطر %1
. يمكن استبدال التعليمات والموجه والاستجابة وكل شيء آخر بالطريقة التي تريدها. يعد وجود ملفات personality_template.txt
مختلفة طريقة سهلة لإضافة أحرف AI مختلفة. في بعض النماذج، يمكن أن يؤدي إعطاء كل من الذكاء الاصطناعي وأسماء المستخدمين بدلاً من Prompt:
Response:
إلى تدفق المحادثة بشكل طبيعي أكثر حيث يحاول الذكاء الاصطناعي محاكاة محادثة بين شخصين.
يمكنك إعادة تعيين الدردشة في أي وقت أثناء الدردشة عن طريق كتابة /reset
في حقل الإدخال. سيؤدي هذا إلى مسح ذاكرة الذكاء الاصطناعي من المحادثات والسجلات والرموز المميزة السابقة. يمكنك بعد ذلك بدء الدردشة من قائمة فارغة دون الحاجة إلى إعادة تحميل النموذج بأكمله مرة أخرى.
يمكنك أيضًا جلب المعلمات من ملف json باستخدام علامة --load_json "/path/to/file.json"
. قد يكون أداء النماذج المختلفة أفضل أو أسوأ مع معلمات الإدخال المختلفة، لذا فإن استخدام ملفات json يعد طريقة سهلة لتخزين وتحميل جميع الإعدادات مرة واحدة. تم تصميم محمل ملفات JSON ليكون بسيطًا لمنع أي تبعيات خارجية، ونتيجة لذلك، يجب أن يتبع ملف JSON تنسيقًا محددًا. هنا مثال بسيط:
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
يعد هذا مفيدًا عندما تريد تخزين إعدادات مختلفة لدرجات الحرارة وأخذ العينات.
وواحد أكثر تفصيلا:
{
"top_p" : 1.0 ,
"top_k" : 50400 ,
"temp" : 0.9 ,
"n_batch" : 20 ,
"threads" : 12 ,
"prompt" : "Once upon a time" ,
"load_template" : "/path/to/prompt_template_sample.txt" ,
"model" : "/path/to/ggml-gpt4all-j-v1.3-groovy.bin" ,
"no-interactive" : "true"
}
يقوم هذا بتحميل المطالبة من json، ويستخدم قالبًا محددًا، ويقوم بتشغيل البرنامج مرة واحدة في الوضع غير التفاعلي حتى لا يضطر المستخدم إلى الضغط على أي إدخال.
هذا المشروع مرخص بموجب ترخيص MIT