Skip to main content

XProf Profiler Plugin

Project description

XProf (+ Tensorboard Profiler Plugin)

XProf offers a number of tools to analyse and visualize the performance of your model across multiple devices. Some of the tools include:

  • Overview: A high-level overview of the performance of your model. This is an aggregated overview for your host and all devices. It includes:
    • Performance summary and breakdown of step times.
    • A graph of individual step times.
    • High level details of the run environment.
  • Trace Viewer: Displays a timeline of the execution of your model that shows:
    • The duration of each op.
    • Which part of the system (host or device) executed an op.
    • The communication between devices.
  • Memory Profile Viewer: Monitors the memory usage of your model.
  • Graph Viewer: A visualization of the graph structure of HLOs of your model.

To learn more about the various XProf tools, check out the XProf documentation

Demo

First time user? Come and check out this Colab Demo.

Quick Start

Prerequisites

  • xprof >= 2.20.0
  • (optional) TensorBoard >= 2.20.0

Note: XProf requires access to the Internet to load the Google Chart library. Some charts and tables may be missing if you run XProf entirely offline on your local machine, behind a corporate firewall, or in a datacenter.

If you use Google Cloud to run your workloads, we recommend the xprofiler tool. It provides a streamlined profile collection and viewing experience using VMs running XProf.

Installation

To get the most recent release version of XProf, install it via pip:

$ pip install xprof

or with TensorBoard:

$ pip install xprof tensorboard

Note: For Python 3.12+ users, if you encounter ModuleNotFoundError: No module named 'pkg_resources', install an older version of setuptools:

pip install "setuptools<70"

Running XProf

XProf can be launched as a standalone server or used as a plugin within TensorBoard. For large-scale use, it can be deployed in a distributed mode with separate aggregator and worker instances (more details on it later in the doc).

Command-Line Arguments

When launching XProf from the command line, you can use the following arguments:

  • logdir (optional): The directory containing XProf profile data (files ending in .xplane.pb). This can be provided as a positional argument or with -l or --logdir. If provided, XProf will load and display profiles from this directory. If omitted, XProf will start without loading any profiles, and you can dynamically load profiles using session_path or run_path URL parameters, as described in the Log Directory Structure section.
  • -p <port>, --port <port>: The port for the XProf web server. Defaults to 8791.
  • -gp <grpc_port>, --grpc_port <grpc_port>: The port for the gRPC server used for distributed processing. Defaults to 50051. This must be different from --port.
  • -wsa <addresses>, --worker_service_address <addresses>: A comma-separated list of worker addresses (e.g., host1:50051,host2:50051) for distributed processing. Defaults to to 0.0.0.0:<grpc_port>.
  • -hcpb, --hide_capture_profile_button: If set, hides the 'Capture Profile' button in the UI.

Standalone

If you have profile data in a directory (e.g., profiler/demo), you can view it by running:

$ xprof profiler/demo --port=6006

Or with the optional flag:

$ xprof --logdir=profiler/demo --port=6006

With TensorBoard

If you have TensorBoard installed, you can run:

$ tensorboard --logdir=profiler/demo

If you are behind a corporate firewall, you may need to include the --bind_all tensorboard flag.

Go to localhost:6006/#profile of your browser, you should now see the demo overview page show up. Congratulations! You're now ready to capture a profile.

Log Directory Structure

When using XProf, profile data must be placed in a specific directory structure. XProf expects .xplane.pb files to be in the following path:

<log_dir>/plugins/profile/<session_name>/
  • <log_dir>: This is the root directory that you supply to tensorboard --logdir.
  • plugins/profile/: This is a required subdirectory.
  • <session_name>/: Each subdirectory inside plugins/profile/ represents a single profiling session. The name of this directory will appear in the TensorBoard UI dropdown to select the session.

Example:

If your log directory is structured like this:

/path/to/your/log_dir/
└── plugins/
    └── profile/
        ├── my_experiment_run_1/
        │   └── host0.xplane.pb
        └── benchmark_20251107/
            └── host1.xplane.pb

You would launch TensorBoard with:

tensorboard --logdir /path/to/your/log_dir/

The runs my_experiment_run_1 and benchmark_20251107 will be available in the "Sessions" tab of the UI.

You can also dynamically load sessions from a GCS bucket or local filesystem by passing URL parameters when loading XProf in your browser. This method works whether or not you provided a logdir at startup and is useful for viewing profiles from various locations without restarting XProf.

For example, if you start XProf with no log directory:

xprof

You can load sessions using the following URL parameters.

Assume you have profile data stored on GCS or locally, structured like this:

gs://your-bucket/profile_runs/
├── my_experiment_run_1/
│   ├── host0.xplane.pb
│   └── host1.xplane.pb
└── benchmark_20251107/
    └── host0.xplane.pb

There are two URL parameters you can use:

  • session_path: Use this to load a single session directly. The path should point to a directory containing .xplane.pb files for one session.

    • GCS Example: http://localhost:8791/?session_path=gs://your-bucket/profile_runs/my_experiment_run_1
    • Local Path Example: http://localhost:8791/?session_path=/path/to/profile_runs/my_experiment_run_1
    • Result: XProf will load the my_experiment_run_1 session, and you will see its data in the UI.
  • run_path: Use this to point to a directory that contains multiple session directories.

    • GCS Example: http://localhost:8791/?run_path=gs://your-bucket/profile_runs/
    • Local Path Example: http://localhost:8791/?run_path=/path/to/profile_runs/
    • Result: XProf will list all session directories found under run_path (i.e., my_experiment_run_1 and benchmark_20251107) in the "Sessions" dropdown in the UI, allowing you to switch between them.

Loading Precedence

If multiple sources are provided, XProf uses the following order of precedence to determine which profiles to load:

  1. session_path URL parameter
  2. run_path URL parameter
  3. logdir command-line argument

Distributed Profiling

XProf supports distributed profile processing by using an aggregator that distributes work to multiple XProf workers. This is useful for processing large profiles or handling multiple users.

Note: Currently, distributed processing only benefits the following tools: overview_page, framework_op_stats, input_pipeline, and pod_viewer.

Note: The ports used in these examples (6006 for the aggregator HTTP server, 9999 for the worker HTTP server, and 50051 for the worker gRPC server) are suggestions and can be customized.

Worker Node

Each worker node should run XProf with a gRPC port exposed so it can receive processing requests. You should also hide the capture button as workers are not meant to be interacted with directly.

$ xprof --grpc_port=50051 --port=9999 --hide_capture_profile_button

Aggregator Node

The aggregator node runs XProf with the --worker_service_address flag pointing to all available workers. Users will interact with aggregator node's UI.

$ xprof --worker_service_address=<worker1_ip>:50051,<worker2_ip>:50051 --port=6006 --logdir=profiler/demo

Replace <worker1_ip>, <worker2_ip> with the addresses of your worker machines. Requests sent to the aggregator on port 6006 will be distributed among the workers for processing.

For deploying a distributed XProf setup in a Kubernetes environment, see Kubernetes Deployment Guide.

Nightlies

Every night, a nightly version of the package is released under the name of xprof-nightly. This package contains the latest changes made by the XProf developers.

To install the nightly version of profiler:

$ pip uninstall xprof tensorboard-plugin-profile
$ pip install xprof-nightly

Building from source

If the pip packages don't work for you, you can build XProf from source using Bazel.

1. Set up Bazel

Bazel is the build system used for XProf. Bazelisk is a wrapper for Bazel that simplifies Bazel version management. Download the appropriate .deb package for your system from the Bazelisk releases page and install the downloaded package:

sudo apt install ~/Downloads/bazelisk-amd64.deb

2. Obtain the Repository

Clone the XProf GitHub repository to your local machine:

git clone https://github.com/openxla/xprof.git
cd xprof

3. Build the Project

Build the pip Package: Use Bazel to build the XProf pip package:

bazel run --config=public_cache plugin:build_pip_package

Navigate to the Bazel Output Directory and install:

cd /tmp/profile-pip
pip install .

Next Steps

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

xprof_nightly-2.23.1a20260409-cp313-abi3-win_amd64.whl (21.8 MB view details)

Uploaded CPython 3.13+Windows x86-64

xprof_nightly-2.23.1a20260409-cp313-abi3-manylinux_2_35_aarch64.whl (42.1 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260409-cp313-abi3-manylinux_2_27_x86_64.whl (24.8 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.1a20260409-cp312-abi3-win_amd64.whl (21.8 MB view details)

Uploaded CPython 3.12+Windows x86-64

xprof_nightly-2.23.1a20260409-cp312-abi3-manylinux_2_35_aarch64.whl (42.1 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260409-cp312-abi3-manylinux_2_27_x86_64.whl (24.8 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.1a20260409-cp311-abi3-win_amd64.whl (21.8 MB view details)

Uploaded CPython 3.11+Windows x86-64

xprof_nightly-2.23.1a20260409-cp311-abi3-manylinux_2_35_aarch64.whl (42.1 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260409-cp311-abi3-manylinux_2_27_x86_64.whl (24.8 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.1a20260409-cp310-abi3-win_amd64.whl (21.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

xprof_nightly-2.23.1a20260409-cp310-abi3-manylinux_2_35_aarch64.whl (42.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260409-cp310-abi3-manylinux_2_27_x86_64.whl (24.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.27+ x86-64

File details

Details for the file xprof_nightly-2.23.1a20260409-cp313-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 4f6ab6a11a8dc158506b062c04ee0f03a2675641fac32dca4ffd269ffa5d294b
MD5 013b64f364eaa181eade9353209d9194
BLAKE2b-256 df373de951f4109f5b07db9c4bc87e7068d21382a091ace067ded55ac8631140

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp313-abi3-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp313-abi3-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 9e105abc2a6781c4c95c2769d7ac8c80d1847181f4e7586eba4ba38c95fe866d
MD5 953544f6306dc5300db58e7c31e0ec39
BLAKE2b-256 96a5c80c631943b9f2ab667b15fa5978f10f519e19db31a7e903605358eb7485

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp313-abi3-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp313-abi3-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 72bffe19e668f3795be8345f41cff83f1e04b057504bfb430bbcfabbc96aceea
MD5 0496ee5f93890f51ec736bfff2cf0813
BLAKE2b-256 653bae9cc30632e0f1ee05ad4b82e1623567cd8183fbea76a1a57ac49178d178

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 19c8da82a5130d5d265808386dfa177f4ba3af55653933e5fed8567c8b5cde34
MD5 4e390ea9423ab4c982af33c7a2ba06e4
BLAKE2b-256 6cd7e3bc4b58da1e47df360a0d6ce992d449a149f748a19ce9a64373d7c3ba01

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp312-abi3-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp312-abi3-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 34ffce014e2017e9ede28761823cdd36a00408d5977f69f4aa8f4b0327d9c50b
MD5 b2b64936bb51237865d46501b95135ef
BLAKE2b-256 979f965e5f36f0ee16a9f1534dcada924ddc9ee34984bbcdecf7dfbee5ee1233

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp312-abi3-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp312-abi3-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 185d9ef22733d8fa57c65f777131a6330381a0448e4f8aae69159d0955044f02
MD5 60e9c2fa3ef6b90685cfd480bf0ca6fd
BLAKE2b-256 4a1c7eb60abb3057018e6701829a437b0a97e42e3fab2d3dcbd56431cd1940bf

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp311-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 49f2f1a36d6d8f867949ab3f95b0d87493b679f9ef790639f8c881c41ad3627e
MD5 53c06bdb2c51d98cdd02bc2c8293c3f1
BLAKE2b-256 f7e27f5b247bc2062b9f66d59895d3ae2068ca737a7c6104638b1565a3f25a62

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp311-abi3-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp311-abi3-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 58e7ba9c559a19619fa5c98a7a154f462f0d7a3918644ce95eca11ba9808b356
MD5 6b4b2bb9e6292d21d6c823f3df8c4bb2
BLAKE2b-256 f408046b8c7d0e383b1cb594a31a44b8917e7c9a8a5e9b0cb24f5ea884526315

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp311-abi3-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp311-abi3-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 d2e0595c9e1f7140d133dcbd8c99e7cf66d1144b3771da618cc535a7cd49fb07
MD5 6cf66c14c9f88c82add26d514f0d0aec
BLAKE2b-256 6ee233df5c97e8c5b3ef7d4a79b77e1bc11a0b48b567fe11355b04b3c6c4c8f6

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 117d99ba9e68f6d979e1b2b37a3fde55ba380e3347d21d3afa3f8975c694d7e8
MD5 98faa4af42c7215598a92e279803bd78
BLAKE2b-256 b72c53ead015080880fa95ed8bfb8598a85ab771a55a900a1ff9a1d8b202f1b1

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp310-abi3-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp310-abi3-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 3ff0057f390dd74bc92fb4c3aa973e6b1aa307336bed04fd661b27b4bfa6a9d9
MD5 6a8fbc765dbebe4b172f5fd6d27b4f53
BLAKE2b-256 6189bbd513d48a8774f64bfcc7cedc85f3196f7e59cc1fd3c2bb14f7a849b3a1

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260409-cp310-abi3-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260409-cp310-abi3-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 3945d8a3b267fb3e6b9a99080b284ac539f65ac4750d8cb0c88407b64242c632
MD5 30cbb10578a682ba2df57403be27a613
BLAKE2b-256 c7b8d662502a69a24e8e067032b034faeb915521750ae41e519957b693d11c13

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page