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 in the Russian guide.
As a demonstration model, it often makes errors in arithmetic and logic, but generally produces results in the correct format.
Before running this code, ensure that all necessary software is installed.
1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2from peft.peft_model import PeftModel
3
4MODEL_ID = 'TheBloke/Llama-2-13B-GPTQ' # Идентификатор предобученной модели в репозитории huggingface.co
5MODEL_REVISION ='gptq-4bit-32g-actorder_True' # Версия модели: ветка репозитория. Указываем, т. к. это не main
6LORA_ID = 'obnimorda/llama-2-13b-gptq-ru-sum-odd-lora' # Идентификатор адаптера LoRA в репозитории huggingface.co
7
8# Загрузка предобученной модели
9model = AutoModelForCausalLM.from_pretrained(
10 MODEL_ID,
11 revision=MODEL_REVISION,
12 device_map="auto", # Автоматический выбор устройства для загрузки и запуска модели на основе доступности и совместимости
13)
14
15# Загрузка адаптера LoRA и его применение к модели, загруженной на предыдущем шаге
16model = PeftModel.from_pretrained(
17 model,
18 LORA_ID
19)
20
21# Входные данные
22#prompt = "Если сложить нечетные числа этого множества, получится нечетное число: 15, 32, 5, 13, 82, 7, 1.\nОтвет:"
23prompt = "Если сложить нечетные числа этого множества, получится нечетное число: 15, 32, 5, 13, 82, 7, 1.\nДля проверки выполните действия по порядку. Сначала найдите все нечетные числа, затем сложите их и определите, четным или нечетным является результат.\n\n"
24print('prompt:', prompt)
25
26# Токенизатор для преобразования входных данных и результата генерации: создается из файлов токенизатора, полученных с моделью
27tokenizer = AutoTokenizer.from_pretrained(
28 MODEL_ID,
29 revision=MODEL_REVISION,
30 use_fast=False,
31 legacy=True,
32)
33
34# Токенизация входных данных
35input_ids = tokenizer(prompt, return_tensors='pt').input_ids.cuda()
36
37# Конфигурация для генерации последовательности: создается из конфигурационного файла, полученного с моделью
38config = GenerationConfig.from_pretrained(
39 MODEL_ID,
40 revision=MODEL_REVISION,
41)
42
43# Установка пользовательских параметров генерации
44config.do_sample = True
45config.max_new_tokens = 100
46config.repetition_penalty = 1.15
47config.temperature = 0.7
48config.top_k = 20
49config.top_p = 1
50
51# Генерация последовательности
52output_ids = model.generate(
53 inputs=input_ids,
54 generation_config=config
55)
56
57# Декодирование результата генерации
58output = tokenizer.decode(output_ids[0])
59print('output:', output)