Я использую модель Llama-2-7b-hf с функцией model.generate
из библиотеки преобразователей (v4.38.2), и она возвращает выходные данные в виде одного тензора вместо ожидаемого ModelOutput.
У меня есть копия модели, хранящаяся локально:
[Llama-2-7b-hf]$ ls -1
config.json
generation_config.json
LICENSE.txt
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
model.safetensors.index.json
README.md
Responsible-Use-Guide.pdf
special_tokens_map.json
tokenizer_config.json
tokenizer.json
tokenizer.model
USE_POLICY.md
Это код, в котором модель инициализируется, а затем вызывается:
model_path = "Llama-2-7b-hf"
model = AutoModelForCausalLM.from_pretrained(model_path, return_dict_in_generate=True, local_files_only=True).to(device)
tokenizer = AutoTokenizer.from_pretrained(engine, local_files_only=True)
input_ids = tokenizer(model_path, return_tensors = "pt").input_ids.to(device)
outputs = model.generate(input_ids, top_k=1, max_length=max_len, num_return_sequences=1, output_scores=True)
sequences, scores = outputs.sequences, outputs.scores
Я использовал этот код с несколькими другими моделями, такими как Mistral и Occiglot, и они возвращают объекты ModelOutput с этими атрибутами sequences
и scores
, но не Llama. Может ли кто-нибудь помочь мне понять, что не так?
Мне удалось решить эту проблему, передав параметры return_dict_in_generate
и output_scores
при вызове model.generate
вместо инициализации модели.
model = AutoModelForCausalLM.from_pretrained(engine, local_files_only=True).to(device)
outputs = model.generate(input_ids, top_k=1, max_length=max_len, num_return_sequences=1, output_scores=True, return_dict_in_generate=True)