File size: 3,942 Bytes
ad56daa
 
 
 
 
32ea2de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad56daa
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
76
77
78
79
80
---
language:
- ru
library_name: peft
---
# Llama 2 13B - GPTQ fine-tuned for arithmetical reasoning task

Based on [Llama 2 13B - GPTQ](https://huggingface.co/TheBloke/Llama-2-13B-GPTQ/tree/gptq-4bit-32g-actorder_True).

This version of the model is adapter-only.

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.

As a demonstration model, it often makes errors in arithmetic and logic, but generally produces results in the correct format.

## How to use this model from Python code

Before running this code, ensure that all necessary software is installed.

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
from peft.peft_model import PeftModel

MODEL_ID = 'TheBloke/Llama-2-13B-GPTQ' # Идентификатор предобученной модели в репозитории huggingface.co
MODEL_REVISION ='gptq-4bit-32g-actorder_True' # Версия модели: ветка репозитория. Указываем, т. к. это не main
LORA_ID = 'obnimorda/llama-2-13b-gptq-ru-sum-odd-lora' # Идентификатор адаптера LoRA в репозитории huggingface.co

# Загрузка предобученной модели
model = AutoModelForCausalLM.from_pretrained(
    MODEL_ID,
    revision=MODEL_REVISION,
    device_map="auto", # Автоматический выбор устройства для загрузки и запуска модели на основе доступности и совместимости
)

# Загрузка адаптера LoRA и его применение к модели, загруженной на предыдущем шаге
model = PeftModel.from_pretrained(
    model,
    LORA_ID
)

# Входные данные
#prompt = "Если сложить нечетные числа этого множества, получится нечетное число: 15, 32, 5, 13, 82, 7, 1.\nОтвет:"
prompt = "Если сложить нечетные числа этого множества, получится нечетное число: 15, 32, 5, 13, 82, 7, 1.\nДля проверки выполните действия по порядку. Сначала найдите все нечетные числа, затем сложите их и определите, четным или нечетным является результат.\n\n"
print('prompt:', prompt)

# Токенизатор для преобразования входных данных и результата генерации: создается из файлов токенизатора, полученных с моделью
tokenizer = AutoTokenizer.from_pretrained(
    MODEL_ID,
    revision=MODEL_REVISION,
    use_fast=False,
    legacy=True,
)

# Токенизация входных данных
input_ids = tokenizer(prompt, return_tensors='pt').input_ids.cuda()

# Конфигурация для генерации последовательности: создается из конфигурационного файла, полученного с моделью
config = GenerationConfig.from_pretrained(
    MODEL_ID,
    revision=MODEL_REVISION,
)

# Установка пользовательских параметров генерации
config.do_sample = True
config.max_new_tokens = 100
config.repetition_penalty = 1.15
config.temperature = 0.7
config.top_k = 20
config.top_p = 1

# Генерация последовательности
output_ids = model.generate(
    inputs=input_ids,
    generation_config=config
)

# Декодирование результата генерации
output = tokenizer.decode(output_ids[0])
print('output:', output)
```