Understanding concurrency in evaluation tasks and scorers
Last updated: May 4, 2025
When running evaluations on datasets, it's important to understand how concurrency works to optimize performance. Here's how parallelism is handled in the evaluation framework:
Default behavior
By default, the evaluation framework launches all tasks as independent asynchronous jobs that run concurrently, with no pre-defined limit on concurrency. Each data input is processed as a single unit that includes:
Running the evaluation task
Executing all scorers for that task's output
Controlling concurrency
You can control parallel execution using the max_concurrency parameter when running an evaluation. This parameter limits how many input-task-scorer blocks can run simultaneously.
How scorers are executed
Within each input-task-scorer block:
The evaluation task runs first
Once the task completes, all scorers for that input run concurrently
The thread pool size can impact when scorers begin execution. A larger thread pool may allow scorer execution to begin sooner as tasks complete.
For more details on limiting concurrency, see our documentation on running evaluations.