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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.11

xprof_nightly-2.23.1a20260405-cp310-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 a0c553d70dd3013e9afa92368676b37f7c3920f0d9234136ea981197d765315d
MD5 9fbd00a8fcec2d82edff39e341ded706
BLAKE2b-256 65520b5bb1d2d511fe1e68af39f608c6c8c86729cfbea3b4c00fca2519ada94f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 0d4cb890c040fda84232762e0fca51ef580b490cce67fedc20799573ccbf9f09
MD5 18fcfb82d1b1e3308f301539a38a91c9
BLAKE2b-256 143bd2afad87c8f93772deb7968e5fd8a4853f95e0e7e434967625a14a2af89d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp313-none-any.whl
Algorithm Hash digest
SHA256 15471b04c41991e6c4b65c81ee7a4e4f8b65edc382af5420c681524c8d4577ad
MD5 25600240a17a02cf227899e342d0017a
BLAKE2b-256 0bf9e22d2b01f7221dc58ccda3906454dce27af13370bcc4212ba1c51931cef2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 f8de5289b732b875dc8d151a2430e1dcba2d5d7d2a5232ccc5cd14ba826f6165
MD5 2bdc0bb7a6e4a9e86584eb95891512c6
BLAKE2b-256 409cab6b8a0d5c2f81ad94f6abe60c9e22f5fcc3021b6294a33f5a02e868e3c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 9fc1a8a5680d11ee4f4b2303e858c0f780b5bd81fcf08d9c2bbabb075fed2fe7
MD5 c2015f81e387724fbb3869e141f813a8
BLAKE2b-256 c0cc8b468e3e5d39aec41d2f57d0a925e4b914ee108c167b54ac4f2fa07b080e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp312-none-any.whl
Algorithm Hash digest
SHA256 eade56da50a4673797fb04a9f132eee63abc314f8cda8e9132b8956ca01c94b2
MD5 024424a068e1052fe73eeba1822166f4
BLAKE2b-256 bf4358bd3be14aa52a60c7b79b224039e23368d616d6ed7957f00d244c1c8314

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 4e48d23f60a425e855ca9630f76d9040783c0f38c6f674a024b277b4861a9d2e
MD5 5d14b4721f64eeb73479a9e430823eb3
BLAKE2b-256 4015b38ece7c0d57726a621503cb4c6d9044f0ee54538ac1b9b4011910a86b22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 1f518035f2c0c1934c377f3fa26d98690f4b5b7f557ed302adc34a1107dd4d36
MD5 b26e9e2845fb71ffaf51142cb4ea504c
BLAKE2b-256 e172ba7d4d245c5db2fb638ff82c1908019f9f9440fad5226bb2bf2ccd189475

See more details on using hashes here.

File details

Details for the file xprof_nightly-2.23.1a20260405-cp311-none-any.whl.

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp311-none-any.whl
Algorithm Hash digest
SHA256 cfcdc3f26b2ea503cf686a1c942a35f2d06df120938a0e73e8fe2c792701ac42
MD5 f5b163e3d4811c08ac6c0f86c0b7dfae
BLAKE2b-256 d0a8f63c88296ff36638bca8e7892a7a31488459158c557844862be0891c1d60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 b0791afe69dbdcac5b9599a14dec2367fbffd80aeb2d28f55078e2d8e06da2a7
MD5 da777cbccc061e7c504bffe058b5dd1f
BLAKE2b-256 833c6d974911329188493013ee443735f1a74eb4931f6d5099b81e478f8d3e26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 4775bfb93bef67d19d8ec1e0c1b315a0b1874a970737f18db6762f62c195d420
MD5 b2a576a361d846909eb60b4016e72f69
BLAKE2b-256 6b6ff23dd0f4286a987df82143e9ed224bd381287ecd639085e195a643de2c8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.1a20260405-cp310-none-any.whl
Algorithm Hash digest
SHA256 8ffc9a24780c82edc13acfb4ab0d0adfb0e4e0e62b6e9f2511a05f28616388ee
MD5 edf354bc52931e734b3b87b92bb7d19c
BLAKE2b-256 8f2d62a2727bc96ac327c7b4b6cfd20f83fbb16d661bd95fcf422a87e95e6be7

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