11 poin oleh GN⁺ 2024-02-24 | 1 komentar | Bagikan ke WhatsApp
  • Mesin inferensi C++ yang ringan dan dapat dijalankan secara mandiri untuk model Gemma dari Google
  • Proyek ini untuk siapa?
    • Mesin inferensi model bahasa besar (LLM) modern adalah sistem kompleks dengan fitur khusus yang melampaui runtime jaringan saraf tradisional
    • Ada peluang riset dan inovasi melalui ko-desain antara algoritme tingkat tinggi dan komputasi tingkat rendah, tetapi terdapat kesenjangan antara runtime inferensi C++ yang tidak dirancang untuk eksperimen dan framework riset ML yang berpusat pada Python yang mengabstraksikan komputasi tingkat rendah
    • gemma.cpp menyediakan implementasi minimal untuk model Gemma 2B dan 7B, dengan fokus pada kesederhanaan dan keterusterangan alih-alih generalitas
    • gemma.cpp ditujukan untuk eksperimen dan kasus penggunaan riset, dapat dengan mudah diintegrasikan ke proyek lain dengan dependensi minimal, dan mudah dimodifikasi dengan sekitar 2K LoC implementasi inti serta 4K LoC utilitas pendukung
    • Memanfaatkan SIMD portabel dari Google Highway Library untuk inferensi CPU
    • Untuk deployment produksi, disarankan menggunakan jalur deployment standar dengan framework Python seperti JAX, Keras, PyTorch, dan Transformers

Mulai cepat

Persyaratan sistem

  • Sebelum memulai, CMake, kompiler Clang C++ (mendukung C++17 atau lebih tinggi), dan tar untuk mengekstrak arsip dari Kaggle harus sudah terpasang

Langkah 1: Dapatkan bobot model dan tokenizer dari Kaggle

  • Kunjungi halaman model Gemma di Kaggle lalu pilih Model Variations |> Gemma C++
  • Dropdown Variation mencakup opsi bobot bfloat16 (fidelitas lebih tinggi) dan bobot floating point yang dikonversi ke 8-bit (inferensi lebih cepat)
  • Umumnya disarankan memulai dengan checkpoint -sfp

Langkah 2: Ekstrak file

  • Setelah mengisi formulir persetujuan, unduh file archive.tar.gz lalu ekstrak
  • File hasil ekstraksi mencakup bobot model (misalnya 2b-it-sfp.sbs) dan file tokenizer (tokenizer.spm)
  • File-file ini dapat dipindahkan ke lokasi direktori yang nyaman, misalnya direktori build/ di repositori ini

Langkah 3: Build

  • Sistem build menggunakan CMake
  • Untuk membangun runtime inferensi gemma, buat direktori build lalu gunakan cmake dari direktori proyek tingkat atas untuk menghasilkan file build
  • Untuk bobot floating point yang dikonversi ke 8-bit (sfp), jalankan cmake tanpa opsi
  • Jika Anda mengunduh bobot bfloat16, alih-alih menjalankan cmake tanpa opsi seperti di atas, jalankan cmake dengan mengatur WEIGHT_TYPE ke tipe hwy::bfloat16_t milik highway
  • Setelah menjalankan perintah cmake yang sesuai, pindah ke direktori build/ lalu jalankan make untuk membangun executable ./gemma

Langkah 4: Jalankan

  • Di dalam direktori build/, Anda dapat menjalankan gemma
  • gemma memiliki argumen wajib, dan sebagai contoh dapat dijalankan dengan file bobot 2b-it-sfp.sbs serta file tokenizer tokenizer.spm

Cara penggunaan

  • gemma memiliki berbagai mode penggunaan yang dikendalikan oleh flag verbosity
  • Semua mode penggunaan saat ini bersifat interaktif, dan input baris baru akan memicu pembuatan teks

Aplikasi terminal interaktif

  • Secara default, verbosity diatur ke 1, dan saat gemma dipanggil, ia menyediakan antarmuka interaktif berbasis terminal

Digunakan sebagai alat command line

  • Untuk menggunakan executable gemma sebagai alat command line, dapat berguna untuk membuat alias dengan argumen yang sudah sepenuhnya ditentukan untuk gemma.cpp

Menyertakan library gemma.cpp dalam proyek

  • Cara termudah untuk menyertakan gemma.cpp dalam proyek Anda sendiri adalah menggunakan FetchContent untuk mengambil gemma.cpp beserta dependensinya
  • Anda dapat menambahkan yang berikut ke CMakeLists.txt

Build gemma.cpp sebagai library

  • gemma.cpp dapat digunakan sebagai dependensi library dalam proyeknya sendiri, dan Anda dapat membangun target libgemma untuk menghasilkan artefak shared library

Ucapan terima kasih dan kontak

  • gemma.cpp dimulai pada musim gugur 2023 oleh Austin Huang dan Jan Wassenberg, dan dirilis pada Februari 2024 dengan kontribusi dari Phil Culliton, Paul Chang, dan Dan Zheng
  • Ini bukan produk Google yang didukung secara resmi.

Opini GN⁺:

  1. gemma.cpp adalah alat yang berguna untuk bereksperimen dan melakukan riset pada model bahasa besar, serta membantu menjembatani kesenjangan dengan framework yang berpusat pada Python dengan menyediakan mesin inferensi ringan berbasis C++
  2. Proyek ini memberikan peluang untuk berkontribusi pada komunitas open source, sekaligus menekankan pentingnya mengikuti pedoman open source Google
  3. gemma.cpp dirancang agar dapat dengan mudah diintegrasikan dan digunakan oleh pengembang serta peneliti dalam proyek mereka melalui berbagai mode penggunaan, yang berpotensi mendorong inovasi di bidang AI dan ML

1 komentar

 
GN⁺ 2024-02-24
Opini Hacker News
  • Ringkasan komentar Hacker News:
    • Perkenalan Austin dan penjelasan proyek:

      • Austin adalah salah satu penulis proyek ini dan mengatakan bahwa ia akan menjawab pertanyaan.
      • gemma.cpp berdiri sendiri dan terpisah dari llama.cpp/ggml, meski terinspirasi oleh proyek llama.cpp.
      • gemma.cpp adalah implementasi langsung dari gemma, dengan fokus pada eksperimen dan riset serta portabilitas dan kemudahan modifikasi.
      • Implementasi awal berpusat pada CPU SIMD, dan mereka sedang mengeksplorasi opsi untuk dukungan GPU.
      • Pertanyaan tentang model Gemma itu sendiri akan dijawab oleh rekan lain; ini adalah implementasi C++, tetapi relatif terpisah dari proses pelatihan model.
      • Proyek ini dikerjakan oleh tim kecil di Google, dan mereka berharap orang lain dapat menggunakannya dengan bermanfaat.
      • Menyediakan tautan ke thread Twitter tentang proyek tersebut.
    • Pendapat tentang daya saing LLM Google:

      • Ada kritik bahwa Google tertinggal dari OpenAI dalam produk komersial, tetapi di bidang LLM mereka sangat kompeten.
      • Ada pendapat bahwa ketika Google mulai bergerak, mereka akan menghasilkan capaian yang mengesankan.
      • Ada harapan agar kompetisi open source terus berlanjut berkat Facebook dan Llama, dan meskipun OpenAI menjauh dari misi awalnya, visi awal mereka tetap penting untuk diingat.
    • Pertanyaan tentang build system:

      • Ada komentar yang bertanya-tanya mengapa Google tidak menggunakan bazel sebagai build system.
    • Pujian atas performa Gemma:

      • Gemma telah ditambahkan ke leaderboard HHEM dan menunjukkan tingkat halusinasi yang rendah di antara model-model kecil.
    • Kekaguman terhadap kecepatan perkembangan ekosistem open source LLM:

      • Kecepatan perkembangan ekosistem open source LLM sangat cepat, dengan informasi dan kode baru yang terus bermunculan.
    • Pertanyaan tentang format model:

      • Ada komentar yang meminta penjelasan tentang perbedaan berbagai format model seperti GGUF dan GGML serta bagaimana semuanya dikelola.
    • Diskusi tentang kemampuan matematika LLM:

      • Ada penjelasan bahwa LLM tidak terlalu baik dalam menyelesaikan soal matematika, serta diskusi tentang mengapa ChatGPT tampak seolah-olah mampu menyelesaikannya dengan baik.
      • Ada pertanyaan apakah proyek-proyek LLM mendukung model plugin, dan apakah pendekatan plugin bisa diterapkan pada sistem yang dikembangkan menggunakan llama.cpp.
    • Pertanyaan tentang apakah Gemma memiliki pembatasan konten:

      • Ada pertanyaan apakah Gemma memiliki fitur pembatasan konten bawaan seperti Gemini, atau apakah itu merupakan karakteristik aplikasi Gemini.
    • Ucapan terima kasih untuk gemma.cpp dan harapan akan penambahan fitur di masa depan:

      • Ada yang menyampaikan terima kasih atas repositori gemma.cpp dan mengatakan bahwa mereka telah membuat wrapper Python.
      • Wrapper Python itu dibuat agar setiap kali tim gemma.cpp memperbarui teknologi baru, wrapper tersebut bisa digunakan dengan mudah.
    • Pertanyaan tentang ukuran file eksekusi model Gemma:

      • Ada pertanyaan tentang seberapa besar ukuran akhir file executable jika model Gemma dibangun dengan antarmuka command line minimal dan dijadikan file mandiri yang dapat dijalankan secara offline.