thunlp / InfLLM

The code of our paper "InfLLM: Unveiling the Intrinsic Capacity of LLMs for Understanding Extremely Long Sequences with Training-Free Memory"
MIT License
285 stars 25 forks source link

Qwen1.5-7B-Chat #20

Closed ChuanhongLi closed 6 months ago

ChuanhongLi commented 6 months ago

Qwen系列的模型,有对应的测试结果吗?

PS:默认的 yaml 配置 跑 qasper 数据集会直接爆显存(NVIDIA A100-SXM4-80GB)

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: 16
  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 (8192 也是爆显存)
conv_type: qwen
yinochaos commented 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!
guyan364 commented 6 months ago

Qwen系列的模型,有对应的测试结果吗?

PS:默认的 yaml 配置 跑 qasper 数据集会直接爆显

目前没有结果,之后我们会更新。

我使用这份 config,可以在 A40 上跑 qasper。可以提供更多的错误信息吗。

guyan364 commented 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!

你好,目前不支持多卡推理。如果遇到爆显存的问题,可以尝试修改 config 中的 chunk_size 到 512.

ChuanhongLi commented 6 months ago

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 的版本不匹配吗?

guyan364 commented 6 months ago

会报错 TypeError: flash_attn_func() missing 1 required positional argument: 'max_s', 是flash attention 的版本不匹配吗?

flash attention 的版本需要大于 2.10

ChuanhongLi commented 6 months ago

会报错 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 之间

guyan364 commented 6 months ago

谢谢!我稍后试一下。另外再请教一个问题,你们有和 H2O(https://github.com/FMInference/H2O)做过对比吗?个人认为 InfLLM 效果应该是介于 H2O 和 Streamingllm 之间

我们没有完整测试过 H2O,因为它没有实现长度拓展,在 passkey 上和 kv_retrieval 上表现不佳。H2O 的优势在于长文本推理时,不需要保留完整的 kv cache,以加速计算和节省内存。但 infLLM 会保留全部 kv cache(offload 到 cpu 内存),并且实现了无需训练的长度拓展。

ChuanhongLi commented 6 months ago

谢谢!我稍后试一下。另外再请教一个问题,你们有和 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 选择,有啥讲究吗?

guyan364 commented 6 months ago

谢谢!我稍后试一下。另外再请教一个问题,你们有和 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 选择,有啥讲究吗?

  1. 初始 token 的数量大于 10 即可有不错的效果,可以参考 infinite lm 和 streaming llm 的 paper,我们则和 block size 保持一致。
  2. 我们没有探索 local size 对效果的影响,经验来说,模型的关注会 lost in the middle,不同模型能够完全利用的 local size 不同。过小的 local size 会导致信息丢失,过大的 local size 会导致过大的内存和计算开销。
  3. 另外我在 A40 上测试 top16 的 qasper 结果为 41.38,可以参考一下。
ChuanhongLi commented 6 months ago

谢谢!我稍后试一下。另外再请教一个问题,你们有和 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 选择,有啥讲究吗?

  1. 初始 token 的数量大于 10 即可有不错的效果,可以参考 infinite lm 和 streaming llm 的 paper,我们则和 block size 保持一致。
  2. 我们没有探索 local size 对效果的影响,经验来说,模型的关注会 lost in the middle,不同模型能够完全利用的 local size 不同。过小的 local size 会导致信息丢失,过大的 local size 会导致过大的内存和计算开销。
  3. 另外我在 A40 上测试 top16 的 qasper 结果为 41.38,可以参考一下。

感谢回复!