- Công cụ suy luận C++ nhẹ, chạy độc lập dành cho các mô hình Gemma của Google
- Dự án này dành cho ai?
- Các công cụ suy luận mô hình ngôn ngữ lớn (LLM) hiện đại là những hệ thống phức tạp với các tính năng tùy biến vượt ra ngoài các runtime mạng nơ-ron truyền thống
- Dù có nhiều cơ hội nghiên cứu và đổi mới thông qua việc đồng thiết kế giữa thuật toán cấp cao và tính toán cấp thấp, vẫn tồn tại khoảng cách giữa các runtime suy luận C++ không được thiết kế cho thử nghiệm và các framework nghiên cứu ML xoay quanh Python vốn trừu tượng hóa phần tính toán cấp thấp
- gemma.cpp cung cấp một triển khai tối giản cho các mô hình Gemma 2B và 7B, ưu tiên sự đơn giản và trực tiếp hơn là tính tổng quát
- gemma.cpp hướng đến các trường hợp thử nghiệm và nghiên cứu, có thể dễ dàng tích hợp vào các dự án khác với số lượng phụ thuộc tối thiểu, đồng thời dễ chỉnh sửa với khoảng 2K LoC cho phần triển khai cốt lõi và 4K LoC cho các tiện ích hỗ trợ
- Tận dụng SIMD di động của Google Highway Library để suy luận trên CPU
- Đối với triển khai production, dự án khuyến nghị các lộ trình triển khai tiêu chuẩn sử dụng các framework Python như JAX, Keras, PyTorch và Transformers
Bắt đầu nhanh
Yêu cầu hệ thống
- Trước khi bắt đầu, bạn cần cài đặt CMake, trình biên dịch Clang C++ (hỗ trợ C++17 trở lên) và
tar để giải nén archive từ Kaggle
Bước 1: Lấy trọng số mô hình và tokenizer từ Kaggle
- Truy cập trang mô hình Gemma trên Kaggle và chọn
Model Variations |> Gemma C++
- Menu thả xuống
Variation bao gồm các tùy chọn trọng số bfloat16 (độ trung thực cao hơn) và trọng số floating-point đã chuyển đổi 8-bit (suy luận nhanh hơn)
- Thông thường nên bắt đầu với checkpoint
-sfp
Bước 2: Giải nén tệp
- Sau khi hoàn thành biểu mẫu đồng ý, tải xuống tệp
archive.tar.gz và giải nén
- Các tệp được giải nén bao gồm trọng số mô hình (ví dụ:
2b-it-sfp.sbs) và tệp tokenizer (tokenizer.spm)
- Bạn có thể di chuyển các tệp này đến một vị trí thư mục thuận tiện (ví dụ: thư mục
build/ của repository này)
Bước 3: Build
- Hệ thống build sử dụng CMake
- Để build runtime suy luận gemma, hãy tạo thư mục build rồi dùng
cmake từ thư mục gốc của dự án để tạo các tệp build
- Với trọng số floating-point đã chuyển đổi 8-bit (sfp), hãy chạy cmake mà không cần tùy chọn nào
- Nếu bạn đã tải trọng số bfloat16, thay vì chạy cmake như trên mà không có tùy chọn, hãy chạy cmake với WEIGHT_TYPE được đặt thành kiểu
hwy::bfloat16_t của highway
- Sau khi chạy lệnh
cmake phù hợp, chuyển vào thư mục build/ và chạy make để build tệp thực thi ./gemma
Bước 4: Chạy
- Bạn có thể chạy
gemma trong thư mục build/
gemma có các đối số bắt buộc; ví dụ có thể chạy với tệp trọng số 2b-it-sfp.sbs và tệp tokenizer tokenizer.spm
Cách sử dụng
gemma có nhiều chế độ sử dụng khác nhau được điều khiển bởi cờ verbosity
- Hiện tại mọi chế độ sử dụng đều là tương tác, và việc nhập một dòng mới sẽ kích hoạt tạo văn bản
Ứng dụng terminal tương tác
- Mặc định verbosity được đặt là 1, và khi gọi
gemma sẽ cung cấp giao diện tương tác trên terminal
Dùng như công cụ dòng lệnh
- Để dùng tệp thực thi
gemma như một công cụ dòng lệnh, có thể sẽ hữu ích nếu tạo một alias với đầy đủ đối số cho gemma.cpp
Thêm thư viện gemma.cpp vào dự án
- Cách dễ nhất để thêm gemma.cpp vào dự án của bạn là dùng
FetchContent để nhập gemma.cpp và các dependency của nó
- Bạn có thể thêm phần sau vào CMakeLists.txt
Build gemma.cpp dưới dạng thư viện
- gemma.cpp có thể được dùng làm dependency thư viện trong dự án của riêng bạn, và bạn có thể build target
libgemma để tạo shared library artifact
Lời cảm ơn và liên hệ
- gemma.cpp được Austin Huang và Jan Wassenberg khởi xướng vào mùa thu năm 2023, và được phát hành vào tháng 2 năm 2024 với sự đóng góp của Phil Culliton, Paul Chang và Dan Zheng
- Đây không phải là sản phẩm Google được hỗ trợ chính thức.
Ý kiến của GN⁺:
- gemma.cpp là một công cụ hữu ích để thử nghiệm và nghiên cứu mô hình ngôn ngữ lớn, góp phần thu hẹp khoảng cách với các framework xoay quanh Python hiện có bằng cách cung cấp một công cụ suy luận nhẹ dựa trên C++
- Dự án này mang lại cơ hội đóng góp cho cộng đồng mã nguồn mở, đồng thời nhấn mạnh tầm quan trọng của việc tuân theo các hướng dẫn mã nguồn mở của Google
- gemma.cpp được thiết kế để các nhà phát triển và nhà nghiên cứu dễ dàng tích hợp và sử dụng trong dự án của mình thông qua nhiều chế độ sử dụng khác nhau, qua đó có tiềm năng thúc đẩy đổi mới trong lĩnh vực AI và ML
1 bình luận
Ý kiến trên Hacker News
Phần giới thiệu của Austin và mô tả dự án:
Ý kiến về năng lực cạnh tranh LLM của Google:
Câu hỏi về hệ thống build:
Lời khen về hiệu năng của Gemma:
Sự ngạc nhiên trước tốc độ phát triển của hệ sinh thái LLM mã nguồn mở:
Câu hỏi về định dạng mô hình:
Thảo luận về năng lực toán học của LLM:
Câu hỏi về việc Gemma có giới hạn nội dung hay không:
Lời cảm ơn dành cho gemma.cpp và kỳ vọng về các tính năng tương lai:
Câu hỏi về kích thước tệp thực thi của mô hình Gemma: