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.0a20260331-cp313-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260331-cp313-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260331-cp313-none-any.whl (22.0 MB view details)

Uploaded CPython 3.13

xprof_nightly-2.23.0a20260331-cp312-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260331-cp312-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260331-cp312-none-any.whl (21.9 MB view details)

Uploaded CPython 3.12

xprof_nightly-2.23.0a20260331-cp311-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260331-cp311-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260331-cp311-none-any.whl (22.0 MB view details)

Uploaded CPython 3.11

xprof_nightly-2.23.0a20260331-cp310-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260331-cp310-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260331-cp310-none-any.whl (21.9 MB view details)

Uploaded CPython 3.10

File details

Details for the file xprof_nightly-2.23.0a20260331-cp313-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 58719074df70b85ca77cd2bd9c85bf451d92a72eef25fdb7b9898da7a02dc244
MD5 042a06adcaf0232c77cf593c3669229b
BLAKE2b-256 2293e8eac51d430237a0d55b1344476c963995977ab795959d12ea7ce6663c1c

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp313-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 feb264e43dd4592c54497398c0d5810c8e7080f76ebf9d829ce36b1efaa418cf
MD5 3242f2345da83889e4fae947d511596c
BLAKE2b-256 b4e6f4673b11b2a90639716b43754b0ad2d17e1e5f7c670ad33c07c548a6612e

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp313-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp313-none-any.whl
Algorithm Hash digest
SHA256 a7a4f65b8910a1c92c283f36a8670d35a12308c93e5b84d6d58b016a4ebdf765
MD5 27b5b370b80f3be81e9177dfa9db992f
BLAKE2b-256 547a30198a6c0b87f26c2f1ceac841e0b336b527a02b43c6dc6a0aa447359482

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp312-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 0be7eb245e083d73ca3812f5c1cd357a17e0a196c4a422818304219f67571aad
MD5 30eac3f0d7ae78e5a04dd502d6d8cd42
BLAKE2b-256 eff37774a43507e4152715aeef7f5e35344e7bfb5d0b048e23ee34c380458057

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp312-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 cf830b1d5d514cfe571ab9126b443366ae3b15b99d5490c4071ba6175f6aab08
MD5 b675de25127399e6980834cf4011eb54
BLAKE2b-256 4cd5e25f08a2a738d9f0ea360dc3afaaf5281936e8e851d7fdaeecc25628a147

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp312-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp312-none-any.whl
Algorithm Hash digest
SHA256 4fe1651da6d37b35a80af0d273454bb41bbf47da1e2fdbb1d1859401df5881b3
MD5 897c8af830711c326c7a1be258586f94
BLAKE2b-256 5f3dded22ed342583aedef9135b5bc6a28b768f5a47c8b7f689b62adda2792dc

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp311-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 efe84d9d3d63f0f0785d2c41e8628aea5023795a829d665102e697a77468cbd4
MD5 583acfd057626730d594c00897ea950a
BLAKE2b-256 15b6779dde97de1bfe5f198c6e575e091237cec3deeb575f181bd2d45db5c002

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp311-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 7f9a2acd2dfbe49d821de8b7809e6cc869a4ab9ae04650beac1cc528dbded707
MD5 de2453a2605b21dd5c2a9abecdd1ae9b
BLAKE2b-256 cee9bb1c1a6c65efbca8b5a43519c968a3068cbb73cff75504dd407519a6bced

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp311-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp311-none-any.whl
Algorithm Hash digest
SHA256 09a51e1f393aab68a4351b9b2a286be9256bc14d0957c8447cfa2b80edb1582c
MD5 586b6794e084fb7aec44409c9e068fb1
BLAKE2b-256 e9dc83f0b732bc846b29d41ffc15c881f95781dc3d4b0d4d2d686b96067ede09

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp310-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 33de1c6d0a1c6678551feac8e098b7b26f5f2c736ccc68bd8de44acedd2bfa3e
MD5 10b5c183aca9e3486c8195d372327279
BLAKE2b-256 bd8686776f9f08ec28b81d48d822fe689b19b1ce14c2092135d7899e8959b64a

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp310-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 963cdcf23c72748fa13645124ea7c82eac565ddca1703b224aa8c4b86626c5dc
MD5 a8f6557fb18191293551ede18f6fa003
BLAKE2b-256 afbf8c5a46be4ee75241f7fe5dc401a2252c04768d7733303fd7290c48a159eb

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.0a20260331-cp310-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260331-cp310-none-any.whl
Algorithm Hash digest
SHA256 33f481a41788bc9c0adf15463422e048c0697112700751e3449378e7a4b5cc3c
MD5 d78e89c509bfc1ef48d1775b9abc12b5
BLAKE2b-256 da5f07a099f73c6c304785ebbaad486bb4e5879ba63f3096d59de7418afa0d68

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