установка температуры в 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. Однако поведение одинаково для всехtransformers
LLM.
Код
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
===============================================