|
--- |
|
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) |
|
``` |