promptflow [BUG] 在可调用目标函数中调用pf_client.run时,evaluate得到"错误:(Assert错误)守护进程不允许有子进程,"

368yc8dk  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(39)

Bug描述

一个清晰简洁的bug描述。

如何重现bug

重现问题的步骤,你多频繁地遇到这个问题:
我正在尝试将evaluate方法与我自己的提示符连接起来,它曾经从pf_client.run运行。以下是示例代码:

from promptflow.client import PFClient

pf_client = PFClient()

def user_call():
    my_prompt_flow = pf_client.run(my prompt flow configs)
    return my_prompt_flow_output

def run_evaluation():
    results = evaluate(
                 evaluation_name=evaluation_name,
                 data=data_path,
                 target=user_call,
                 evaluators={
                    "violence": violence_evaluator,
                    "sexual": sex_evaluator,
                    "self_harm": self_harm_evaluator,
                    "hate_unfairnes": hate_unfairness_evaluator,
                    "content_safety": content_safety_evaluator
                 },
                azure_ai_project=project_scope
             )

2024-07-06 00:58:41 +0000 1845174 execution.bulk INFO The process [1845174] has received a terminate signal.
2024-07-06 00:58:42 +0000 1844849 execution ERROR 1/1 flow run failed, indexes: [0], exception of index 0: Execution failure in 'user_call': (UnexpectedError) Unexpected error occurred while executing the batch run. Error: (AssertionError) daemonic processes are not allowed to have children.

预期行为

一个清晰简洁的描述你期望发生的事情。

截图

如果适用,添加截图以帮助解释你的问题。

运行信息(请填写以下信息):

  • 使用 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.0",
"promptflow-tracing": "1.13.0"
}

其他上下文

在这里添加有关问题的其他上下文。

aurhwmvo

aurhwmvo1#

你好,@yanggaome ,evaluate 将隐式调用 pf.run ,这将使你的上述代码在 pf.run 内部调用一个 pf.run 。虽然 pf.run 使用多进程处理每行数据,但这可能会导致上述错误。我们将利用这个问题来追踪上述错误的根源。
为了解决这个问题,你能把你的 user_call 改为使用 flow-as-a-function 而不是 pf.run 吗?
以下是示例代码:

def user_call():
my_prompt_flow = load_flow("path/to/flow")
my_prompt_flow(xxx)
return my_prompt_flow_output

um6iljoc

um6iljoc2#

感谢@D-W-,这个方法有效!

相关问题