File size: 4,993 Bytes
74bdf8a
ea74241
8f3b0a0
74bdf8a
4d27d91
 
74bdf8a
8f3b0a0
 
 
 
dc9c6a7
8f3b0a0
 
 
 
 
 
 
 
 
4e33931
24ec8dd
8f3b0a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6a17575
8f3b0a0
 
 
 
6a17575
8f3b0a0
 
 
 
6a17575
8f3b0a0
 
 
 
6a17575
8f3b0a0
 
 
 
 
 
6a17575
4e33931
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
---
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