PCoreX-V1-Base / train.py
MageLord's picture
Upload 5 files
f49ce73 verified
Raw History Blame Contribute Delete
4.45 kB
"""
Hazır eğitim iskeleti — TPU (torch_xla / accelerate) ve GPU'da aynı kodla çalışır.
Kendi veri setinizi/hiperparametrelerinizi girip doğrudan çalıştırabilirsiniz.
TPU'da çalıştırma:
pip install torch torch_xla transformers datasets accelerate
accelerate config # "TPU" seçin, çekirdek sayısını girin
accelerate launch train.py --train_file data.txt
GPU'da çalıştırma (aynı script):
accelerate launch train.py --train_file data.txt
Not: Bu dosya bir iskelettir; veri seti yolu, batch size, learning rate vb.
kendi eğitim planınıza göre ayarlanmalı. Eğitimin kendisi sizin sorumluluğunuzda.
"""
import argparse
from transformers import (
AutoTokenizer,
Trainer,
TrainingArguments,
DataCollatorForLanguageModeling,
)
from datasets import load_dataset
from configuration_tr_en import TrEnConfig
from modeling_tr_en import TrEnForCausalLM
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--tokenizer_dir", type=str, default="./tr_en_llm_ckpt",
help="convert_tokenizer.py çıktısı HF tokenizer klasörü")
parser.add_argument("--train_file", type=str, required=True, help="txt/json/jsonl korpus")
parser.add_argument("--output_dir", type=str, default="./tr_en_llm_out")
parser.add_argument("--block_size", type=int, default=2048)
parser.add_argument("--per_device_train_batch_size", type=int, default=8)
parser.add_argument("--gradient_accumulation_steps", type=int, default=4)
parser.add_argument("--learning_rate", type=float, default=3e-4)
parser.add_argument("--num_train_epochs", type=float, default=1.0)
parser.add_argument("--warmup_ratio", type=float, default=0.02)
parser.add_argument("--bf16", action="store_true", help="TPU/A100 için bf16 önerilir")
parser.add_argument("--tpu_num_cores", type=int, default=None,
help="Eski HF sürümlerinde TPU çekirdek sayısı; accelerate kullanıyorsanız gerek yok")
parser.add_argument("--resume_from_checkpoint", type=str, default=None)
args = parser.parse_args()
# --- Tokenizer ---
tokenizer = AutoTokenizer.from_pretrained(args.tokenizer_dir)
# --- Model: sıfırdan (config'ten) başlat ---
config = TrEnConfig(
vocab_size=len(tokenizer),
block_size=args.block_size,
pad_token_id=tokenizer.pad_token_id,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id,
)
model = TrEnForCausalLM(config)
print(f"Model parametre sayısı: {model.num_params()/1e6:.1f}M")
# --- Veri seti ---
raw = load_dataset("text", data_files={"train": args.train_file})
def tokenize_fn(examples):
return tokenizer(examples["text"])
tokenized = raw.map(tokenize_fn, batched=True, remove_columns=["text"])
def group_texts(examples):
concatenated = sum(examples["input_ids"], [])
total_len = (len(concatenated) // args.block_size) * args.block_size
result = {
"input_ids": [concatenated[i:i + args.block_size] for i in range(0, total_len, args.block_size)]
}
result["labels"] = result["input_ids"].copy()
return result
lm_dataset = tokenized.map(group_texts, batched=True)
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
training_args = TrainingArguments(
output_dir=args.output_dir,
per_device_train_batch_size=args.per_device_train_batch_size,
gradient_accumulation_steps=args.gradient_accumulation_steps,
learning_rate=args.learning_rate,
num_train_epochs=args.num_train_epochs,
warmup_ratio=args.warmup_ratio,
bf16=args.bf16,
logging_steps=10,
save_strategy="steps",
save_steps=500,
save_total_limit=3,
report_to=["tensorboard"],
tpu_num_cores=args.tpu_num_cores,
gradient_checkpointing=True,
dataloader_drop_last=True,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=lm_dataset["train"],
data_collator=data_collator,
)
trainer.train(resume_from_checkpoint=args.resume_from_checkpoint)
trainer.save_model(args.output_dir)
tokenizer.save_pretrained(args.output_dir)
print(f"Eğitim bitti, model kaydedildi: {args.output_dir}")
if __name__ == "__main__":
main()