gemma.cpp เป็นการใช้งานรันไทม์การอนุมาน C++ เพียงอย่างเดียวที่ใช้ทรัพยากรน้อยของโมเดล Gemma
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Gemma ได้ในการ์ดโมเดล น้ำหนักของโมเดล รวมถึงอาร์ติแฟกต์เฉพาะ gemma.cpp จะมีอยู่ใน Kaggle
โครงการนี้จัดทำขึ้นเพื่อใคร
เครื่องมืออนุมาน LLM สมัยใหม่เป็นระบบที่ซับซ้อน และมักมีความสามารถเฉพาะด้านซึ่งครอบคลุมมากกว่ารันไทม์ของโครงข่ายระบบประสาทเทียมแบบดั้งเดิม นี่จึงเป็นโอกาสสำหรับการวิจัยและนวัตกรรมผ่านการออกแบบอัลกอริทึมระดับสูงและการคำนวณระดับต่ำร่วมกัน อย่างไรก็ตาม รันไทม์การอนุมาน C++ ที่เน้นการทำให้ใช้งานได้ซึ่งไม่ได้ออกแบบมาสำหรับการทดลอง กับเฟรมเวิร์กการวิจัย ML ที่เน้น Python ซึ่งแยกการคำนวณระดับต่ำออกผ่านการคอมไพล์
gemma.cpp ติดตั้งใช้งานโมเดล Gemma 2B และ 7B แบบมินิมอล โดยเน้นความเรียบง่ายและความตรงไปตรงมา แทนที่จะเป็นภาพรวมเต็มรูปแบบ โดยได้รับแรงบันดาลใจจากการติดตั้งใช้งานรูปแบบ C++ ที่ผสานรวมในแนวตั้ง เช่น ggml, llama.c และ llama.rs
gemma.cpp กำหนดเป้าหมายกรณีการใช้งานด้านการทดลองและการวิจัย โดยเฉพาะการสำรวจพื้นที่ในการออกแบบอัลกอริทึมการอนุมาน CPU และการอนุมานโดยใช้ SIMD แบบพกพาผ่านไลบรารี Google Highway ควรให้แนวคิดง่ายๆ สำหรับการฝังในโปรเจ็กต์อื่นๆ ที่มีทรัพยากร Dependency น้อยที่สุดและยังปรับเปลี่ยนได้ง่ายด้วยการติดตั้งใช้งานหลัก LoC ขนาดประมาณ 2,000 น. (พร้อมด้วยยูทิลิตีที่รองรับ LoC ประมาณ 4,000 รายการ)
สำหรับการติดตั้งใช้งาน EDGE ที่เน้นเวอร์ชันที่ใช้งานจริง เราขอแนะนำให้ใช้เส้นทางการติดตั้งใช้งานมาตรฐานที่ใช้เฟรมเวิร์ก Python ที่สมบูรณ์ เช่น JAX, Keras, PyTorch และ Transformers (รูปแบบโมเดลทั้งหมดที่นี่)
เราเปิดรับการสนับสนุนของชุมชนทั้งขนาดเล็กและใหญ่ โปรเจ็กต์นี้เป็นไปตามหลักเกณฑ์ของชุมชนโอเพนซอร์สของ Google
คู่มือเริ่มใช้งานฉบับย่อ
คุณต้องโคลนหรือดาวน์โหลด gemma.cpp เพื่อเริ่มต้นใช้งานอย่างรวดเร็วนี้
ข้อกำหนดของระบบ
ก่อนที่จะเริ่มต้น คุณควรติดตั้งสิ่งต่อไปนี้
- CMake
- คอมไพเลอร์ Clang C++
tar
สำหรับการดึงข้อมูลที่เก็บถาวรจาก Kaggle
ขั้นตอนที่ 1: รับน้ำหนักของโมเดลและเครื่องมือแปลงข้อมูลเป็นโทเค็นจาก Kaggle
ไปที่หน้าโมเดล Gemma บน Kaggle แล้วเลือก "รูปแบบโมเดล"
เมนูแบบเลื่อนลงของ Gemma C++
. On this tab, the
รูปแบบจะมีตัวเลือกต่อไปนี้ที่ด้านล่าง โปรดทราบว่าตัวเลือกน้ำหนัก bFloat 16 มีระดับความแม่นยำสูงกว่า ในขณะที่น้ำหนักจุดลอยตัวแบบเปลี่ยน 8 บิตช่วยให้อนุมานได้เร็วขึ้น
โมเดล 2B ที่มีการปรับแต่ง (it
) และโมเดลก่อนการฝึก (pt
):
ชื่อโมเดล | คำอธิบาย |
---|---|
2b-it |
โมเดลที่ปรับแต่งพารามิเตอร์ 2 พันล้านรายการ, bFlo16 |
2b-it-sfp |
โมเดลที่ปรับแต่งพารามิเตอร์ 2 พันล้านรายการ จุดลอยตัวสลับ 8 บิต |
2b-pt |
โมเดลที่ฝึกพารามิเตอร์ 2 พันล้านรายการก่อนการฝึก bFlo16 |
2b-pt-sfp |
โมเดลที่ฝึกพารามิเตอร์ล่วงหน้า 2 พันล้านโมเดล จุดลอยตัวสลับ 8 บิต |
โมเดล 7B ที่มีการปรับแต่ง (it
) และโมเดลก่อนการฝึก (pt
):
ชื่อโมเดล | คำอธิบาย |
---|---|
7b-it |
โมเดลที่ปรับแต่งพารามิเตอร์ 7 พันล้านรายการ, bFlo16 |
7b-it-sfp |
โมเดลที่ปรับแต่งพารามิเตอร์ 7 พันล้านรูปแบบ จุดลอยตัวสลับ 8 บิต |
7b-pt |
โมเดลที่ฝึกพารามิเตอร์ก่อนการฝึก 7 พันล้านรายการ, bFlo16 |
7b-pt-sfp |
โมเดลที่ฝึกพารามิเตอร์ล่วงหน้า 7 พันล้านโมเดล จุดลอยตัวสลับ 8 บิต |
หมายเหตุ: เราขอแนะนำให้เริ่มต้นด้วย 2b-it-sfp
เพื่อเริ่มต้นใช้งาน
ขั้นตอนที่ 2: แตกไฟล์
หลังจากกรอกแบบฟอร์มความยินยอมแล้ว การดาวน์โหลดควรดําเนินการเพื่อเรียกไฟล์ tar ที่เก็บถาวร archive.tar.gz
แตกไฟล์จาก archive.tar.gz
(อาจใช้เวลา 2-3 นาที)
tar -xf archive.tar.gz
การดำเนินการนี้ควรสร้างไฟล์ที่มีน้ำหนักโมเดล เช่น 2b-it-sfp.sbs
และไฟล์ Tokenizer (tokenizer.spm
) คุณอาจต้องย้ายไฟล์เหล่านี้ไปยังตำแหน่งไดเรกทอรีที่สะดวก (เช่น ไดเรกทอรีบิลด์/ ในที่เก็บนี้)
ขั้นตอนที่ 3: สร้าง
ระบบบิลด์ใช้ CMake หากต้องการสร้างรันไทม์ของการอนุมาน Gemma ให้สร้างไดเรกทอรีบิลด์และสร้างไฟล์บิลด์โดยใช้ cmake
จากไดเรกทอรีโปรเจ็กต์ระดับบนสุด ดังนี้
(cd build && cmake ..)
จากนั้นเรียกใช้ make
เพื่อสร้างไฟล์ปฏิบัติการ ./gemma
:
cd build
make -j [number of parallel threads to use] gemma
เช่น make -j 8 gemma
หากทำสำเร็จ คุณควรมีไฟล์ปฏิบัติการ gemma
ในไดเรกทอรี build/
ขั้นตอนที่ 4: เรียกใช้
ตอนนี้คุณเรียกใช้ gemma
จากภายในไดเรกทอรี build/
ได้แล้ว
gemma
มีอาร์กิวเมนต์ที่จำเป็นต่อไปนี้
อาร์กิวเมนต์ | คำอธิบาย | ค่าตัวอย่าง |
---|---|---|
--model |
ประเภทโมเดล | 2b-it , 2b-pt , 7b-it , 7b-pt , ... (ดูด้านบน) |
--compressed_weights |
ไฟล์น้ำหนักที่บีบอัด | 2b-it-sfp.sbs , ... (ดูด้านบน) |
--tokenizer |
ชื่อไฟล์ Tokenizer | tokenizer.spm |
มีการเรียก gemma
เป็น:
./gemma \
--tokenizer [tokenizer file] \
--compressed_weights [compressed weights file] \
--model [2b-it or 2b-pt or 7b-it or 7b-pt]
ตัวอย่างการเรียกใช้สำหรับการกำหนดค่าต่อไปนี้
- ไฟล์น้ำหนักที่บีบอัด
2b-it-sfp.sbs
(โมเดลที่ปรับตามวิธีการ 2B จุดลอยตัวที่เปลี่ยน 8 บิต) - ไฟล์ Tokenizer
tokenizer.spm
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
การใช้งาน
gemma
มีโหมดการใช้งานที่แตกต่างกัน ซึ่งควบคุมโดยธงการพูดรายละเอียด
โหมดการใช้งานทั้งหมดเป็นแบบอินเทอร์แอกทีฟ ซึ่งจะทริกเกอร์การสร้างข้อความเมื่อป้อนข้อมูลในบรรทัดใหม่
การพูดรายละเอียด | โหมดการใช้งาน | รายละเอียด |
---|---|---|
--verbosity 0 |
ขั้นต่ำ | เฉพาะเอาต์พุตการสร้างการพิมพ์เท่านั้น เหมาะที่จะใช้เป็นเครื่องมือ CLI |
--verbosity 1 |
ค่าเริ่มต้น | UI เทอร์มินัลที่แสดงต่อผู้ใช้แบบมาตรฐาน |
--verbosity 2 |
รายละเอียด | แสดงข้อมูลนักพัฒนาซอฟต์แวร์และการแก้ไขข้อบกพร่องเพิ่มเติม |
แอปเทอร์มินัลแบบอินเทอร์แอกทีฟ
โดยค่าเริ่มต้น การพูดรายละเอียดจะตั้งค่าเป็น 1 ซึ่งจะเปิดอินเทอร์เฟซแบบอินเทอร์แอกทีฟตามเทอร์มินัลเมื่อมีการเรียกใช้ gemma
ด้วยอาร์กิวเมนต์ที่จำเป็น ดังนี้
$ ./gemma [...]
__ _ ___ _ __ ___ _ __ ___ __ _ ___ _ __ _ __
/ _` |/ _ \ '_ ` _ \| '_ ` _ \ / _` | / __| '_ \| '_ \
| (_| | __/ | | | | | | | | | | (_| || (__| |_) | |_) |
\__, |\___|_| |_| |_|_| |_| |_|\__,_(_)___| .__/| .__/
__/ | | | | |
|___/ |_| |_|
tokenizer : tokenizer.spm
compressed_weights : 2b-it-sfp.sbs
model : 2b-it
weights : [no path specified]
max_tokens : 3072
max_generated_tokens : 2048
*Usage*
Enter an instruction and press enter (%Q quits).
*Examples*
- Write an email to grandma thanking her for the cookies.
- What are some historical attractions to visit around Massachusetts?
- Compute the nth fibonacci number in javascript.
- Write a standup comedy bit about WebGPU programming.
> What are some outdoorsy places to visit around Boston?
[ Reading prompt ] .....................
**Boston Harbor and Islands:**
* **Boston Harbor Islands National and State Park:** Explore pristine beaches, wildlife, and maritime history.
* **Charles River Esplanade:** Enjoy scenic views of the harbor and city skyline.
* **Boston Harbor Cruise Company:** Take a relaxing harbor cruise and admire the city from a different perspective.
* **Seaport Village:** Visit a charming waterfront area with shops, restaurants, and a seaport museum.
**Forest and Nature:**
* **Forest Park:** Hike through a scenic forest with diverse wildlife.
* **Quabbin Reservoir:** Enjoy boating, fishing, and hiking in a scenic setting.
* **Mount Forest:** Explore a mountain with breathtaking views of the city and surrounding landscape.
...
การใช้งานเป็นเครื่องมือบรรทัดคำสั่ง
การสร้างชื่อแทนสำหรับ gemma.cpp พร้อมอาร์กิวเมนต์ที่ระบุครบถ้วนสมบูรณ์สำหรับการใช้ไฟล์ปฏิบัติการ gemma
เป็นเครื่องมือบรรทัดคำสั่ง
alias gemma2b="~/gemma.cpp/build/gemma -- --tokenizer
~/gemma.cpp/build/tokenizer.spm --compressed_weights
~/gemma.cpp/build/2b-it-sfp.sbs --model 2b-it --verbosity 0"
แทนที่เส้นทางข้างต้นด้วยเส้นทางของคุณเองไปยังโมเดลและเส้นทางจากเครื่องมือแปลงข้อมูลเป็นโทเค็นจากการดาวน์โหลด
ต่อไปนี้คือตัวอย่างการแจ้ง gemma
ที่มีอินพุตที่ตัดให้สั้นลง (ใช้ชื่อแทน gemma2b
ดังที่นิยามไว้ด้านบน)
cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code
do: " | gemma2b
หมายเหตุ: การใช้ gemma.cpp ใน CLI เป็นเวอร์ชันทดลองและควรคำนึงถึงขีดจำกัดความยาวของบริบท
เอาต์พุตของคำสั่งข้างต้นควรมีลักษณะดังนี้
$ cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code do: " | gemma2b
[ Reading prompt ] ......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
The code defines two C++ structs, `ConfigGemma7B` and `ConfigGemma2B`, which are used for configuring a deep learning model.
**ConfigGemma7B**:
* `seq_len`: Stores the length of the sequence to be processed. It's set to 7168.
* `vocab_size`: Stores the size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 28.
* `dim_model`: Dimension of the model's internal representation. It's set to 3072.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 3072 / 2.
**ConfigGemma2B**:
* `seq_len`: Stores the length of the sequence to be processed. It's also set to 7168.
* `vocab_size`: Size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 18.
* `dim_model`: Dimension of the model's internal representation. It's set to 2048.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 2048 / 2.
These structs are used to configure a deep learning model with specific parameters for either Gemma7B or Gemma2B architecture.