โปรแกรมแชทบรรทัดคำสั่งอย่างง่ายสำหรับรุ่น GPT-J, LLaMA และ MPT ที่เขียนด้วยภาษา C++ อิงตาม llama.cpp และใช้ gpt4all-backend เพื่อความเข้ากันได้เต็มรูปแบบ
คำเตือน ความคืบหน้าเร็วมาก อาจมีข้อบกพร่อง
เนื่องจากโปรแกรมถูกสร้างขึ้นโดยใช้ 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 ได้ในขั้นตอนการ build ด้วยแฟล็ก
-DAVX2=OFF
หากคุณมีโปรเซสเซอร์ใหม่ คุณสามารถเปิดคำสั่ง AVX512 ได้ในขั้นตอนการ build ด้วยแฟล็ก
-DAVX512=ON
บน macOS รุ่นเก่า ให้ตั้งค่า
-DBUILD_UNIVERSAL=OFF
เพื่อสร้าง build x86 เท่านั้น แทนที่จะเป็นไบนารี Intel/ARM64 สากล บน macOS รุ่นเก่าจริงๆ ให้ตั้งค่า-DOLD_MACOS=ON
สิ่งนี้จะปิดการใช้งาน/save
และ/load
แต่จะคอมไพล์บน Xcode เก่าบน Windows คุณสามารถใช้ Visual Studio (MSVC) หรือ MinGW ได้แล้ว หากคุณต้องการสร้าง MinGW แทน ให้ตั้งค่า
-G "MinGW Makefiles"
บน ARM64 Linux ไม่มีไบนารีสำเร็จรูป แต่ตอนนี้คุณสามารถสร้างมันจากแหล่งที่มาได้
หลังจากคอมไพล์แล้ว ไบนารี่จะอยู่ที่:
build/bin/chat
แต่คุณสามารถย้ายมันไปได้ทุกที่ได้อย่างอิสระ คำสั่งง่ายๆ สำหรับ 4 เธรดในการเริ่มต้น:
./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 Gb โปรแกรมแชทจะจัดเก็บโมเดลไว้ใน RAM บนรันไทม์ ดังนั้นคุณจึงจำเป็นต้องมีหน่วยความจำเพียงพอในการรัน คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับรุ่น GPT-J ได้จาก gpt4all.io หรือ nomic-ai/gpt4all github
หรือคุณจะต้องดาวน์โหลดโมเดล LLaMA ก่อน ตุ้มน้ำหนักเดิมมีไว้เพื่อการวิจัย และคุณสามารถสมัครได้ที่นี่ ด้านล่างนี้คือลิงก์โดยตรงไปยังโมเดลที่ได้รับ:
- Vicuna 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- Vicuna 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4- l13b-snoozy ทั้งหมด : ggml-gpt4all-l13b-snoozy.bin
โมเดล LLaMA มีขนาดค่อนข้างใหญ่: เวอร์ชันพารามิเตอร์ 7B มีขนาดประมาณ 4.2 Gb และพารามิเตอร์ 13B แต่ละตัวมีขนาด 8.2 Gb โปรแกรมแชทจะจัดเก็บโมเดลไว้ใน 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 Gb โปรแกรมแชทจะจัดเก็บโมเดลไว้ใน RAM บนรันไทม์ ดังนั้นคุณจึงจำเป็นต้องมีหน่วยความจำเพียงพอในการรัน คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับโมเดล MPT ได้จากเว็บไซต์ MosaicML หรือ GitHub ของmosaicml/llm-foundry
คุณสามารถดูวิธีใช้และรายการพารามิเตอร์ทั้งหมดได้ด้วย: ./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
เมื่อคุณเริ่มเซสชั่นใหม่
หากคุณต้องการให้โปรแกรมทำงานเพียงครั้งเดียวโดยไม่มีการโต้ตอบจากผู้ใช้ วิธีหนึ่งคือตั้งค่า prompt ด้วย -p "prompt"
และใช้แฟล็ก --no-interactive
และ --no-animation
โปรแกรมจะอ่านพร้อมท์ พิมพ์คำตอบ และปิด
หากคุณต้องการบุคลิกสำหรับ AI ของคุณ คุณสามารถเปลี่ยน prompt_template_sample.txt
และใช้ --load_template
เพื่อโหลดไฟล์ที่แก้ไข ค่าคงที่เพียงอย่างเดียวคือข้อมูลที่คุณป้อนระหว่างการแชทจะอยู่ที่บรรทัด %1
คำแนะนำ การแจ้ง การตอบกลับ และอื่นๆ สามารถเปลี่ยนได้ตามที่คุณต้องการ การมีไฟล์ personality_template.txt
ที่แตกต่างกันเป็นวิธีง่ายๆ ในการเพิ่มอักขระ AI ต่างๆ สำหรับ บาง รุ่น การให้ทั้ง AI และชื่อผู้ใช้แทน Prompt:
และ Response:
สามารถทำให้การสนทนาไหลลื่นเป็นธรรมชาติมากขึ้น เนื่องจาก AI พยายามเลียนแบบการสนทนาระหว่างคนสองคน
คุณสามารถรีเซ็ตการแชทได้ตลอดเวลาระหว่างการแชทโดยพิมพ์ /reset
ในช่องป้อนข้อมูล สิ่งนี้จะล้างความทรงจำของ AI เกี่ยวกับการสนทนา บันทึก และโทเค็นในอดีต จากนั้นคุณสามารถเริ่มการแชทจากกระดานชนวนว่างเปล่าโดยไม่ต้องโหลดโมเดลทั้งหมดอีกครั้ง
คุณยังสามารถดึงพารามิเตอร์จากไฟล์ 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