11 คะแนน โดย GN⁺ 2024-02-24 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เอนจินอนุมาน 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⁺:

  1. gemma.cpp เป็นเครื่องมือที่มีประโยชน์สำหรับการทดลองและวิจัยโมเดลภาษาขนาดใหญ่ โดยมอบเอนจินอนุมานแบบน้ำหนักเบาบน C++ ที่ช่วยลดช่องว่างกับเฟรมเวิร์กที่เน้น Python ในปัจจุบัน
  2. โปรเจกต์นี้เปิดโอกาสให้มีส่วนร่วมกับชุมชนโอเพนซอร์ส และเน้นย้ำความสำคัญของการปฏิบัติตามแนวทางโอเพนซอร์สของ Google
  3. gemma.cpp ถูกออกแบบมาให้ผสานรวมและใช้งานในโปรเจกต์ต่าง ๆ ได้ง่าย ด้วยโหมดการใช้งานที่หลากหลายสำหรับนักพัฒนาและนักวิจัย ซึ่งมีศักยภาพในการผลักดันนวัตกรรมในวงการ AI และ ML

1 ความคิดเห็น

 
GN⁺ 2024-02-24
ความคิดเห็นจาก Hacker News
  • สรุปความคิดเห็นจาก Hacker News:
    • การแนะนำตัวของ Austin และคำอธิบายโครงการ:

      • Austin เป็นผู้ร่วมเขียนโครงการ และบอกว่าจะมาตอบคำถาม
      • gemma.cpp แยกเป็นอิสระจาก llama.cpp/ggml แต่ได้รับแรงบันดาลใจจากโปรเจกต์ llama.cpp
      • gemma.cpp เป็นการนำ gemma ไปเขียนขึ้นใหม่โดยตรง โดยเน้นการทดลองและการวิจัย รวมถึงความพกพาและการปรับแก้ได้ง่าย
      • การติดตั้งใช้งานช่วงแรกเน้น CPU SIMD เป็นหลัก และกำลังมองหาทางเลือกสำหรับการรองรับ GPU
      • คำถามเกี่ยวกับตัวโมเดล Gemma เองจะมีเพื่อนร่วมงานคนอื่นมาตอบ โดยส่วนนี้เป็นการทำ C++ implementation ซึ่งค่อนข้างแยกจากกระบวนการฝึกโมเดล
      • ทำงานกันเป็นทีมเล็ก ๆ ภายใน Google และหวังว่าคนอื่นจะนำไปใช้ให้เป็นประโยชน์
      • มีการแนบลิงก์ไปยังเธรดบน Twitter เกี่ยวกับโครงการ
    • ความคิดเห็นเกี่ยวกับความสามารถในการแข่งขันด้าน LLM ของ Google:

      • แม้จะมีคำวิจารณ์ว่า Google ตามหลัง OpenAI ในผลิตภัณฑ์เชิงพาณิชย์ แต่ในด้าน LLM ก็ยังมีความสามารถสูงมาก
      • มีความเห็นว่าเมื่อ Google เริ่มขยับจริงจัง ก็จะสร้างผลงานที่น่าประทับใจได้
      • หวังว่าการแข่งขันแบบโอเพนซอร์สจะดำเนินต่อไปด้วยแรงหนุนจาก Facebook และ Llama และควรจำไว้ด้วยว่าแม้ OpenAI จะห่างจากพันธกิจดั้งเดิมไปแล้ว แต่วิสัยทัศน์ช่วงแรกของพวกเขายังสำคัญ
    • คำถามเกี่ยวกับระบบบิลด์:

      • มีคอมเมนต์สงสัยว่าทำไม Google ถึงไม่ใช้ bazel เป็นระบบบิลด์
    • คำชื่นชมต่อผลงานของ Gemma:

      • Gemma ถูกเพิ่มเข้าไปในกระดานจัดอันดับ HHEM แล้ว และแสดงอัตราหลอนต่ำเมื่อเทียบในกลุ่มโมเดลขนาดเล็ก
    • ความทึ่งต่อความเร็วในการพัฒนาของ ecosystem โอเพนซอร์ส LLM:

      • ecosystem โอเพนซอร์ส LLM กำลังพัฒนาอย่างรวดเร็วมาก และมีข้อมูลกับโค้ดใหม่ออกมาอย่างต่อเนื่อง
    • คำถามเกี่ยวกับฟอร์แมตโมเดล:

      • มีคอมเมนต์ขอคำอธิบายความแตกต่างของฟอร์แมตโมเดลอย่าง GGUF, GGML เป็นต้น และถามว่ามีการจัดการสิ่งเหล่านี้อย่างไร
    • การถกเถียงเรื่องความสามารถทางคณิตศาสตร์ของ LLM:

      • มีการอธิบายว่า LLM แก้โจทย์คณิตศาสตร์ได้ไม่ดีนัก และถกกันว่าทำไม ChatGPT ถึงดูเหมือนทำคณิตศาสตร์ได้ดี
      • มีคำถามว่าโปรเจกต์ LLM ต่าง ๆ รองรับโมเดลแบบปลั๊กอินหรือไม่ และสามารถนำแนวทางปลั๊กอินไปใช้กับระบบที่พัฒนาด้วย llama.cpp ได้หรือไม่
    • คำถามว่า Gemma มีข้อจำกัดด้านเนื้อหาหรือไม่:

      • มีคำถามว่า Gemma มีฟีเจอร์จำกัดเนื้อหาในตัวแบบเดียวกับ Gemini หรือไม่ หรือว่านั่นเป็นคุณสมบัติของแอปพลิเคชัน Gemini
    • คำขอบคุณต่อ gemma.cpp และความคาดหวังต่อฟีเจอร์ในอนาคต:

      • มีการขอบคุณสำหรับรีโพซิทอรี gemma.cpp และบอกว่าได้พัฒนา Python wrapper ขึ้นมา
      • พัฒนา Python wrapper เพื่อให้ใช้งานได้ง่ายทุกครั้งที่ทีม gemma.cpp อัปเดตเทคโนโลยีใหม่
    • คำถามเกี่ยวกับขนาดไฟล์ executable ของโมเดล Gemma:

      • มีคำถามว่าหากนำโมเดล Gemma ไปสร้างพร้อม command line interface แบบมินิมัล และทำเป็นไฟล์ standalone ที่รันออฟไลน์ได้ ขนาดไฟล์สุดท้ายจะประมาณเท่าไร