กระดาษ | - คอลเลกชัน HuggingFace | หน้าการสนทนา
เราขอแนะนำซีรีส์ Granite ของโมเดลโค้ดเฉพาะตัวถอดรหัสสำหรับงานสร้างโค้ด (เช่น การแก้ไขจุดบกพร่อง การอธิบายโค้ด การจัดทำเอกสารโค้ด) ที่ได้รับการฝึกด้วยโค้ดที่เขียนด้วยภาษาโปรแกรม 116 ภาษา การประเมินที่ครอบคลุมของกลุ่มโมเดล Granite Code ในงานที่หลากหลายแสดงให้เห็นว่าแบบจำลองของเราเข้าถึงประสิทธิภาพที่ล้ำสมัยอย่างต่อเนื่องท่ามกลาง LLM โค้ดโอเพ่นซอร์สที่มีอยู่
ข้อดีที่สำคัญของโมเดล Granite Code ได้แก่:
กลุ่มผลิตภัณฑ์ Granite Code Models มีให้เลือกสองรุ่นหลัก:
ทั้งรุ่นพื้นฐานและรุ่นคำสั่งมีจำหน่ายในขนาดพารามิเตอร์ 3B, 8B, 20B และ 34B
กระบวนการของเราในการเตรียมข้อมูลการฝึกอบรมโค้ดล่วงหน้าเกี่ยวข้องกับหลายขั้นตอน อันดับแรก เรารวบรวมชุดข้อมูลที่เปิดเผยต่อสาธารณะ (เช่น GitHub Code Clean, ข้อมูล Starcoder) ที่เก็บโค้ดสาธารณะ และปัญหาจาก GitHub ประการที่สอง เรากรองข้อมูลโค้ดที่รวบรวมตามภาษาการเขียนโปรแกรมที่มีการเขียนข้อมูล (ซึ่งเรากำหนดตามนามสกุลไฟล์) จากนั้น เรายังกรองข้อมูลที่มีคุณภาพโค้ดต่ำออกด้วย ประการที่สาม เราใช้กลยุทธ์การขจัดข้อมูลซ้ำซ้อนเชิงรุกซึ่งรวมถึงการขจัดข้อมูลซ้ำซ้อนแบบตรงทั้งหมดและแบบคลุมเครือเพื่อลบเอกสารที่มีเนื้อหาโค้ด (ใกล้เคียง) ที่เหมือนกัน สุดท้ายนี้ เราใช้ตัวกรองเนื้อหา HAP ที่ช่วยลดโอกาสที่โมเดลจะสร้างภาษาที่แสดงความเกลียดชัง ไม่เหมาะสม หรือดูหมิ่น นอกจากนี้เรายังตรวจสอบให้แน่ใจว่าได้ปกปิดข้อมูลส่วนบุคคลที่สามารถระบุตัวตนได้ (PII) โดยการแทนที่เนื้อหา PII (เช่น ชื่อ ที่อยู่อีเมล กุญแจ รหัสผ่าน) ด้วยโทเค็นที่เกี่ยวข้อง (เช่น ⟨NAME⟩, ⟨EMAIL⟩, ⟨KEY⟩, ⟨PASSWORD⟩) . นอกจากนี้เรายังสแกนชุดข้อมูลทั้งหมดโดยใช้ ClamAV เพื่อระบุและลบอินสแตนซ์ของมัลแวร์ในซอร์สโค้ด นอกเหนือจากการรวบรวมข้อมูลโค้ดสำหรับการฝึกโมเดลแล้ว เรายังดูแลจัดการชุดข้อมูลภาษาธรรมชาติคุณภาพสูงที่เปิดเผยต่อสาธารณะหลายชุด เพื่อปรับปรุงความสามารถของโมเดลในการทำความเข้าใจภาษาและการใช้เหตุผลทางคณิตศาสตร์
โมเดล ฐานรหัส Granite ได้รับการฝึกอบรมเกี่ยวกับโทเค็น 3-4T ของข้อมูลโค้ดและชุดข้อมูลภาษาธรรมชาติที่เกี่ยวข้องกับโค้ด ข้อมูลถูกโทเค็นผ่านการเข้ารหัสคู่ไบต์ (BPE) โดยใช้โทเค็นไนเซอร์เดียวกันกับ StarCoder เราใช้ข้อมูลคุณภาพสูงโดยมีการฝึกอบรมสองขั้นตอนดังนี้:
โมเดล Granite Code Instruct ได้รับการปรับแต่งอย่างละเอียดตามประเภทข้อมูลคำสั่งต่อไปนี้: 1) การคอมมิตโค้ดที่มาจาก CommitPackFT 2) ชุดข้อมูลทางคณิตศาสตร์คุณภาพสูง โดยเฉพาะที่เราใช้ MathInstruct และ MetaMathQA 3) ชุดข้อมูลคำสั่งโค้ด เช่น Glaive-Code-Assistant- v3, Self-OSS-Instruct-SC2, Glaive-Function-Calling-v2, NL2SQL11 และคอลเลกชันเล็กๆ ของชุดข้อมูลการเรียก API สังเคราะห์ และ 4) ชุดข้อมูลการเรียนการสอนภาษาคุณภาพสูง เช่น HelpSteer และ Platypus เวอร์ชันกรองลิขสิทธิ์แบบเปิด .
เราทำการประเมินโมเดลโค้ดของเราอย่างละเอียดในรายการการวัดประสิทธิภาพที่ครอบคลุม ซึ่งรวมถึงแต่ไม่จำกัดเพียง HumanEvalPack, MBPP และ MBPP+ ชุดการวัดประสิทธิภาพนี้ครอบคลุมงานการเขียนโค้ดต่างๆ ในภาษาโปรแกรมที่ใช้กันทั่วไป (เช่น Python, JavaScript, Java, Go, C++, Rust)
การค้นพบของเราเผยให้เห็นว่าโมเดล Granite Code มีประสิทธิภาพเหนือกว่าโมเดลโอเพ่นซอร์สที่แข็งแกร่งในขนาดโมเดล รูปด้านล่างแสดงให้เห็นว่า Granite-8B-Code-Base
มีประสิทธิภาพเหนือกว่า Mistral-7B
, LLama-3-8B
และโมเดลโอเพ่นซอร์สอื่นๆ ในงานเขียนโค้ดสามงานได้อย่างไร เราให้ผลการประเมินเพิ่มเติมในเอกสารของเรา
หากต้องการใช้โมเดลใดๆ ของเรา ให้เลือก model_path
ที่เหมาะสมจาก:
ibm-granite/granite-3b-code-base-2k
ibm-granite/granite-3b-code-instruct-2k
ibm-granite/granite-8b-code-base-4k
ibm-granite/granite-8b-code-instruct-4k
ibm-granite/granite-20b-code-base-8k
ibm-granite/granite-20b-code-instruct-8k
ibm-granite/granite-34b-code-base-8k
ibm-granite/granite-34b-code-instruct-8k
from transformers import AutoModelForCausalLM , AutoTokenizer
device = "cuda" # or "cpu"
model_path = "ibm-granite/granite-3b-code-base-2k" # pick anyone from above list
tokenizer = AutoTokenizer . from_pretrained ( model_path )
# drop device_map if running on CPU
model = AutoModelForCausalLM . from_pretrained ( model_path , device_map = device )
model . eval ()
# change input text as desired
input_text = "def generate():"
# tokenize the text
input_tokens = tokenizer ( input_text , return_tensors = "pt" )
# transfer tokenized inputs to the device
for i in input_tokens :
input_tokens [ i ] = input_tokens [ i ]. to ( device )
# generate output tokens
output = model . generate ( ** input_tokens )
# decode output tokens into text
output = tokenizer . batch_decode ( output )
# loop over the batch to print, in this example the batch size is 1
for i in output :
print ( i )
เราใช้เครื่องยนต์โดโลไมต์เพื่อการปรับแต่งอย่างละเอียด (หรือการปรับแต่งคำสั่ง) ทุกรุ่นของเรา เราจัดเตรียมสคริปต์ตัวอย่างสำหรับการปรับแต่ง ibm-granite/granite-3b-code-base
หากต้องการปรับแต่งโมเดล เพียงทำตามขั้นตอนเหล่านี้:
git clone https://github.com/IBM/dolomite-engine/
cd dolomite-engine
# you might need to modify configs/granite-example/training.yml
sh scripts/finetune.sh configs/granite-example/training.yml
# once the model is trained, convert to HuggingFace-compatible safetensors
sh scripts/export.sh configs/granite-example/export.yml
เคล็ดลับ
หากคุณต้องการใช้หม้อแปลงที่ไม่มีช่องว่างภายในเพื่อประหยัดพื้นที่หน่วยความจำและ FLOP ในระหว่างการฝึก ให้ทำตามคำแนะนำใน Dolomite Engine README เพื่อดูรายละเอียดเพิ่มเติม
โปรดตรวจสอบหลักเกณฑ์และจรรยาบรรณของเราเพื่อสนับสนุนโครงการของเรา
การ์ดโมเดลสำหรับตัวแปรแต่ละโมเดลจะมีอยู่ในที่เก็บ HuggingFace ตามลำดับ กรุณาเยี่ยมชมคอลเลกชันของเราที่นี่
โมเดลที่เลือก (granite-3b-code-base ในตัวอย่างนี้) สามารถโคลนได้โดยใช้:
git clone https://huggingface.co/ibm-granite/granite-3b-code-base-2k
โมเดลรหัสหินแกรนิตทั้งหมดเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0
โปรดแจ้งให้เราทราบความคิดเห็นของคุณเกี่ยวกับกลุ่มโมเดลโค้ดของเราโดยไปที่คอลเลกชันของเรา เลือกที่เก็บของโมเดลที่คุณต้องการแสดงความคิดเห็น จากนั้นไปที่แท็บ ชุมชน และคลิกที่ การสนทนาใหม่ หรือคุณสามารถโพสต์คำถาม/ความคิดเห็นใดๆ ได้ที่หน้าสนทนา GitHub ของเรา