# XProf (+ Tensorboard Profiler Plugin)
XProf includes a suite of tools for [JAX](https://jax.readthedocs.io/), [TensorFlow](https://www.tensorflow.org/), and [PyTorch/XLA](https://github.com/pytorch/xla). These tools help you understand, debug and optimize programs to run on CPUs, GPUs and TPUs.
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.
* A table of the top 10 most expensive operations.
* **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.
## Demo
First time user? Come and check out this [Colab Demo](https://docs.jaxstack.ai/en/latest/JAX_for_LLM_pretraining.html).
## Prerequisites
* tensorboard-plugin-profile >= 2.19.0
* (optional) TensorBoard >= 2.19.0
Note: XProf requires access to the Internet to load the [Google Chart library](https://developers.google.com/chart/interactive/docs/basic_load_libs#basic-library-loading).
Some charts and tables may be missing if you run TensorBoard entirely offline on
your local machine, behind a corporate firewall, or in a datacenter.
To profile on a **single GPU** system, the following NVIDIA software must be
installed on your system:
1. NVIDIA GPU drivers and CUDA Toolkit:
* CUDA 12.5 requires 525.60.13 and higher.
2. Ensure that CUPTI 10.1 exists on the path.
```shell
$ /sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | grep libcupti
```
If you don't see `libcupti.so.12.5` on the path, prepend its installation
directory to the $LD_LIBRARY_PATH environmental variable:
```shell
$ export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
```
Run the ldconfig command above again to verify that the CUPTI 12.5 library is
found.
If this doesn't work, try:
```shell
$ sudo apt-get install libcupti-dev
```
To profile a system with **multiple GPUs**, see this [guide](https://github.com/tensorflow/profiler/blob/master/docs/profile_multi_gpu.md) for details.
To profile multi-worker GPU configurations, profile individual workers
independently.
To profile cloud TPUs, you must have access to Google Cloud TPUs.
## Quick Start
In order to get the latest version of the profiler plugin, you can install the
nightly package.
To install the nightly version of profiler:
```
$ pip uninstall xprof
$ pip install xprof-nightly
```
Without TensorBoard:
```
$ xprof --logdir=profiler/demo --port=6006
```
With TensorBoard:
```
$ 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.
## Next Steps
* JAX Profiling Guide: https://jax.readthedocs.io/en/latest/profiling.html
* TensorFlow Profiling Guide: https://tensorflow.org/guide/profiler
* Cloud TPU Profiling Guide: https://cloud.google.com/tpu/docs/cloud-tpu-tools
* Colab Tutorial: https://www.tensorflow.org/tensorboard/tensorboard_profiling_keras
* Tensorflow Colab: https://www.tensorflow.org/tensorboard/tensorboard_profiling_keras
Raw data
{
"_id": null,
"home_page": "https://github.com/openxla/xprof",
"name": "xprof",
"maintainer": null,
"docs_url": null,
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"maintainer_email": null,
"keywords": "jax pytorch xla tensorflow tensorboard xprof profile plugin",
"author": "Google Inc.",
"author_email": "packages@tensorflow.org",
"download_url": "https://files.pythonhosted.org/packages/89/23/269ad660c2bffcf7655bf754de81b9d7458fc4fb2fa4763fb14dc674676b/xprof-2.20.5.tar.gz",
"platform": null,
"description": "# XProf (+ Tensorboard Profiler Plugin)\nXProf includes a suite of tools for [JAX](https://jax.readthedocs.io/), [TensorFlow](https://www.tensorflow.org/), and [PyTorch/XLA](https://github.com/pytorch/xla). These tools help you understand, debug and optimize programs to run on CPUs, GPUs and TPUs.\n\nXProf offers a number of tools to analyse and visualize the\nperformance of your model across multiple devices. Some of the tools include:\n\n* **Overview**: A high-level overview of the performance of your model. This\n is an aggregated overview for your host and all devices. It includes:\n * Performance summary and breakdown of step times.\n * A graph of individual step times.\n * A table of the top 10 most expensive operations.\n* **Trace Viewer**: Displays a timeline of the execution of your model that shows:\n * The duration of each op.\n * Which part of the system (host or device) executed an op.\n * The communication between devices.\n* **Memory Profile Viewer**: Monitors the memory usage of your model.\n* **Graph Viewer**: A visualization of the graph structure of HLOs of your model.\n\n## Demo\nFirst time user? Come and check out this [Colab Demo](https://docs.jaxstack.ai/en/latest/JAX_for_LLM_pretraining.html).\n\n## Prerequisites\n\n* tensorboard-plugin-profile >= 2.19.0\n* (optional) TensorBoard >= 2.19.0\n\nNote: XProf requires access to the Internet to load the [Google Chart library](https://developers.google.com/chart/interactive/docs/basic_load_libs#basic-library-loading).\nSome charts and tables may be missing if you run TensorBoard entirely offline on\nyour local machine, behind a corporate firewall, or in a datacenter.\n\nTo profile on a **single GPU** system, the following NVIDIA software must be\ninstalled on your system:\n\n1. NVIDIA GPU drivers and CUDA Toolkit:\n * CUDA 12.5 requires 525.60.13 and higher.\n2. Ensure that CUPTI 10.1 exists on the path.\n\n ```shell\n $ /sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | grep libcupti\n ```\n\n If you don't see `libcupti.so.12.5` on the path, prepend its installation\n directory to the $LD_LIBRARY_PATH environmental variable:\n\n ```shell\n $ export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH\n ```\n Run the ldconfig command above again to verify that the CUPTI 12.5 library is\n found.\n\n If this doesn't work, try:\n ```shell\n $ sudo apt-get install libcupti-dev\n ```\n\nTo profile a system with **multiple GPUs**, see this [guide](https://github.com/tensorflow/profiler/blob/master/docs/profile_multi_gpu.md) for details.\n\nTo profile multi-worker GPU configurations, profile individual workers\nindependently.\n\nTo profile cloud TPUs, you must have access to Google Cloud TPUs.\n\n## Quick Start\nIn order to get the latest version of the profiler plugin, you can install the\nnightly package.\n\nTo install the nightly version of profiler:\n\n```\n$ pip uninstall xprof\n$ pip install xprof-nightly\n```\n\nWithout TensorBoard:\n```\n$ xprof --logdir=profiler/demo --port=6006\n```\n\nWith TensorBoard:\n\n```\n$ tensorboard --logdir=profiler/demo\n```\nIf you are behind a corporate firewall, you may need to include the `--bind_all`\ntensorboard flag.\n\nGo to `localhost:6006/#profile` of your browser, you should now see the demo\noverview page show up.\nCongratulations! You're now ready to capture a profile.\n\n## Next Steps\n\n* JAX Profiling Guide: https://jax.readthedocs.io/en/latest/profiling.html\n* TensorFlow Profiling Guide: https://tensorflow.org/guide/profiler\n* Cloud TPU Profiling Guide: https://cloud.google.com/tpu/docs/cloud-tpu-tools\n* Colab Tutorial: https://www.tensorflow.org/tensorboard/tensorboard_profiling_keras\n* Tensorflow Colab: https://www.tensorflow.org/tensorboard/tensorboard_profiling_keras\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "XProf Profiler Plugin",
"version": "2.20.5",
"project_urls": {
"Homepage": "https://github.com/openxla/xprof"
},
"split_keywords": [
"jax",
"pytorch",
"xla",
"tensorflow",
"tensorboard",
"xprof",
"profile",
"plugin"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b84c23666601a5df906c703b67dfaec8fbb1e8d0956f59585a7fbc2a7e0e6b65",
"md5": "e50dc28e38bca792e0c6f2058568038a",
"sha256": "3f8d8cde85232566ed10605d97afea2b17237a92e6abf89ec9927913a13d67a5"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp310-none-macosx_12_0_arm64.whl",
"has_sig": false,
"md5_digest": "e50dc28e38bca792e0c6f2058568038a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11277152,
"upload_time": "2025-08-01T21:48:58",
"upload_time_iso_8601": "2025-08-01T21:48:58.743517Z",
"url": "https://files.pythonhosted.org/packages/b8/4c/23666601a5df906c703b67dfaec8fbb1e8d0956f59585a7fbc2a7e0e6b65/xprof-2.20.5-cp310-none-macosx_12_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6a7a437f900ad324286821880dc737e815aa6ae6f3bf7bfe81fc4077f96ad01d",
"md5": "68d5f038dc5c3d1f0bcf542e37cdd9f5",
"sha256": "04e8d03686030d1799984d21d2d8eee28a9f1a6ff08d968ff17f628187538715"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp310-none-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "68d5f038dc5c3d1f0bcf542e37cdd9f5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 13184708,
"upload_time": "2025-08-01T22:15:49",
"upload_time_iso_8601": "2025-08-01T22:15:49.513110Z",
"url": "https://files.pythonhosted.org/packages/6a/7a/437f900ad324286821880dc737e815aa6ae6f3bf7bfe81fc4077f96ad01d/xprof-2.20.5-cp310-none-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f9a69530ce1ffd1532fa59fbd5857eb19dde45533ce374cf422249d2f671dd22",
"md5": "f31c2a3b93bd85eb74664916c11431f1",
"sha256": "91623e7ba7c84768f353ef0ee5d8ab537afdba658d87be8c07bcffca52325c13"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp310-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "f31c2a3b93bd85eb74664916c11431f1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11078265,
"upload_time": "2025-08-01T22:02:45",
"upload_time_iso_8601": "2025-08-01T22:02:45.628653Z",
"url": "https://files.pythonhosted.org/packages/f9/a6/9530ce1ffd1532fa59fbd5857eb19dde45533ce374cf422249d2f671dd22/xprof-2.20.5-cp310-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2cf860f90f5bb687c80b336154e78b961e8e85f4099d3e48e93bf3c35392c5e6",
"md5": "460101f08c94365ae035c19b2507f66e",
"sha256": "eea20a014237e053c02d0c62814324c35d36dd9cc226be728dd592705ab4c209"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp311-none-macosx_12_0_arm64.whl",
"has_sig": false,
"md5_digest": "460101f08c94365ae035c19b2507f66e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11277836,
"upload_time": "2025-08-01T21:48:58",
"upload_time_iso_8601": "2025-08-01T21:48:58.610336Z",
"url": "https://files.pythonhosted.org/packages/2c/f8/60f90f5bb687c80b336154e78b961e8e85f4099d3e48e93bf3c35392c5e6/xprof-2.20.5-cp311-none-macosx_12_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1514a1dc13f4b03aba46e0c36a4f5417f95798e78cae5cc2d9605103d5332594",
"md5": "476d1f311c7f50db0ba57804183a549d",
"sha256": "554d1e0bbfb8fafcc99638ba45a2ae92677b01afde7ef9edc807710e8392230d"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp311-none-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "476d1f311c7f50db0ba57804183a549d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 13186116,
"upload_time": "2025-08-01T22:13:23",
"upload_time_iso_8601": "2025-08-01T22:13:23.791413Z",
"url": "https://files.pythonhosted.org/packages/15/14/a1dc13f4b03aba46e0c36a4f5417f95798e78cae5cc2d9605103d5332594/xprof-2.20.5-cp311-none-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "96503bb23179cb212ebe8644ed6783e3d8c20701093d80fed5a58b244bc59575",
"md5": "bf53da41ca5ca3cf40edfdcbc069607e",
"sha256": "0a8886a9fbd35a092d0f46aa2692f0b15daca4f45b2ce31dd5b957dd965a192a"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp311-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "bf53da41ca5ca3cf40edfdcbc069607e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11080866,
"upload_time": "2025-08-01T22:02:19",
"upload_time_iso_8601": "2025-08-01T22:02:19.337795Z",
"url": "https://files.pythonhosted.org/packages/96/50/3bb23179cb212ebe8644ed6783e3d8c20701093d80fed5a58b244bc59575/xprof-2.20.5-cp311-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b6392ce4c2cef10b447bbad0370257e993a5cf07b313a84761f1f7c447033dcd",
"md5": "b4792a115fad8ecdaa8861e8ba41f98d",
"sha256": "0af3987c5cfae6cf5f9ebbcc3d24e479e70f22f4e6a8c892f8864dc2e599d12c"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp312-none-macosx_12_0_arm64.whl",
"has_sig": false,
"md5_digest": "b4792a115fad8ecdaa8861e8ba41f98d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11278020,
"upload_time": "2025-08-01T21:49:19",
"upload_time_iso_8601": "2025-08-01T21:49:19.271039Z",
"url": "https://files.pythonhosted.org/packages/b6/39/2ce4c2cef10b447bbad0370257e993a5cf07b313a84761f1f7c447033dcd/xprof-2.20.5-cp312-none-macosx_12_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d84f2a34f1e70667ec9a933f4a9dc04599cdb96cb2452d5bb706abdec753ce30",
"md5": "e0094b4e51879899a561421e3ef2e615",
"sha256": "7eeb12f3adb6e6292e6470c9033d53df4d7f8bf8578639bb1141fa27f2eb3e06"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp312-none-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e0094b4e51879899a561421e3ef2e615",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 13187175,
"upload_time": "2025-08-01T22:13:57",
"upload_time_iso_8601": "2025-08-01T22:13:57.422523Z",
"url": "https://files.pythonhosted.org/packages/d8/4f/2a34f1e70667ec9a933f4a9dc04599cdb96cb2452d5bb706abdec753ce30/xprof-2.20.5-cp312-none-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9739c67ac4e4341f0ed323849834d6c0b2f059dedf1527f09d59f91ed97f4bda",
"md5": "e21766b6720e7f41240907e66645a396",
"sha256": "7da7166284a0e2e8a0a976229fdca1aa193fce19c18c28111e53f71d7edab23c"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp312-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "e21766b6720e7f41240907e66645a396",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11079708,
"upload_time": "2025-08-01T22:06:16",
"upload_time_iso_8601": "2025-08-01T22:06:16.531636Z",
"url": "https://files.pythonhosted.org/packages/97/39/c67ac4e4341f0ed323849834d6c0b2f059dedf1527f09d59f91ed97f4bda/xprof-2.20.5-cp312-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b09de5ada02140741d57349cdd0c529144fa2e1841f0ec2a7fee4157621ea535",
"md5": "20c4b55ff2037d3c978720c61c02ece8",
"sha256": "70566a6eebde82c05dc2f7f0ae03d0662ea889b65c02eb33ee0876028ea683e1"
},
"downloads": -1,
"filename": "xprof-2.20.5-cp39-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "20c4b55ff2037d3c978720c61c02ece8",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 11078739,
"upload_time": "2025-08-01T22:02:24",
"upload_time_iso_8601": "2025-08-01T22:02:24.770772Z",
"url": "https://files.pythonhosted.org/packages/b0/9d/e5ada02140741d57349cdd0c529144fa2e1841f0ec2a7fee4157621ea535/xprof-2.20.5-cp39-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9a111dea9b57f81773f295d4a5fee1b966b24ce129cc33eb355f098fdf81e4d1",
"md5": "2d8c95f041a74addac115aec62aab557",
"sha256": "dab92c84648ce9e4862ec49c7ac97a4fad2579a29ed3fc97dea3a7db084aa3f9"
},
"downloads": -1,
"filename": "xprof-2.20.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2d8c95f041a74addac115aec62aab557",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 6208535,
"upload_time": "2025-08-01T22:14:55",
"upload_time_iso_8601": "2025-08-01T22:14:55.824474Z",
"url": "https://files.pythonhosted.org/packages/9a/11/1dea9b57f81773f295d4a5fee1b966b24ce129cc33eb355f098fdf81e4d1/xprof-2.20.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8923269ad660c2bffcf7655bf754de81b9d7458fc4fb2fa4763fb14dc674676b",
"md5": "9034b98f115e6688e473fc34ffb488d9",
"sha256": "aee3525917573f3d8cf82962692cd2d0d8724475820b02b72e7e5dbc0c66339a"
},
"downloads": -1,
"filename": "xprof-2.20.5.tar.gz",
"has_sig": false,
"md5_digest": "9034b98f115e6688e473fc34ffb488d9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "!=3.0.*,!=3.1.*,>=2.7",
"size": 6116388,
"upload_time": "2025-08-01T22:14:57",
"upload_time_iso_8601": "2025-08-01T22:14:57.429218Z",
"url": "https://files.pythonhosted.org/packages/89/23/269ad660c2bffcf7655bf754de81b9d7458fc4fb2fa4763fb14dc674676b/xprof-2.20.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-01 22:14:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "openxla",
"github_project": "xprof",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "xprof"
}