obnimorda's picture
Update README.md
ad56daa
---
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)
```