gemma.cpp là một C++ thuần tuý có kích thước nhẹ triển khai thời gian chạy suy luận của mô hình Gemma.
Để biết thêm thông tin về Gemma, hãy xem thẻ mẫu. Trọng số mô hình, bao gồm cả cấu phần phần mềm cụ thể gemma.cpp có sẵn trên Kaggle.
Dự án này dành cho đối tượng nào?
Các công cụ suy luận LLM hiện đại là những hệ thống tinh vi, thường được thiết kế riêng vượt ra khỏi môi trường thời gian chạy mạng nơron truyền thống. Bằng cách này mang đến cơ hội nghiên cứu và đổi mới thông qua hợp tác thiết kế ở cấp độ cao và hoạt động tính toán cấp thấp. Tuy nhiên, có một khoảng cách giữa thời gian chạy dự đoán C++ hướng triển khai, không được thiết kế cho thử nghiệm và các khung nghiên cứu học máy tập trung vào Python, vốn là những công cụ tóm tắt tính toán cấp thấp thông qua biên dịch.
gemma.cpp cung cấp cách triển khai tối giản của các mô hình Gemma 2B và 7B, tập trung vào tính đơn giản và tính trực tiếp hơn là tính chung chung. Đây là lấy cảm hứng từ việc triển khai mô hình C++ tích hợp theo chiều dọc, chẳng hạn như ggml, llama.c và llama.rs.
gemma.cpp nhắm đến các trường hợp thử nghiệm và nghiên cứu, cụ thể là khám phá không gian thiết kế của thuật toán suy luận và suy luận CPU bằng cách sử dụng SIMD di động qua Đường cao tốc của Google thư viện của bạn. Mục đích là để đơn giản hoá việc nhúng vào các dự án khác cùng với các phần phụ thuộc tối thiểu và cũng dễ dàng sửa đổi nhờ có một lõi nhỏ ~ 2K LoC triển khai (cùng với khoảng 4.000 LoC tiện ích hỗ trợ).
Đối với việc triển khai biên theo hướng sản xuất, bạn nên triển khai theo tiêu chuẩn lộ trình bằng cách sử dụng các khung Python hoàn thiện như JAX, Keras, PyTorch và Máy biến áp (tất cả biến thể của mô hình tại đây).
Chúng tôi luôn hoan nghênh đóng góp của cộng đồng, dù lớn hay nhỏ. Dự án này tuân theo Nguyên tắc cộng đồng nguồn mở của Google.
Bắt đầu nhanh
Để hoàn tất quy trình bắt đầu nhanh này, bạn phải sao chép hoặc tải xuống gemma.cpp.
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++
tar
để trích xuất các bản lưu trữ từ Kaggle.
Bước 1: Lấy trọng số mô hình và bộ mã hoá mã thông báo từ Kaggle
Truy cập trang mô hình gemma trên Kaggle rồi chọn "Biến thể mô hình"
Trình đơn thả xuống của Gemma C++
. On this tab, the
Biến thể bao gồm những nội dung sau bên dưới. Lưu ý rằng các tuỳ chọn trọng số bfloat16 có độ trung thực cao hơn, trong khi đó các tuỳ chọn 8 bit chuyển đổi trọng số dấu phẩy động cho phép suy luận nhanh hơn.
2B mô hình điều chỉnh theo hướng dẫn (it
) và huấn luyện trước (pt
):
Tên mẫu thiết bị | Mô tả |
---|---|
2b-it |
Mô hình được tinh chỉnh theo hướng dẫn 2 tỷ tham số, bfloat16 |
2b-it-sfp |
Mô hình điều chỉnh hướng dẫn 2 tỷ tham số, dấu phẩy động chuyển đổi 8 bit |
2b-pt |
2 tỷ tham số được huấn luyện trước, bfloat16 |
2b-pt-sfp |
Mô hình được huấn luyện trước với 2 tỷ tham số, dấu phẩy động chuyển đổi 8 bit |
7B mô hình điều chỉnh theo hướng dẫn (it
) và huấn luyện trước (pt
):
Tên mẫu thiết bị | Mô tả |
---|---|
7b-it |
Mô hình điều chỉnh hướng dẫn gồm 7 tỷ tham số, bfloat16 |
7b-it-sfp |
Mô hình điều chỉnh hướng dẫn 7 tỷ tham số, dấu phẩy động chuyển đổi 8 bit |
7b-pt |
7 tỷ tham số được huấn luyện trước, bfloat16 |
7b-pt-sfp |
Mô hình được huấn luyện trước với 7 tỷ tham số, dấu phẩy động chuyển đổi 8 bit |
LƯU Ý: Bạn nên bắt đầu bằng 2b-it-sfp
để thiết lập và chạy.
Bước 2: Giải nén tệp
Sau khi điền vào biểu mẫu đồng ý, quá trình tải xuống sẽ tiếp tục truy xuất
tệp lưu trữ tar archive.tar.gz
. Trích xuất tệp từ archive.tar.gz
(thao tác này có thể
dành vài phút):
tar -xf archive.tar.gz
Thao tác này sẽ tạo ra một tệp chứa trọng số mô hình như 2b-it-sfp.sbs
và
tệp tokenizer (tokenizer.spm
). Bạn có thể di chuyển các tệp này sang
vị trí thư mục thuận tiện (ví dụ: bản dựng/ thư mục trong kho lưu trữ này).
Bước 3: Tạo
Hệ thống xây dựng sử dụng CMake. Để lập suy luận gemma
thời gian chạy, hãy tạo thư mục bản dựng và tạo tệp bản dựng bằng cmake
từ thư mục dự án cấp cao nhất:
(cd build && cmake ..)
Sau đó, hãy chạy make
để tạo tệp thực thi ./gemma
:
cd build
make -j [number of parallel threads to use] gemma
Ví dụ: make -j 8 gemma
. Nếu việc này thành công, giờ đây bạn sẽ có
gemma
có thể thực thi trong thư mục build/
.
Bước 4: Chạy
Bây giờ, bạn có thể chạy gemma
từ bên trong thư mục build/
.
gemma
có các đối số bắt buộc sau:
Đối số | Mô tả | Giá trị mẫu |
---|---|---|
--model |
Loại mô hình. | 2b-it , 2b-pt , 7b-it , 7b-pt , ... (xem ở trên) |
--compressed_weights |
Tệp trọng số nén. | 2b-it-sfp.sbs , ... (xem ở trên) |
--tokenizer |
Tên tệp của trình tạo mã thông báo. | tokenizer.spm |
gemma
được gọi dưới dạng:
./gemma \
--tokenizer [tokenizer file] \
--compressed_weights [compressed weights file] \
--model [2b-it or 2b-pt or 7b-it or 7b-pt]
Ví dụ về lệnh gọi cho cấu hình sau:
- Tệp trọng số nén
2b-it-sfp.sbs
(mô hình điều chỉnh theo hướng dẫn 2B, 8 bit dấu phẩy động được chuyển đổi). - Tệp trình tạo mã thông báo
tokenizer.spm
.
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
Cách sử dụng
gemma
có nhiều chế độ sử dụng, được kiểm soát bởi cờ độ chi tiết.
Tất cả các chế độ sử dụng đều mang tính tương tác, kích hoạt việc tạo văn bản dựa trên đầu vào dòng mới.
Độ chi tiết | Chế độ sử dụng | Thông tin chi tiết |
---|---|---|
--verbosity 0 |
Tối giản | Chỉ in kết quả tạo ra. Thích hợp làm công cụ CLI. |
--verbosity 1 |
Mặc định | Giao diện người dùng tiêu chuẩn trong dòng lệnh dành cho người dùng. |
--verbosity 2 |
Chi tiết | Hiện thêm thông tin về nhà phát triển và gỡ lỗi. |
Ứng dụng Terminal tương tác
Theo mặc định, độ chi tiết được đặt thành 1, sẽ hiển thị hoạt động tương tác dựa trên thiết bị đầu cuối
khi gemma
được gọi bằng các đối số bắt buộc:
$ ./gemma [...]
__ _ ___ _ __ ___ _ __ ___ __ _ ___ _ __ _ __
/ _` |/ _ \ '_ ` _ \| '_ ` _ \ / _` | / __| '_ \| '_ \
| (_| | __/ | | | | | | | | | | (_| || (__| |_) | |_) |
\__, |\___|_| |_| |_|_| |_| |_|\__,_(_)___| .__/| .__/
__/ | | | | |
|___/ |_| |_|
tokenizer : tokenizer.spm
compressed_weights : 2b-it-sfp.sbs
model : 2b-it
weights : [no path specified]
max_tokens : 3072
max_generated_tokens : 2048
*Usage*
Enter an instruction and press enter (%Q quits).
*Examples*
- Write an email to grandma thanking her for the cookies.
- What are some historical attractions to visit around Massachusetts?
- Compute the nth fibonacci number in javascript.
- Write a standup comedy bit about WebGPU programming.
> What are some outdoorsy places to visit around Boston?
[ Reading prompt ] .....................
**Boston Harbor and Islands:**
* **Boston Harbor Islands National and State Park:** Explore pristine beaches, wildlife, and maritime history.
* **Charles River Esplanade:** Enjoy scenic views of the harbor and city skyline.
* **Boston Harbor Cruise Company:** Take a relaxing harbor cruise and admire the city from a different perspective.
* **Seaport Village:** Visit a charming waterfront area with shops, restaurants, and a seaport museum.
**Forest and Nature:**
* **Forest Park:** Hike through a scenic forest with diverse wildlife.
* **Quabbin Reservoir:** Enjoy boating, fishing, and hiking in a scenic setting.
* **Mount Forest:** Explore a mountain with breathtaking views of the city and surrounding landscape.
...
Sử dụng làm Công cụ dòng lệnh
Để sử dụng tệp thực thi gemma
làm công cụ dòng lệnh, bạn nên
tạo một đại diện cho gemma.cpp với các đối số được chỉ định đầy đủ:
alias gemma2b="~/gemma.cpp/build/gemma -- --tokenizer
~/gemma.cpp/build/tokenizer.spm --compressed_weights
~/gemma.cpp/build/2b-it-sfp.sbs --model 2b-it --verbosity 0"
Thay thế các đường dẫn ở trên bằng đường dẫn của riêng bạn đến đường dẫn mô hình và trình tạo mã thông báo trong nội dung tải xuống.
Dưới đây là ví dụ về cách nhắc gemma
với thông tin đầu vào bị cắt ngắn (sử dụng
Bí danh gemma2b
như được xác định ở trên):
cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code
do: " | gemma2b
LƯU Ý: Việc sử dụng CLI của gemma.cpp mang tính thử nghiệm và cần độ dài ngữ cảnh các giới hạn.
Kết quả của lệnh trên sẽ có dạng như sau:
$ cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code do: " | gemma2b
[ Reading prompt ] ......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
The code defines two C++ structs, `ConfigGemma7B` and `ConfigGemma2B`, which are used for configuring a deep learning model.
**ConfigGemma7B**:
* `seq_len`: Stores the length of the sequence to be processed. It's set to 7168.
* `vocab_size`: Stores the size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 28.
* `dim_model`: Dimension of the model's internal representation. It's set to 3072.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 3072 / 2.
**ConfigGemma2B**:
* `seq_len`: Stores the length of the sequence to be processed. It's also set to 7168.
* `vocab_size`: Size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 18.
* `dim_model`: Dimension of the model's internal representation. It's set to 2048.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 2048 / 2.
These structs are used to configure a deep learning model with specific parameters for either Gemma7B or Gemma2B architecture.