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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.11

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

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 b1c3a0e7c1ad23727e1e62b29e4ee3cb075a9197dcd5923460dd4ffc0bb7c14d
MD5 4260bc62f4cfa588491cdcdeda4dea92
BLAKE2b-256 969984908a4fcb5e027e74764f025524127dcdc1fca007960bc28f47d758395e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 7e79716b712da1a87b3fc7793b4c9c0383bb710e0e07b74abb11b3e88de13bb2
MD5 e615a3ff7e9ba345f623e8b966900ee5
BLAKE2b-256 29c589703d205fed6910c9d2b206845b784ae0bb744ca165670ca7215e03d28c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp313-none-any.whl
Algorithm Hash digest
SHA256 af3e9c771d9f767283a17cdde211cce3c275321e0840e459d14af8f3e63badaa
MD5 d4d37238cfe61cc83b75285560cd5aba
BLAKE2b-256 64b0c1312a9932267c96263ed1cd2ebf066fb12c235dbbe9ab35e6e3b9e43c80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 288563ccc035750b88eba5366907d76058da63ffffc971dc1fb769ad4f0aadb0
MD5 a6c1bbbfb533d1d039715da2d5e8511d
BLAKE2b-256 27dff12c290fd3ca147e4f3c1b472bc124b49ba80b5ec8f6839fd0e625499f43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 fdba81097dbd3566b98bfedb37203fd28a271e66a485ee6121a04c116427a184
MD5 2a9861bf96a03f548df9082646b69060
BLAKE2b-256 2629f35787d1eadf7d507a12249cb2a9f84b59ecc879a0364378866ff6f47db7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp312-none-any.whl
Algorithm Hash digest
SHA256 ca65ae5bb5b1bfbca9490293c0265e6ff5ed6d1f731ab59ea93f4d876ab280c7
MD5 511f7cf0b8cb8f6af86d717c798db658
BLAKE2b-256 cdacabc5e8e4427de317551ccaaa28da74e067a8203abdc6973582be7c8ea989

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 f8715a6e91c52b2fbf4f1082bb0acb3af6046b95ca17eb0ec4608c7f561be610
MD5 256cddd629bc4fbb6a4551e7688ea39e
BLAKE2b-256 511799cb1565db16b0fc7b89e2c9d10ba68f9d916189bd3ec85321d2835b95e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 bef952235c988d633c38d3cdd6754fc9da868763d5dd47647972656223e2c0a7
MD5 b2b745325dc4845d0b8da0ff48f8b4ac
BLAKE2b-256 1ca2484e6ae6b0b1ef412f0c5b92fb4cac1d4de5e0d6e8252107352c272ab784

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp311-none-any.whl
Algorithm Hash digest
SHA256 9d189041a1baa6ca851c684b22cd49005b9c74126f9184480e6b6fba4d363ecc
MD5 21ecc2d74175dcc39cb9a901ba65d8e9
BLAKE2b-256 81f4a1a10d58d938aa0655859ff1508b754728ecb1be9a1f11b8b999a9d3ca74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 6ed5841e705cc63bfd8878db1f9bd872de252f6ea582663cb5e1eda9af7a5448
MD5 5ddd5edb05fe89b8dc0f3370d8b39a42
BLAKE2b-256 89b0cc1c7de5ceed960de0fbe6e4b5b71b0d972e21a9f3a96a1f41c44eb87d49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 07a309c93ed3e5800a60b51572f45425678035d09bca29885d033f663c02a849
MD5 7385c469a383c5116bcd4dd2bcf3b304
BLAKE2b-256 930a9178def28b999c56ff08f926c4467e6510c72f35e7032ec093b4d970a115

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260326-cp310-none-any.whl
Algorithm Hash digest
SHA256 14b5cd90e58b0278cec8ef7d1d0e90c087517a420148375d47be679bd42e8148
MD5 778da97634448cbc0dd12d7030001c27
BLAKE2b-256 97a2cc8691e8bf2b533706cf5e6ab78a547d284ab902c1d754d8f4c02e2b9b8a

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