Panduan Memulai Keras CodeGemma

Lihat di ai.google.dev Berjalan di Google Colab Lihat sumber di GitHub

CodeGemma adalah kelompok model terbuka yang ringan dan canggih, dibangun dari riset dan teknologi yang digunakan untuk membuat model Gemini.

Model CodeGemma dilatih dengan lebih dari 500 miliar token terutama kode, menggunakan arsitektur yang sama dengan kelompok model Gemma. Hasilnya, model CodeGemma mencapai performa kode yang canggih dalam kedua tahap penyelesaian dan pembuatan tugas, sambil tetap mempertahankan dan keterampilan penalaran dalam skala besar.

CodeGemma memiliki 3 varian:

  • Model terlatih kode 7B
  • Model kode yang disesuaikan dengan instruksi sebesar 7B
  • Model 2B, dilatih khusus untuk pengisian kode dan pembuatan open-ended.

Panduan ini memandu Anda menggunakan model CodeGemma 2B dengan KerasNLP untuk tugas penyelesaian kode.

Penyiapan

Mendapatkan akses ke CodeGemma

Untuk menyelesaikan tutorial ini, Anda harus menyelesaikan petunjuk penyiapan terlebih dahulu di penyiapan Gemma. Petunjuk penyiapan Gemma menunjukkan kepada Anda cara melakukan hal berikut:

  • Dapatkan akses ke Gemma di kaggle.com.
  • Pilih runtime Colab dengan resource yang memadai untuk dijalankan model Gemma 2B.
  • Membuat dan mengkonfigurasi nama pengguna dan kunci API Kaggle.

Setelah Anda menyelesaikan penyiapan Gemma, lanjutkan ke bagian berikutnya, untuk menetapkan variabel lingkungan untuk lingkungan Colab Anda.

Pilih runtime

Untuk menyelesaikan tutorial ini, Anda harus memiliki runtime Colab dengan resource yang memadai untuk menjalankan model CodeGemma 2B. Dalam hal ini, Anda dapat menggunakan GPU T4:

  1. Di kanan atas jendela Colab, pilih ▾ (Opsi koneksi tambahan).
  2. Pilih Ubah jenis runtime.
  3. Di bagian Hardware Accelerator, pilih T4 GPU.

Mengonfigurasi kunci API

Untuk menggunakan Gemma, Anda harus memberikan nama pengguna Kaggle dan kunci API Kaggle.

Untuk membuat kunci API Kaggle, buka tab Account di profil pengguna Kaggle Anda, lalu pilih Create New Token. Tindakan ini akan memicu download file kaggle.json yang berisi kredensial API Anda.

Di Colab, pilih Secrets (Shopping) di panel kiri dan tambahkan nama pengguna Kaggle dan Kaggle API Anda. Simpan nama pengguna Anda dengan nama KAGGLE_USERNAME dan kunci API Anda dengan nama KAGGLE_KEY.

Menetapkan variabel lingkungan

Menetapkan variabel lingkungan untuk KAGGLE_USERNAME dan KAGGLE_KEY.

import os
from google.colab import userdata

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

Menginstal dependensi

pip install -q -U keras-nlp

Pilih backend

Keras adalah API deep learning multi-framework tingkat tinggi yang dirancang untuk kesederhanaan dan kemudahan penggunaan. Dengan Keras 3, Anda dapat menjalankan alur kerja di salah satu dari tiga backend: TensorFlow, JAX, atau PyTorch.

Untuk tutorial ini, konfigurasikan backend untuk TensorFlow.

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

Mengimpor paket

Impor Keras dan KerasNLP.

import keras_nlp
import keras

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

Muat Model

KerasNLP menyediakan implementasi dari banyak arsitektur model populer. Dalam tutorial ini, Anda akan membuat model menggunakan GemmaCausalLM, model Gemma menyeluruh untuk pemodelan bahasa kausal. Model bahasa kausal memprediksi token berikutnya berdasarkan token sebelumnya.

Buat model menggunakan metode 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]

Metode from_preset membuat instance model dari bobot dan arsitektur preset. Dalam kode di atas, string code_gemma_2b_en menentukan arsitektur preset, yaitu model CodeGemma dengan 2 miliar parameter.

Pengisian kode bagian tengah

Contoh ini menggunakan kemampuan {i>fill-in-the-middle (FIM) CodeGemma untuk menyelesaikan kode berdasarkan konteks di sekitarnya. Ini sangat berguna dalam aplikasi editor kode untuk menyisipkan kode tempat kursor teks didasarkan pada kode di sekitarnya (sebelum dan sesudah kursor).

CodeGemma memungkinkan Anda menggunakan 4 token yang ditentukan pengguna - 3 untuk FIM dan token <|file_separator|> untuk dukungan konteks multi-file. Gunakan ini untuk menentukan konstanta.

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

Tentukan token perhentian untuk model.

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)

Memformat prompt untuk penyelesaian kode. Perhatikan bahwa:

  • Tidak boleh ada spasi kosong di antara token FIM serta awalan dan akhiran
  • Token tengah FIM harus berada di bagian akhir untuk mempersiapkan model agar dapat terus mengisi
  • Awalan atau akhiran dapat kosong bergantung pada lokasi kursor saat ini dalam file, atau seberapa banyak konteks yang ingin Anda berikan pada model

Menggunakan fungsi bantuan untuk memformat prompt.

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|>

Jalankan perintah. Sebaiknya streaming token respons. Hentikan streaming saat menemukan salah satu token belokan/senetence yang ditentukan pengguna atau akhir untuk mendapatkan penyelesaian kode yang dihasilkan.

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|>'

Model menyediakan sys sebagai penyelesaian kode yang disarankan.

Ringkasan

Tutorial ini memandu Anda menggunakan CodeGemma untuk mengisi kode berdasarkan konteks di sekitarnya. Selanjutnya, lihat AI assist Programming dengan CodeGemma dan notebook KerasNLP untuk contoh lainnya tentang cara menggunakan CodeGemma.

Baca juga Kartu model CodeGemma untuk mengetahui spesifikasi teknis model CodeGemma.