11 điểm bởi GN⁺ 2024-02-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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⁺:

  1. 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++
  2. 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
  3. 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

 
GN⁺ 2024-02-24
Ý kiến trên Hacker News
  • Tóm tắt bình luận trên Hacker News:
    • Phần giới thiệu của Austin và mô tả dự án:

      • Austin là đồng tác giả của dự án và cho biết sẽ trả lời các câu hỏi.
      • gemma.cpp độc lập với llama.cpp/ggml và được truyền cảm hứng từ dự án llama.cpp.
      • gemma.cpp là một triển khai trực tiếp của gemma, tập trung vào thử nghiệm, nghiên cứu, tính di động và khả năng chỉnh sửa dễ dàng.
      • Triển khai ban đầu tập trung vào CPU SIMD, và nhóm đang xem xét các tùy chọn hỗ trợ GPU.
      • Các câu hỏi về chính mô hình Gemma sẽ do đồng nghiệp khác trả lời; đây là bản triển khai C++, nhưng tương đối độc lập với quy trình huấn luyện mô hình.
      • Dự án được thực hiện bởi một nhóm nhỏ tại Google và họ hy vọng những người khác sẽ thấy nó hữu ích.
      • Có cung cấp liên kết đến một chuỗi bài đăng trên Twitter về dự án.
    • Ý kiến về năng lực cạnh tranh LLM của Google:

      • Dù có chỉ trích rằng Google tụt lại phía sau OpenAI trong các sản phẩm thương mại, công ty vẫn rất có năng lực trong lĩnh vực LLM.
      • Có ý kiến cho rằng khi Google thực sự tăng tốc, họ sẽ tạo ra những kết quả ấn tượng.
      • Mọi người hy vọng cạnh tranh mã nguồn mở sẽ tiếp tục nhờ Facebook và Llama, đồng thời nên nhớ rằng tầm nhìn ban đầu của OpenAI vẫn rất quan trọng dù họ đang rời xa sứ mệnh gốc.
    • Câu hỏi về hệ thống build:

      • Một bình luận thắc mắc vì sao Google không dùng bazel làm hệ thống build.
    • Lời khen về hiệu năng của Gemma:

      • Gemma đã được thêm vào bảng xếp hạng HHEM và cho thấy tỷ lệ hallucination thấp trong nhóm mô hình nhỏ.
    • Sự ngạc nhiên trước tốc độ phát triển của hệ sinh thái LLM mã nguồn mở:

      • Tốc độ phát triển của hệ sinh thái LLM mã nguồn mở là cực kỳ nhanh, với thông tin và mã mới liên tục xuất hiện.
    • Câu hỏi về định dạng mô hình:

      • Có bình luận đề nghị giải thích sự khác nhau giữa các định dạng mô hình như GGUF, GGML và cách chúng được quản lý.
    • Thảo luận về năng lực toán học của LLM:

      • Có giải thích rằng LLM không giải toán tốt, cùng với thảo luận về lý do ChatGPT có vẻ như giải toán tốt.
      • Có câu hỏi liệu các dự án LLM có hỗ trợ mô hình plugin hay không, và liệu có thể áp dụng cách tiếp cận plugin vào hệ thống được phát triển bằng llama.cpp hay không.
    • Câu hỏi về việc Gemma có giới hạn nội dung hay không:

      • Có câu hỏi liệu Gemma có tích hợp sẵn tính năng giới hạn nội dung như Gemini hay không, hay đó là đặc điểm của ứng dụng Gemini.
    • Lời cảm ơn dành cho gemma.cpp và kỳ vọng về các tính năng tương lai:

      • Một người bày tỏ lời cảm ơn với kho lưu trữ gemma.cpp và cho biết đã phát triển một Python wrapper.
      • Python wrapper này được tạo ra để có thể dễ dàng sử dụng mỗi khi nhóm gemma.cpp cập nhật công nghệ mới.
    • Câu hỏi về kích thước tệp thực thi của mô hình Gemma:

      • Có câu hỏi rằng nếu xây dựng mô hình Gemma với giao diện dòng lệnh tối giản và đóng gói thành một tệp thực thi độc lập có thể chạy offline, thì kích thước cuối cùng của tệp thực thi sẽ là bao nhiêu.