| from datasets import load_dataset |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments |
| from peft import get_peft_model, LoraConfig, TaskType |
| import os |
|
|
| |
| dataset = load_dataset("glue", "sst2") |
| small_train = dataset["train"].select(range(500)) |
|
|
| tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased") |
|
|
| def tokenize_fn(batch): |
| return tokenizer(batch["sentence"], padding=True, truncation=True) |
|
|
| tokenized_train = small_train.map(tokenize_fn, batched=True) |
|
|
| |
| model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=2) |
|
|
| |
| peft_config = LoraConfig( |
| task_type=TaskType.SEQ_CLS, |
| inference_mode=False, |
| r=8, |
| lora_alpha=32, |
| lora_dropout=0.1, |
| target_modules=["q_lin", "v_lin"] |
| ) |
| model = get_peft_model(model, peft_config) |
|
|
| |
| hf_token = os.environ.get("HF_TOKEN") or "hf_xxx" |
|
|
| training_args = TrainingArguments( |
| output_dir="results", |
| per_device_train_batch_size=8, |
| num_train_epochs=1, |
| logging_dir="./logs", |
| logging_steps=10, |
| save_strategy="epoch", |
| push_to_hub=True, |
| hub_model_id="NightPrince/peft-distilbert-sst2", |
| hub_token=hf_token |
| ) |
|
|
| trainer = Trainer( |
| model=model, |
| args=training_args, |
| train_dataset=tokenized_train, |
| ) |
|
|
| trainer.train() |
|
|