Nara AI Developer Guide
ทุกสิ่งที่คุณต้องรู้เพื่อเริ่มใช้ Nara AI — ตั้งแต่โหลดโมเดล ไปจนถึง fine-tuning ด้วยข้อมูลของคุณ
System Requirements
ความต้องการของระบบ
ก่อนเริ่มต้นใช้ Nara AI ตรวจสอบว่าคุณมี hardware และ software ที่จำเป็นหรือไม่
Nara AI 12B เป็นโมเดลขนาดกลางที่สามารถรันบน hardware ทั่วไปได้ ด้วย quantization Q4 จะใช้ RAM/VRAM ประมาณ 8 GB
สำหรับ GPU แนะนำ NVIDIA GPU ที่มี VRAM 16GB+ (RTX 4080, A10G, A100 ฯลฯ) หรือ Apple Silicon Mac (M2 Pro/Max/Ultra ขึ้นไป)
CPU ก็รันได้แต่ช้ากว่ามาก — ไม่แนะนำสำหรับ production แต่ใช้ทดลองได้
| รูปแบบ | Hardware | Ram | Speed | Inference |
|---|---|---|---|---|
| GPU (แนะนำ) | NVIDIA GPU 16GB+ | ~8 GB VRAM | เร็ว | 5-20 tokens/s |
| Mac (MLX) | Apple Silicon 18GB+ | ~8 GB unified | ปานกลาง | 3-10 tokens/s |
| CPU | เครื่องทั่วไป (16GB RAM) | ~12 GB RAM | ช้า | 0.5-2 tokens/s |
Software ที่ต้องมี
# Python 3.10+
pip install torch>=2.0 transformers>=4.40 accelerate bitsandbytes
# สำหรับ Mac
pip install mlx mlx-lm bitsandbytes รองรับเฉพาะ CUDA GPU ถ้าใช้ Mac ให้ใช้ MLX แทน
Quick Start
เริ่มต้นใช้งาน
3 ขั้นตอนง่ายๆ ในการโหลด Nara AI และเริ่ม inference — รองรับทั้ง Hugging Face transformers และ MLX สำหรับ Mac
เมื่อ dependencies พร้อมแล้ว การโหลดโมเดลและเริ่มใช้งานใช้โค้ดเพียงไม่กี่บรรทัด
API ดีไซน์นี้เป็น blueprint — น้ำหนักโมเดลยังไม่เผยแพร่ แต่ API จะใกล้เคียงกับตัวอย่างด้านล่าง
ติดตั้ง dependencies
pip install torch transformers accelerate bitsandbytes โหลดโมเดล (transformers)
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "naralab/nara-ai-12b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="auto",
torch_dtype="auto"
) Run inference
prompt = "สวัสดีครับ ช่วยอธิบายหลักการทํางานของ LoRA"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=256,
temperature=0.7,
top_p=0.9
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True)) น้ําหนักโมเดลยังไม่เผยแพร่ — โค้ดด้านบนเป็น API design preview สําหรับอ้างอิง
Deployment
การติดตั้งและ部署
Nara AI รองรับทั้งการติดตั้งบน cloud (GPU), บนเครื่อง Mac (MLX), และ CPU (ช้ากว่า) — เลือกตามทรัพยากรที่มี
การ deploy Nara AI ทําได้หลายรูปแบบขึ้นอยู่กับ hardware และ use case
ถ้ามี GPU → ใช้ transformers + bitsandbytes Q4 เพื่อลด memory
ถ้าใช้ Mac → ใช้ MLX ซึ่งเร็วกว่า transformers บน Apple Silicon หลายเท่า
ถ้าต้องการ production-grade → ใช้ vLLM หรือ TGI (จะรองรับเมื่อโมเดลปล่อย)
GPU Cloud (Linux)
# NVIDIA GPU 16GB+
pip install torch transformers accelerate bitsandbytes
python -c "from transformers import AutoModel
model = AutoModel.from_pretrained('naralab/nara-ai-12b', device_map='auto')" Mac (MLX)
# Apple Silicon Mac (M2 Pro+)
pip install mlx mlx-lm
# Inference โดยตรง
mlx_lm.generate --model naralab/nara-ai-12b --prompt "สวัสดี"
# หรือในโค้ด Python
from mlx_lm import load, generate
model, tokenizer = load("naralab/nara-ai-12b")
response = generate(model, tokenizer, "สวัสดี", max_tokens=256) CPU (quantized 4-bit)
# CPU inference — ช้าแต่ใช้งานได้
import torch
from transformers import AutoModel, BitsAndBytesConfig
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
model = AutoModel.from_pretrained(
"naralab/nara-ai-12b",
quantization_config=quant_config,
device_map="cpu"
) Production (vLLM — เร็วที่สุด)
# เมื่อโมเดลปล่อย แนะนํา vLLM
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model naralab/nara-ai-12b \
--max-model-len 32768 \
--gpu-memory-utilization 0.9 สําหรับ production แนะนํา vLLM หรือ TGI — throughput สูงกว่า transformers ~5-10 เท่า
Choosing LoRA Layers
เลือก LoRA ตามงาน
โมเดลพื้นฐาน 12B ตัวเดียว มี LoRA หลายชั้นให้เลือกเสียบตามความต้องการ — หรือเสียบพร้อมกันหลายตัวก็ได้
LoRA (Low-Rank Adaptation) เป็นเทคนิคที่ปรับแค่ adapter เล็กๆ (~2% ของพารามิเตอร์) แทนที่จะปรับทั้งโมเดล
ข้อดี: ฝึกเร็ว ใช้ GPU น้อย เก็บ base model ไว้ใช้ร่วมกันหลาย tasks
Nara AI รองรับการซ้อน LoRA หลายชั้น — เช่น cpt-th + sft พร้อมกันได้
ภาษาไทยทั่วไป (cpt-th)
# Base layer สําหรับทุกงานภาษาไทย — ให้โมเดลเข้าใจภาษาไทยเชิงลึก
model = AutoModel.from_pretrained("naralab/nara-ai-12b")
model.load_adapter("naralab/nara-ai-cpt-th")
# ตอนนี้โมเดลเข้าใจภาษาไทยแล้ว — พร้อมใช้งาน ตามคําสั่ง (sft)
# สําหรับ chatbot, สรุป, แปล — ต้องมี cpt-th ก่อน
model.load_adapter("naralab/nara-ai-sft")
# ตอนนี้โมเดลเข้าใจภาษาไทยและตอบตามคําสั่งได้ Agent / Tool-use (agent)
# สําหรับ workflow automation, function calling (กําลังพัฒนา)
model.load_adapter("naralab/nara-ai-agent")
# โมเดลสามารถเรียก API และทําตามขั้นตอนได้ Domain Specific (domain)
# สําหรับงานเฉพาะทาง เช่น กฎหมาย การแพทย์ (กําลังพัฒนา)
model.load_adapter("naralab/nara-ai-domain-law") # กฎหมาย
model.load_adapter("naralab/nara-ai-domain-med") # การแพทย์ LoRA มีขนาดเล็กมาก (~50-200 MB ต่อชั้น) เทียบกับ base model 8 GB — ประหยัดพื้นที่และ memory อย่างมาก
Fine-tuning Guide
Fine-tuning ด้วยข้อมูลของคุณ
ปรับ Nara AI ด้วยข้อมูลภาษาไทยเฉพาะของคุณ ใช้ LoRA / QLoRA เพื่อประหยัด GPU — fine-tuning ใช้ GPU แค่ 16GB ก็พอ
Fine-tuning เป็นวิธีปรับโมเดลให้เชี่ยวชาญในงานเฉพาะของคุณ เช่น ตอบคําถามเกี่ยวกับผลิตภัณฑ์
เราแนะนําให้ใช้ QLoRA (4-bit quantization + LoRA) ซึ่งใช้ GPU แค่ ~12-16 GB
ข้อมูลสําหรับ fine-tuning ควรเป็น instruction format: {"instruction": "...", "input": "...", "output": "..."}
เตรียมข้อมูลในรูปแบบ JSONL
# training_data.jsonl — อย่างน้อย 100-1000 ตัวอย่าง
{"instruction": "แปลเป็นไทย", "input": "Hello world", "output": "สวัสดีชาวโลก"}
{"instruction": "สรุปข้อความ", "input": "...", "output": "..."}
{"instruction": "ตอบคําถามเกี่ยวกับสินค้า", "input": "ราคาเท่าไหร่", "output": "สินค้าราคา 999 บาท"} โหลดโมเดล + LoRA config
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from datasets import load_dataset
model = AutoModelForCausalLM.from_pretrained(
"naralab/nara-ai-12b",
load_in_4bit=True,
torch_dtype=torch.float16,
device_map="auto"
)
model = prepare_model_for_kbit_training(model)
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32, # scaling
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config) Train
dataset = load_dataset("json", data_files="training_data.jsonl")
training_args = TrainingArguments(
output_dir="./nara-ai-finetuned",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
num_train_epochs=3,
learning_rate=2e-4,
fp16=True,
save_steps=100,
logging_steps=10,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train() บันทึกและนําไปใช้
# บันทึกเฉพาะ adapter (ไม่ใช่ base model)
model.save_pretrained("./my-thai-adapter")
tokenizer.save_pretrained("./my-thai-adapter")
# โหลดกลับมาใช้
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("naralab/nara-ai-12b", device_map="auto")
model = PeftModel.from_pretrained(base, "./my-thai-adapter") สําหรับ production fine-tuning: ใช้ QLoRA (rank 16-32), dataset > 500 ตัวอย่าง, 3-5 epochs
API Reference
API Reference
พารามิเตอร์หลักสําหรับ inference และ quantization — ปรับแต่งให้เหมาะกับงานของคุณ
นี่คือพารามิเตอร์สําคัญที่คุณใช้บ่อยเมื่อทํา inference หรือ quantization
ค่า default ถูกตั้งให้เหมาะสมกับภาษาไทยแล้ว — แต่ละพารามิเตอร์ปรับได้ตามต้องการ
Generation Parameters
# พารามิเตอร์หลักสําหรับ generate
outputs = model.generate(
input_ids,
max_new_tokens=256, # จํานวน token สูงสุดที่จะ生成
temperature=0.7, # ความสุ่ม (0.0 = deterministic, 1.0 = สุ่มมาก)
top_p=0.9, # nucleus sampling — ตัด token นอก top 90%
top_k=50, # top-k sampling — เลือกจาก 50 อันดับแรก
repetition_penalty=1.1, # ลดการพูดซ้ำ (1.0 = ไม่ปรับ)
do_sample=True, # ใช้ sampling (False = greedy)
num_beams=1, # beam search (>1 = ช้าลงแต่ผลดีขึ้น)
) Chat Template
# ใช้ structured chat format
messages = [
{"role": "system", "content": "คุณคือผู้ช่วย AI ภาษาไทย"},
{"role": "user", "content": "สวัสดี"},
{"role": "assistant", "content": "สวัสดีครับ มีอะไรให้ช่วยไหมครับ"},
{"role": "user", "content": "ช่วยอธิบาย..."}
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device) Quantization Config
# 4-bit quantization — ลด memory จาก ~24GB เหลือ ~8GB
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4", # NormalFloat4 (recommended)
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True, # Double quantization — saves more
)
model = AutoModelForCausalLM.from_pretrained(
"naralab/nara-ai-12b",
quantization_config=bnb_config,
device_map="auto"
) Mac MLX Quantization
# บน Mac ใช้ MLX quantization
# 4-bit
mlx_lm.generate --model naralab/nara-ai-12b --prompt "..." --max-tokens 256
# เปลี่ยน precision (4-bit, 8-bit)
mlx_lm.generate --model naralab/nara-ai-12b --quantize --prompt "..." temperature=0.7, top_p=0.9 เป็นค่าเริ่มต้นที่ดีสําหรับงานภาษาไทย — ปรับลดถ้าต้องการความแม่นยํา
มีคําถาม?
เปิด issue บน GitHub หรือถามใน Discussions — เราตอบทุกคําถาม