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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260315-cp313-none-manylinux_2_27_x86_64.whl (25.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260315-cp313-none-any.whl (21.6 MB view details)

Uploaded CPython 3.13

xprof_nightly-2.23.0a20260315-cp312-none-manylinux_2_35_aarch64.whl (26.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260315-cp312-none-manylinux_2_27_x86_64.whl (25.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260315-cp312-none-any.whl (21.6 MB view details)

Uploaded CPython 3.12

xprof_nightly-2.23.0a20260315-cp311-none-manylinux_2_35_aarch64.whl (26.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260315-cp311-none-manylinux_2_27_x86_64.whl (25.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260315-cp311-none-any.whl (21.6 MB view details)

Uploaded CPython 3.11

xprof_nightly-2.23.0a20260315-cp310-none-manylinux_2_35_aarch64.whl (26.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

xprof_nightly-2.23.0a20260315-cp310-none-manylinux_2_27_x86_64.whl (25.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

xprof_nightly-2.23.0a20260315-cp310-none-any.whl (21.6 MB view details)

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 3856a56177d3f532870c9c34f5549464674128dbbbf306b96e3264ff96e8af62
MD5 ed3edeede5f670757d8b284cee0b0737
BLAKE2b-256 23e73ecedd7ed838b6a5527f6a45cbcd7e717bb4b3d84829e5424d557a93622f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 22f8a2e3d2d22ca03dd1f13d1781d6ffbdffba45e83c04bb3d62a9934ecd7e2d
MD5 dda6ce099cd5d13019c346af0f92233d
BLAKE2b-256 d5d67bc9aafe558078b7a3f2cd652c94f307ec56d6ed900793702af19252960d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp313-none-any.whl
Algorithm Hash digest
SHA256 b7e466fcf594633393b24d9521958771a37f8a0930bf968dbde46e395336593e
MD5 9e316e1663ecde0f542c5393c6078151
BLAKE2b-256 bed89c35fc431e20a25387442f84586e075277bd613ea94c04fd6f3982eeceed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 2a661f80513d9e4885f7ab9eb26d8729c6789f7a36858394ca0b06fcab2e9d5c
MD5 3f8964b3438f85140fec2ffff797384b
BLAKE2b-256 be333c47db320f7a81b1e44b0f8e410771ed467991752fd31b191995470f6fca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 987d1ab9e4cc3e50387b9cf77053ab0ffbd693702f7e3f38d1a15141f2b4a576
MD5 9bfcf6555171941e2ed35882d111036e
BLAKE2b-256 a93188ef60c514b433035f2ecefd78823dfc39a4b264d5eb721a8ef6326b74c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp312-none-any.whl
Algorithm Hash digest
SHA256 9a8a459d0178e2ac2e9bddfb04edc040b52b79f22aa9d4bbd31961b167e7a4b8
MD5 a0cb1102ca9276c32e301119a33814ed
BLAKE2b-256 aea2e76aa92d40118bdedcf8f5c5b3f8468b30e35405bdbb9e99d950720fa03f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 bae3da535f00e6ae32ad0c4bf8194c0a3246d38209844af6d6816eba3fe8daa3
MD5 2d4eebd30866735156868cf75fe36829
BLAKE2b-256 beea9e4f6c1d820f557da1c53dfbb9b6d296e8809784ce25b8dcffc31aea61da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 47b27562a526c413eed47e8bd05327ef5c03e90eede04d7c2a7fbc5de229e22e
MD5 7957fa8b3a15e5c25346f2323d208b12
BLAKE2b-256 cd568b236d26a87667453bc090d25bc86ffebd3dd80bc98b26f6204638afcbd2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp311-none-any.whl
Algorithm Hash digest
SHA256 d9ad409c147a68c3c8e83649cd95102de4bd264220a49870f0d3cbb7f4849878
MD5 2dca886df02b8ebf1c3c2aca013e629f
BLAKE2b-256 c6b07f7b00403f05f3b093008b3fb7dcd74f576b52f80a226f178d377fb892ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 f78780cc75e4b68a2bab25d7222c1f7a4e48d822dc670bdff26e91ed28afd8fd
MD5 22b69c664cd2b9fa38d5f3263d3988cc
BLAKE2b-256 676523af0fd880cccd00916a50f56321cb944c3ec345c2c28af9250cc5cb7aec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 aa7446578a72695dfc4c9fe4f09e65cd629d8dd53bda755f42ca04cd75ed634b
MD5 dcd065a530c7b3c77650fc18497d019b
BLAKE2b-256 6efb68a978a02218bbe83ed3ca4d11018b96c01bb22d47a97bb08490f15c9c71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260315-cp310-none-any.whl
Algorithm Hash digest
SHA256 1296cd63a39c0d0d4000906bac95cf4dfb4bfec65084fdf7fc20006ba924ee51
MD5 f6b727d49393b993811a1a0a0868f653
BLAKE2b-256 253f56529209d57f1967f3c4f7a057cbbc1fe97c004a65d910b0dd8c34e7762c

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