การเริ่มต้น Keras CodeGemma อย่างรวดเร็ว

ดูใน ai.google.dev เรียกใช้ใน Google Colab ดูแหล่งที่มาใน GitHub

CodeGemma เป็นชุดโมเดลเปิดที่ทันสมัยและน้ำหนักเบา สร้างขึ้นจากการวิจัยและเทคโนโลยีเดียวกันกับที่ใช้ในการสร้างโมเดล Gemini

โมเดล CodeGemma ได้รับการฝึกจากโทเค็นหลักมากกว่า 5 แสนล้านโทเค็น โดยใช้ สถาปัตยกรรมแบบเดียวกับกลุ่มโมเดล Gemma ด้วยเหตุนี้ โมเดล CodeGemma จึงมีประสิทธิภาพของโค้ดที่ล้ำสมัยในทั้ง 2 โค้ดนี้ และงานการสร้าง ไปพร้อมๆ กับรักษาความแข็งแรง ทักษะการทำความเข้าใจและการให้เหตุผลในวงกว้าง

CodeGemma มี 3 ตัวแปร:

  • โมเดลที่ฝึกด้วยโค้ด 7B ล่วงหน้า
  • โมเดลโค้ดที่มีการปรับแต่งตามคำสั่ง 7B
  • โมเดล 2B ที่ได้รับการฝึกมาโดยเฉพาะสำหรับการใส่ข้อมูลโค้ดและการสร้างแบบเปิดกว้าง

คู่มือนี้จะอธิบายถึงการใช้โมเดล CodeGemma 2B กับ KerasNLP สำหรับการเติมโค้ด

ตั้งค่า

รับสิทธิ์เข้าถึง CodeGemma

หากต้องการจบบทแนะนำนี้ คุณจะต้องทำตามวิธีการตั้งค่าที่การตั้งค่า Gemma ก่อน วิธีการตั้งค่า Gemma จะแสดงวิธีดำเนินการต่อไปนี้

  • รับสิทธิ์เข้าถึง Gemma ใน kaggle.com
  • เลือกรันไทม์ของ Colab ที่มีทรัพยากรเพียงพอที่จะเรียกใช้ โมเดล Gemma 2B
  • สร้างและกำหนดค่าชื่อผู้ใช้และคีย์ API ของ Kaggle

หลังจากตั้งค่า Gemma เสร็จแล้ว ให้ไปยังส่วนถัดไปซึ่งจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับสภาพแวดล้อม Colab

เลือกรันไทม์

หากต้องการจบบทแนะนำนี้ คุณจะต้องมีรันไทม์ของ Colab ที่มีทรัพยากรเพียงพอที่จะเรียกใช้โมเดล CodeGemma 2B ในกรณีนี้ คุณใช้ GPU แบบ T4 ได้โดยทำดังนี้

  1. ที่ด้านขวาบนของหน้าต่าง Colab ให้เลือก ▾ (ตัวเลือกการเชื่อมต่อเพิ่มเติม)
  2. เลือกเปลี่ยนประเภทรันไทม์
  3. ในส่วนตัวเร่งฮาร์ดแวร์ ให้เลือก GPU T4

กำหนดค่าคีย์ API

หากต้องการใช้ Gemma คุณต้องระบุชื่อผู้ใช้ Kaggle และคีย์ API ของ Kaggle

หากต้องการสร้างคีย์ Kaggle API ให้ไปที่แท็บ Account ของโปรไฟล์ผู้ใช้ Kaggle และเลือก Create New Token การดำเนินการนี้จะทริกเกอร์การดาวน์โหลดไฟล์ kaggle.json ที่มีข้อมูลเข้าสู่ระบบ API ของคุณ

ใน Colab ให้เลือก Secrets (🔑) ในแผงด้านซ้าย แล้วเพิ่มชื่อผู้ใช้ Kaggle และคีย์ API ของ Kaggle จัดเก็บชื่อผู้ใช้ในชื่อ KAGGLE_USERNAME และคีย์ API ในชื่อ KAGGLE_KEY

ตั้งค่าตัวแปรสภาพแวดล้อม

ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ KAGGLE_USERNAME และ 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')

ติดตั้งการอ้างอิง

pip install -q -U keras-nlp

เลือกแบ็กเอนด์

Keras เป็น API การเรียนรู้เชิงลึกที่มีหลายกรอบและมีระดับสูงซึ่งออกแบบมาให้ใช้งานง่าย เมื่อใช้ Keras 3 คุณจะเรียกใช้เวิร์กโฟลว์บนแบ็กเอนด์ 1 ใน 3 แบบ ได้แก่ TensorFlow, JAX หรือ PyTorch

กำหนดค่าแบ็กเอนด์สำหรับ TensorFlow สำหรับบทแนะนำนี้

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

นำเข้าแพ็กเกจ

นำเข้า Keras และ KerasNLP

import keras_nlp
import keras

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

โหลดโมเดล

KerasNLP ให้บริการนำสถาปัตยกรรมโมเดลยอดนิยมจำนวนมากมาใช้ ในบทแนะนำนี้ คุณจะได้สร้างโมเดลโดยใช้ GemmaCausalLM ซึ่งเป็นโมเดล Gemma จากต้นทางถึงปลายทางสำหรับการสร้างโมเดลภาษาทั่วไป โมเดลภาษาทั่วไปจะคาดการณ์โทเค็นถัดไปตามโทเค็นก่อนหน้า

สร้างโมเดลโดยใช้เมธอด 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]

เมธอด from_preset จะสร้างอินสแตนซ์โมเดลจากสถาปัตยกรรมและน้ำหนักที่กำหนดไว้ล่วงหน้า ในโค้ดข้างต้น สตริง code_gemma_2b_en ระบุสถาปัตยกรรมค่าที่กำหนดล่วงหน้า ซึ่งเป็นโมเดล CodeGemma ที่มีพารามิเตอร์ 2 พันล้านรายการ

การเติมโค้ดตรงกลาง

ตัวอย่างนี้ใช้ความสามารถในการเติมตรงกลาง (FIM) ของ CodeGemma เพื่อเขียนโค้ดให้สมบูรณ์ตามบริบทแวดล้อม ซึ่งจะเป็นประโยชน์อย่างยิ่งในแอปพลิเคชันตัวแก้ไขโค้ดสำหรับการแทรกโค้ดซึ่งเคอร์เซอร์ข้อความจะอ้างอิงตามโค้ดที่อยู่รอบๆ (ก่อนและหลังเคอร์เซอร์)

CodeGemma ให้คุณใช้โทเค็นที่ผู้ใช้กำหนด 4 รายการ ได้แก่ 3 รายการสำหรับ FIM และโทเค็น <|file_separator|> สำหรับการสนับสนุนบริบทหลายไฟล์ ใช้ตัวแปรเหล่านี้เพื่อกําหนดค่าคงที่

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

กำหนดโทเค็นหยุดสำหรับโมเดล

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)

จัดรูปแบบพรอมต์เพื่อใส่โค้ดให้สมบูรณ์ โปรดทราบว่า

  • ไม่ควรมีช่องว่างระหว่างโทเค็น FIM กับคำนำหน้าและคำต่อท้าย
  • โทเค็นกลาง FIM ควรอยู่ส่วนท้ายเพื่อให้โมเดลป้อนข้อมูลต่อได้
  • คำนำหน้าหรือคำต่อท้ายอาจว่างเปล่าโดยขึ้นอยู่กับตำแหน่งของเคอร์เซอร์ในไฟล์ในปัจจุบัน หรือปริมาณบริบทที่คุณต้องการระบุให้กับโมเดล

ใช้ฟังก์ชันตัวช่วยเพื่อจัดรูปแบบพรอมต์

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

เรียกใช้ข้อความแจ้ง ขอแนะนำให้สตรีมโทเค็นการตอบกลับ หยุดการสตรีมเมื่อพบโทเค็นที่ผู้ใช้กำหนดหรือสิ้นสุดโทเค็นการเลี้ยว/การเชื่อมต่อเพื่อรับการเติมโค้ดที่เป็นผลลัพธ์

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

โมเดลจะระบุ sys เป็นการเติมโค้ดที่แนะนำ

สรุป

บทแนะนำนี้จะแนะนำวิธีใช้ CodeGemma ในการเติมโค้ดโดยอิงตามบริบทโดยรอบ ถัดไป ให้ดูตัวอย่างเพิ่มเติมเกี่ยวกับวิธีใช้ CodeGemma ได้ในสมุดบันทึกที่ใช้ AI เพื่อช่วยเขียนโปรแกรมด้วย CodeGemma และ KerasNLP

และดูข้อกำหนดทางเทคนิคของโมเดล CodeGemma ได้ที่การ์ดโมเดล CodeGemma