Azure ML批量推理数据格式问题:解决「数据点需为对话数组」错误
解决Azure ML批量端点推理phi-3-mini-4k-instruct的格式错误问题
问题根源
phi-3-mini-4k-instruct是对话式微调模型,批量推理时要求每个数据点必须是符合模型对话规范的数组结构,但CSV是扁平的列/文本格式,直接导入无法匹配模型的输入要求,才会触发“each data point should be a conversation array”错误。
可行解决方案
1. 改用JSONL格式输入(优先推荐)
直接放弃CSV,生成符合模型要求的JSONL文件,每行对应一个完整的对话结构:
- 仅用户查询的基础格式:
{"messages": [{"role": "user", "content": "待处理的eurlex文本内容"}]}
- 带系统提示的格式(和训练时的prompt结构对齐):
{"messages": [ {"role": "system", "content": "基于eurlex数据训练的法律文本分析助手"}, {"role": "user", "content": "待处理的eurlex文本内容"} ]}
创建批量推理作业时,上传该JSONL文件作为输入即可。
2. 保留CSV但自定义推理脚本适配
如果必须使用CSV,需要修改批量推理的score.py脚本,将CSV数据转换为模型要求的对话数组:
- 假设CSV有单列
prompt存储用户文本,修改数据处理逻辑:
import pandas as pd def init(): # 原模型加载逻辑不变 global model # 此处添加模型加载代码 def run(mini_batch): results = [] for file_path in mini_batch: df = pd.read_csv(file_path) for _, row in df.iterrows(): # 转换为对话数组格式 conversation = [{"role": "user", "content": row["prompt"]}] # 调用模型推理(替换为你的实际推理代码) response = model.generate(conversation) results.append({"input_text": row["prompt"], "output": response}) return results
- 若CSV包含
system、user两列,调整对话结构:
conversation = [ {"role": "system", "content": row["system"]}, {"role": "user", "content": row["user"]} ]
修改完成后,重新部署批量端点并使用该脚本环境,再上传CSV文件执行推理。
验证要点
- JSONL每行必须是合法JSON,检查引号、逗号等语法问题
- 自定义脚本时,确保对话结构和训练阶段的格式完全对齐,避免输入不兼容
内容的提问来源于stack exchange,提问作者S R
相关产品推荐
相关产品推荐

