基本配置
以一个实际运行的例子进行离线测试为例:此例子可以参考离线模型的编写方式。
python3 offline_test.py \\--model /models/Llama-2-7b-chat-hf/ \\--tokenizer /models/Llama-2-7b-chat-hf/ \\--dataset /datasets/ShareGPT_V3_unfiltered_cleaned_split.json \\--num-prompts 16 \\--max-num-batched-tokens 10240 \\--max-num-seqs 32 \\--trust-remote-code
参数说明:
--model:指定模型的存放路径,支持相对路径、绝对路径或者 repo_id 则会从 huggingface 上下载,建议使用本地路径可加快运行速度。
--tokenizer:同模型同一个参数。
--dataset:指定当前测试 case 需要从哪个数据集采集 prompt 数据。
--num-prompts:表示请求数。
--max-num-batched-tokens:表示每次执行推理时支持最长的处理 token 数,多个 batch 的总和数,如果每个请求长,则会分多批完成请求。
--max-num-seqs:后端支持最大的 batch 数,配置值建议参考实际 GPU 总显存及处理请求的长短值考虑。如果配置过大启动服务会慢,配置过小可能影响最终的吞吐性能。
--trust-remote-code:表示信任当前部署,如果使用 model repo_id 时不加此参数可能导致模型加载失败。
除了上面参数外,还有一些可选配置参数供参考。
多卡推理
--tensor-parallel-size 1 \\
--tensor-parallel-size: tensor 并行,支持1,2,4,8,会被模型的 layer 层数整除即可。
cudagraph 优化
--enforce-eager \\
--enforce-eager:默认支持 CUDA Graph 优化。如果不想使用 CUDA Graph,可以添加 --enforce-eager 参数。默认配置的 CUDA Graph 在启动模型时会捕获图的时间开销,max-num-seqs 配置越大,所需时间越长。
显存占用配置
--gpu-memory-utilization 0.9 \\--conservative-dry-run \\
--gpu-memory-utilization: 小数值取值范围:0.1 ~ 0.95 表示 GPU 卡占用显存,这部分显存主要有三部分:进程初始化显存(非 torch)、权重、kvcache;剩下的显存一般用于非 torch 分配、cuda graph 等场景,如果此值配置过高,max-num-seqs 配置过大,会导致 cuda graph 显存不够,导致初始化失败。
--conservative-dry-run:增加此参数表示在量化等场景由于内部 kernel 也使用显存,而这部分显存并未统计到上述利用值上面,导致 OOM,建议在量化场景下增加此参数保证安全运行。
speculative推理
--speculative-model /models/*** --num-speculative-tokens 3 \\
--speculative-model: 后面跟 speculative 模型的路径,运行绝对路径、相对路径等。
--num-speculative-tokens:3 表示 speculative 模型一次生成的 token 数,可以自行配置调优。
多步推理
--num-scheduler-steps 4 \\
--num-scheduler-steps: 支持多步处理,可以配置,[1-8]等整数值,在 decoding 阶段,部分 cpu 结果的处理可以 overlap 到 GPU 上,增加吞吐值,默认不打开。