ShareGPT数据集是TGI压力测试最适配的开源选择,需经格式转换、多轮上下文构造、请求变体生成、系统提示与工具字段注入、token级一致性校验五步准备。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您计划在Text Generation Inference(TGI)推理引擎中开展压力测试,但缺乏真实、结构化、多轮对话特征鲜明的测试数据,则ShareGPT数据集是当前最适配的开源选择。以下是将ShareGPT数据集用于TGI压力测试的数据准备步骤:
一、验证ShareGPT数据格式兼容性
ShareGPT原始数据采用JSONL格式,每行一个对话样本,其字段结构(如conversations列表、human/gpt角色标识)与TGI默认支持的Hugging Face格式存在差异,需预先转换为TGI可直接加载的输入格式,避免推理服务启动失败或请求解析异常。
1、确认本地已下载ShareGPT-90k数据集,文件路径为sharegpt_90k_clean.jsonl。
2、使用Python脚本读取每一行JSON对象,提取conversations字段中的全部human消息作为用户输入序列。
3、将每条human消息封装为独立请求体,格式为{"inputs": "用户提问内容", "parameters": {"max_new_tokens": 512}}。
4、将所有请求体写入新文件tgi_loadtest_inputs.jsonl,确保每行仅含一个合法JSON对象,无逗号分隔、无外层数组包裹。
二、构建多轮上下文模拟请求流
TGI原生不维护会话状态,但压力测试需检验其在真实交互场景下的上下文感知能力(如通过prompt cache复用前序KV缓存),因此须人工构造带历史上下文的长prompt,以逼近ShareGPT中多轮对话的真实token分布特征。
1、从ShareGPT样本中随机选取100个含3轮及以上对话的样本。
2、对每个样本,按顺序拼接human与gpt消息,添加角色标记(如[INST]...[/INST]或...),严格匹配所部署模型的tokenizer分词协议。
3、使用对应模型的AutoTokenizer对拼接后文本进行编码,过滤总长度超过模型context window 80%的样本。
4、将剩余样本保存为tgi_multiturn_prompts.jsonl,每行格式为{"inputs": "完整上下文字符串", "parameters": {...}}。
三、生成不同长度与复杂度的请求变体
单一固定长度请求无法暴露TGI在动态批处理(dynamic batching)与PagedAttention内存管理上的瓶颈,需依据ShareGPT中真实指令分布,构造覆盖短问答、中等长度推理、长上下文摘要三类负载的测试子集,以全面触发TGI内部调度策略。
1、统计ShareGPT中human消息的token长度分布,确定三个分位点:P25(约32 tokens)、P50(约68 tokens)、P90(约215 tokens)。
2、分别筛选出长度落入各分位区间的1000条请求,保存为short_qa.jsonl、reasoning.jsonl、long_summary.jsonl。
3、对long_summary.jsonl中每条请求,额外注入1–2个干扰句(如无关背景描述),模拟真实用户输入噪声,确保TGI的input sanitization逻辑被激活。
4、使用jq命令校验各文件行数与JSON语法有效性:jq -r 'keys' short_qa.jsonl | head -n 1应返回["inputs", "parameters"]。
四、注入系统提示词与工具调用模拟字段
ShareGPT部分样本含system字段或tools描述,而TGI默认忽略这些元信息;若测试目标包含自定义system prompt生效性或function calling兼容性,需主动将其嵌入inputs字段,否则压测结果将无法反映真实业务链路。
1、遍历所有含system键的ShareGPT样本,提取其值,格式化为"{system_content}"并前置拼接到inputs中。
2、对含tools字段的样本,按TGI支持的tool_choice参数规范,在parameters中显式添加"tool_choice": "auto"及"tools": [...] 字段。
3、验证拼接后inputs长度未超出模型最大position embedding限制,超限则截断末尾非关键描述语句。
4、将最终输出写入tgi_system_tools_testset.jsonl,该文件专用于验证TGI对ShareGPT高级元数据的支持边界。
五、校验token级一致性与编码偏差
ShareGPT原始文本经不同tokenizer处理可能产生显著token count偏差,导致TGI实际batch size与预期不符,进而影响吞吐量和显存占用测量准确性;必须使用与TGI服务端完全一致的tokenizer进行预编码校验。
1、确认TGI容器内加载的模型ID(如meta-llama/Llama-3-8b-Instruct),拉取对应Hugging Face仓库的tokenizer.json或tokenizer.model。
2、在本地复现TGI所用tokenizer实例,对tgi_loadtest_inputs.jsonl中全部inputs执行encode操作,记录每条请求的len(input_ids)。
3、剔除token数为0或超过4096的异常请求,重新生成纯净测试集tgi_validated_inputs.jsonl。
4、计算该集合的平均token长度与标准差,并与TGI日志中实际观测到的batch_token_size比对,偏差超过±5%时需检查tokenizer版本是否一致。

















