Add README.md
Browse files
README.md
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Llama 2 13B - GPTQ fine-tuned for arithmetical reasoning task
|
2 |
+
|
3 |
+
Based on [Llama 2 13B - GPTQ](https://huggingface.co/TheBloke/Llama-2-13B-GPTQ/tree/gptq-4bit-32g-actorder_True).
|
4 |
+
|
5 |
+
This version of the model is adapter-only.
|
6 |
+
|
7 |
+
Llama 2 13B has been fine-tuned for a specific task: to check if the sum of odd numbers from a certain group results in an even total. This fine-tuning aims to illustrate the [example](https://obnimorda.ru/guides/prompt/introduction/examples/#задачи-на-логику) in the Russian guide.
|
8 |
+
|
9 |
+
As a demonstration model, it often makes errors in arithmetic and logic, but generally produces results in the correct format.
|
10 |
+
|
11 |
+
## How to use this model from Python code
|
12 |
+
|
13 |
+
Before running this code, ensure that all necessary software is installed.
|
14 |
+
|
15 |
+
```python
|
16 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
17 |
+
from peft.peft_model import PeftModel
|
18 |
+
|
19 |
+
MODEL_ID = 'TheBloke/Llama-2-13B-GPTQ' # Идентификатор предобученной модели в репозитории huggingface.co
|
20 |
+
MODEL_REVISION ='gptq-4bit-32g-actorder_True' # Версия модели: ветка репозитория. Указываем, т. к. это не main
|
21 |
+
LORA_ID = 'obnimorda/llama-2-13b-gptq-ru-sum-odd-lora' # Идентификатор адаптера LoRA в репозитории huggingface.co
|
22 |
+
|
23 |
+
# Загрузка предобученной модели
|
24 |
+
model = AutoModelForCausalLM.from_pretrained(
|
25 |
+
MODEL_ID,
|
26 |
+
revision=MODEL_REVISION,
|
27 |
+
device_map="auto", # Автоматический выбор устройства для загрузки и запуска модели на основе доступности и совместимости
|
28 |
+
)
|
29 |
+
|
30 |
+
# Загрузка адаптера LoRA и его применение к модели, загруженной на предыдущем шаге
|
31 |
+
model = PeftModel.from_pretrained(
|
32 |
+
model,
|
33 |
+
LORA_ID
|
34 |
+
)
|
35 |
+
|
36 |
+
# Входные данные
|
37 |
+
#prompt = "Если сложить нечетные числа этого множества, получится нечетное число: 15, 32, 5, 13, 82, 7, 1.\nОтвет:"
|
38 |
+
prompt = "Если сложить нечетные числа этого множества, получится нечетное число: 15, 32, 5, 13, 82, 7, 1.\nДля проверки выполните действия по порядку. Сначала найдите все нечетные числа, затем сложите их и определите, четным или нечетным является результат.\n\n"
|
39 |
+
print('prompt:', prompt)
|
40 |
+
|
41 |
+
# Токенизатор для преобразования входных данных и результата генерации: создается из файлов токенизатора, полученных с моделью
|
42 |
+
tokenizer = AutoTokenizer.from_pretrained(
|
43 |
+
MODEL_ID,
|
44 |
+
revision=MODEL_REVISION,
|
45 |
+
use_fast=False,
|
46 |
+
legacy=True,
|
47 |
+
)
|
48 |
+
|
49 |
+
# Токенизация входных данных
|
50 |
+
input_ids = tokenizer(prompt, return_tensors='pt').input_ids.cuda()
|
51 |
+
|
52 |
+
# Конфигурация для генерации последовательности: создается из конфигурационного файла, полученного с моделью
|
53 |
+
config = GenerationConfig.from_pretrained(
|
54 |
+
MODEL_ID,
|
55 |
+
revision=MODEL_REVISION,
|
56 |
+
)
|
57 |
+
|
58 |
+
# Установка пользовательских параметров генерации
|
59 |
+
config.do_sample = True
|
60 |
+
config.max_new_tokens = 100
|
61 |
+
config.repetition_penalty = 1.15
|
62 |
+
config.temperature = 0.7
|
63 |
+
config.top_k = 20
|
64 |
+
config.top_p = 1
|
65 |
+
|
66 |
+
# Генерация последовательности
|
67 |
+
output_ids = model.generate(
|
68 |
+
inputs=input_ids,
|
69 |
+
generation_config=config
|
70 |
+
)
|
71 |
+
|
72 |
+
# Декодирование результата генерации
|
73 |
+
output = tokenizer.decode(output_ids[0])
|
74 |
+
print('output:', output)
|
75 |
+
```
|