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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.11

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

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 d400d59018f5b495f9d7b5ca1af196842b62d4e02f4d8704fb6bfe0e9250f9ef
MD5 80c3d569b7dc17099309bcd40d8cac8a
BLAKE2b-256 0a24561692a0f3cea229f7ff353672636e44a605d13e883b45ef062c09912ea8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 7b19f57ff85defe5a5a19f78c03f907b9ce2a41101aa41a8f79a4632e9a31408
MD5 de5d9e87517c6f9bf63402779b8d02cd
BLAKE2b-256 09bee823b55df53ee3e40e73ad0bce361240341ec11cd351acaa7b982d4f923c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp313-none-any.whl
Algorithm Hash digest
SHA256 deb4fa43621ab149d744c71dd0784e03813fd93276014ccd3c7b72a8d492d63d
MD5 bd048b626f68a3e12c6f6d5a01e6ff97
BLAKE2b-256 90e49488737daf3e2c5fc0c316cb92fadbf09a20563c94fffa5688992f52e7b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 885674efce4b91efc2f7b1b426039d604b0516d6149207bb2e2d7238b7ae7cc6
MD5 0d875559680e8e24567699584b195468
BLAKE2b-256 7f1b081563541a51bdcdcc29cfcbda63f31a4f00d744749f6d7d5bf788d96c49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 296699089d83f23d7a476a331c9a893aaa3a876984c18227fdfd42c177739639
MD5 569fdb66cfdb623b5d3ce311ff963a80
BLAKE2b-256 454425c76c1b0d614bcddd7610100c76500a9a406f5bf8b4a6c821824ada6b60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp312-none-any.whl
Algorithm Hash digest
SHA256 6ebc62e9db4b053d24ae4bfccb00009f848f32989d719f244dc65ae22ba7765a
MD5 8fa20380ff69812b6937d4cc011b9a91
BLAKE2b-256 ce76053489f387d9b15cffee614ba771a32b9b635245cea5bcb0a3f0ca30fd10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 c5c504f0e93a809add88df357c164ae5091e39c93da79985cb13b7f86aae6556
MD5 6887e3b78d0a2557a346b3ec56651d80
BLAKE2b-256 bdd679319b77f3d91e1bd12d7c5f4f1edb298cba942261808e935aa27a976ab7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 646f70f1066da8ac21ee38c6f3e6cb6e46df09f4fee9169db2a1d0434811746a
MD5 f2559ec06a4112b00a3a87af270b2c54
BLAKE2b-256 3851d8f3ab7c22226f996b00694f055adddf0d1ff6b754c1e74ce11a40c942e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp311-none-any.whl
Algorithm Hash digest
SHA256 032a5dd351434a225b6a868724deb5070ad3d0632519f7ab604a59ba0583f972
MD5 af98d6e9427fe746045afaec1ad90faa
BLAKE2b-256 8988c457b67b0e59598a5b346ce707989033f0b4cd44df210f7fdcf0298acd54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 af532419ea249f8285df763e2ca3189eb222b033afd049aa4c05303b779434d8
MD5 569494d45f15468ad0580b2a1f3c5752
BLAKE2b-256 d60850e3dea614adc164263f3ccf8c2feadb8cd7f0a29620e7bf827293cd2cb8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 c0f0e32794307c8099603560a58798eaceefa4cf26256c75ad9dac8fc384e0e1
MD5 9882fa2630679de0ed59e013b7fe8072
BLAKE2b-256 5356b61e8c8d6c4838da450bcebdd3e1f01459da9832a0ce381ce0ae4c60599a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof_nightly-2.23.0a20260328-cp310-none-any.whl
Algorithm Hash digest
SHA256 43e2740759436d3e285f46de06692f43ab7b37f89e9bc126bce595395f3356a0
MD5 f64df940c9eea8a746b6803ca7eebd4f
BLAKE2b-256 ff16078176a3571661dfeee5b87f5b3caa634f133d92c19f826ffbf59ec978ef

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