Как обучать лору?

#2
by rkfg - opened

Я перепробовал разные варианты в oobabooga, с monkey patch и без, модель загружается только через AutoGPTQ, но при обучении лоры происходит ошибка: ValueError: Target modules [‘q_proj’, ‘v_proj’] not found in the base model. Please check the target modules and try again.. При этом, лоры на LLaMA обучать получалось, но тут модель другой архитектуры, GPT-2 (хотя модель и называется GPT-3.5), что, видимо, и вызывает ошибку. Информацию по обучению именно лоры тоже найти не удалось, есть полный файнтюнинг, но тоже для старых GPT-3 (или 2, мутно у них с этим как-то). Или есть отдельные скрипты для этого?

Для старта можно взять:

https://github.com/qwopqwop200/gptqlora

Но он немножко кривой и нужно использовать PEFT версии 0.4.0, в свежей поломали для GPT2
pip install peft==0.4.0

Возможно PEFT 0.4.0 и для ooaboga подойдёт

Спасибо! Получилось запустить обучение через oobabooga на вашей модели zlsl/l_erotic_kink_chat, загрузив её через Transformers, проблема проявлялась на fffrrt/ruGPT-3.5-13B-GPTQ — видимо, там как-то иначе квантизовано (она загружается только через AutoGPTQ). Попробую ещё iashchak/ruGPT-3.5-13B-gptq-4bits.

А какую вы базовую модель использовали для обучения? Пробую разные, везде какие-то нюансы. Хотелось бы 4-битную ruGPT-3.5, которую можно загрузить для обучения лоры, gptqlora не может загрузить ничего, не находит некие файлы (где-то конфиг квантизации, а где-то вообще без уточнений). У меня 3090 Ti с 24 Гб, так что только квантизованные могут использовать, больше ничего не влезет.

Обучаю на 4-bit GPTQ, нужно токенизер подкинуть, если его там нет, также base_model нужно указать, либо симлинк сделать pytorch_model.bin
Модель ruGPT-3.5-13B-GPTQ

А можно полную команду для запуска? Вот у меня есть скачанная fffrrt_ruGPT-3.5-13B-GPTQ, делаю python gptqlora.py --model_path fffrrt_ruGPT-3.5-13B-GPTQ, результат:

Traceback (most recent call last):
  File "/mnt/2Tb/gptqlora/gptqlora.py", line 792, in <module>
    train()
  File "/mnt/2Tb/gptqlora/gptqlora.py", line 601, in train
    model = get_accelerate_model(args, checkpoint_dir)
  File "/mnt/2Tb/gptqlora/gptqlora.py", line 282, in get_accelerate_model
    model = AutoGPTQForCausalLM.from_quantized(
  File "/mnt/2Tb/textgen/lib/python3.10/site-packages/auto_gptq/modeling/auto.py", line 108, in from_quantized
    return quant_func(
  File "/mnt/2Tb/textgen/lib/python3.10/site-packages/auto_gptq/modeling/_base.py", line 791, in from_quantized
    raise FileNotFoundError(f"Could not find model in {model_name_or_path}")
FileNotFoundError: Could not find model in fffrrt_ruGPT-3.5-13B-GPTQ

Пробую другую модель: python gptqlora.py --model_path iashchak_ruGPT-3.5-13B-gptq-4bits (там не хватало quantize_config.json, скопировал из предыдущей), результат идентичный тому, что выше. Не пойму, что именно ему надо.

Так, какой-то прогресс есть с iashchak_ruGPT-3.5-13B-gptq-4bits — в quantize_config.json прописал "model_file_base_name": "pytorch_model", с fffrrt_ruGPT-3.5-13B-GPTQ решается добавлением use_safetensors=True, в параметры AutoGPTQForCausalLM.from_quantized (в этом случае не надо менять quantize_config.json), но при этом перестаёт работать первая модель — видимо, надо это делать параметром командной строки, автор поленился...

Загрузил модифицированный _gptqlora.py

В src - исходная модель
В src_lora можно положить LoRA для продолжения тренировки

python _gptqlora.py
--cache_dir .cache
--logging_dir $RUN_NAME
--model_path src
--dataset dataset
--output_dir "$LORA_NAME"
--overwrite_output_dir True
--do_train
--num_train_epochs 3
--report_to tensorboard
--save_total_limit 8
--per_device_train_batch_size "$BATCH_SIZE"
--num_train_epochs 1
--log_level detail
--logging_strategy steps
--logging_first_step
--logging_steps 2
--save_steps "$SAVE_STEPS"
--save_safetensors
--gradient_checkpointing True
--gradient_accumulation_steps "$GAS"
--lora_r "$RANK"
--lora_alpha "$ALPHA"
--lora_dropout "$DROPOUT"
--learning_rate "$LR"
--adam8bit
--max_steps "$MAX_STEPS" \

для обучения - dataset.json с полями input, output

Большое спасибо! Попробую.

--adam8bit
если памяти много можно убрать

Sign up or log in to comment