Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
4.1 KiB
4.1 KiB
Parallel Run
As the first agent framework that seamlessly supports running on different distributed computing engines, this README demonstrates how to perform parallel evaluation using AWorld.
Prerequisites
- Python 3.11 or higher
- Ray and PySpark require separate installation:
pip install raypip install pyspark==3.5.0(requires JDK 1.8.0_441)
Setup
1. Prepare the LLM Service
import os
# Set up LLM service using environment variables
os.environ["LLM_PROVIDER"] = "openai" # Choose from: openai, anthropic, azure_openai
os.environ["LLM_MODEL_NAME"] = "gpt-4"
os.environ["LLM_API_KEY"] = "your-api-key"
os.environ["LLM_BASE_URL"] = "https://api.openai.com/v1" # Optional for OpenAI
2. Prepare the Agent
import os
from aworld.agents.llm_agent import Agent
from aworld.config.conf import AgentConfig
agent_config = AgentConfig(
llm_provider=os.getenv("LLM_PROVIDER", "openai"),
llm_model_name=os.getenv("LLM_MODEL_NAME"),
llm_base_url=os.getenv("LLM_BASE_URL"),
llm_api_key=os.getenv("LLM_API_KEY"),
)
my_agent = Agent(name="my_agent", conf=agent_config)
3. Prepare the Tasks
from aworld.core.task import Task
tasks = [
Task(input="who are you?", agent=my_agent, id="abcd"),
Task(input="Hello World!", agent=my_agent, id="efgh"),
Task(input="Nice to meet you.", agent=my_agent, id="ijkl")
]
Running Tasks in Parallel
AWorld supports three different parallel execution engines. Choose the one that best fits your needs:
Ray Engine (Recommended for distributed computing)
from aworld.runner import Runners
from aworld.config import RunConfig, EngineName
res = Runners.sync_run_task(
task=tasks,
run_conf=RunConfig(
engine_name=EngineName.RAY,
worker_num=len(tasks)
)
)
Spark Engine (For big data processing)
res = Runners.sync_run_task(
task=tasks,
run_conf=RunConfig(
engine_name=EngineName.SPARK,
in_local=True
)
)
Local Multiprocess Engine (For simple parallelization)
res = Runners.sync_run_task(
task=tasks,
run_conf=RunConfig(
engine_name=EngineName.LOCAL,
reuse_process=False
)
)
Complete Example
Here's a complete working example that demonstrates parallel task execution:
import os
from aworld.agents.llm_agent import Agent
from aworld.config.conf import AgentConfig
from aworld.core.task import Task
from aworld.runner import Runners
from aworld.config import RunConfig, EngineName
# Setup
os.environ["LLM_PROVIDER"] = "openai"
os.environ["LLM_MODEL_NAME"] = "gpt-4"
os.environ["LLM_API_KEY"] = "your-api-key"
# Create agent
agent_config = AgentConfig(
llm_provider=os.getenv("LLM_PROVIDER", "openai"),
llm_model_name=os.getenv("LLM_MODEL_NAME"),
llm_api_key=os.getenv("LLM_API_KEY"),
)
my_agent = Agent(name="my_agent", conf=agent_config)
# Create tasks
tasks = [
Task(input="What is machine learning?", agent=my_agent, id="task1"),
Task(input="Explain neural networks", agent=my_agent, id="task2"),
Task(input="What is deep learning?", agent=my_agent, id="task3")
]
# Run in parallel
results = Runners.sync_run_task(
task=tasks,
run_conf=RunConfig(
engine_name=EngineName.RAY,
worker_num=len(tasks)
)
)
# Process results
for result in results:
print(f"Task {result.task_id}: {result.answer}")
Engine Comparison
| Engine | Use Case | Pros | Cons |
|---|---|---|---|
| Ray | Distributed computing, large-scale parallelization | Highly scalable, fault-tolerant | Requires Ray installation |
| Spark | Big data processing, batch jobs | Excellent for large datasets | Requires Spark and JDK |
| Local | Simple parallelization, development | No external dependencies | Limited to single machine |
Notes
- The
worker_numparameter should typically match the number of tasks for optimal performance - For Spark engine, set
in_local=Trueto run locally without a Spark cluster - For Local engine,
reuse_process=Falsecreates new processes for each task, providing better isolation