diff --git a/.ipynb_checkpoints/checkLora-checkpoint.py b/.ipynb_checkpoints/checkLora-checkpoint.py index f6467ee1ee31aca7b6f709a235c399411e6b1435..f31e1e19d74fd936ef69bb42aae6a3fde17cf8bc 100644 --- a/.ipynb_checkpoints/checkLora-checkpoint.py +++ b/.ipynb_checkpoints/checkLora-checkpoint.py @@ -293,19 +293,29 @@ from transformers import BertTokenizer, BertForSequenceClassification from peft import PeftModel import torch - +from micro_no_cross import MultiTaskBert # Пути к сохранённой модели -BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base" -LORA_PATH = "./micro_no_cross_fine_tuned/lora" +# BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base" +# LORA_PATH = "./micro_no_cross_fine_tuned/lora" + +BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base2" +LORA_PATH = "./micro_no_cross_fine_tuned/lora2" # Загружаем токенизатор -tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned") +tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned2") + +# # Загружаем базовую модель +# base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH) + +# # Загружаем LoRA-адаптацию +# model = PeftModel.from_pretrained(base_model, LORA_PATH) + + + -# Загружаем базовую модель -base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH) +base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device) -# Загружаем LoRA-адаптацию -model = PeftModel.from_pretrained(base_model, LORA_PATH) +model = PeftModel.from_pretrained(base_model, "./micro_no_cross_fine_tuned/lora2", strict=False) # Переводим модель в режим оценки model.eval() diff --git a/.ipynb_checkpoints/micro_no_cross-checkpoint.py b/.ipynb_checkpoints/micro_no_cross-checkpoint.py index 8f77759d3b2438e7f673b462a6e9ce417829cf44..5f951f80358c030a8d26f700c5da12e8e62e725a 100644 --- a/.ipynb_checkpoints/micro_no_cross-checkpoint.py +++ b/.ipynb_checkpoints/micro_no_cross-checkpoint.py @@ -18,14 +18,14 @@ torch.cuda.empty_cache() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # Пути для сохранения токенизированных данных -TOKENIZED_DATA_DIR = "./tokenized_data_micro" +TOKENIZED_DATA_DIR = "./tokenized_data_micro2" TRAIN_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "train") VAL_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "val") TEST_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "test") # Загрузка данных data = pd.read_csv('all_dataset.csv') -data = data.sample(frac=0.1, random_state=42).copy() # Берем 10% случайных данных +data = data.sample(frac=0.05, random_state=42).copy() # Берем 10% случайных данных @@ -103,7 +103,7 @@ class MultiTaskBert(BertPreTrainedModel): # Создание модели base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device) -base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса +base_model.save_pretrained('./micro_no_cross_fine_tuned/base2') # Сохраняет модель и её веса # Настройка LoRA. # Явно исключаем сохранение модулей, не адаптированных LoRA (например, классификаторов), @@ -114,7 +114,9 @@ lora_config = LoraConfig( lora_alpha=32, lora_dropout=0.1, target_modules=["query", "value"], - modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.) + # modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.) + modules_to_save=["classifier_safety", "classifier_attack"] # Явно указываем оба классификатора +) ) model = get_peft_model(base_model, lora_config) @@ -181,9 +183,9 @@ plt.show() # tokenizer.save_pretrained('./fine-tuned-bert-lora_new') # Сохранение модели, адаптеров LoRA и токенизатора # base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса -tokenizer.save_pretrained('./micro_no_cross_fine_tuned') # Сохраняет токенизатор +tokenizer.save_pretrained('./micro_no_cross_fine_tuned2') # Сохраняет токенизатор # model.save_pretrained("./micro_no_cross_fine_tuned") -model.save_pretrained("./micro_no_cross_fine_tuned/lora") +model.save_pretrained("./micro_no_cross_fine_tuned/lora2") # model.save_adapter('./micro_no_cross_fine_tuned') # Сохраняет адаптеры LoRA print("Все сохранено") @@ -193,6 +195,7 @@ print("Все сохранено") def predict(text): # Токенизация (убедимся, что не передаем labels) + model.eval() inputs = tokenizer( text, return_tensors="pt", diff --git a/checkLora.py b/checkLora.py index f6467ee1ee31aca7b6f709a235c399411e6b1435..f31e1e19d74fd936ef69bb42aae6a3fde17cf8bc 100644 --- a/checkLora.py +++ b/checkLora.py @@ -293,19 +293,29 @@ from transformers import BertTokenizer, BertForSequenceClassification from peft import PeftModel import torch - +from micro_no_cross import MultiTaskBert # Пути к сохранённой модели -BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base" -LORA_PATH = "./micro_no_cross_fine_tuned/lora" +# BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base" +# LORA_PATH = "./micro_no_cross_fine_tuned/lora" + +BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base2" +LORA_PATH = "./micro_no_cross_fine_tuned/lora2" # Загружаем токенизатор -tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned") +tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned2") + +# # Загружаем базовую модель +# base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH) + +# # Загружаем LoRA-адаптацию +# model = PeftModel.from_pretrained(base_model, LORA_PATH) + + + -# Загружаем базовую модель -base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH) +base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device) -# Загружаем LoRA-адаптацию -model = PeftModel.from_pretrained(base_model, LORA_PATH) +model = PeftModel.from_pretrained(base_model, "./micro_no_cross_fine_tuned/lora2", strict=False) # Переводим модель в режим оценки model.eval() diff --git a/micro_no_cross.py b/micro_no_cross.py index 8f77759d3b2438e7f673b462a6e9ce417829cf44..5f951f80358c030a8d26f700c5da12e8e62e725a 100644 --- a/micro_no_cross.py +++ b/micro_no_cross.py @@ -18,14 +18,14 @@ torch.cuda.empty_cache() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # Пути для сохранения токенизированных данных -TOKENIZED_DATA_DIR = "./tokenized_data_micro" +TOKENIZED_DATA_DIR = "./tokenized_data_micro2" TRAIN_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "train") VAL_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "val") TEST_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "test") # Загрузка данных data = pd.read_csv('all_dataset.csv') -data = data.sample(frac=0.1, random_state=42).copy() # Берем 10% случайных данных +data = data.sample(frac=0.05, random_state=42).copy() # Берем 10% случайных данных @@ -103,7 +103,7 @@ class MultiTaskBert(BertPreTrainedModel): # Создание модели base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device) -base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса +base_model.save_pretrained('./micro_no_cross_fine_tuned/base2') # Сохраняет модель и её веса # Настройка LoRA. # Явно исключаем сохранение модулей, не адаптированных LoRA (например, классификаторов), @@ -114,7 +114,9 @@ lora_config = LoraConfig( lora_alpha=32, lora_dropout=0.1, target_modules=["query", "value"], - modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.) + # modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.) + modules_to_save=["classifier_safety", "classifier_attack"] # Явно указываем оба классификатора +) ) model = get_peft_model(base_model, lora_config) @@ -181,9 +183,9 @@ plt.show() # tokenizer.save_pretrained('./fine-tuned-bert-lora_new') # Сохранение модели, адаптеров LoRA и токенизатора # base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса -tokenizer.save_pretrained('./micro_no_cross_fine_tuned') # Сохраняет токенизатор +tokenizer.save_pretrained('./micro_no_cross_fine_tuned2') # Сохраняет токенизатор # model.save_pretrained("./micro_no_cross_fine_tuned") -model.save_pretrained("./micro_no_cross_fine_tuned/lora") +model.save_pretrained("./micro_no_cross_fine_tuned/lora2") # model.save_adapter('./micro_no_cross_fine_tuned') # Сохраняет адаптеры LoRA print("Все сохранено") @@ -193,6 +195,7 @@ print("Все сохранено") def predict(text): # Токенизация (убедимся, что не передаем labels) + model.eval() inputs = tokenizer( text, return_tensors="pt",