要微調自己的模型訓練 LLaMA 3,則需要準備一個 JSON 格式的數據集,其中每個條目包含輸入文本和相應的標簽(如果有的話)。以下是一個 JSON 數據集的示例格式:
[{"input": "這是一個輸入樣本。","label": "這是一個標簽樣本。"},{"input": "這是另一個輸入樣本。","label": "這是另一個標簽樣本。"},// 更多樣本...
]
在這個格式中,每個 JSON 對象包含一個 “input” 字段和一個 “label” 字段。輸入字段包含你的模型需要預測的文本,而標簽字段包含相應的目標輸出。如果你的任務是語言建模,那么 “label” 字段通常是 “input” 字段的延續。
以下是一個使用 JSON 數據集微調 LLaMA 3 的代碼案例:
import torch
from peft import LoraConfig, TaskType, get_peft_model
from transformers import LlamaForCausalLM, LlamaTokenizer, DataCollatorForLanguageModeling
from transformers import Trainer, TrainingArguments
from datasets import load_dataset
# 加載 LLaMA 3 模型和分詞器
model = LlamaForCausalLM.from_pretrained("path/to/llama3/model")
tokenizer = LlamaTokenizer.from_pretrained("path/to/llama3/tokenizer")
# 設置 PEFT 的 LoraConfig
lora_config = LoraConfig(r=8,lora_alpha=32,target_modules=["q_proj", "v_proj"],task_type=TaskType.CAUSAL_LM
)
# 使用 PEFT 裝飾模型
model = get_peft_model(model, lora_config)
# 加載 JSON 數據集
dataset = load_dataset('json', data_files={'train': 'path/to/train.json', 'validation': 'path/to/valid.json'})
# 準備數據集
def preprocess_data(examples):inputs = examples['input']labels = examples['label']tokenized_inputs = tokenizer(inputs, truncation=True, padding='max_length')tokenized_labels = tokenizer(labels, truncation=True, padding='max_length')tokenized_inputs['labels'] = tokenized_labels['input_ids']return tokenized_inputs
tokenized_dataset = dataset.map(preprocess_data, batched=True)
# 設置數據集格式
tokenized_dataset.set_format(type='torch', columns=['input_ids', 'attention_mask', 'labels'])
# 設置訓練參數
training_args = TrainingArguments(output_dir="path/to/output/directory",per_device_train_batch_size=4,per_device_eval_batch_size=4,eval_steps=400,logging_steps=100,gradient_accumulation_steps=32,num_train_epochs=3,warmup_steps=500,learning_rate=2e-4,weight_decay=0.01,save_total_limit=3,fp16=True,
)
# 創建 Trainer
trainer = Trainer(model=model,args=training_args,data_collator=DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False),train_dataset=tokenized_dataset['train'],eval_dataset=tokenized_dataset['validation'],
)
# 開始訓練
trainer.train()
# 保存模型
model.save_pretrained("path/to/output/directory")
在這個代碼案例中,我們首先加載了 LLaMA 3 模型和分詞器,并設置了 PEFT 的 LoraConfig。然后,我們加載了 JSON 格式的數據集,并使用 preprocess_data
函數對其進行預處理。接著,我們設置了訓練參數并創建了 Trainer 實例,最后開始訓練模型并保存。