Download the Jupyter Notebook for this section: parallel.ipynb

Parallel Processing Example

import pyblp
import pandas as pd

pyblp.options.digits = 2
pyblp.options.verbose = False

In this example, we’ll use parallel processing to compute elasticities market-by-market for a simple Logit problem configured with some of the fake cereal data from Nevo (2000).

product_data = pd.read_csv(
formulation = pyblp.Formulation('0 + prices', absorb='C(product_ids)')
problem = pyblp.Problem(formulation, product_data)
results = problem.solve()
Problem Results Summary:
GMM   Objective  Clipped  Weighting Matrix
Step    Value    Shares   Condition Number
----  ---------  -------  ----------------
 2    +1.9E+02      0         +5.7E+07

Cumulative Statistics:
Computation   Objective
   Time      Evaluations
-----------  -----------
 00:00:00         2

Beta Estimates (Robust SEs in Parentheses):
pyblp.options.verbose = True
with pyblp.parallel(2):
    elasticities = results.compute_elasticities()
Starting a pool of 2 processes ...
Started the process pool after 00:00:00.
Computing elasticities with respect to prices ...
Finished after 00:00:04.

Terminating the pool of 2 processes ...
Terminated the process pool after 00:00:00.

Solving a Logit problem does not require market-by-market computation, so parallelization does not change its estimation procedure. Although elasticity computation does happen market-by-market, this problem is very small, so in this small example there are no gains from parallelization.

If the problem were much larger, running Problem.solve and ProblemResults.compute_elasticities under the with statement could substantially speed up estimation and elasticity computation.