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