Bắt đầu nhanh Keras CodeGemma

Xem trên ai.google.dev Chạy trong Google Colab Xem nguồn trên GitHub

CodeGemma là một dòng mô hình mở, gọn nhẹ, hiện đại, được xây dựng dựa trên chính nghiên cứu và công nghệ dùng để tạo ra các mô hình Gemini.

Các mô hình CodeGemma được huấn luyện dựa trên hơn 500 tỷ token chủ yếu là mã, bằng cách sử dụng có cùng kiến trúc với dòng mô hình Gemma. Do đó, các mô hình CodeGemma đều đạt được hiệu suất mã hiện đại nhất trong cả hai trường hợp hoàn thành và tạo nhiệm vụ, đồng thời vẫn duy trì được hiểu và suy luận trên quy mô lớn.

CodeGemma có 3 biến thể:

  • Mô hình huấn luyện trước bằng mã 7B
  • Mô hình mã điều chỉnh theo hướng dẫn 7B
  • Mô hình 2B, được huấn luyện riêng cho việc điền mã và tạo kết thúc mở.

Hướng dẫn này sẽ chỉ cho bạn cách sử dụng mô hình CodeGemma 2B với KerasNLP để hoàn thành mã.

Thiết lập

Truy cập vào CodeGemma

Để hoàn tất hướng dẫn này, trước tiên bạn cần phải hoàn thành hướng dẫn thiết lập trong phần thiết lập Gemma. Hướng dẫn thiết lập Gemma chỉ cho bạn cách thực hiện những việc sau:

  • Truy cập vào Gemma trên kaggle.com.
  • Chọn một môi trường thời gian chạy Colab có đủ tài nguyên để chạy mô hình Gemma 2B.
  • Tạo và định cấu hình tên người dùng Kaggle và khoá API.

Sau khi thiết lập xong Gemma, hãy chuyển sang phần tiếp theo. Tại đây, bạn sẽ thiết lập các biến môi trường cho môi trường Colab của mình.

Chọn thời gian chạy

Để hoàn tất hướng dẫn này, bạn cần có một môi trường thời gian chạy Colab có đủ tài nguyên để chạy mô hình CodeGemma 2B. Trong trường hợp này, bạn có thể sử dụng GPU T4:

  1. Ở phía trên bên phải của cửa sổ Colab, hãy chọn ▾ (Các tuỳ chọn kết nối khác).
  2. Chọn Thay đổi loại thời gian chạy.
  3. Trong Trình tăng tốc phần cứng, hãy chọn GPU T4.

Định cấu hình khoá API

Để sử dụng Gemma, bạn phải cung cấp tên người dùng Kaggle và khoá API Kaggle.

Để tạo khoá API Kaggle, hãy chuyển đến thẻ Tài khoản trong hồ sơ người dùng Kaggle rồi chọn Tạo mã thông báo mới. Thao tác này sẽ kích hoạt việc tải tệp kaggle.json chứa thông tin đăng nhập API của bạn xuống.

Trong Colab, hãy chọn Bí mật (🔑) ở ngăn bên trái, rồi thêm tên người dùng Kaggle và khoá API Kaggle. Lưu trữ tên người dùng của bạn dưới tên KAGGLE_USERNAME và khoá API dưới tên KAGGLE_KEY.

Đặt các biến môi trường

Thiết lập các biến môi trường cho KAGGLE_USERNAMEKAGGLE_KEY.

import os
from google.colab import userdata

os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

Cài đặt phần phụ thuộc

pip install -q -U keras-nlp

Chọn một phần phụ trợ

Keras là một API học sâu cấp cao, đa khung, được thiết kế để mang lại trải nghiệm đơn giản và dễ sử dụng. Khi sử dụng Keras 3, bạn có thể chạy quy trình công việc trên một trong ba phần phụ trợ: TensorFlow, JAX hoặc PyTorch.

Đối với hướng dẫn này, hãy định cấu hình phần phụ trợ cho TensorFlow.

os.environ["KERAS_BACKEND"] = "tensorflow"  # Or "jax" or "torch".

Nhập gói

Nhập Keras và KerasNLP.

import keras_nlp
import keras

# Run at half precision.
keras.config.set_floatx("bfloat16")

Mô hình tải

KerasNLP cung cấp cách triển khai nhiều kiến trúc mô hình phổ biến. Trong hướng dẫn này, bạn sẽ tạo một mô hình bằng GemmaCausalLM, một mô hình Gemma toàn diện để lập mô hình ngôn ngữ quan hệ nhân quả. Mô hình ngôn ngữ nhân quả dự đoán mã thông báo tiếp theo dựa trên mã thông báo trước đó.

Tạo mô hình bằng phương thức from_preset:

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("code_gemma_2b_en")
gemma_lm.summary()
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/config.json...
100%|██████████| 554/554 [00:00<00:00, 1.41MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/model.weights.h5...
100%|██████████| 4.67G/4.67G [05:06<00:00, 16.4MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/tokenizer.json...
100%|██████████| 401/401 [00:00<00:00, 382kB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/assets/tokenizer/vocabulary.spm...
100%|██████████| 4.04M/4.04M [00:01<00:00, 2.41MB/s]

Phương thức from_preset tạo thực thể cho mô hình từ một cấu trúc và trọng số đặt trước. Trong mã trên, chuỗi code_gemma_2b_en chỉ định cấu trúc đặt trước – một mô hình CodeGemma có 2 tỷ tham số.

Hoàn tất mã được điền vào giữa

Ví dụ này sử dụng tính năng lấp đầy khoảng giữa (FIM) của CodeGemma để hoàn tất mã dựa trên ngữ cảnh xung quanh. Điều này đặc biệt hữu ích trong các ứng dụng soạn thảo mã để chèn mã mà con trỏ văn bản dựa trên mã xung quanh (trước và sau con trỏ).

CodeGemma cho phép bạn sử dụng 4 mã thông báo do người dùng xác định – 3 mã cho FIM và mã thông báo <|file_separator|> để hỗ trợ ngữ cảnh nhiều tệp. Sử dụng các giá trị này để định nghĩa hằng số.

BEFORE_CURSOR = "<|fim_prefix|>"
AFTER_CURSOR = "<|fim_suffix|>"
AT_CURSOR = "<|fim_middle|>"
FILE_SEPARATOR = "<|file_separator|>"

Xác định mã dừng cho mô hình.

END_TOKEN = gemma_lm.preprocessor.tokenizer.end_token

stop_tokens = (BEFORE_CURSOR, AFTER_CURSOR, AT_CURSOR, FILE_SEPARATOR, END_TOKEN)

stop_token_ids = tuple(gemma_lm.preprocessor.tokenizer.token_to_id(x) for x in stop_tokens)

Định dạng lời nhắc hoàn tất mã. Lưu ý:

  • Không được có khoảng trắng giữa mã thông báo FIM cũng như tiền tố và hậu tố
  • Mã thông báo ở giữa FIM phải ở cuối để mô hình tiếp tục điền dữ liệu
  • Tiền tố hoặc hậu tố có thể trống, tuỳ thuộc vào vị trí hiện tại của con trỏ trong tệp hoặc lượng ngữ cảnh mà bạn muốn cung cấp cho mô hình

Sử dụng hàm trợ giúp để định dạng lời nhắc.

def format_completion_prompt(before, after):
    return f"{BEFORE_CURSOR}{before}{AFTER_CURSOR}{after}{AT_CURSOR}"

before = "import "
after = """if __name__ == "__main__":\n    sys.exit(0)"""
prompt = format_completion_prompt(before, after)
print(prompt)
<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":
    sys.exit(0)<|fim_middle|>

Chạy lời nhắc. Bạn nên truyền trực tuyến mã thông báo phản hồi. Dừng phát trực tuyến khi gặp mã thông báo lượt chuyển/kết thúc lượt/kết thúc hoặc mã kết thúc do người dùng xác định hoặc kết thúc để nhận được kết quả hoàn tất mã.

gemma_lm.generate(prompt, stop_token_ids=stop_token_ids, max_length=128)
'<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>'

Mô hình này cung cấp sys dưới dạng hoàn tất mã được đề xuất.

Tóm tắt

Hướng dẫn này hướng dẫn bạn cách sử dụng CodeGemma để điền mã dựa trên ngữ cảnh xung quanh. Tiếp theo, hãy tham khảo sổ tay Lập trình có AI hỗ trợ CodeGemma và KerasNLP để tìm hiểu thêm ví dụ về cách sử dụng CodeGemma.

Ngoài ra, hãy tham khảo Thẻ mô hình CodeGemma để biết thông số kỹ thuật của các mẫu CodeGemma.