# 参数说明

执行 `evalscope perf --help` 可获取全部参数说明：


## 基本设置
- `--model` 测试模型名称。
- `--url` 指定API地址，支持`/chat/completion`和`/completion`两种endpoint。
- `--name` wandb/swanlab数据库结果名称和结果数据库名称，默认为: `{model_name}_{current_time}`，可选。
- `--api` 指定服务API，目前支持[openai|dashscope|local|local_vllm]。
  - 指定为`openai`，则使用支持OpenAI的API，需要提供`--url`参数。
  - 指定为`dashscope`，则使用支持DashScope的API，需要提供`--url`参数。
  - 指定为`local`，则使用本地文件作为模型，并使用transformers进行推理。`--model`为模型文件路径，也可为model_id，将自动从modelscope下载模型，例如`Qwen/Qwen2.5-0.5B-Instruct`。
  - 指定为`local_vllm`，则使用本地文件作为模型，并启动vllm推理服务。`--model`为模型文件路径，也可为model_id，将自动从modelscope下载模型，例如`Qwen/Qwen2.5-0.5B-Instruct`。
  - 您也可以自定义API，请参考[自定义API指南](./custom.md/#自定义请求-api)。
- `--port` 本地推理服务端口，默认为8877，仅对`local`和`local_vllm`有效。
- `--attn-implementation` Attention实现方式，默认为None，可选[flash_attention_2|eager|sdpa]，仅在`api`为`local`时有效。
- `--api-key` API密钥，可选。
- `--debug` 输出调试信息。

## 网络配置
- `--connect-timeout` 网络连接超时，默认为600s。
- `--read-timeout` 网络读取超时，默认为600s。
- `--headers` 额外的HTTP头，格式为`key1=value1 key2=value2`。该头将用于每个查询。
- `--no-test-connection` 不发送连接测试，直接开始压测，默认为False。

## 请求控制
- `--parallel` 并发请求的数量，可以传入多个值，用空格隔开；默认为1。
- `--number` 发出的请求的总数量，可以传入多个值，用空格隔开（需与`parallel`一一对应）；默认为1000。
- `--rate` 每秒生成的请求数量（并不发送请求），默认为-1，表示所有请求将在时间0生成，没有间隔；否则，我们使用泊松过程生成请求间隔。
  ```{tip}
  在本工具的实现中请求生成与发送是分开的：
  `--rate`参数用于控制每秒生成的请求数量，请求将放入请求队列。
  `--parallel`参数用于控制发送请求的worker数量，worker将从请求队列获取请求并发送，且在上一请求回复后才发送下一请求。
  ```
- `--log-every-n-query` 每n个查询记录日志，默认为10。
- `--stream` 使用SSE流输出，默认为True。注意：需要设置`--stream`以测量Time to First Token (TTFT)指标；设置`--no-stream`将不使用流式输出。

## Prompt设置
- `--max-prompt-length` 最大输入prompt长度，默认为`131072`，大于该值时，将丢弃prompt。
- `--min-prompt-length` 最小输入prompt长度，默认为0，小于该值时，将丢弃prompt。
- `--prefix-length` promt的前缀长度，默认为0，仅对于`random`数据集有效。
- `--prompt` 指定请求prompt，一个字符串或本地文件，使用优先级高于`dataset`。使用本地文件时，通过`@/path/to/file`指定文件路径，例如`@./prompt.txt`。
- `--query-template` 指定查询模板，一个`JSON`字符串或本地文件，使用本地文件时，通过`@/path/to/file`指定文件路径，例如`@./query_template.json`。
- `--apply-chat-template` 是否应用聊天模板，默认为None，将根据url后缀是否为`chat/completion`自动选择。

## 数据集配置
- `--dataset` 可以指定如下数据集模式，您也可以使用python自定义数据集解析器，参考[自定义数据集指南](custom.md/#自定义数据集)。
  - `openqa` 使用jsonl文件的 `question` 字段作为prompt。不指定`dataset_path`将从modelscope自动下载[数据集](https://www.modelscope.cn/datasets/AI-ModelScope/HC3-Chinese/summary)，prompt长度较短，一般在 100 token 以下。
  - `longalpaca` 使用jsonl文件的 `instruction` 字段作为prompt。不指定`dataset_path`将从modelscope自动下载[数据集](https://www.modelscope.cn/datasets/AI-ModelScope/LongAlpaca-12k/dataPeview)，prompt长度较长，一般在 6000 token 以上。
  - `flickr8k` 将构建图文输入，适合评测多模态模型；从modelscope自动下载[数据集](https://www.modelscope.cn/datasets/clip-benchmark/wds_flickr8k/dataPeview)，不支持指定`dataset_path`。
  - `line_by_line` 必需提供`dataset_path`，逐行将txt文件的每一行作为一个提示，。
  - `random` 根据`prefix-length`，`max-prompt-length`和`min-prompt-length`随机生成prompt，必需指定`tokenizer-path`，[使用示例](./examples.md#使用random数据集)。
- `--dataset-path` 数据集文件的路径，与数据集结合使用。

## 模型设置
- `--tokenizer-path` 可选，指定分词器权重路径，用于计算输入和输出的token数量，通常与模型权重在同一目录下。
- `--frequency-penalty` frequency_penalty值。
- `--logprobs` 对数概率。
- `--max-tokens` 可以生成的最大token数量。
- `--min-tokens` 生成的最少token数量，不是所有模型服务都支持该参数，请查看对应API文档。对于`vLLM>=0.8.1`版本，需要额外设置`--extra-args '{"ignore_eos": true}'`。
- `--n-choices` 生成的补全选择数量。
- `--seed` 随机种子，默认为0。
- `--stop` 停止生成的tokens。
- `--stop-token-ids` 设置停止生成的token的ID。
- `--temperature` 采样温度，默认为0。
- `--top-p` top_p采样。
- `--top-k` top_k采样。
- `--extra-args` 额外传入请求体的参数，格式为json字符串，例如`'{"ignore_eos": true}'`。

## 数据存储
- `--wandb-api-key` wandb API密钥，如果设置，则度量将保存到wandb。
- `--swanlab-api-key` swanlab API密钥，如果设置，则度量将保存到swanlab。
- `--outputs-dir` 输出文件路径，默认为`./outputs`。
