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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260401-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.0a20260401-cp313-none-any.whl (22.0 MB view details)

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260401-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.0a20260401-cp312-none-any.whl (22.0 MB view details)

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260401-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.0a20260401-cp311-none-any.whl (22.0 MB view details)

Uploaded CPython 3.11

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

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260401-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.0a20260401-cp310-none-any.whl (22.0 MB view details)

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 bf6231dd599c5641e7c11222603572188955e8e67bdb531c05bf72e34f97f817
MD5 cfeb40d089b2cfcf213b3149d47958e1
BLAKE2b-256 2845420e31c1c86f8b6870c50a78831b77fdad54de4229f06ade52051e81d034

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 79edbacb90fee4762f63a1750f1fbdd45226c38d39489b3106046656481cac7d
MD5 0ea6adc117a3aec98fd9430d4e3c1fda
BLAKE2b-256 2a89c18aafc7563a0e19123d3b6fbced11b7484391a2a1628680678b3990abb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp313-none-any.whl
Algorithm Hash digest
SHA256 e1abe71ca74b7d51dc5ed97fb970a69a25f421aaff8e3b4e3f7f2211e1d7b18e
MD5 a22d5ab7a1ac4ebee4ffd6522af81f4d
BLAKE2b-256 238205459062b7a8503253d5bac1453405b9cc3b9407393069cc6bfe0e7df929

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 039746421e4b873bd47f935b3a7d01ebb57da9a000e781055296e106a8c68180
MD5 6eeebae0a4d3804015e299eef255d68c
BLAKE2b-256 8fca5d82cca9a048e1453324ee669678cae7da57735ff69551e43d5e441cbf35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 bb804059461ef2dc21ce6b2c755d19d220a3040552dec9d33c946c7e52c33744
MD5 2bad58e1fb395a916b6953f18e7af64a
BLAKE2b-256 d96c9701b03cb869f9fd0d38acf0d954acff525cebdcb2e4f1aa1f73211388f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp312-none-any.whl
Algorithm Hash digest
SHA256 ca751a4dfff55e0343cd5b971e5822b4acdda8c173a0f7e5ce7960c58872beb6
MD5 cdc2b8c81af7b223322f4726c9d55b1d
BLAKE2b-256 5f900d5832ed3108a1b04cfba6b889037f5f0d53e95964b2e08a9395665ee9a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 fe2c87fa71ac96173a054c6bc5a5a6e7b66c0d15dd184e027da724dbcb4c7407
MD5 7c924f15ebfe74078245b72920c7b672
BLAKE2b-256 48380950e27f5de3ad01766a1c4fe811b1ffb561245060a85d77309e8919bca4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 1d4a1e95cc65b6120d38d699d0651543c367c3b27556c584bb5d91fb756194fa
MD5 b128beca65bad53e627a83fac4e5a3b0
BLAKE2b-256 827e31db26420f94bda0f10770750d5690a2a63050c9bf01176887c32a3c6edf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp311-none-any.whl
Algorithm Hash digest
SHA256 8f69e5abc469c11ec58990c871d286e7c2dbb5df83e25ed8d768e1230fe81624
MD5 31935d95bf97addb5d9fc1186b7828eb
BLAKE2b-256 35a6507c426dd11a165dcf8f70e175f9454494c138fe8742851d11ac8df178fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 252297f8a7ac247cae7fca5d866ac77c4a254e93737d6cd90c9165bb2bd04ad8
MD5 e6d143af30a3b8f1db52ffccb25551f1
BLAKE2b-256 303e436f8e253c686f9ad201fda85a00a816f125d5410e5683ac54bdb75263df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 efd697f3a17fb13084687a1d23f8777b504a44d3985e6133a2d443a9571bb62e
MD5 b39a62053bc23a2c33bdd65ed8f229df
BLAKE2b-256 a042e8603cacdbd8e74dc276c919028aa058a0f7218749b49ca76b5cbef0492b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260401-cp310-none-any.whl
Algorithm Hash digest
SHA256 a3be7fd5fd32fbb2eb688fda621dc1257ca63a42b1cbe1ecee8977d4cbd66871
MD5 31cd0ad118fb60e4d5db71e2aa54947f
BLAKE2b-256 35f5a19b8dbc9afecbd1144ebadddfb6c8961228e4eba8f0de51985d88c3c830

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