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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.11

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

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 25b7c8d7820bdd1b0a78765f688046c9ca0757a6f35520c68a9a96dcf989279e
MD5 0e2830adc3891f0ad1158535b4c1dccb
BLAKE2b-256 f370b6e62993ef0ebbeeae81eeca478eda92ed34dfb979ecdea5172ccf986eef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 a261981bc6c39c2b7d9be391f460b86bc41794d3759e13d7d05420942c00e845
MD5 aead6da9af74f904f09cd4d37b0d8e93
BLAKE2b-256 dbeb2c6c49beecb58d57221cd4d1e33d1c117ba44e2f8698e957d6b4b9694c75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp313-none-any.whl
Algorithm Hash digest
SHA256 4d237eba0ff74b78341c72f47a1fe4fd9f92be9e9303f10a8a9892adc577c29c
MD5 a4983b841ec9f68ce5b6166126122802
BLAKE2b-256 185fec5a620a80557929c1686fcbbef370d64485e494484940c795b7c26f0cc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 4665ec789d3aa11b93526ab41580abdac13db2932af8d9cbd53f23b2a784b5f0
MD5 4f6226c1090b73438625bd93d846b256
BLAKE2b-256 a2d355ca31abb368b856cfc7ef8af029c11536bd5ee599b8f93f7a90a930b3ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 86d6950023d564930289c8317882416ebadb75a6217669313e1df3cc7556157a
MD5 6571f14ca49f82cdb5a756ab14eab062
BLAKE2b-256 6bd62847be323e266df1cd91c39a1920f55f3488b56815f46846fadad7eeedd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp312-none-any.whl
Algorithm Hash digest
SHA256 94e4dbfdd2a13a3d94b475d5fbd47e9f28b7b75d807e746d9092c96a26ed3771
MD5 d7e5f55d9ea0fa55c8fedc2fc4d55801
BLAKE2b-256 bd334830a3d37cbeda121cd7cf3e428d238d51eed3e95590b4e2a64912d5adb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 30c8c423250f4ddc397b577bdc7b48cc4e5212ba84c45dbc3c544435048dad4c
MD5 cc4c195bea3260a820ba4dd96d9f04a3
BLAKE2b-256 6a9d2c4c177b351be491e7c0ae2944b8abc7b51c997db69a25250d0140a28690

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 211b6bcb259927795baf730ca98c6d925676750131e802890738878c45eea605
MD5 e6f6d0ea1808a762cd6d69604e3543b5
BLAKE2b-256 133c57c551a16648a1d3e083b602e872b7ab5d5edf7458e93101036e73ad2ddc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp311-none-any.whl
Algorithm Hash digest
SHA256 27a241ccc21d6330d56716cb41fa8f5fca965255ea76cfa611a3caf135cd8d7f
MD5 2c698db5b4dd418cf041434f477c900d
BLAKE2b-256 58a0b09ca229bdec3472bfd9135a1e06f2c3978ec356e01effcbe3d91c1a8423

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 c11cf1b1c5cb64a0c42f5c9387c5b6b947aee715af9a889e1cbfa7b50a8fb56f
MD5 f8b5bf29a0f08906ae1566e4612a02c7
BLAKE2b-256 30c37a8e90b23c6a131af7967ff3a97cb9f15685770455d2659cdc809b718af4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 98a8363715b6d45dbe37a1c001a62126974f5daa2690836a6c91e42f6f356d4e
MD5 8a3061e50c59a1144397e5cee0913f12
BLAKE2b-256 a66c0586e8c551dc3ab6cfabf7784698c67f64a908ccbbd4698781bc8623bc6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260327-cp310-none-any.whl
Algorithm Hash digest
SHA256 e6e5c74039c2951ea61ee32fe3c5f27207c18d73ea5218b3de0e15f28e3fffa1
MD5 32af941201cf2f7f113086c7e2ef218f
BLAKE2b-256 ce91550f7850ca74b29cd47a72d9d0a379837a2c4a1616af46301cf5c923c7e4

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