Inflearn brand logo image

인프런 커뮤니티 질문&답변

sangin1.park님의 프로필 이미지
sangin1.park

작성한 질문수

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

2.7 병렬 처리를 통한 효율 개선 (feat. 프롬프트 엔지니어링)

병렬 처리 질문 있습니다.

해결된 질문

작성

·

89

0

graph_builder.add_edge('get_tax_base_equation', 'calculate_tax_base')
graph_builder.add_edge('get_tax_deduction', 'calculate_tax_base')
graph_builder.add_edge('get_market_ratio', 'calculate_tax_base')

2.7 병렬 처리를 통한 효율 개선 (feat. 프롬프트 엔지니어링).ipynb 에서 질문 있습니다.

3개가 병렬로 실행된다면 분명 먼저 끝나는 노드가 있을 거고 그러면 완료 노드 순서에 맞게 calculate_tax_base를 실행해야 하지만 결과를 보면 calculate_tax_base를 한번만 실행하더라고요. 그러면 어떠한 조작 없이도 ranggraph에서 add_edge를 사용한 노드라면 자동으로 병렬 처리 완료 상태를 보관하고 3개가 전부 종료 된 후 실행된다고 이해했는데 맞을 까요?

제가 이해한게 맞다면 add_edge를 사용하지 않은 노드(Comand 명령어 사용한 노드)들의 병렬 처리에서 스레드 동기화 처리가 자동으로 안되기 때문에 반드시 add_edge를 반드시 사용해야하나요?

이런 질문을 드리는 이유는 Command를 병렬로 처리해보고 있는데 궁금증이 생겨서 그렇습니다.!

    messages = [
       {"role": "system", "content": system_prompt},
    ] + state["messages"]

    response = llm.with_structured_output(Routers).invoke(messages)
    datasources = [router['next'] for router in response['nexts']]
    print(datasources)
    
    # FINISH를 analyst_node로 변환
    goto_nodes = [
        "analyst_node" if ds == "FINISH" else ds
        for ds in datasources
    ]

    # 병렬 실행을 위해 전체 리스트 반환
    return Command(goto=goto_nodes)

 

답변 1

0

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 좋은 질문 감사합니다. 답변을 드리자면

  1. 3개가 병렬로 실행된다면 분명 먼저 끝나는 노드가 있을 거고 그러면 완료 노드 순서에 맞게 calculate_tax_base를 실행해야 하지만 결과를 보면 calculate_tax_base를 한번만 실행하더라고요. 그러면 어떠한 조작 없이도 ranggraph에서 add_edge를 사용한 노드라면 자동으로 병렬 처리 완료 상태를 보관하고 3개가 전부 종료 된 후 실행된다고 이해했는데 맞을 까요?

    1. 맞습니다. 3개가 모두 종료된 다음에 실행됩니다

    2. 그리고 앞에 3가지는 종종 pretty_print()로 확인했을 때 다 안보이는 경우가 많은데, 병렬작업이 끝나고 실행되는 노드의 state를 확인해보시면 정상적으로 다 끝난것을 확인하실 수 있을거에요

  2. 이런 질문을 드리는 이유는 Command를 병렬로 처리해보고 있는데 궁금증이 생겨서 그렇습니다.!

     

    1. add_edge의 경우에는 DAG를 구성하기 때문에 의도하신대로 종속성을 가지고 병렬로 처리해야할 노드가 완료되는 것을 기다리지만, Command()는 DAG구성이 되지 않습니다.

      1. 그래서 병렬로 실행은 가능하겠지만, analyst_node로 들어가기 전에 다른 노드의 작업들이 끝났다는게 보장되지 않을거에요.

    2. 다만 이건 이론상의 내용이고 저도 실제로 시도해보지는 않아서 만약 가능하다고 판단되시면 공유해주실 수 있을까요? 저를 비롯해서 유사한 궁금증을 갖고있는 다른 수강생분들께도 많은 도움이 될 것 같습니다

       

추가로 설명이 필요한 부분이 있으시면 말씀해주세요!

sangin1.park님의 프로필 이미지
sangin1.park
질문자

선생님 안녕하세요. Command()를 사용하여 병렬 처리하는 방법에 대해 고민을 계속 했습니다. 현재는 해당 문제를 해결 한 것 같아서 제가 해결한 내용 공유 드립니다.
https://github.com/tkddls3319/goto_supervisor_fastapi

 

강병진님의 프로필 이미지
강병진
지식공유자

와우 레포 구성 엄청 짱짱한데요! 공유해주셔서 감사합니다~

sangin1.park님의 프로필 이미지
sangin1.park

작성한 질문수

질문하기