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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.1a20260406-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.1a20260406-cp310-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 abc4b7cc0f40a292122e1e123ef14299bbe042f014c9d0224a324f209bfdd669
MD5 9292911a22e014857f19ed94fe67f9fc
BLAKE2b-256 91ae73addfa20e48bf2476804ee783cdb53c17d80b96ec3ceb5081e77bcb2032

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 5e7cdf95862078c548b1a930518f19fdac1444354e7101b9158d217d273b0bb9
MD5 e60cf4a683a1b21b0dc815797cc14483
BLAKE2b-256 7f6f723a6991a02dd7ecd527b2786dd8d902a778cb31e0bd424e1732ed39bf05

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp313-none-any.whl
Algorithm Hash digest
SHA256 9f6c5466d20debe139e8a3b428a4fce9895192159e689c9165fa19d8046cdebd
MD5 f0cde624e80211659dbab0c30093dfc6
BLAKE2b-256 05ea8c3a71c53c234c8a3b159550038e05af60911e6db09e6b9767b199b8e8be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 bcc1e2d6394c649c07a778296afa4fdbc4f17be0e36c718cd94a971f9cf4e531
MD5 b073f4be7ecad8c49e27bdf212bd360b
BLAKE2b-256 c439b9cd06b1c8125d92381cb94770cc92aebb6267d4ff014251d11a6b7fbe04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 b03e0b4b5ed0c7d3b1fbcd6d50cb0bd39486e8b2428698def3490102835cfc67
MD5 6a0ee2f5ee2dacd41e6d331658d26f94
BLAKE2b-256 89bce63b2496906ab7031faeacb3de6e67d6dce4f1a52b6f9b762bc152c60db8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp312-none-any.whl
Algorithm Hash digest
SHA256 2d22e050c71f7528dc770a7f9f5e84179003af2a4dd7792e1ecc999ef6e7b52e
MD5 019340fb260f8723eaf5283f52225c78
BLAKE2b-256 16873be2b3fd2ce41f38610adc621bfe7ffc78c26f09b2130639740e93acc820

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 f66338686c3d2da403c7b2146787a49c2a96904573d9b2ea3f2811eae64cb282
MD5 b0e4b84cede88ab519dbea1e0bfaf465
BLAKE2b-256 c92aca8a388b54b84fb9caffb208fc998f1bb3de11197c9c2dacdd69ad1374bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 bfa185ae7a4644257e4997e59ffe5ee2f188ce07d91088fd841f4a2b67214d2f
MD5 e431917e434c764078dedd685488de1a
BLAKE2b-256 20e617429944660ddfbdb6f7f621ab6c749f76ad7abeb8777aa5a7367f977dae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 abe9520417a47d491bb3bbdf7ec40ee0aa3b2c69b940ed990de0e474c6cd704a
MD5 5086b2741397c535260ed659d1092143
BLAKE2b-256 9a70193ccdad9e5c74f9ed1c4b61edc65cff1883df9df9eda95328add337762b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 2304782f89e2b5a63c6ac4a03ccdfc94a9cd820076b4fb87d075ad7c2484165c
MD5 963d169d759cc33b70ff5ecd417a8227
BLAKE2b-256 ebd043dd8579fd5a904428cfc3bcc9e3b547ac494409fb880b7042fab3e5b43f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260406-cp310-none-any.whl
Algorithm Hash digest
SHA256 0918b78b697a1f1cc73327656f0f920d8793260cb9b8b8d0573c51c9c45c1de9
MD5 b1774d9cd3a2633c232f2f5717993163
BLAKE2b-256 d440a7bfa2acd6045af8b048b671988b09d892bb5feb9c88f176ba961289c251

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