ก่อนที่เราจะเริ่มการ fine-tune อยากจะมาแนะนำ Granite ให้รู้จักกันก่อน Granite เป็นโมเดลแบบ OSS หรือ Open-Source จาก IBM โดยเน้นความ reliable, ไม่หลุดประเด็น, และ เทรนง่ายบนทรัพยากรน้อย

สิ่งที่ทำให้มันน่าสนใจมาก คือมีหลาย scale ตั้งแต่

โดย Granite 4.0 มีการใช้สถาปัตยกรรมของ Mamba-2/transformer แบบ Hybrid ออกแบบมาเพื่อประสิทธิภาพและประสิทธิภาพการทำงานที่ยอดเยี่ยมในแอปพลิเคชันระดับองค์กร เช่น RAG และเวิร์กโฟลว์แบบเอเจนต์

image.png

หลังจาก IBM ได้มีการปล่อย Granite 4.0 มา โดยทางทีมต้องการที่จะทำให้ตัว model ตัวนี้สามารถรองรับภาษาไทยได้ดีมากยิ่งขึ้น โดยเริ่มจากการ์ดเล็กๆ โดยเริ่มจากการใช้ NVIDIA T4 และ NVIDIA A100 แล้วเจอปัญหา out of memory จนไม่สามารถทำการ fine-tune ต่อได้ และสุดท้ายย้ายไป NVIDIA H100 เพื่อจูนต่อได้

เครื่องมือที่ใช้งาน

โมเดลที่ใช้งาน

ในการ fine-tune จะเลือกใช้โมเดล unsloth/granite-4.0-h-micro มาจาก Unsloth ที่มีการ pre-trained สำหรับ chat และ ทำไมถึงเลือกใช้ Unsloth เพราะสามารถ train ได้เร็วขึ้นถึง 2 เท่า และลดการใช้ VRAM มากถึง 50% และรองรับ context ได้ยาวขึ้นถึง 6 เท่า

ชุดข้อมูลที่ใช้งาน

สำหรับการ Fine-tune นี้เลือกใช้ชุดข้อมูลจาก Open ThaiGPT โดยเลือกใช้ชุดข้อมูล *openthaigpt/lexitron2_prompt_finetune* ซึ่งเป็นชุดข้อมูลจาก Lexitron 2.0 ซึ่งเป็นพจนานุกรมไทย-อังกฤษที่พัฒนาโดย NECTEC

ตัวอย่างโค้ด Fine-tune Granite 4.0

from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/granite-4.0-h-micro",
    max_seq_length = 4096,
    load_in_4bit = False,
    load_in_8bit = False,
    full_finetuning = False,
)