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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260403-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.1a20260403-cp313-none-any.whl (22.0 MB view details)

Uploaded CPython 3.13

xprof_nightly-2.23.1a20260403-cp312-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260403-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.1a20260403-cp312-none-any.whl (22.0 MB view details)

Uploaded CPython 3.12

xprof_nightly-2.23.1a20260403-cp311-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260403-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.1a20260403-cp311-none-any.whl (22.0 MB view details)

Uploaded CPython 3.11

xprof_nightly-2.23.1a20260403-cp310-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260403-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.1a20260403-cp310-none-any.whl (22.0 MB view details)

Uploaded CPython 3.10

File details

Details for the file xprof_nightly-2.23.1a20260403-cp313-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 602bea9edf8384c2ad70e1ebd663687132eed026e0bf8ef9682d37cf0406478c
MD5 8444acb355f54ffa62ce4446e2ac2676
BLAKE2b-256 abfa1a57a774fad05e3d095a63e3a748e7272e83a9d23e4644869fafb069a4e3

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp313-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 54a9f46f266b8a18f481061b679b2022ab4b5672ce570d1239524d96cf9b5ae1
MD5 bbf119e09a3fa00d9537a18914983eef
BLAKE2b-256 a23d21c22f000a43f6e3d93c455bd54aa715a36503fbadaa159224b72a305c56

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp313-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp313-none-any.whl
Algorithm Hash digest
SHA256 0858e01817f1c4d66f904650b3540a5e0fc56cbdb6cf5ccc0a7f3d7ec38c0474
MD5 3af3a949d25b7eeff6e3b974098afa6b
BLAKE2b-256 5982972839d42845f065bc5eef3544afd11828a574726e355fdfb2682d3251fe

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp312-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 95338ed0aac1cef31a684f154957a51509a6def8da14a61be37c86ab3c0e5165
MD5 492f2563e5b2886154c90b85df0130aa
BLAKE2b-256 9904a0de8c32c0d7da7d130ece063b5f1a84a2c832fa868a95942e2ef47540a7

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp312-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 826c6592d1e9e0950661f11ef9e15fbe5e2fdc99ffadd73e1dc983078221d1d6
MD5 a79d057bfc9f086a8259e74a9158d771
BLAKE2b-256 2a131df393430ea2c8b1933006aa42d281f887969f51f2a1b088c1ccde1c762c

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp312-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp312-none-any.whl
Algorithm Hash digest
SHA256 5ed09b5ac50dedf4c4409bc90c7a791f05c86e6bd83a6f4ad99b2c1aa305cfe7
MD5 38c546a24b5f0e00ce7ea8100c04efc0
BLAKE2b-256 20d4714f44d8493ad6d5b52a5be6d95575ff8c14982990db0c5d8d259481cd07

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp311-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 7e61de792460da3cf09392e2d19a3c0695fa93db42bb61503df198f582bcaeb9
MD5 6c8a5b46a14f1526d679a4b4618d4d36
BLAKE2b-256 b9d3011489f499f951adc9ddb76eb23d23a1e70dcc793eefae8015a591c1d7ea

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp311-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 7d35f509c945e84761d93987ef50cc7b43b740b508b9d9da4ecfa56a8c6c3174
MD5 27f2b3a80fac029b22b24e51e208c856
BLAKE2b-256 87a090d577958e320b6de7682fd8f6848905775db450a9549209a37b728d5d33

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp311-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp311-none-any.whl
Algorithm Hash digest
SHA256 2674a049dc2f4214217f11784a365df0c50b95f0de66c0fab6596c0d8244d681
MD5 c8e225300f26ea47151aa2c73605ef0c
BLAKE2b-256 4b097a26e18a5122441c7cd7194aa015691646b3c8f0b9f3c91c4e126546afc3

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp310-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 c7e958af26e9a0e5687c023950fe74ac39bbd7f932f89fcbc3a9a0bbbee858ff
MD5 002e20e716c96149db12272e449aab79
BLAKE2b-256 8a9a74cae1ec2875a2ae856187ebda64ae19d2d061ed2981e7bec939d8c1e0a8

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp310-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 38e937982b62aac04fea064f632c0079deda5907c18a98b3c175248711123454
MD5 27c258ed40b7deaf5b22d5d94ad011cd
BLAKE2b-256 5c5f65f0055070fa09d8bd2d59bc81f9d44cb95667746439af8ecd30388d9d59

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260403-cp310-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260403-cp310-none-any.whl
Algorithm Hash digest
SHA256 5e43e97e66317f2d2ccc72098724eb44c8a2a9ab25fc62c704bf71ca19075038
MD5 d2d1dad17f521652fb2b4e7d68d99ecc
BLAKE2b-256 ecf0ac780ef634672e0010293093f85c966f082531f4f84ff1918b60fb51621e

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