установка температуры в Open Llama не работает

Я пытаюсь сгенерировать несколько альтернативных продолжений данного приглашения с помощью Open Llama, устанавливая ненулевую температуру:

      import re
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM

model_path = 'openlm-research/open_llama_3b_v2'

tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, device_map='auto')
text  = 'Once upon a time '
text_tokenized_for_llm = tokenizer(text, return_tensors="pt").input_ids
for i in range(25):
  result = model.generate(input_ids=text_tokenized_for_llm, max_new_tokens=6, temperature=2)
  text = tokenizer.decode(result[0])
  print('->' + text + '<-')

Однако когда я запускаю программу, все продолжения остаются прежними:

      -><s>Once upon a time 100 years ago,<-
-><s>Once upon a time 100 years ago,<-
-><s>Once upon a time 100 years ago,<-
(...)

Что здесь не так?

1 ответ

Расследования

Мне кажется, ты просто всегда используешьtemperature=2вместо .

Однако даже при использованииtemperature=iв вашем коде температура не будет применяться. Температура оказывает какое-либо влияние только в том случае, если вы передаете входные данные в модель в режиме выборки. Этого можно добиться, передав еще один параметрdo_sample=Trueк функции моделей.

В вашем конкретном случае вы можете просто добавить этот параметр, напримерresult = model.generate(input_ids=text_tokenized_for_llm, max_new_tokens=6, do_sample=True, temperature=i).

Более того, если вы хотите избежать повышенияValueError: 'temperature' has to be a strictly positive float, but is 2а такжеValueError: 'temperature' has to be a strictly positive float, but is 0.0, вы должны убедиться, что передаете только положительные ненулевые значенияfloatценности. Этого можно добиться, адаптировав свойforинструкцияfor i in range(1, 25):и адаптировав передачу параметров вgenerate(...)кmodel.generate(input_ids=input_ids, max_new_tokens=6, do_sample=True, temperature=float(i)).

Возможное решение

Поэтому, если вы используете код, аналогичный приведенному ниже, все должно работать как положено. Обратите внимание, что я использовал модельmeta-llama/Llama-2-7b-hfвместо этого вам нужно будет запросить доступ у Meta. Однако поведение одинаково для всехtransformersLLM.

Код

      import os
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
from dotenv import load_dotenv

if __name__ == "__main__":
    load_dotenv()

    llm = "meta-llama/Llama-2-7b-hf"
    huggingfacehub_api_key = os.getenv("HUGGINGFACE_API_KEY")

    tokenizer = LlamaTokenizer.from_pretrained(llm, token=huggingfacehub_api_key)
    model = LlamaForCausalLM.from_pretrained(llm, token=huggingfacehub_api_key, device_map="auto",
                                             torch_dtype=torch.float16)
    text = "Once upon a time "
    input_ids = tokenizer(text, return_tensors="pt").input_ids

    for i in range(1, 25):
        result = model.generate(input_ids=input_ids, max_new_tokens=6, do_sample=True, temperature=float(i))
        text = tokenizer.decode(result[0])
        print(text)
        print("===============================================")

Выход

      $ python test.py
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:02<00:00,  1.41s/it]
<s>Once upon a time 5 years ago, a tiny
===============================================
<s>Once upon a time 3d printer in space.
===============================================
<s>Once upon a time � more exactly March and this
===============================================
<s>Once upon a time ........when  a family
===============================================
<s>Once upon a time icy monstrums known just
===============================================
<s>Once upon a time ���로공 (
===============================================
<s>Once upon a time 열사 days and
===============================================
<s>Once upon a time ������
===============================================
<s>Once upon a time  a tiny creature from outa
===============================================
<s>Once upon a time 4-Shox'
===============================================
<s>Once upon a time ��the very concept of��
===============================================
<s>Once upon a time 7 (1 episodes) ,
===============================================
<s>Once upon a time �� (as the say here
===============================================
<s>Once upon a time © Copywriting & Video
===============================================
<s>Once upon a time ñ an evening as clear
===============================================
<s>Once upon a time ≒ The First
===============================================
<s>Once upon a time Nell​ & P
===============================================
<s>Once upon a time  the gods appeared: their great
===============================================
<s>Once upon a time 7 students enbart from
===============================================
<s>Once upon a time 5 and his dog (yes
===============================================
<s>Once upon a time  in Brooklet,Germ
===============================================
<s> Once upon a time ​it started small</s>
===============================================
<s>Once upon a time 튻원동�
===============================================
<s>Once upon a time 09 : one shot special
===============================================
Другие вопросы по тегам