XGBoosting Home | About | Contact | Examples

XGBoost Configure "OMP_NUM_THREADS" for Model Training

The OMP_NUM_THREADS environment variable can significantly impact the training performance of XGBoost models.

By setting this variable to an appropriate value before training, you can potentially speed up the process and make more efficient use of your system’s resources.

This environment variable must be set before it is used. This can be achieved by setting the variable in the first lines of the program.

This example demonstrates how to benchmark XGBoost training time for different OMP_NUM_THREADS values, helping you to identify the optimal setting for your specific use case.

import os
os.environ["OMP_NUM_THREADS"] = "1"
import time
from xgboost import XGBClassifier
from sklearn.datasets import make_classification

# Generate a synthetic dataset
X, y = make_classification(n_samples=1000000, n_features=20, random_state=42)

# Configure the XGBClassifier model
model = XGBClassifier(n_estimators=100, random_state=42)

# Benchmark time taken for training
start_time = time.perf_counter()
model.fit(X, y)
end_time = time.perf_counter()
duration = end_time - start_time

# Report time taken
print(f'OMP_NUM_THREADS={os.environ["OMP_NUM_THREADS"]}: {duration:3f}')

Running this example with different values for "OMP_NUM_THREADS" will produce results similar to the following:

OMP_NUM_THREADS=1: 10.324499
OMP_NUM_THREADS=2: 6.079737
OMP_NUM_THREADS=3: 4.785279
OMP_NUM_THREADS=4: 4.228352
OMP_NUM_THREADS=8: 3.904531

In this example, we:

  1. Generate a synthetic dataset using sklearn.datasets.make_classification.
  2. Train an XGBClassifier model on the dataset.
  3. Print the execution time result, showing the number of threads and time taken

The results suggest that increasing the OMP_NUM_THREADS value can lead to faster training times. However, the performance gains may diminish or even degrade beyond a certain point, depending on your system’s specifications and the characteristics of your dataset.

To find the optimal OMP_NUM_THREADS value for your specific use case, experiment with different settings and monitor the training times. Keep in mind that the ideal value may vary depending on factors such as the size and complexity of your dataset, the number of CPU cores available, and the presence of other resource-intensive processes running concurrently.

By setting OMP_NUM_THREADS appropriately before training your XGBoost models, you can potentially achieve significant performance improvements and make the most efficient use of your system’s resources.

See Also