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.21.5-cp313-none-manylinux_2_27_x86_64.whl (22.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.13

xprof-2.21.5-cp312-none-manylinux_2_27_x86_64.whl (22.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.12

xprof-2.21.5-cp311-none-manylinux_2_27_x86_64.whl (22.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.11

xprof-2.21.5-cp310-none-manylinux_2_27_x86_64.whl (22.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.10

File details

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

File metadata

File hashes

Hashes for xprof-2.21.5-cp313-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 1dbed1760d534f7f8ef21250dbe0f1c9242f2330cae4435e0ea06eaec01e4ff1
MD5 70da6f280c03808e6021df3296d224d6
BLAKE2b-256 dd4f99e4c34cf9e68b7f5c58611e975f3a5d1b4e58ae56d06844f736651f1dd1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xprof-2.21.5-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.21.5-cp313-none-any.whl
Algorithm Hash digest
SHA256 e1b6260a8a7bc34094aaa9fe7cd519500ea7e55853cc785caf8366e4fed66b01
MD5 539f2b1e8773f294efe9dc8dd8823845
BLAKE2b-256 b7d35c98dc30d819a01d326df643389f636124390f349ce45fb4145038247b39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.21.5-cp312-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 5022604dda7dce3fb9de6a3514620480429ce1102871b55bb36419e43b0f26cf
MD5 cb083f8b952219266269ca81ac40f7ee
BLAKE2b-256 740462dde1cfb94ad1bd26bdc4be8525247dedefa21e980c7c59849951429ad9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xprof-2.21.5-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.21.5-cp312-none-any.whl
Algorithm Hash digest
SHA256 cc7ebd549c5ab133faf6111ce1dfb13f31485a62705cf9fd3558c9467dc2de5f
MD5 6a244fe8a95bb4cfefd761ae1bcd9056
BLAKE2b-256 f8a22739648ad8fb1027ea38195b8d9cc2c7575e7898674b04780f02ccb1209c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.21.5-cp311-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 49cb836df0cc63f251fb355178e3e56aaa63c7fd23ca6998d33d8f2423953be0
MD5 27442768d5ae8569464856635fa18069
BLAKE2b-256 ce986c0977252355b11e7ce28da523c91b7135e30b4a53e2e9369bc712d4e022

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xprof-2.21.5-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.21.5-cp311-none-any.whl
Algorithm Hash digest
SHA256 04a58b4324a9a28a034852b0b892dec8f674f4188fa93f3fdb56fd79f75c5dc3
MD5 defd71f042517dd507e7ff2b70ea16cb
BLAKE2b-256 81ee7e3923145055386b479bf2a20638998a31d3ac44f1da0893392c3381924a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for xprof-2.21.5-cp310-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 779d34270794dd64a3a8f25224c3ae0c1608a668d412e5fc2f913103c21e0baa
MD5 69557a7b996973c4cfe453a5f0196385
BLAKE2b-256 827280f00d628358d0826c003ed604db4d55349b1b717a6de38692569572dc34

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xprof-2.21.5-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.21.5-cp310-none-any.whl
Algorithm Hash digest
SHA256 80c60009c8f74643c59c46c543ddbd6175589f1594a1eaefac49cbef40ee6b5e
MD5 c496aea07588a18747fb6977811331c3
BLAKE2b-256 a6f13e0ab6befe264c87afda84945b87891a9d4fb7a1a19f9bbfa32d9b4e911d

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