เอกสารการใช้งาน

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 แต่ใช้ทดลองได้

รูปแบบHardwareRamSpeedInference
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
1

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 จะใกล้เคียงกับตัวอย่างด้านล่าง

1

ติดตั้ง dependencies

pip install torch transformers accelerate bitsandbytes
2

โหลดโมเดล (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"
)
3

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 (จะรองรับเมื่อโมเดลปล่อย)

1

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')"
2

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

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"
)
4

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 พร้อมกันได้

1

ภาษาไทยทั่วไป (cpt-th)

# Base layer สําหรับทุกงานภาษาไทย — ให้โมเดลเข้าใจภาษาไทยเชิงลึก
model = AutoModel.from_pretrained("naralab/nara-ai-12b")
model.load_adapter("naralab/nara-ai-cpt-th")
# ตอนนี้โมเดลเข้าใจภาษาไทยแล้ว — พร้อมใช้งาน
2

ตามคําสั่ง (sft)

# สําหรับ chatbot, สรุป, แปล — ต้องมี cpt-th ก่อน
model.load_adapter("naralab/nara-ai-sft")
# ตอนนี้โมเดลเข้าใจภาษาไทยและตอบตามคําสั่งได้
3

Agent / Tool-use (agent)

# สําหรับ workflow automation, function calling (กําลังพัฒนา)
model.load_adapter("naralab/nara-ai-agent")
# โมเดลสามารถเรียก API และทําตามขั้นตอนได้
4

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": "..."}

1

เตรียมข้อมูลในรูปแบบ JSONL

# training_data.jsonl — อย่างน้อย 100-1000 ตัวอย่าง
{"instruction": "แปลเป็นไทย", "input": "Hello world", "output": "สวัสดีชาวโลก"}
{"instruction": "สรุปข้อความ", "input": "...", "output": "..."}
{"instruction": "ตอบคําถามเกี่ยวกับสินค้า", "input": "ราคาเท่าไหร่", "output": "สินค้าราคา 999 บาท"}
2

โหลดโมเดล + 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)
3

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()
4

บันทึกและนําไปใช้

# บันทึกเฉพาะ 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 ถูกตั้งให้เหมาะสมกับภาษาไทยแล้ว — แต่ละพารามิเตอร์ปรับได้ตามต้องการ

1

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 = ช้าลงแต่ผลดีขึ้น)
)
2

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

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"
)
4

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 — เราตอบทุกคําถาม