我面临 Llama 2-7B 模型的问题,即输出始终仅限于 511 个代币,尽管该模型理论上应该能够产生最多 4096 个代币的输出。
我尝试将 max_tokens 参数设置为更高的值,例如 3000,并通过从模型的总令牌限制(4096 个令牌)中减去提示令牌来计算可用令牌。然而,尽管进行了这些调整,我仍然收到上限为 511 个代币的输出。
这是我用来与模型交互的代码片段:
导入psutil 导入操作系统 进口警告 从 llama_cpp 导入 Llama
warnings.filterwarnings(“忽略”)
model_path =“C:/Llama_project/models/llama-2-7b-chat.Q2_K.gguf”
llm = 骆驼(模型路径=模型路径)
system_message =“你是一个有用的助手。”
def ask_question(问题): # 使用用户输入作为问题提示 提示= f“回答以下问题:{问题}”
# Calculate the remaining tokens for output based on the model's 4096 token limit
prompt_tokens = len(prompt.split()) # Rough token count estimate
max_output_tokens = 4096 - prompt_tokens # Tokens left for output
# Monitor memory usage before calling the model
process = psutil.Process(os.getpid())
mem_before = process.memory_info().rss / 1024 ** 2 # Memory in MB
# Get the output from the model with the calculated max tokens for output
output = llm(prompt=prompt, max_tokens=max_output_tokens, temperature=0.7, top_p=1.0)
# Monitor memory usage after calling the model
mem_after = process.memory_info().rss / 1024 ** 2 # Memory in MB
# Clean the output and return only the answer text
return output["choices"][0]["text"].strip()
虽然正确: user_input = input("提出问题(或输入'exit'退出):")
if user_input.lower() == 'exit':
print("Exiting the program.")
break
# Get the model's response
answer = ask_question(user_input)
# Print only the answer
print(f"Answer: {answer}")
问题详情: 型号:Llama 2-7B(Q2_K版) 预期输出:我期待接近最大令牌限制(3000 或更多令牌)的响应。 实际输出:无论提示长度如何,输出上限为 511 个标记。 尝试过: 将 max_tokens 设置为 3000 或更高。 通过从模型的总令牌限制中减去提示长度来计算可用令牌。
我的期望: 我希望模型生成接近令牌限制的响应(理想情况下接近 3000 个令牌或更多,具体取决于输入),但它始终生成限制为 511 个令牌的输出。
尝试在 Llama 构造函数中将 n_ctx 添加到 2048,所以:
Llama(n_ctx=2048, model_path=model_path)
此参数告诉模型提示和响应组合的最大长度是多少。