Closed ChuanhongLi closed 6 months ago
同样的问题,太容易爆显存了,修改device_map,使用多卡,也会报错:
File "/maindata/data/user/elvin.e/git/InfLLM/inf_llm/attention/inf_llm.py", line 58, in forward
o = past_key_value.append(
File "/maindata/data/user/elvin.e/git/InfLLM/inf_llm/attention/context_manager.py", line 685, in append
global_q = self.position_embedding.apply_rotary_pos_emb_one_angle(
File "/maindata/data/user/elvin.e/git/InfLLM/inf_llm/attention/rope.py", line 104, in apply_rotary_pos_emb_one_angle
return ((x.float() * cos) + (self.rotate_half(x).float() * sin)).to(dtype)
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:0!
Qwen系列的模型,有对应的测试结果吗?
PS:默认的 yaml 配置 跑 qasper 数据集会直接爆显
目前没有结果,之后我们会更新。
我使用这份 config,可以在 A40 上跑 qasper。可以提供更多的错误信息吗。
同样的问题,太容易爆显存了,修改device_map,使用多卡,也会报错:
File "/maindata/data/user/elvin.e/git/InfLLM/inf_llm/attention/inf_llm.py", line 58, in forward o = past_key_value.append( File "/maindata/data/user/elvin.e/git/InfLLM/inf_llm/attention/context_manager.py", line 685, in append global_q = self.position_embedding.apply_rotary_pos_emb_one_angle( File "/maindata/data/user/elvin.e/git/InfLLM/inf_llm/attention/rope.py", line 104, in apply_rotary_pos_emb_one_angle return ((x.float() * cos) + (self.rotate_half(x).float() * sin)).to(dtype) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:0!
你好,目前不支持多卡推理。如果遇到爆显存的问题,可以尝试修改 config 中的 chunk_size 到 512.
Qwen系列的模型,有对应的测试结果吗? PS:默认的 yaml 配置 跑 qasper 数据集会直接爆显
目前没有结果,之后我们会更新。
我使用这份 config,可以在 A40 上跑 qasper。可以提供更多的错误信息吗。
model:
type: inf-llm
path: /data/model/open_source_data/Qwen/Qwen1.5-7B-Chat
block_size: 128
n_init: 128
n_local: 4096
topk: 8
repr_topk: 4
max_cached_block: 32
exc_block_size: 512
score_decay: 0.1
fattn: true
base: 1000000
distance_scale: 1.0
max_len: 2147483647
chunk_size: 4096
conv_type: qwen
目前修改了topk 的值正在测试,稍后我复现下上面的问题;另外使用 origin,修改 yaml 文件如下:
model:
type: origin
path: data/model/open_source_data/Qwen/Qwen1.5-7B-Chat
fattn: true
base: 1000000
distance_scale: 1.0
max_len: 32768
chunk_size: 4096
conv_type: qwen
会报错 TypeError: flash_attn_func() missing 1 required positional argument: 'max_s', 是flash attention 的版本不匹配吗?
会报错 TypeError: flash_attn_func() missing 1 required positional argument: 'max_s', 是flash attention 的版本不匹配吗?
flash attention 的版本需要大于 2.10
会报错 TypeError: flash_attn_func() missing 1 required positional argument: 'max_s', 是flash attention 的版本不匹配吗?
flash attention 的版本需要大于 2.10
谢谢!我稍后试一下。另外再请教一个问题,你们有和 H2O(https://github.com/FMInference/H2O)做过对比吗?个人认为 InfLLM 效果应该是介于 H2O 和 Streamingllm 之间
谢谢!我稍后试一下。另外再请教一个问题,你们有和 H2O(https://github.com/FMInference/H2O)做过对比吗?个人认为 InfLLM 效果应该是介于 H2O 和 Streamingllm 之间
我们没有完整测试过 H2O,因为它没有实现长度拓展,在 passkey 上和 kv_retrieval 上表现不佳。H2O 的优势在于长文本推理时,不需要保留完整的 kv cache,以加速计算和节省内存。但 infLLM 会保留全部 kv cache(offload 到 cpu 内存),并且实现了无需训练的长度拓展。
谢谢!我稍后试一下。另外再请教一个问题,你们有和 H2O(https://github.com/FMInference/H2O)做过对比吗?个人认为 InfLLM 效果应该是介于 H2O 和 Streamingllm 之间
我们没有完整测试过 H2O,因为它没有实现长度拓展,在 passkey 上和 kv_retrieval 上表现不佳。H2O 的优势在于长文本推理时,不需要保留完整的 kv cache,以加速计算和节省内存。但 infLLM 会保留全部 kv cache(offload 到 cpu 内存),并且实现了无需训练的长度拓展。
了解了,谢谢。话说对于 InfLLM,初始token的数量,以及 local token数量,对于推理效果的影响,有探究吗? 上午我为了跑 Qwen1.5-72B-Chat-GPTQ-Int4, 把 n_local调整为了 2048 ,{'qasper': 40.86} ; 而我使用 Qwen1.5-7B-Chat 时,n_local: 4096,{'qasper': 40.87},两个基本就没啥区别,当然由于topk的设置不同,也可能topk的设置左右了影响了结果; 这个 n_local 选择,有啥讲究吗?
谢谢!我稍后试一下。另外再请教一个问题,你们有和 H2O(https://github.com/FMInference/H2O)做过对比吗?个人认为 InfLLM 效果应该是介于 H2O 和 Streamingllm 之间
我们没有完整测试过 H2O,因为它没有实现长度拓展,在 passkey 上和 kv_retrieval 上表现不佳。H2O 的优势在于长文本推理时,不需要保留完整的 kv cache,以加速计算和节省内存。但 infLLM 会保留全部 kv cache(offload 到 cpu 内存),并且实现了无需训练的长度拓展。
了解了,谢谢。话说对于 InfLLM,初始token的数量,以及 local token数量,对于推理效果的影响,有探究吗? 上午我为了跑 Qwen1.5-72B-Chat-GPTQ-Int4, 把 n_local调整为了 2048 ,{'qasper': 40.86} ; 而我使用 Qwen1.5-7B-Chat 时,n_local: 4096,{'qasper': 40.87},两个基本就没啥区别,当然由于topk的设置不同,也可能topk的设置左右了影响了结果; 这个 n_local 选择,有啥讲究吗?
谢谢!我稍后试一下。另外再请教一个问题,你们有和 H2O(https://github.com/FMInference/H2O)做过对比吗?个人认为 InfLLM 效果应该是介于 H2O 和 Streamingllm 之间
我们没有完整测试过 H2O,因为它没有实现长度拓展,在 passkey 上和 kv_retrieval 上表现不佳。H2O 的优势在于长文本推理时,不需要保留完整的 kv cache,以加速计算和节省内存。但 infLLM 会保留全部 kv cache(offload 到 cpu 内存),并且实现了无需训练的长度拓展。
了解了,谢谢。话说对于 InfLLM,初始token的数量,以及 local token数量,对于推理效果的影响,有探究吗? 上午我为了跑 Qwen1.5-72B-Chat-GPTQ-Int4, 把 n_local调整为了 2048 ,{'qasper': 40.86} ; 而我使用 Qwen1.5-7B-Chat 时,n_local: 4096,{'qasper': 40.87},两个基本就没啥区别,当然由于topk的设置不同,也可能topk的设置左右了影响了结果; 这个 n_local 选择,有啥讲究吗?
- 初始 token 的数量大于 10 即可有不错的效果,可以参考 infinite lm 和 streaming llm 的 paper,我们则和 block size 保持一致。
- 我们没有探索 local size 对效果的影响,经验来说,模型的关注会 lost in the middle,不同模型能够完全利用的 local size 不同。过小的 local size 会导致信息丢失,过大的 local size 会导致过大的内存和计算开销。
- 另外我在 A40 上测试 top16 的 qasper 结果为 41.38,可以参考一下。
感谢回复!
Qwen系列的模型,有对应的测试结果吗?
PS:默认的 yaml 配置 跑 qasper 数据集会直接爆显存(NVIDIA A100-SXM4-80GB)