Spaces:
Sleeping
Sleeping
File size: 3,511 Bytes
0d17543 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
import torch
from datasets import load_dataset
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
TrainingArguments,
Trainer,
DataCollatorForLanguageModeling
)
from peft import LoraConfig, get_peft_model
# 1. Tải Dataset
dataset = load_dataset('vntc/wiki-mini-corpus')
# 2. Chia Dataset thành train và validation
split_dataset = dataset['train'].train_test_split(test_size=0.1, seed=42)
train_dataset = split_dataset['train']
validation_dataset = split_dataset['test']
# 3. Tiền Xử Lý Văn Bản
def preprocess_function(examples):
passages = [passage.lower().strip() for passage in examples['passage']]
return {'passage': passages}
processed_train = train_dataset.map(preprocess_function, batched=True, remove_columns=['id', 'metadata'])
processed_validation = validation_dataset.map(preprocess_function, batched=True, remove_columns=['id', 'metadata'])
# 4. Tokenization
model_name = "meta-llama/Llama-3.2-3B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Đảm bảo tokenizer có pad_token
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
def tokenize_function(examples):
return tokenizer(
examples['passage'],
padding='max_length',
truncation=True,
max_length=512,
)
tokenized_train = processed_train.map(tokenize_function, batched=True)
tokenized_validation = processed_validation.map(tokenize_function, batched=True)
# 5. Thêm trường 'labels'
def add_labels(examples):
examples['labels'] = examples['input_ids'].copy()
return examples
tokenized_train = tokenized_train.map(add_labels, batched=True)
tokenized_validation = tokenized_validation.map(add_labels, batched=True)
# 6. Loại bỏ các cột không cần thiết
tokenized_train = tokenized_train.remove_columns(['passage'])
tokenized_validation = tokenized_validation.remove_columns(['passage'])
# 7. Định dạng dữ liệu cho PyTorch
tokenized_train.set_format('torch')
tokenized_validation.set_format('torch')
# 8. Tạo DatasetDict
final_dataset = {
'train': tokenized_train,
'validation': tokenized_validation
}
# 9. Tải và Cấu Hình Mô Hình với LoRA
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="auto",
torch_dtype=torch.float16,
load_in_8bit=False
)
lora_config = LoraConfig(
r=8,
lora_alpha=32,
target_modules=["q_proj", "k_proj", "v_proj", "out_proj"],
lora_dropout=0.1,
bias="none",
)
model = get_peft_model(model, lora_config)
print(model)
# 10. Cấu Hình TrainingArguments
training_args = TrainingArguments(
output_dir="./lora_finetuned_llama3.2",
per_device_train_batch_size=4,
per_device_eval_batch_size=4,
gradient_accumulation_steps=8,
num_train_epochs=3,
learning_rate=3e-4,
weight_decay=0.01,
logging_steps=100,
evaluation_strategy="epoch",
save_strategy="epoch",
save_total_limit=2,
fp16=True,
report_to="none",
)
# 11. Data Collator Sử Dụng DataCollatorForLanguageModeling
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False, # Vì bạn đang thực hiện Causal LM
pad_to_multiple_of=8
)
# 12. Tạo Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=final_dataset['train'],
eval_dataset=final_dataset['validation'],
tokenizer=tokenizer,
data_collator=data_collator,
)
# 13. Bắt Đầu Huấn Luyện
trainer.train()
|