- เอนจินอนุมาน C++ แบบน้ำหนักเบาและทำงานได้อย่างอิสระสำหรับโมเดล Gemma ของ Google
- โปรเจกต์นี้เหมาะสำหรับใคร?
- เอนจินอนุมานสำหรับโมเดลภาษาขนาดใหญ่ (LLM) ยุคใหม่เป็นระบบที่ซับซ้อน พร้อมความสามารถเฉพาะทางที่ก้าวข้ามรันไทม์โครงข่ายประสาทแบบดั้งเดิม
- แม้จะมีโอกาสสำหรับการวิจัยและนวัตกรรมผ่านการออกแบบร่วมกันระหว่างอัลกอริทึมระดับสูงกับการคำนวณระดับล่าง แต่ก็ยังมีช่องว่างระหว่างรันไทม์อนุมาน C++ ที่ไม่ได้ออกแบบมาเพื่อการทดลอง กับเฟรมเวิร์กวิจัย ML ที่เน้น Python ซึ่งซ่อนรายละเอียดการคำนวณระดับล่างไว้
- gemma.cpp มอบ implementation ขั้นต่ำของโมเดล Gemma 2B และ 7B โดยเน้นความเรียบง่ายและตรงไปตรงมามากกว่าความเป็นทั่วไป
- gemma.cpp มุ่งเป้าไปที่กรณีใช้งานด้านการทดลองและการวิจัย สามารถผสานเข้ากับโปรเจกต์อื่นได้ง่ายด้วย dependency เพียงเล็กน้อย และแก้ไขได้สะดวกด้วย core implementation ราว 2K LoC และยูทิลิตีเสริม 4K LoC
- ใช้ portable SIMD จาก Google Highway Library สำหรับการอนุมานบน CPU
- สำหรับการนำไปใช้งานจริงในระดับ production แนะนำให้ใช้เส้นทางการ deploy มาตรฐานผ่านเฟรมเวิร์ก Python เช่น JAX, Keras, PyTorch และ Transformers
เริ่มต้นอย่างรวดเร็ว
ความต้องการของระบบ
- ก่อนเริ่มต้น ต้องติดตั้ง CMake, คอมไพเลอร์ Clang C++ (รองรับ C++17 ขึ้นไป) และ
tar สำหรับแตก archive จาก Kaggle
ขั้นตอนที่ 1: รับน้ำหนักโมเดลและ tokenizer จาก Kaggle
- ไปที่หน้าโมเดล Gemma บน Kaggle แล้วเลือก
Model Variations |> Gemma C++
- เมนูดรอปดาวน์
Variation มีตัวเลือกทั้งน้ำหนักแบบ bfloat16 (ความเที่ยงตรงสูงกว่า) และน้ำหนัก floating-point ที่แปลงเป็น 8 บิตแล้ว (อนุมานได้เร็วกว่า)
- โดยทั่วไปแนะนำให้เริ่มจาก checkpoint แบบ
-sfp
ขั้นตอนที่ 2: แตกไฟล์
- หลังกรอกแบบยินยอมแล้ว ให้ดาวน์โหลดไฟล์
archive.tar.gz และแตกไฟล์
- ไฟล์ที่แตกออกมาจะมีทั้งน้ำหนักโมเดล (เช่น
2b-it-sfp.sbs) และไฟล์ tokenizer (tokenizer.spm)
- สามารถย้ายไฟล์เหล่านี้ไปไว้ในไดเรกทอรีที่สะดวกได้ (เช่น ไดเรกทอรี
build/ ของรีโพซิทอรีนี้)
ขั้นตอนที่ 3: บิลด์
- ระบบบิลด์ใช้ CMake
- เพื่อบิลด์รันไทม์อนุมานของ gemma ให้สร้างไดเรกทอรีบิลด์ แล้วใช้
cmake จากไดเรกทอรีโปรเจกต์ระดับบนสุดเพื่อสร้างไฟล์บิลด์
- สำหรับน้ำหนัก floating-point แบบแปลงเป็น 8 บิต (sfp) ให้รัน cmake โดยไม่ต้องใส่ออปชัน
- หากดาวน์โหลดน้ำหนักแบบ bfloat16 แทนที่จะรัน cmake แบบไม่มีออปชันตามข้างต้น ให้รัน cmake โดยตั้งค่า WEIGHT_TYPE เป็นชนิด
hwy::bfloat16_t ของ highway
- หลังรันคำสั่ง
cmake ที่เหมาะสมแล้ว ให้ย้ายไปยังไดเรกทอรี build/ และรัน make เพื่อบิลด์ไฟล์รัน ./gemma
ขั้นตอนที่ 4: รัน
- สามารถรัน
gemma ได้จากภายในไดเรกทอรี build/
gemma มีอาร์กิวเมนต์ที่จำเป็น และสามารถรันได้โดยใช้ไฟล์น้ำหนัก 2b-it-sfp.sbs และไฟล์ tokenizer tokenizer.spm เป็นตัวอย่าง
วิธีใช้งาน
gemma มีโหมดการใช้งานหลากหลาย ซึ่งควบคุมด้วยแฟล็ก verbosity
- ปัจจุบันทุกโหมดเป็นแบบ interactive โดยจะทริกเกอร์การสร้างข้อความเมื่อมีการป้อนบรรทัดใหม่
แอปเทอร์มินัลแบบโต้ตอบ
- โดยค่าเริ่มต้น verbosity ถูกตั้งไว้ที่ 1 และเมื่อเรียก
gemma จะมีอินเทอร์เฟซแบบโต้ตอบบนเทอร์มินัลให้ใช้งาน
ใช้เป็นเครื่องมือบรรทัดคำสั่ง
- เพื่อใช้ไฟล์รัน
gemma เป็นเครื่องมือบรรทัดคำสั่ง การสร้าง alias ที่กำหนดอาร์กิวเมนต์สำหรับ gemma.cpp ไว้ครบถ้วนแล้วอาจช่วยให้สะดวกขึ้น
รวมไลบรารี gemma.cpp ในโปรเจกต์
- วิธีที่ง่ายที่สุดในการรวม gemma.cpp ไว้ในโปรเจกต์ของคุณคือใช้
FetchContent เพื่อดึง gemma.cpp และ dependency ของมันมา
- สามารถเพิ่มสิ่งต่อไปนี้ลงใน CMakeLists.txt ได้
บิลด์ gemma.cpp เป็นไลบรารี
- gemma.cpp สามารถใช้เป็น dependency แบบไลบรารีในโปรเจกต์ของคุณเองได้ และสามารถบิลด์ target
libgemma เพื่อสร้าง shared library artifact ได้
คำขอบคุณและช่องทางติดต่อ
- gemma.cpp เริ่มต้นโดย Austin Huang และ Jan Wassenberg ในฤดูใบไม้ร่วงปี 2023 และเปิดตัวในเดือนกุมภาพันธ์ 2024 ด้วยการมีส่วนร่วมจาก Phil Culliton, Paul Chang และ Dan Zheng
- นี่ไม่ใช่ผลิตภัณฑ์ของ Google ที่ได้รับการสนับสนุนอย่างเป็นทางการ
ความเห็นของ GN⁺:
- gemma.cpp เป็นเครื่องมือที่มีประโยชน์สำหรับการทดลองและวิจัยโมเดลภาษาขนาดใหญ่ โดยมอบเอนจินอนุมานแบบน้ำหนักเบาบน C++ ที่ช่วยลดช่องว่างกับเฟรมเวิร์กที่เน้น Python ในปัจจุบัน
- โปรเจกต์นี้เปิดโอกาสให้มีส่วนร่วมกับชุมชนโอเพนซอร์ส และเน้นย้ำความสำคัญของการปฏิบัติตามแนวทางโอเพนซอร์สของ Google
- gemma.cpp ถูกออกแบบมาให้ผสานรวมและใช้งานในโปรเจกต์ต่าง ๆ ได้ง่าย ด้วยโหมดการใช้งานที่หลากหลายสำหรับนักพัฒนาและนักวิจัย ซึ่งมีศักยภาพในการผลักดันนวัตกรรมในวงการ AI และ ML
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
การแนะนำตัวของ Austin และคำอธิบายโครงการ:
ความคิดเห็นเกี่ยวกับความสามารถในการแข่งขันด้าน LLM ของ Google:
คำถามเกี่ยวกับระบบบิลด์:
คำชื่นชมต่อผลงานของ Gemma:
ความทึ่งต่อความเร็วในการพัฒนาของ ecosystem โอเพนซอร์ส LLM:
คำถามเกี่ยวกับฟอร์แมตโมเดล:
การถกเถียงเรื่องความสามารถทางคณิตศาสตร์ของ LLM:
คำถามว่า Gemma มีข้อจำกัดด้านเนื้อหาหรือไม่:
คำขอบคุณต่อ gemma.cpp และความคาดหวังต่อฟีเจอร์ในอนาคต:
คำถามเกี่ยวกับขนาดไฟล์ executable ของโมเดล Gemma: