Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

判断条件的依据 #17

Open
exectrl opened this issue Jul 12, 2024 · 3 comments
Open

判断条件的依据 #17

exectrl opened this issue Jul 12, 2024 · 3 comments

Comments

@exectrl
Copy link

exectrl commented Jul 12, 2024

感谢您分享的代码,请问在pyramidkv_utils.py中的
elif q_len < (self.max_capacity_prompt - self.window_size) * 2: indices = attn_cache.topk(self.max_capacity_prompt - self.window_size, dim=-1).indices
选用这个判断条件的依据是什么?还有后面的else: indices = attn_cache.topk(max_capacity_prompt, dim=-1).indices。希望获取作者解答,感谢!

@Zefan-Cai
Copy link
Owner

在PyramidKV的做法下,最底层的kv cache budget就是接近(self.max_capacity_prompt - self.window_size) * 2。如果q_len小于(self.max_capacity_prompt - self.window_size) * 2,那么在最底层budget会大于q_len,所以就加入了这个判断条件防止报错,在这个条件下动态调整budget不生效。后面else如果生效的话,动态调整budget就会生效

@exectrl
Copy link
Author

exectrl commented Jul 14, 2024

在PyramidKV的做法下,最底层的kv cache budget就是接近(self.max_capacity_prompt - self.window_size) * 2。如果q_len小于(self.max_capacity_prompt - self.window_size) * 2,那么在最底层budget会大于q_len,所以就加入了这个判断条件防止报错,在这个条件下动态调整budget不生效。后面else如果生效的话,动态调整budget就会生效

非常感谢您的及时回复!还有一个问题想要请教一下:if key_states.shape[-2] == kv_seq_len:
self.kv_seq_len = kv_seq_len
key_states_compress, value_states_compress = self.kv_cluster.update_kv(key_states, query_states, value_states, attention_mask, self.num_key_value_groups)
past_key_value.update(key_states_compress, value_states_compress, self.layer_idx, cache_kwargs)
else:
self.kv_seq_len += q_len
key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs)。在上述代码中,为什么if里面的past_key_value.update没有返回值呢?我去看了cache_util.py的源码是有return的啊,这个还挺困惑的。

@Zefan-Cai
Copy link
Owner

在PyramidKV的做法下,最底层的kv cache budget就是接近(self.max_capacity_prompt - self.window_size) * 2。如果q_len小于(self.max_capacity_prompt - self.window_size) * 2,那么在最底层budget会大于q_len,所以就加入了这个判断条件防止报错,在这个条件下动态调整budget不生效。后面else如果生效的话,动态调整budget就会生效

非常感谢您的及时回复!还有一个问题想要请教一下:if key_states.shape[-2] == kv_seq_len: self.kv_seq_len = kv_seq_len key_states_compress, value_states_compress = self.kv_cluster.update_kv(key_states, query_states, value_states, attention_mask, self.num_key_value_groups) past_key_value.update(key_states_compress, value_states_compress, self.layer_idx, cache_kwargs) else: self.kv_seq_len += q_len key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs)。在上述代码中,为什么if里面的past_key_value.update没有返回值呢?我去看了cache_util.py的源码是有return的啊,这个还挺困惑的。

可能是有返回值的,但是我代码里没有设置变量去接受这个返回值。你就新建一个变量接收返回值就好了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants