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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.11

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

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 79743fae634e8cff896fd0be6c84bf726bd251a554a6b0c18e06b6c83e52953a
MD5 62f43e423b418d616321ffd89f1b773c
BLAKE2b-256 7c9e6a70c8601ebd091a3f0d9a5af83aecd40f682f161ca79b36d2e0c75f41d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 de1eff60d3164b06f9044f0c9ba12d69fc36f2abe55c81f7a76e6ec09e270c20
MD5 931b8daac4b1ca20c98e97779dfdcf06
BLAKE2b-256 61ea3a07852532ec62b17a56b0e9311e6a0938612b1d43f60800fe6c069e25f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp313-none-any.whl
Algorithm Hash digest
SHA256 ee7520f6ab3894ed08c4d77fe5fc1227b96aa8923452491d0104a2968c3d283e
MD5 9f4c675e260b6b97143b4d5c0e209655
BLAKE2b-256 8d0b9ebfa3eba59be4d1e199f673b5f764c618ce13e25c75db5e4c0e4230b0b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 6364e51d1581d4d837be6b0b3783e4ba004200cde4266e5a28ad1f9c7049ddb0
MD5 3e8c35697ffad7048e468945db3d880e
BLAKE2b-256 3db943b38dbfe99e6de40255d14ff6a6a6ce4cb3ae006a4502c8e6dd20ebd9af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 a49a6f19d7505414196d6c06238161fbbfbc7bb2049095071e7427c79019f34e
MD5 c3c02570998113fd704d2d4a86a4f6f6
BLAKE2b-256 91d92307f7bbc86a7c760a5957964daf9fcf2149a477cb04c443eb835d9ace06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp312-none-any.whl
Algorithm Hash digest
SHA256 5f49a4ebe94569316295fdbe501853b72a22c212d0d377dd9ff0dc96021b3fea
MD5 30cdbdb8de27cc3c4832ed325b79cabe
BLAKE2b-256 6ea7bb0ed0ff56d642ef5059185362df24ebd967c4faa34315921a179d1f9720

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 3dd619c9aaf13b96c68b291e2857635407b37bdcb37bb943991fb42aaa2375c0
MD5 f1512a1e261cb8e9e4887f1ee9c01ff1
BLAKE2b-256 a192e6d7955175e0e44c2971dabbdcf63dd2966f63d664f2169c43ca5d2bdc59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 25d30efd382782f4e3689868e38cb963d0d152197c09fbde972c79ab4db06754
MD5 e3d40aeac2be0ff3cbedb80ba8e4941a
BLAKE2b-256 6b1f9c1f651b49a6e38e445f3d7feeb977ecc455a111d95b5b1d5861fea81ac3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp311-none-any.whl
Algorithm Hash digest
SHA256 a62a9c1a3670cb13446dcdc840a61370e19ceadc6f2d41307e2ab4677fd01d15
MD5 4c7fc676f54f8f53f332f4e90d12e296
BLAKE2b-256 cc42dbc789f4719da6a5c183f63db9dc5e5a68840ba1ffc0bc24ee6c58d38ed7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 89a5ee026f670c409b5f880ebf02a24660736c2eef8d8f10da660d0b4438970f
MD5 f4d4534d8f8288ace4ce7367eaa89fa6
BLAKE2b-256 f5976c470b73c163ee531f6aa6dd96bd3c2ac56e40b0db2d5f28c8b4fdea26be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ac61b96fb1a4accba93a4ede9a67ff2f6151466bcba37835c35a6b47501a19c7
MD5 1da55d6c517214290bb718ec057bde78
BLAKE2b-256 d1ac3c807f1f45fc441d0382118b776e567996b732d91ccdadbcd06150c8a743

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260317-cp310-none-any.whl
Algorithm Hash digest
SHA256 295daa79f8ddf39e3575befa2ebf50b9b6f7356f19ec26f2a673dbf36f02e7d6
MD5 c008395ea05b9ec4ccd4711acbe519fb
BLAKE2b-256 442b126ee3d6288f2122fcb25699c3b7e855e7b5769f241289a922fcca4156c2

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