【速写】解码与kv-cache的简单细节

news2025/2/23 5:23:58

问题:在使用transformers调用huggingface生成式模型时,我们可以通过model.generate_ids来获取模型生成的若干id,那么我应该如何查看这些生成id对应的logits大小(即生成概率)

在Hugging Face的Transformers库中,当你使用生成模型(如GPT-2、BERT、XLNet等)的.generate()方法时,默认情况下不会直接返回生成每个token时的logits。但是,你可以通过一些方法来访问这些logits。
以下是你可以采取的步骤来获取生成每个token对应的logits:

  1. 自定义生成函数:使用.generate()方法时,可以传递一个自定义的output_scores=True参数来获取每个生成的token的logits。
    下面是一个例子,展示如何在使用.generate()时获取logits:
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# 加载预训练模型和分词器
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')
# 输入文本
input_text = "The answer to the ultimate question of life, the universe, and everything is"
input_ids = tokenizer.encode(input_text, return_tensors='pt')
# 生成响应
gen_output = model.generate(input_ids, max_length=50, output_scores=True)
# 获取生成的ids和对应的logits
generated_ids = gen_output.sequences
logits = gen_output.scores
# logits是一个列表,其中每个元素是一个形状为[batch_size, vocab_size]的张量,对应于每个生成步骤的logits
# 如果你想查看第一个生成的token的logits:
first_token_logits = logits[0][0]
# 可以将logits转换为概率,使用softmax函数
import torch
probabilities = torch.nn.functional.softmax(first_token_logits, dim=-1)
# 现在你可以查看每个token的概率
print(probabilities)

这里设置max_length=50,因此实际上输出的长度一定只有50,你可以设置地更长,让模型输出更多的tokens

在上面的代码中,logits[0][0]代表第一个生成的token的logits。由于模型可能生成了多个token,logits列表包含了每个生成步骤的logits。
2. 手动进行解码:如果你想要更细致地控制生成过程,可以手动实现解码逻辑,在每一步使用模型的.forward()方法来获取logits,然后根据需要选择下一个token。
这是一个手动解码的简化例子:

input_text = "The answer to the ultimate question of life, the universe, and everything is"
input_ids = tokenizer.encode(input_text, return_tensors='pt')
# 初始化
past = None
for _ in range(50):  # 生成50个token
    outputs = model(input_ids, past_key_values=past)
    next_token_logits = outputs.logits[:, -1, :]
    past = outputs.past_key_values
    
    # 可以在这里应用softmax获取概率
    next_token_probs = torch.nn.functional.softmax(next_token_logits, dim=-1)
    
    # 选择下一个token(例如,选择概率最高的token)
    next_token = torch.argmax(next_token_logits, dim=-1)
    
    # 将选择的token添加到输入序列
    input_ids = torch.cat([input_ids, next_token.unsqueeze(-1)], dim=-1)
    
    # 如果需要输出logits,可以保存起来
    # ...
# 最后,解码生成的ids
generated_text = tokenizer.decode(input_ids[0], skip_special_tokens=True)
print(generated_text)

请注意,在实际使用中,你可能需要考虑更多的因素,比如避免重复生成相同的token、应用温度调节(temperature)、top-k或top-p采样等。
这些步骤将帮助你获取模型在生成每个token时的logits,从而能够进一步分析生成的概率分布。

另外一个细节,通过:

outputs = model.generate(inputs.cuda(), max_length=64, output_scores=True, return_dict_in_generate=True)

即在model.generate方法中添加output_scoresreturn_dict_in_generate两个参数,可以得到

generated_ids = gen_output.sequences
logits = gen_output.scores

两个重要的生成信息

此外,一些重要的信息:

关于past中包含的kv cache,它是一个transformers.cache_utils.DynamicCache对象,然后重要的是past.key_cachepast.value_cache,这两个是两个list,长度等于模型config.json中的num_hidden_layers大小(deepseek的qwen蒸馏系列,1.5B的是28,32B的是64)

key cache和value cache的大小都是一样的:

torch.Size([1, 2, 1643, 128]) torch.Size([1, 2, 1643, 128])

config.json中并没有找到和1643及128相匹配的数字。


服务器启动jupyter

jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root

然后映射到本地即可(服务器端拿token):


勘误,以手动解码为例:

测试脚本:

# Manually decode and see the probability
def demo_4(mid=0):
	from transformers import AutoTokenizer, AutoModelForCausalLM
	import os
	import json
	import torch	

	model_paths = [
		"/data/nishome/wangyinglin/caoyang/DeepSeek-R1-Distill-Qwen-1.5B",
		"/data/nishome/wangyinglin/yangyitong/DeepSeek-R1-Distill-Qwen-32B",
	]
	model_path = model_paths[mid]
	tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
	model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True).cuda()
	
	prompt = "很久很久以前,"
	inputs = tokenizer.encode(prompt, return_tensors="pt").cuda()
	past = None
	for i in range(64):
		outputs = model(inputs, past_key_values=past)
		next_token_logits = outputs.logits[:, -1, :]
		past = outputs.past_key_values
		
		next_token_probs = torch.nn.functional.softmax(next_token_logits, dim=-1)		
		# next_token_id = torch.argmax(next_token_logits, dim=-1)	
		# inputs = torch.cat([inputs, next_token_id.unsqueeze(-1)], dim=-1)

		next_token_ids = torch.topk(next_token_logits, k=2, dim=-1).indices
		# print(inputs.size())
		# print(next_token_ids.size())
		with open(f"logging-{mid}.txt", 'a', encoding="utf8") as f:
			f.write("Round: {}\n".format(i))
			f.write("{}\t{}\n".format(outputs.logits.size(), next_token_logits.size()))
			f.write("{}\t{}\n".format(past.key_cache[0].size(), past.key_cache[-1].size()))
			f.write("{}\t{}\n".format(past.value_cache[0].size(), past.value_cache[-1].size()))
			f.write("{}\t{}\n".format(inputs.size(), next_token_ids.size()))	# [1, 5], [1, 2]
			f.write("--------------------------------------------------------\n")
			
		inputs = torch.cat([inputs, next_token_ids[:, -1].unsqueeze(-1)], dim=-1)
	
	generated_text = tokenizer.decode(inputs[0], skip_special_tokens=True)
	with open("demo4-generate.txt", 'w', encoding="utf8") as f:
		f.write(generated_text)

输出:

Round: 0
torch.Size([1, 5, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 5, 128])	torch.Size([1, 2, 5, 128])
torch.Size([1, 2, 5, 128])	torch.Size([1, 2, 5, 128])
torch.Size([1, 5])	torch.Size([1, 2])
--------------------------------------------------------
Round: 1
torch.Size([1, 6, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 11, 128])	torch.Size([1, 2, 11, 128])
torch.Size([1, 2, 11, 128])	torch.Size([1, 2, 11, 128])
torch.Size([1, 6])	torch.Size([1, 2])
--------------------------------------------------------
Round: 2
torch.Size([1, 7, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 18, 128])	torch.Size([1, 2, 18, 128])
torch.Size([1, 2, 18, 128])	torch.Size([1, 2, 18, 128])
torch.Size([1, 7])	torch.Size([1, 2])
--------------------------------------------------------
Round: 3
torch.Size([1, 8, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 26, 128])	torch.Size([1, 2, 26, 128])
torch.Size([1, 2, 26, 128])	torch.Size([1, 2, 26, 128])
torch.Size([1, 8])	torch.Size([1, 2])
--------------------------------------------------------
Round: 4
torch.Size([1, 9, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 35, 128])	torch.Size([1, 2, 35, 128])
torch.Size([1, 2, 35, 128])	torch.Size([1, 2, 35, 128])
torch.Size([1, 9])	torch.Size([1, 2])
--------------------------------------------------------
Round: 5
torch.Size([1, 10, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 45, 128])	torch.Size([1, 2, 45, 128])
torch.Size([1, 2, 45, 128])	torch.Size([1, 2, 45, 128])
torch.Size([1, 10])	torch.Size([1, 2])
--------------------------------------------------------
Round: 6
torch.Size([1, 11, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 56, 128])	torch.Size([1, 2, 56, 128])
torch.Size([1, 2, 56, 128])	torch.Size([1, 2, 56, 128])
torch.Size([1, 11])	torch.Size([1, 2])
--------------------------------------------------------
Round: 7
torch.Size([1, 12, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 68, 128])	torch.Size([1, 2, 68, 128])
torch.Size([1, 2, 68, 128])	torch.Size([1, 2, 68, 128])
torch.Size([1, 12])	torch.Size([1, 2])
--------------------------------------------------------
Round: 8
torch.Size([1, 13, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 81, 128])	torch.Size([1, 2, 81, 128])
torch.Size([1, 2, 81, 128])	torch.Size([1, 2, 81, 128])
torch.Size([1, 13])	torch.Size([1, 2])
--------------------------------------------------------
Round: 9
torch.Size([1, 14, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 95, 128])	torch.Size([1, 2, 95, 128])
torch.Size([1, 2, 95, 128])	torch.Size([1, 2, 95, 128])
torch.Size([1, 14])	torch.Size([1, 2])
--------------------------------------------------------
Round: 10
torch.Size([1, 15, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 110, 128])	torch.Size([1, 2, 110, 128])
torch.Size([1, 2, 110, 128])	torch.Size([1, 2, 110, 128])
torch.Size([1, 15])	torch.Size([1, 2])
--------------------------------------------------------
Round: 11
torch.Size([1, 16, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 126, 128])	torch.Size([1, 2, 126, 128])
torch.Size([1, 2, 126, 128])	torch.Size([1, 2, 126, 128])
torch.Size([1, 16])	torch.Size([1, 2])
--------------------------------------------------------
Round: 12
torch.Size([1, 17, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 143, 128])	torch.Size([1, 2, 143, 128])
torch.Size([1, 2, 143, 128])	torch.Size([1, 2, 143, 128])
torch.Size([1, 17])	torch.Size([1, 2])
--------------------------------------------------------
Round: 13
torch.Size([1, 18, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 161, 128])	torch.Size([1, 2, 161, 128])
torch.Size([1, 2, 161, 128])	torch.Size([1, 2, 161, 128])
torch.Size([1, 18])	torch.Size([1, 2])
--------------------------------------------------------
Round: 14
torch.Size([1, 19, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 180, 128])	torch.Size([1, 2, 180, 128])
torch.Size([1, 2, 180, 128])	torch.Size([1, 2, 180, 128])
torch.Size([1, 19])	torch.Size([1, 2])
--------------------------------------------------------
Round: 15
torch.Size([1, 20, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 200, 128])	torch.Size([1, 2, 200, 128])
torch.Size([1, 2, 200, 128])	torch.Size([1, 2, 200, 128])
torch.Size([1, 20])	torch.Size([1, 2])
--------------------------------------------------------
Round: 16
torch.Size([1, 21, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 221, 128])	torch.Size([1, 2, 221, 128])
torch.Size([1, 2, 221, 128])	torch.Size([1, 2, 221, 128])
torch.Size([1, 21])	torch.Size([1, 2])
--------------------------------------------------------
Round: 17
torch.Size([1, 22, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 243, 128])	torch.Size([1, 2, 243, 128])
torch.Size([1, 2, 243, 128])	torch.Size([1, 2, 243, 128])
torch.Size([1, 22])	torch.Size([1, 2])
--------------------------------------------------------
Round: 18
torch.Size([1, 23, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 266, 128])	torch.Size([1, 2, 266, 128])
torch.Size([1, 2, 266, 128])	torch.Size([1, 2, 266, 128])
torch.Size([1, 23])	torch.Size([1, 2])
--------------------------------------------------------
Round: 19
torch.Size([1, 24, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 290, 128])	torch.Size([1, 2, 290, 128])
torch.Size([1, 2, 290, 128])	torch.Size([1, 2, 290, 128])
torch.Size([1, 24])	torch.Size([1, 2])
--------------------------------------------------------
Round: 20
torch.Size([1, 25, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 315, 128])	torch.Size([1, 2, 315, 128])
torch.Size([1, 2, 315, 128])	torch.Size([1, 2, 315, 128])
torch.Size([1, 25])	torch.Size([1, 2])
--------------------------------------------------------
Round: 21
torch.Size([1, 26, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 341, 128])	torch.Size([1, 2, 341, 128])
torch.Size([1, 2, 341, 128])	torch.Size([1, 2, 341, 128])
torch.Size([1, 26])	torch.Size([1, 2])
--------------------------------------------------------
Round: 22
torch.Size([1, 27, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 368, 128])	torch.Size([1, 2, 368, 128])
torch.Size([1, 2, 368, 128])	torch.Size([1, 2, 368, 128])
torch.Size([1, 27])	torch.Size([1, 2])
--------------------------------------------------------
Round: 23
torch.Size([1, 28, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 396, 128])	torch.Size([1, 2, 396, 128])
torch.Size([1, 2, 396, 128])	torch.Size([1, 2, 396, 128])
torch.Size([1, 28])	torch.Size([1, 2])
--------------------------------------------------------
Round: 24
torch.Size([1, 29, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 425, 128])	torch.Size([1, 2, 425, 128])
torch.Size([1, 2, 425, 128])	torch.Size([1, 2, 425, 128])
torch.Size([1, 29])	torch.Size([1, 2])
--------------------------------------------------------
Round: 25
torch.Size([1, 30, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 455, 128])	torch.Size([1, 2, 455, 128])
torch.Size([1, 2, 455, 128])	torch.Size([1, 2, 455, 128])
torch.Size([1, 30])	torch.Size([1, 2])
--------------------------------------------------------
Round: 26
torch.Size([1, 31, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 486, 128])	torch.Size([1, 2, 486, 128])
torch.Size([1, 2, 486, 128])	torch.Size([1, 2, 486, 128])
torch.Size([1, 31])	torch.Size([1, 2])
--------------------------------------------------------
Round: 27
torch.Size([1, 32, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 518, 128])	torch.Size([1, 2, 518, 128])
torch.Size([1, 2, 518, 128])	torch.Size([1, 2, 518, 128])
torch.Size([1, 32])	torch.Size([1, 2])
--------------------------------------------------------
Round: 28
torch.Size([1, 33, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 551, 128])	torch.Size([1, 2, 551, 128])
torch.Size([1, 2, 551, 128])	torch.Size([1, 2, 551, 128])
torch.Size([1, 33])	torch.Size([1, 2])
--------------------------------------------------------
Round: 29
torch.Size([1, 34, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 585, 128])	torch.Size([1, 2, 585, 128])
torch.Size([1, 2, 585, 128])	torch.Size([1, 2, 585, 128])
torch.Size([1, 34])	torch.Size([1, 2])
--------------------------------------------------------
Round: 30
torch.Size([1, 35, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 620, 128])	torch.Size([1, 2, 620, 128])
torch.Size([1, 2, 620, 128])	torch.Size([1, 2, 620, 128])
torch.Size([1, 35])	torch.Size([1, 2])
--------------------------------------------------------
Round: 31
torch.Size([1, 36, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 656, 128])	torch.Size([1, 2, 656, 128])
torch.Size([1, 2, 656, 128])	torch.Size([1, 2, 656, 128])
torch.Size([1, 36])	torch.Size([1, 2])
--------------------------------------------------------
Round: 32
torch.Size([1, 37, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 693, 128])	torch.Size([1, 2, 693, 128])
torch.Size([1, 2, 693, 128])	torch.Size([1, 2, 693, 128])
torch.Size([1, 37])	torch.Size([1, 2])
--------------------------------------------------------
Round: 33
torch.Size([1, 38, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 731, 128])	torch.Size([1, 2, 731, 128])
torch.Size([1, 2, 731, 128])	torch.Size([1, 2, 731, 128])
torch.Size([1, 38])	torch.Size([1, 2])
--------------------------------------------------------
Round: 34
torch.Size([1, 39, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 770, 128])	torch.Size([1, 2, 770, 128])
torch.Size([1, 2, 770, 128])	torch.Size([1, 2, 770, 128])
torch.Size([1, 39])	torch.Size([1, 2])
--------------------------------------------------------
Round: 35
torch.Size([1, 40, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 810, 128])	torch.Size([1, 2, 810, 128])
torch.Size([1, 2, 810, 128])	torch.Size([1, 2, 810, 128])
torch.Size([1, 40])	torch.Size([1, 2])
--------------------------------------------------------
Round: 36
torch.Size([1, 41, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 851, 128])	torch.Size([1, 2, 851, 128])
torch.Size([1, 2, 851, 128])	torch.Size([1, 2, 851, 128])
torch.Size([1, 41])	torch.Size([1, 2])
--------------------------------------------------------
Round: 37
torch.Size([1, 42, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 893, 128])	torch.Size([1, 2, 893, 128])
torch.Size([1, 2, 893, 128])	torch.Size([1, 2, 893, 128])
torch.Size([1, 42])	torch.Size([1, 2])
--------------------------------------------------------
Round: 38
torch.Size([1, 43, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 936, 128])	torch.Size([1, 2, 936, 128])
torch.Size([1, 2, 936, 128])	torch.Size([1, 2, 936, 128])
torch.Size([1, 43])	torch.Size([1, 2])
--------------------------------------------------------
Round: 39
torch.Size([1, 44, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 980, 128])	torch.Size([1, 2, 980, 128])
torch.Size([1, 2, 980, 128])	torch.Size([1, 2, 980, 128])
torch.Size([1, 44])	torch.Size([1, 2])
--------------------------------------------------------
Round: 40
torch.Size([1, 45, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1025, 128])	torch.Size([1, 2, 1025, 128])
torch.Size([1, 2, 1025, 128])	torch.Size([1, 2, 1025, 128])
torch.Size([1, 45])	torch.Size([1, 2])
--------------------------------------------------------
Round: 41
torch.Size([1, 46, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1071, 128])	torch.Size([1, 2, 1071, 128])
torch.Size([1, 2, 1071, 128])	torch.Size([1, 2, 1071, 128])
torch.Size([1, 46])	torch.Size([1, 2])
--------------------------------------------------------
Round: 42
torch.Size([1, 47, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1118, 128])	torch.Size([1, 2, 1118, 128])
torch.Size([1, 2, 1118, 128])	torch.Size([1, 2, 1118, 128])
torch.Size([1, 47])	torch.Size([1, 2])
--------------------------------------------------------
Round: 43
torch.Size([1, 48, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1166, 128])	torch.Size([1, 2, 1166, 128])
torch.Size([1, 2, 1166, 128])	torch.Size([1, 2, 1166, 128])
torch.Size([1, 48])	torch.Size([1, 2])
--------------------------------------------------------
Round: 44
torch.Size([1, 49, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1215, 128])	torch.Size([1, 2, 1215, 128])
torch.Size([1, 2, 1215, 128])	torch.Size([1, 2, 1215, 128])
torch.Size([1, 49])	torch.Size([1, 2])
--------------------------------------------------------
Round: 45
torch.Size([1, 50, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1265, 128])	torch.Size([1, 2, 1265, 128])
torch.Size([1, 2, 1265, 128])	torch.Size([1, 2, 1265, 128])
torch.Size([1, 50])	torch.Size([1, 2])
--------------------------------------------------------
Round: 46
torch.Size([1, 51, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1316, 128])	torch.Size([1, 2, 1316, 128])
torch.Size([1, 2, 1316, 128])	torch.Size([1, 2, 1316, 128])
torch.Size([1, 51])	torch.Size([1, 2])
--------------------------------------------------------
Round: 47
torch.Size([1, 52, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1368, 128])	torch.Size([1, 2, 1368, 128])
torch.Size([1, 2, 1368, 128])	torch.Size([1, 2, 1368, 128])
torch.Size([1, 52])	torch.Size([1, 2])
--------------------------------------------------------
Round: 48
torch.Size([1, 53, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1421, 128])	torch.Size([1, 2, 1421, 128])
torch.Size([1, 2, 1421, 128])	torch.Size([1, 2, 1421, 128])
torch.Size([1, 53])	torch.Size([1, 2])
--------------------------------------------------------
Round: 49
torch.Size([1, 54, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1475, 128])	torch.Size([1, 2, 1475, 128])
torch.Size([1, 2, 1475, 128])	torch.Size([1, 2, 1475, 128])
torch.Size([1, 54])	torch.Size([1, 2])
--------------------------------------------------------
Round: 50
torch.Size([1, 55, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1530, 128])	torch.Size([1, 2, 1530, 128])
torch.Size([1, 2, 1530, 128])	torch.Size([1, 2, 1530, 128])
torch.Size([1, 55])	torch.Size([1, 2])
--------------------------------------------------------
Round: 51
torch.Size([1, 56, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1586, 128])	torch.Size([1, 2, 1586, 128])
torch.Size([1, 2, 1586, 128])	torch.Size([1, 2, 1586, 128])
torch.Size([1, 56])	torch.Size([1, 2])
--------------------------------------------------------
Round: 52
torch.Size([1, 57, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1643, 128])	torch.Size([1, 2, 1643, 128])
torch.Size([1, 2, 1643, 128])	torch.Size([1, 2, 1643, 128])
torch.Size([1, 57])	torch.Size([1, 2])
--------------------------------------------------------
Round: 53
torch.Size([1, 58, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1701, 128])	torch.Size([1, 2, 1701, 128])
torch.Size([1, 2, 1701, 128])	torch.Size([1, 2, 1701, 128])
torch.Size([1, 58])	torch.Size([1, 2])
--------------------------------------------------------
Round: 54
torch.Size([1, 59, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1760, 128])	torch.Size([1, 2, 1760, 128])
torch.Size([1, 2, 1760, 128])	torch.Size([1, 2, 1760, 128])
torch.Size([1, 59])	torch.Size([1, 2])
--------------------------------------------------------
Round: 55
torch.Size([1, 60, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1820, 128])	torch.Size([1, 2, 1820, 128])
torch.Size([1, 2, 1820, 128])	torch.Size([1, 2, 1820, 128])
torch.Size([1, 60])	torch.Size([1, 2])
--------------------------------------------------------
Round: 56
torch.Size([1, 61, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1881, 128])	torch.Size([1, 2, 1881, 128])
torch.Size([1, 2, 1881, 128])	torch.Size([1, 2, 1881, 128])
torch.Size([1, 61])	torch.Size([1, 2])
--------------------------------------------------------
Round: 57
torch.Size([1, 62, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 1943, 128])	torch.Size([1, 2, 1943, 128])
torch.Size([1, 2, 1943, 128])	torch.Size([1, 2, 1943, 128])
torch.Size([1, 62])	torch.Size([1, 2])
--------------------------------------------------------
Round: 58
torch.Size([1, 63, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 2006, 128])	torch.Size([1, 2, 2006, 128])
torch.Size([1, 2, 2006, 128])	torch.Size([1, 2, 2006, 128])
torch.Size([1, 63])	torch.Size([1, 2])
--------------------------------------------------------
Round: 59
torch.Size([1, 64, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 2070, 128])	torch.Size([1, 2, 2070, 128])
torch.Size([1, 2, 2070, 128])	torch.Size([1, 2, 2070, 128])
torch.Size([1, 64])	torch.Size([1, 2])
--------------------------------------------------------
Round: 60
torch.Size([1, 65, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 2135, 128])	torch.Size([1, 2, 2135, 128])
torch.Size([1, 2, 2135, 128])	torch.Size([1, 2, 2135, 128])
torch.Size([1, 65])	torch.Size([1, 2])
--------------------------------------------------------
Round: 61
torch.Size([1, 66, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 2201, 128])	torch.Size([1, 2, 2201, 128])
torch.Size([1, 2, 2201, 128])	torch.Size([1, 2, 2201, 128])
torch.Size([1, 66])	torch.Size([1, 2])
--------------------------------------------------------
Round: 62
torch.Size([1, 67, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 2268, 128])	torch.Size([1, 2, 2268, 128])
torch.Size([1, 2, 2268, 128])	torch.Size([1, 2, 2268, 128])
torch.Size([1, 67])	torch.Size([1, 2])
--------------------------------------------------------
Round: 63
torch.Size([1, 68, 151936])	torch.Size([1, 151936])
torch.Size([1, 2, 2336, 128])	torch.Size([1, 2, 2336, 128])
torch.Size([1, 2, 2336, 128])	torch.Size([1, 2, 2336, 128])
torch.Size([1, 68])	torch.Size([1, 2])
--------------------------------------------------------

这个outputs.logits是逐步升高的,然后kvcache的第3个维度的数值的差值是一个等差数列,从5=>11=>18=>26,以此类推,当次增加的数值恰好是当次的n_token数量,即恰好是按照一个下三角矩阵的累计数量一步步增加的,符合kvcache的逻辑,这样看,最后一个128就是某一层的hidden_size了

至于第k轮的输出,kvcache的第3维就是n + (n + 1) + (n + 2) + … + (n + k)=(k+1)n + k(k+1)/2,这里n=5,k=63,结果刚好就是2336,符合预期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自学Java-AI结合GUI开发一个石头迷阵的游戏

自学Java-AI结合GUI开发一个石头迷阵的游戏 准备环节1、创建石头迷阵的界面2、打乱顺序3、控制上下左右移动4、判断是否通关5、统计移动步骤,重启游戏6、拓展问题 准备环节 技术: 1、GUI界面编程 2、二维数组 3、程序流程控制 4、面向对象编程 ∙ \bulle…

Liunx(CentOS-6-x86_64)系统安装MySql(5.6.50)

一:安装Liunx(CentOS-6-x86_64) 安装Liunx(CentOS-6-x86_64) 二:下载MySql(5.6.50) MySql下载官网 二:安装MySql 2.1 将mysql上传到Liunx 文件地址 /usr/local/ 2…

Java Web开发实战与项目——开发一个在线论坛系统

在线论坛系统是一个常见的Web应用,通常具有用户注册、帖子发布、评论互动、消息推送等基本功能。开发这样一个系统,既涉及到前后端的技术栈选择,也需要考虑性能、扩展性等实际问题。本文将从设计论坛模块、实现消息推送与实时更新功能、以及优…

ubuntu24.04无法安装向日葵,提示依赖libgconf-2-4怎么办?

在向日葵官方下载的deb包&#xff0c;目前是SunloginClient_15.2.0.63062_amd64.deb&#xff0c;执行安装代码&#xff0c;如下&#xff1a; sudo < /span > dpkg< /span > -i< /span > SunloginClient_15< /span >.2< /span >.0< /span >…

Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…

WPF的页面设计和实用功能实现

目录 一、TextBlock和TextBox 1. 在TextBlock中实时显示当前时间 二、ListView 1.ListView显示数据 三、ComboBox 1. ComboBox和CheckBox组合实现下拉框多选 四、Button 1. 设计Button按钮的边框为圆角&#xff0c;并对指针悬停时的颜色进行设置 一、TextBlock和TextBox…

window安装MySQL5.7

1、下载MySQL5.7.24 浏览器打开&#xff1a; https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 2、解压缩 下载下来的是一个压缩包&#xff0c;解压到你想放到的目录下面&#xff0c;我放的是“C:\MySQL” 3、配置MySQL环境变量 计算机右键 - 属性 …

数据结构:哈希表(二)

目录 一、哈希表 1、概念 二、哈希冲突 1、概念 2、冲突避免 &#xff08;1&#xff09;哈希函数设计 &#xff08;2&#xff09;负载因子调节 3、冲突解决 &#xff08;1&#xff09;闭散列 1、线性探测 2、二次探测 &#xff08;2&#xff09;开散列 4、哈希桶实…

blender笔记2

一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式&#xff1a;反方&#xff0c;相对于&#xff1a;场景原点&#xff0c;对齐&#xff1a;z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后&#xff0c;物体面有阴影。 数据-&g…

1.21作业

1 unserialize3 当序列化字符串中属性个数大于实际属性个数时&#xff0c;不会执行反序列化 外部如果是unserialize&#xff08;&#xff09;会调用wakeup&#xff08;&#xff09;方法&#xff0c;输出“bad request”——构造url绕过wakeup 类型&#xff1a;public class&…

【Quest开发】全身跟踪(一)

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最终效果&#xff1a;能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势&#xff0c;实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …

最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程

ExoPlayer 是一个开源的 Android 媒体播放库&#xff0c;由 Google 开发和维护&#xff0c;用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性&#xff0c;适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…

JS:页面事件

文章目录 一、页面加载事件二、页面滚动事件三、页面尺寸事件总结 一、页面加载事件 有时候我们会把script的内容放在body前&#xff0c;这时候代码的执行在元素的加载之前&#xff0c;会导致页面元素未加载而报错 解决办法是调用Window的load加载事件&#xff0c;将所有操作放…

vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive

keepalive没有效果&#xff0c;无法缓存页面&#xff1f; 问题大概是组件的name值不对应&#xff0c;vue2修改组件文件的name值&#xff0c;vue3保持组件文件名称和路由页面配置的name一致就可以了&#xff0c;如果vue3不想保持一致&#xff0c;必须手动在文件后面添加export..…

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…

纯手工搭建整套CI/CD流水线指南

目录 一、前言 二、环境准备 1、服务器开荒&#xff08;192.168.1.200&#xff09; 2、离线资源清单&#xff08;提前用U盘拷好&#xff09; 三、硬核安装&#xff1a;比拧螺丝还细的步骤 Step1&#xff1a;搭建GitLab&#xff08;注意&#xff01;这是只内存饕餮&#xf…

智能硬件新时代,EasyRTC开启物联音视频新纪元

在万物互联的时代浪潮中&#xff0c;智能硬件正以前所未有的速度融入我们的生活&#xff0c;从智能家居的便捷控制&#xff0c;到智能穿戴设备的健康监测&#xff0c;再到工业物联网的高效管理&#xff0c;智能硬件的应用场景不断拓展。而在这个智能硬件蓬勃发展的背后&#xf…

Rust编程语言入门教程(八)所有权 Stack vs Heap

Rust 系列 &#x1f380;Rust编程语言入门教程&#xff08;一&#xff09;安装Rust&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;二&#xff09;hello_world&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;三&#xff09; Hello Cargo&#x1f…

交易所开发:数字市场的核心动力

数字资产交易所作为连接用户与市场的核心枢纽&#xff0c;已成为推动数字经济发展的关键引擎。其开发不仅需要技术创新&#xff0c;还需兼顾用户体验、合规安全与生态构建&#xff0c;以下是交易所开发的核心要素与实践路径分析&#xff1a; 一、交易所的核心定位与技术架构…

Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?

问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…