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

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

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

Uploaded CPython 3.13manylinux: glibc 2.35+ ARM64

xprof-2.22.0-cp313-none-manylinux_2_27_x86_64.whl (23.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

xprof-2.22.0-cp313-none-any.whl (20.2 MB view details)

Uploaded CPython 3.13

xprof-2.22.0-cp312-none-manylinux_2_35_aarch64.whl (24.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ ARM64

xprof-2.22.0-cp312-none-manylinux_2_27_x86_64.whl (23.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

xprof-2.22.0-cp312-none-any.whl (20.2 MB view details)

Uploaded CPython 3.12

xprof-2.22.0-cp311-none-manylinux_2_35_aarch64.whl (24.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ ARM64

xprof-2.22.0-cp311-none-manylinux_2_27_x86_64.whl (23.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

xprof-2.22.0-cp311-none-any.whl (20.2 MB view details)

Uploaded CPython 3.11

xprof-2.22.0-cp310-none-manylinux_2_35_aarch64.whl (24.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ ARM64

xprof-2.22.0-cp310-none-manylinux_2_27_x86_64.whl (23.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

xprof-2.22.0-cp310-none-any.whl (20.2 MB view details)

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp313-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 232983324f9ff99f142e84de35fbc97916373cd5069262e3e4021ccf27b57dbe
MD5 6c70dbd7ead3ac8b52ca00f81114b1f2
BLAKE2b-256 1e4953422977f4093ef7145026aaabb37c6e083b5701d207647f5df6875ad4a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 f58db9c0c1b00175c732eac6260ad76172a6e7ab37a725888a352bbaa3e9cbf7
MD5 6ea8c06ca129148b04b1b2c42b962f73
BLAKE2b-256 18802366e9c967ca977eede4b3d9eb9625d555ab9e53bb85f4aee7cb3491be47

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for xprof-2.22.0-cp313-none-any.whl
Algorithm Hash digest
SHA256 49ccfb4801cf104ef3edceef7216d5b1720f10d836041b2502421b12e58cd97d
MD5 e98b9e7be9fb6c9f52dff60ce897a82b
BLAKE2b-256 c2c6f3d172ba26a32520d51941a7b66ee48d3803cd20a6eb1fce313b0cbcf54d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp312-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 885fb14c59fcd8903aca89357a95aac67cbea676be8861233e9b321361f9c71b
MD5 4954af72121fb38b710bc1604db97833
BLAKE2b-256 52af3513a11ce9d2c6a6fb04ae7d8bff9f57dc4c26f30a7b491aad332230492a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ef79118450a84a6cd151f4b341234251c083b576b3eec50785efe79c976c3e85
MD5 87dac1197a56c2ccfebe83421048ce19
BLAKE2b-256 17fa01d9e3cc784fbf717561968e4610feeed8e6d87b1cb79f7572316c634d53

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for xprof-2.22.0-cp312-none-any.whl
Algorithm Hash digest
SHA256 3ec137b022d3d98bf499a529c8e54fd4c0ff5f672833a162fb5be98489474dce
MD5 708e281bf0dfd507d7a9b76e725ab313
BLAKE2b-256 752a07da6887271490aa4d5944766152d963a440be75974eb0f48b2f17c7f919

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp311-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 9b34681645bfeffcdc8adafee37d1bba93df8a920e493f6d69009f190ae7f73b
MD5 831a19d435261170704a5959f8377623
BLAKE2b-256 ef35a885c8871fc4b3985f822f2f62c548f7b648321ad03fcc9fbad9f5541553

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 aa077204c05d7b6a56bbe1bc004b7da59a22fcf38118a87aa532b488b8f99bfe
MD5 cbf8ef90e7df1d72f726c0d8850e2ded
BLAKE2b-256 6bfec577239055f6166dea9a3b6be353c989b33de6c44c12c9881015201ab996

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for xprof-2.22.0-cp311-none-any.whl
Algorithm Hash digest
SHA256 00ab8a37cc08f4b8e1d8dd1931a461fe795a7eba0fe41d528e86139c493d0fed
MD5 dc190d4e25c2d53fad7960b64ccffa54
BLAKE2b-256 14a3a1cd508c7a846e741192e55709ea628921cb1d0f11f27de71dbcdb55c517

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp310-none-manylinux_2_35_aarch64.whl
Algorithm Hash digest
SHA256 fa10c0d8b476d003312cc63f8008b5977b7ff54c5869a8d42277cdcaac054c83
MD5 fd13b80abd60769820665ac360642b5f
BLAKE2b-256 5979cd9d2ed9433a2bd04219887f48afc46c12feadac5eda957733c71ebfa825

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.22.0-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 adf07df5b97f7aa4e0244e968860a77dc565f8c2598971b896cfb5fb5fcf073d
MD5 713aba70f3b9193c7702c2ffa3019df6
BLAKE2b-256 d0103b1bc9a968f43a9202046e06dbd2db701f5db0076dca11c06a43965061e5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for xprof-2.22.0-cp310-none-any.whl
Algorithm Hash digest
SHA256 b64ab266a3e1fd01792f3c04a7b86810bb87d564b7af3547e760cfcae2eb411b
MD5 9f66bcc190572472df89990b6df4f243
BLAKE2b-256 b9d1cf3acf11926d0b865903b0708b30792117577f5f637fdfac40f311af244a

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