描述bug
在将promptflow-eval从0.3.0切换到0.3.1后,对于相同的代码,它仍然给我错误:
2024-07-15 06:52:21 +0000 377 execution.bulk ERROR Error occurred while executing batch run. Exception: The input for batch run is incorrect. Input from key 'data' is an empty list, which means we cannot generate a single line input for the flow run. Please rectify the input and try again.
======= Run Summary =======
Run name: "promptflow_evals_evaluators_content_safety_content_safety_contentsafetyevaluator_k3ldgeeq_20240715_065220_068989"
Run status: "Failed"
Start time: "2024-07-15 06:52:20.066987+00:00"
Duration: "0:00:01.488330"
Output path: "/root/.promptflow/.runs/promptflow_evals_evaluators_content_safety_content_safety_contentsafetyevaluator_k3ldgeeq_20240715_065220_068989"
Traceback (most recent call last):
...
_ = evaluate(
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/evals/evaluate/_telemetry/__init__.py", line 111, in wrapper
result = func(*args, **kwargs)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/evals/evaluate/_evaluate.py", line 365, in evaluate
raise e
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/evals/evaluate/_evaluate.py", line 340, in evaluate
return _evaluate(
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/evals/evaluate/_evaluate.py", line 447, in _evaluate
evaluator_info["result"] = batch_run_client.get_details(evaluator_info["run"], all_results=True)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/evals/evaluate/_batch_run_client/proxy_client.py", line 33, in get_details
run = proxy_run.run.result(timeout=BATCH_RUN_TIMEOUT)
File "/usr/local/miniconda/lib/python3.9/concurrent/futures/_base.py", line 446, in result
return self.__get_result()
File "/usr/local/miniconda/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
raise self._exception
File "/usr/local/miniconda/lib/python3.9/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/_sdk/_pf_client.py", line 301, in run
return self._run(
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/_sdk/_pf_client.py", line 226, in _run
return self.runs.create_or_update(run=run, **kwargs)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/_sdk/_telemetry/activity.py", line 265, in wrapper
return f(self, *args, **kwargs)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/_sdk/operations/_run_operations.py", line 137, in create_or_update
self.stream(created_run)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/_sdk/_telemetry/activity.py", line 265, in wrapper
return f(self, *args, **kwargs)
File "/usr/local/miniconda/lib/python3.9/site-packages/promptflow/_sdk/operations/_run_operations.py", line 228, in stream
raise InvalidRunStatusError(error_message)
promptflow._sdk._errors.InvalidRunStatusError: First error message is: The input for batch run is incorrect. Input from key 'data' is an empty list, which means we cannot generate a single line input for the flow run. Please rectify the input and try again.
我注意到0.3.0和0.3.1之间与性能/并行化相关的一些更改。例如: 32115d3
- 对于evaluate API,我看到它从
use_thread_pool = kwargs.get("_use_thread_pool", True)
batch_run_client = CodeClient() if use_thread_pool else pf_client
更改为
use_pf_client = kwargs.get("_use_pf_client", True)
batch_run_client = ProxyClient(pf_client) if use_pf_client else CodeClient()
因此,相应的,batch_run_client从CodeClient更改为ProxyClient,使用默认输入(既不传递_use_thread_pool也不传递_use_pf_client)
这是否与失败有关?推荐使用哪种客户端进行并行化?
如何重现bug
重现行为所需的步骤,您多久会遇到一次bug:
1.
预期行为
对您期望发生的事情进行清晰简洁的描述。
截图
如果适用,请添加屏幕截图以帮助解释您的问题。
运行信息(请完成以下信息):
- 使用
pf -v
的Promptflow包版本:[例如0.0.102309906] - 操作系统:[例如Ubuntu 20.04,Windows 11]
- 使用
python --version
的Python版本:[例如python==3.10.12]
{
"promptflow": "1.13.0",
"promptflow-azure": "1.13.0",
"promptflow-core": "1.13.0",
"promptflow-devkit": "1.13.0",
"promptflow-evals": "0.3.1"或与比较的0.3.0,
"promptflow-tracing": "1.13.0"
}
其他上下文
在此问题中添加有关问题的任何其他上下文。
3条答案
按热度按时间iibxawm41#
一个观察是,当我在构造函数中创建目标用户调用(与评估器具有相同的类,提供init和call方法)时,如果我明确将加载的数据(约100行jsonl数据)作为参数传递:
TargetCallClass(config, input_data)
,那么它会得到这个错误。如果我将这些加载的数据传递给config.input_data:TargetCallClass(config)
,似乎更好,更好的意思是在一台机器上可以成功,但在另一台机器上仍然失败。不确定这是否相关,但只是给出这个观察。你对此有什么想法吗?另外,如果我将_use_pf_client设置为false(与0.3.1评估器一起使用),它运行正常(就像0.3.0一样,因为它们都使用CodeClient而不是ProxyClient)。oxcyiej72#
你好,@ninghu ,我认为我已经找到了根本原因。
问题在于,当调用evaluate api时,数据路径应该是绝对路径,而不是相对于工作目录的相对路径。
当使用CodeClient时,从data_path读取的 Dataframe 被使用。当使用ProxyClient时,数据(数据路径)用于pfclient运行。然而,这仍然让我感到困惑,因为对于目标调用,它也是一个pf客户端运行,数据是相对路径,它仍然可以正常工作。但是在使用ProxyClient时会有所不同。
另一个观察是,如果我们使用一个评估器(无论是内置的还是自定义的),即使使用ProxyClient + 相对路径,它仍然可以正常工作。
但是当使用两个评估器时,ProxyClient + 相对路径无法正常工作。我们必须使用绝对路径。
o2gm4chl3#
这些发现非常棒!你描述的行为很有趣,似乎只在使用多个评估器时发生。我们会尝试重现这个问题并回复你。