Repository: open-compass/opencompass
Issue: 在测评的时候显存总是有空闲，如何全部利用显存呢，单机 8*80G的 A800
Root cause: Configuration Error

### Prerequisite

- [X] I have searched [Issues](https://github.com/open-compass/opencompass/issues/) and [Discussions](https://github.com/open-compass/opencompass/discussions) but cannot get the expected help.
- [X] The bug has not been fixed in the [latest version](https://github.com/open-compass/opencompass).

### Type

I'm evaluating with the officially supported tasks/models/datasets.

### Environment

在用零一万物 34B进行 ceval测评的时候，显存只用了到了20%左右，调整哪个参数可以100%使用显存呢

### Reproduces the problem - code/configuration sample

调整了batch_size也没有用

### Reproduces the problem - command or script

调整了batch_size也没有用

### Reproduces the problem - error message

调整了batch_size也没有用

### Other information

调整了batch_size也没有用

我也是有同样的问题，有的模型可以把显存吃满，比如我用Qwen14b-chat就可以把8*A800差不多吃满，但是有的模型，比如autoj-bilingual-6b，我的八卡每张卡的占用率还不到10%，我怀疑这个是跟模型有关

另外，感觉开启VLLM会让占用率变高推理速度变快，如果是使用HuggingFaceCausalLM占用率和速度都会低一些


> ### Prerequisite
> 
>     * [x]  I have searched [Issues](https://github.com/open-compass/opencompass/issues/) and [Discussions](https://github.com/open-compass/opencompass/discussions) but cannot get the expected help.
> 
>     * [x]  The bug has not been fixed in the [latest version](https://github.com/open-compass/opencompass).
> 
> 
> ### Type
> 
> I'm evaluating with the officially supported tasks/models/datasets.
> ### Environment
> 
> 在用零一万物 34B进行 ceval测评的时候，显存只用了到了20%左右，调整哪个参数可以100%使用显存呢
> ### Reproduces the problem - code/configuration sample
> 
> 调整了batch_size也没有用
> ### Reproduces the problem - command or script
> 
> 调整了batch_size也没有用
> ### Reproduces the problem - error message
> 
> 调整了batch_size也没有用
> ### Other information
> 
> 调整了batch_size也没有用

Please check the `run_cfg.num_gpus` parameter in your model config. The default `num_gpus` is set to a different value for each supported model：https://github.com/open-compass/opencompass/blob/cce5b6fbb62156c962376a3580c720a948fb054c/configs/models/yi/hf_yi_34b_chat.py#L28

实际上原理就是每一个GPU都是加载了一个模型的实例进去推理，所以占用的显存不高。若 batch_size>1，需要同时设置 batch_padding=True，否则实际仍然是按照单 batch 来进行推理的。另外我们测试下来会发现 batch_padding=True 时由于 positional encoding 错位等原因，评测精度会下降，因此建议不要走 batch。

增加 --max-workers-per-gpu 参数即可，这样子一张卡将会有多个worker实例

> 实际上原理就是每一个GPU都是加载了一个模型的实例进去推理，所以占用的显存不高。若 batch_size>1，需要同时设置 batch_padding=True，否则实际仍然是按照单 batch 来进行推理的。另外我们测试下来会发现 batch_padding=True 时由于 positional encoding 错位等原因，评测精度会下降，因此建议不要走 batch。

你们评估mmlu 需要多久，我跑llama 13b，batch=1测 mmlu_gen 半天不动：
```
--datasets mmlu_gen --max-out-len 100  --max-seq-len 2048 --batch-size 1 --no-batch-padding --num-gpus 4  --max-workers-per-gpu 2
```
gpu看着在用：
![image](https://github.com/open-compass/opencompass/assets/20471681/103121d8-6db9-4ba7-b28e-fc677d1b1a7b)


> > 实际上原理就是每一个GPU都是加载了一个模型的实例进去推理，所以占用的显存不高。若 batch_size>1，需要同时设置 batch_padding=True，否则实际仍然是按照单 batch 来进行推理的。另外我们测试下来会发现 batch_padding=True 时由于 positional encoding 错位等原因，评测精度会下降，因此建议不要走 batch。
> 
> 你们评估mmlu 需要多久，我跑llama 13b，batch=1测 mmlu_gen 半天不动：
> 
> ```
> --datasets mmlu_gen --max-out-len 100  --max-seq-len 2048 --batch-size 1 --no-batch-padding --num-gpus 4  --max-workers-per-gpu 2
> ```
> 
> gpu看着在用： ![image](https://private-user-images.githubusercontent.com/20471681/329499627-103121d8-6db9-4ba7-b28e-fc677d1b1a7b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTUzNjU1MzMsIm5iZiI6MTcxNTM2NTIzMywicGF0aCI6Ii8yMDQ3MTY4MS8zMjk0OTk2MjctMTAzMTIxZDgtNmRiOS00YmE3LWIyOGUtZmM2NzdkMWIxYTdiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTEwVDE4MjAzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZiYzllMjcwODM0MGU5OWU2ZjIyNWVlYzU2MzQ3YTg3MWYyZGFlODA4ZmJhY2Y1Y2NjMmNjYTFmMzExYjA5NTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.QGhjU0blwqaOCsL4uOQfmzk4-7cGkWEnQ_PkMj0hkME)

没测过mmlu，我这边测试，cmmlu+ceval，Internlm-7b，h800*2情况下大概半个小时