--- license: cc-by-4.0 library_name: peft base_model: Sao10K/L3-8B-Stheno-v3.1 language: - en --- ## Overview: 8-bit LoRA адаптер для модели Llama-3-8B, в первую очередь призванный расширить знания модели о вселенной MLP:FiM для последующих консультаций/написания фанатских историй/ролевых игр. В качестве данных для обучения использовались как сухие факты из Fandom wiki, так и каноничные фанатские произведения, раскрывающие вселенную вглубь. Я бы рискнул сказать, что это первый адаптер в открытом доступе на Hugging Face, который я смог найти для современной языковой модели. Я слышал о адаптерах для GPT-J, но это откровенно устаревшая архитектура. !(https://huggingface.co/secretmoon/LoRA-Llama-3-MLP/blob/main/profile.webp?) ## Base model Базовой моделью для этого адаптера является Sao10K/L3-8B-Stheno-v3.1, я нашёл эту модель отличным файнтюном базовой Llama-3-8B, умеющим писать истории и отыгрывать ролевые игры, а также не отупевшим вследствие дообучения. ## Training details: Dataset: 1. Очищенная копия MLP Fandom Wiki с вырезанной информацией о последних и сторонних проектах, кроме MLP:FiM. (Alpaca) 2. Около 100 специально отсортированных фанатских историй с FiMFiction. (RAW text) 3. Некоторые дополнительные данные, обучающие модель быть личным ассистентом и более внимательно работать с эмоциями пользователя. (Alpaca) Training duration: 3 hours Hardware: 1 x NVIDIA RTX A6000 48GB PEFT type: LoRA 8-bit Sequence Length: 6144 batch size: 2 num_epochs: 3 optimizer: adamw_bnb_8bit lr_scheduler: cosine learning_rate: 0.00033 lora_r: 256 sample_packing: true lora_target_linear: true ## How to use: Вы можете применить адаптер к оригинальным Safetensors весам модели и загрузить её через Transformers, либо вы можете слить этот адаптер с этими весами и преобразовать в f16 .gguf для последующего использования в llama.cpp. Я не стал загружать готовую модель, потому что не уверен каким должен быть оптимальный LoRA alpha (влияние адаптера на модель alpha/rank) для лучшего результата. Вот общие рекомендации. LoRA alpha: 16 - низкое значение, не оказывающее сильного влияния 32 - предположительно оптимальное значение (рекомендуется) 64 - высокое значение, значительно влияющее на поведение модели. 128 - очень высокое значение, существенно меняющее поведение языковой модели (не рекомендуется) Этот параметр можно изменить в adapter_config.json, его можно дифференцировать между этими значениями, например я сливал адаптер с базовой моделью со значением LoRA alpha=40. ''' from transformers import AutoModelForCausalLM, AutoTokenizer import torch from peft import PeftModel, PeftConfig #Load the base Llama-3-8B fine-tuned model and tokenizer base_model_name = "Sao10K/L3-8B-Stheno-v3.1" tokenizer = AutoTokenizer.from_pretrained(base_model_name) base_model = AutoModelForCausalLM.from_pretrained(base_model_name) #Load the Nocturne-MLP:FiM adapter adapter_name = "secretmoon/LoRA-Llama-3-MLP" config = PeftConfig.from_pretrained(adapter_name) adapter_model = PeftModel.from_pretrained(base_model, config) #Example usage input_text = "Tell me about abandoned castle in Everfree forest." inputs = tokenizer(input_text, return_tensors="pt") outputs = adapter_model.generate(**inputs, max_length=300) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ''' Merge: 1. axolotl (https://github.com/OpenAccess-AI-Collective/axolotl) python3 -m axolotl.cli.merge_lora lora.yml --lora_model_dir="./completed-model" 2. Преобразование в адаптер для gguf in OLD llama.cpp python3 convert-lora-to-ggml.py /path/to/lora/adapter