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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

xprof-2.22.1-cp313-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

xprof-2.22.1-cp313-none-any.whl (22.0 MB view details)

Uploaded CPython 3.13

xprof-2.22.1-cp312-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

xprof-2.22.1-cp312-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

xprof-2.22.1-cp312-none-any.whl (22.0 MB view details)

Uploaded CPython 3.12

xprof-2.22.1-cp311-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof-2.22.1-cp311-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

xprof-2.22.1-cp311-none-any.whl (22.0 MB view details)

Uploaded CPython 3.11

xprof-2.22.1-cp310-none-manylinux_2_35_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

xprof-2.22.1-cp310-none-manylinux_2_27_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

xprof-2.22.1-cp310-none-any.whl (22.0 MB view details)

Uploaded CPython 3.10

File details

Details for the file xprof-2.22.1-cp313-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 c2b8f805badc54386164f7b463a0cdf7a53e15959c9d1a5f13625395851e7923
MD5 ce8e32b70c0f5a24c528db08314183f0
BLAKE2b-256 cccffc0e5fe1116a3ad5265fca36649890a307320c50d5b3ece01c25b06b006b

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp313-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 48c782c0c6e95c026f6b94dbebfd2319dacdd96939ff8ae9b85f74d6930129e4
MD5 8bc95002fed85ccf8ca10bfd4185cbf8
BLAKE2b-256 596157462db9f6ed5e7a20efa5c182abca317cf7c29a065f9de33adcf1a8b798

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp313-none-any.whl.

File metadata

  • Download URL: xprof-2.22.1-cp313-none-any.whl
  • Upload date:
  • Size: 22.0 MB
  • Tags: CPython 3.13
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.13

File hashes

Hashes for xprof-2.22.1-cp313-none-any.whl
Algorithm Hash digest
SHA256 9566eec9306186ce66a971d612effa43c71f9e0628f583829cbd7627523fc6b8
MD5 458f518056583a43e6d13c8b123b9dce
BLAKE2b-256 54825072efb3c3495f2dd6948fb3840c5bd95edc66115a3fe8b92ca537f32a0c

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp312-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 9011b93880d45f9396d6b61522c55ccd864c7e443336aaa839ebe04f8cfc6e7c
MD5 1a86eaee7dff8b5341d469bebb982883
BLAKE2b-256 147bed018f0726c971fbd7c5480d523f73d963150d6385ebbc038c46df3af703

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp312-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 b054a6a9dc4f2767738aec38ed5340fab5a8f633f6ca6e106c85abe3c0cb66a5
MD5 8c38bbf7799810c0281f0041eae60ccf
BLAKE2b-256 dc33b8930d4b1a24db5342f2d0a4fd2ad021075ccce9a83475269b0eb6d987be

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp312-none-any.whl.

File metadata

  • Download URL: xprof-2.22.1-cp312-none-any.whl
  • Upload date:
  • Size: 22.0 MB
  • Tags: CPython 3.12
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.13

File hashes

Hashes for xprof-2.22.1-cp312-none-any.whl
Algorithm Hash digest
SHA256 15c22b0ebf5aac7a2cca9503f4656b150cda8902c7ea75a340180840d5110a8d
MD5 d425e6d4e0ce2697b48eca84e5478cef
BLAKE2b-256 baa5a4035a4c6f307bd1edb895d9278e44e475b5d39f89245048ab9271da103c

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp311-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 31f5402b4be724abb9ca1c4aca69e4d582438f5ab302ed53c6085efb17c5968e
MD5 c5130a37f7231969a2f3411d6534deaa
BLAKE2b-256 e10e6cc970f466d5abab24053f0e9551360b1acad85a182f117aa6786e1d4a8a

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp311-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 87114980fed1d49c68b9d4be06852e7725f1800a3aa02a152ea86aff69b5f793
MD5 67e7770f04116aa03e8693fb5a8a2540
BLAKE2b-256 7db24ce9f094eecb810d642e72cbcdb410323519820fb7dfee0819555a3158c0

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp311-none-any.whl.

File metadata

  • Download URL: xprof-2.22.1-cp311-none-any.whl
  • Upload date:
  • Size: 22.0 MB
  • Tags: CPython 3.11
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.13

File hashes

Hashes for xprof-2.22.1-cp311-none-any.whl
Algorithm Hash digest
SHA256 54b3a503201f4653ff41cb666158336343475d5f03f7570b3eb8ca3a8d10a7af
MD5 eea16585fc007bc1859f467f9a707798
BLAKE2b-256 9aae61804e1246a7556b5dfa5055d2101748e42dc1e3542fdce06daa07c25a2f

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp310-none-manylinux_2_35_aarch64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 a8b029456d52374932a37f0733bee284ee3d1312d488c5cc8e509fce4bfbe248
MD5 9c2345423e7b998d734ccbc2bf866c8f
BLAKE2b-256 652c0f4429211e463c4da96332f7210ddea5ac8c0cd3dd9424a3b7178288eef1

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp310-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.22.1-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 f366a362b52b81ba26f1359b61e031e7210076fb34680fb3b87e6773229e172f
MD5 b2d47f300b150f807523248cb68b33f2
BLAKE2b-256 175e3c706c9a83870a220f00254c370cbde35887290e49b56752aa54427c3568

See more details on using hashes here.

File details

Details for the file xprof-2.22.1-cp310-none-any.whl.

File metadata

  • Download URL: xprof-2.22.1-cp310-none-any.whl
  • Upload date:
  • Size: 22.0 MB
  • Tags: CPython 3.10
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.13

File hashes

Hashes for xprof-2.22.1-cp310-none-any.whl
Algorithm Hash digest
SHA256 21f5c0c8ec36a039053ae43d7a8db029d11c126728e837f5ba4ab644ee02fa91
MD5 87e378ef38c9678dce19921cfe2a3dc7
BLAKE2b-256 fae5f6e31c0a10e345c88ba3458c215aade55a29d87ea04834d2041c6ccb2368

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