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.3-cp313-none-manylinux2014_x86_64.whl (21.3 MB view details)

Uploaded CPython 3.13

xprof-2.21.3-cp313-none-macosx_12_0_arm64.whl (19.1 MB view details)

Uploaded CPython 3.13macOS 12.0+ ARM64

xprof-2.21.3-cp312-none-manylinux2014_x86_64.whl (21.3 MB view details)

Uploaded CPython 3.12

xprof-2.21.3-cp312-none-macosx_12_0_arm64.whl (19.1 MB view details)

Uploaded CPython 3.12macOS 12.0+ ARM64

xprof-2.21.3-cp311-none-manylinux2014_x86_64.whl (21.3 MB view details)

Uploaded CPython 3.11

xprof-2.21.3-cp311-none-macosx_12_0_arm64.whl (19.1 MB view details)

Uploaded CPython 3.11macOS 12.0+ ARM64

xprof-2.21.3-cp310-none-manylinux2014_x86_64.whl (21.3 MB view details)

Uploaded CPython 3.10

xprof-2.21.3-cp310-none-macosx_12_0_arm64.whl (19.1 MB view details)

Uploaded CPython 3.10macOS 12.0+ ARM64

xprof-2.21.3-cp39-none-manylinux2014_x86_64.whl (21.3 MB view details)

Uploaded CPython 3.9

xprof-2.21.3-cp39-none-macosx_12_0_arm64.whl (19.1 MB view details)

Uploaded CPython 3.9macOS 12.0+ ARM64

File details

Details for the file xprof-2.21.3-cp313-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp313-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2e453c589a73b8e5bc6c96e702e9b18c4a26b1b981c7dc98f61f7216db092e5
MD5 6cfbbce4bd06de598651cfa5548a0377
BLAKE2b-256 cd9aa3d4bc3f4693d6a70729d08c54d837034d1bff0ac77f654a4c2a8f1a540d

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp313-none-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp313-none-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 ec01713b8d5c304d91efd5bd3c3a436177297cdae23ab32c2ee3a1b4b8b75044
MD5 158708dfd62f51678265106fadb2ac6e
BLAKE2b-256 85d5952e9de54205faf6c3f39815107ea619c17a73f3ab85b80a192334b557cb

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp312-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp312-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 279df925f48e7653ce01b949eaeafcf59d350725da6b63e806a1ee435463d49d
MD5 bc5f6cfda578d6fe3262fa4cc5b332f8
BLAKE2b-256 462e5bff292a49774f507c21c4220076f3214483ce77a70295f596816c33602b

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp312-none-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp312-none-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 b9ab56c2aba80f438aec8e3d2adb5524c08533ebb0b84b023536364236a53f14
MD5 da8f887c78d6e35d6a8de16c2beaebee
BLAKE2b-256 524448de6ad484576f58b6df3e1f893976d6a53156fd69be24acd931b0ea01ac

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp311-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp311-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 72478cd6cd4965d7180dee9641e8bb9dcc3404bf28f4a1ecf5421c2e6f8848df
MD5 fe5dbf1fd771d8754ffcc6705721215a
BLAKE2b-256 788630f65cda17d3114e3cc814d745a464aae36f5b37561dabee5f92069ca2f6

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp311-none-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp311-none-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 5fee47c11dfcf4f1f17304252bf2b89dee6b433f107ca61018c60c5190a702c6
MD5 5a0021825c029b7b4be05d820f67a94d
BLAKE2b-256 2d3d20061022fcf2792a3461d3399e0c63b04c761dca88cb05367ba3df82bb33

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp310-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp310-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34228f785ddb20f67ad8c5cce90ebce3aefa615580e08ed65f7400930d75719d
MD5 baaf10d3befcbec0fd66f2f31d54bb48
BLAKE2b-256 54b3c72f08859dc8f68e13ff5496d8f63d069341f23d602d3cd3c988979cbff2

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp310-none-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp310-none-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 b903f382ade22f62d88d98124415fb705e81c58de124b02503445b54540587c5
MD5 e58220cdfec1eb6c98d0126d864e4e1c
BLAKE2b-256 735aabbbee301e854a4b4853721bac64b3b28cc133a0232b0aae1450c9cf154c

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp39-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp39-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ec524473ea3439ca831f5fd5ea4f6a18a4000c1b525216f4a3a01b6dc8df810d
MD5 d4ed367cba815dc46ebadcbe5b274bf1
BLAKE2b-256 a7b1edd6fe39b5aa3393a5c84085174f1154fb17a628d261185de933c95016a0

See more details on using hashes here.

File details

Details for the file xprof-2.21.3-cp39-none-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for xprof-2.21.3-cp39-none-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 e109785fea440b867fbef946dcda06817c00cb97455411f7855c9b410f2f49e5
MD5 ffe661b158c0c745f8b3b6629e23542a
BLAKE2b-256 c3e41348a5ae01837403399bf9f20303a13b1bd1e498255d2bbccea648ad2c93

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