Skip to main content

TT-UMD

User Mode Driver

ttnn logo

Quickstart

Software Dependencies

UMD requires Tenstorrent's kernel-mode driver

Required Ubuntu dependencies:

sudo apt install -y libhwloc-dev cmake ninja-build

UMD currently supports gcc-11 and newer gcc versions, and clang-13 and newer clang versions.

IOMMU and Hugepage requirements

To determine whether your system requires hugepage configuration, run the provided script:

./scripts/iommu_detect.sh

Wormhole and Blackhole

If your system IOMMU is enabled, no hugepage setup is required. If you don't have IOMMU enabled, than hugepages might be required for some of the driver functionality. 1G hugepages are required for shared device/host memory. Techniques for setup:

  • Recommended: the tt-system-tools repository contains a .deb package which will configure your system
    • sudo dpkg -i tenstorrent-tools_1.1-5_all.deb
  • Alternative: Metal project provides instructions and a script.
  • For experts:
    • Put system IOMMU in passthrough mode or disable it
    • Allocate 1 or more 1G hugepages
    • Mount the hugetlbfs at /dev/hugepages-1G (e.g. mount -t hugetlbfs hugetlbfs /dev/hugepages-1G -o mode=777,pagesize=1024M)

Install and use UMD

Python bindings

You can just run the following command, and you'll have tt_umd python package available in your environment:

pip install git+https://github.com/tenstorrent/tt-umd.git

Or if you have UMD downloaded locally you can install from local source:

pip install .

Build flow for C++ lib

To build libtt-umd.so:

cmake -B build -G Ninja
cmake --build build

To build all components (some are turned off by default, like tests), you can run these commands:

cmake -B build -G Ninja -DTT_UMD_BUILD_ALL=ON
cmake --build build

To build with GCC, set these environment variables before invoking cmake:

export CC=gcc
export CXX=g++

Disabling -Werror

By default, all warnings are treated as errors. This is controlled via the standard CMake variable CMAKE_COMPILE_WARNING_AS_ERROR.

Systems with recent libc may cause the python package building to fail due python redefining some *_SOURCES macros to higher versions and GCC has no mean to disable the macro redefinition diagnostic.

# Plain CMake
cmake -B build -G Ninja -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF

# Python build (scikit-build-core passes CMAKE_ARGS through to CMake)
CMAKE_ARGS="-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF" pip install .

Build debian dev package

cmake --build build --target package

# Generates umd-dev-x.y.z-Linux.deb

Enabling Logging

UMD uses a two-level logging system with compile-time and runtime controls.

Compile-Time Logging Control

By default, log_debug and log_trace statements are compiled out of release builds for performance. To include them in the binary:

Option 1: Enable logging explicitly

cmake -B build -G Ninja -DTT_UMD_ENABLE_LOGGING=ON
cmake --build build

Option 2: Use Debug build type (enables logging automatically)

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build

Runtime Logging Control

At runtime, control the logging level using the TT_LOGGER_LEVEL environment variable:

export TT_LOGGER_LEVEL=debug  # Show debug and above
export TT_LOGGER_LEVEL=trace  # Show all log messages (most verbose)
export TT_LOGGER_LEVEL=info   # Default level

Available log levels (from most to least verbose):

  • trace - Most detailed logging, traces program execution
  • debug - Debugging information useful during development
  • info - General informational messages (default)
  • warn - Warning messages for potentially harmful situations
  • error - Error messages for serious problems
  • critical - Critical errors that may lead to program termination
  • off - Disables all logging

Example: Running with debug logging

# Build with logging enabled
cmake -B build -G Ninja -DTT_UMD_ENABLE_LOGGING=ON
cmake --build build

# Run with debug level
TT_LOGGER_LEVEL=debug ./build/bin/your_program

Tracy Profiling

UMD supports Tracy profiling via the TT_UMD_ENABLE_TRACY build option. When disabled (the default), Tracy has zero footprint — no binary overhead, no runtime cost.

Building with Tracy

cmake -B build -G Ninja -DTT_UMD_ENABLE_TRACY=ON
cmake --build build

Capturing a trace

Launch the Tracy GUI locally, then on remote configure Port forwarding in VS Code for port 8086, start the application you want to profile on remote, then click Connect from GUI started locally. Alternatively, use tracy-capture -o trace.tracy to capture trace from the command line, then open the resulting file in the Tracy GUI.

Integration

UMD can be consumed by downstream projects in multiple ways.

From Source (Python)

You can use tt_umd module by installing it in your current python environment

From Source (CMake)

You can link libtt-umd.so by linking against the umd::tt-umd target.

Using CPM Package Manager

CPMAddPackage(
  NAME umd
  GITHUB_REPOSITORY tenstorrent/tt-umd
  GIT_TAG v0.1.0
  VERSION 0.1.0
)

As a submodule/external project

add_subdirectory(<path to umd>)

From Prebuilt Binaries

Ubuntu

apt install ./umd-dev-x.y.z-Linux.deb

Simulator Integration

You can run UMD tests without silicon by following setup instructions here.

Development workflow

For developing tt-umd, you can see the full set of dependencies in docker_install_common.sh

After that you can look at the section defined above Install and use UMD

Pre-commit Hook Integration for Formatting and Linting

As part of maintaining consistent code formatting across the project, we have integrated the pre-commit framework into our workflow. The pre-commit hooks will help automatically check and format code before commits are made, ensuring that we adhere to the project's coding standards.

What is Pre-commit?

Pre-commit is a framework for managing and maintaining multi-language pre-commit hooks. It helps catch common issues early by running a set of hooks before code is committed, automating tasks like:

  • Formatting code (e.g., fixing trailing whitespace, enforcing end-of-file newlines)
  • Running linters (e.g., clang-format, black, flake8)
  • Checking for merge conflicts or other common issues.

For more details on pre-commit, you can visit the official documentation.

How to Set Up Pre-commit Locally

To set up pre-commit on your local machine, follow these steps:

  1. Install Pre-commit: Ensure you have Python installed, then run:
    pip install pre-commit
    
  2. Install the Git Hook Scripts: In your local repository, run the following command to install the pre-commit hooks:
    pre-commit install
    
    This command will configure your local Git to run the defined hooks automatically before each commit.
  3. Run Pre-commit Hooks Manually: You can also run the hooks manually against all files at any time with:
    pre-commit run --all-files
    

Why You Should Use Pre-commit

By setting up pre-commit locally, you can help maintain the quality of the codebase and ensure that commits consistently meet the project's formatting standards. This saves time during code reviews and reduces the likelihood of code formatting issues slipping into the repository.

Since the hooks run automatically before each commit, you don't need to remember to manually format or check your code, making it easier to maintain consistency.

We strongly encourage all developers to integrate pre-commit into their workflow.

Formatting C++ code

Installing clang-format

If you're using an IRD docker, clang-format should be already available. If you don't have clang-format in your working environment, follow the instructions on llvm website for installing it.

Formatting files

If working with VSCode, you can copy the provided default settings:

cp .vscode/default.settings.json .vscode/settings.json

From now on, c++ files will be formatted on save (given that clang-format is available).

Note that if you setup pre-commit hook, the files will be automatically formatted when you commit changes. You can also manually auto format the whole repo using mentioned pre-commit:

   pre-commit run --all-files

Bumping the UMD version

There is an automated workflow for creating releases. It is triggered by merging a PR to main which changes the VERSION file.

You can change the VERSION as part of another PR or as an isolated PR. Please also update the CHANGELOG with the exact version you are changeing to.

Once the PR is merged, a draft Release will be created with the generated changelog and artifacts. Please review it and publish it using the tag which exactly matches the version of the release.

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.

tt_umd-0.9.8-cp313-cp313-manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tt_umd-0.9.8-cp313-cp313-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tt_umd-0.9.8-cp312-cp312-manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tt_umd-0.9.8-cp312-cp312-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tt_umd-0.9.8-cp311-cp311-manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tt_umd-0.9.8-cp311-cp311-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tt_umd-0.9.8-cp310-cp310-manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tt_umd-0.9.8-cp310-cp310-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tt_umd-0.9.8-cp39-cp39-manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

tt_umd-0.9.8-cp39-cp39-manylinux_2_28_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

File details

Details for the file tt_umd-0.9.8-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 37782f9639a4b1ad211caf8061b9ea107df3292bb30c4ebd7bc2e7615d944454
MD5 94d4aeb24a8a0237736559ff41e2f6bd
BLAKE2b-256 f431da13979cef0cfd40d918a9f45b6c0de7ca3f84cac42e1b8d66b9d0e3befd

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 067c6b1defc85367f6be95f86aebb630087fdfdbaad6b499c3374799e3bd6d38
MD5 a964f035653cf797be42db0d1c1a04f7
BLAKE2b-256 ea915ab04598d973c2d1464b29a41357338fa8038215a6c62cb177aca2baf188

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c55f0530fdc0598c9f433d306dca0ecfe43d32fae2c7287aa3bfe0b91f74e6bc
MD5 63c0e51f73ae8911feb76bbd9661744a
BLAKE2b-256 44e0e88bc2bc6a58125fa0a5c0b5f7990cc4aa369fbf43008a227a36b6b452c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 51cd6ecf7057e8a22fbab73aa90f0494de206ba80e3687e470c77a7766fc1d0b
MD5 11be177e9a9e6ab096570405f84c493e
BLAKE2b-256 45b7657baca85e782f97a50544a2fc241080c0d24ab3028972232a53be16992c

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6634fdcec3f71ea4cfe2df6b9819a6f437495dc5216ccf2cbb0ba87cfef6ca1d
MD5 e51f2cf182d6bc498ea268ddaea9d6da
BLAKE2b-256 6e46f65be92a1648297f87acc03579c520a6013a99ce27207a9587806b5ead39

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e52a3b1388fa35efb5f1fa118dc004567d23d878c99db71b1c018468978a8eeb
MD5 92fd907da6222891465f431d13980fce
BLAKE2b-256 5c6d84ba31e3530213ffb65e4fabe7ee53d22c83884c7ea23b905c8efe4bc923

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d9feb52b49d902a2584440a3e4d60b0efc03ec3c933ac9e16a19e58ba05f638a
MD5 15041d9003cf8f661c3374dce8ebc1b1
BLAKE2b-256 c9ed886b8cdba4ff8150a3fc6c544b9c33e3dbd091b7317b65f69ca830c3dcdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b8cf63b37e48c1a05cfa6c77d5cc8b42b4c53511d58301fa1950d548dd126f7c
MD5 d067c0b7dabf33d30dbe84b8379995f2
BLAKE2b-256 ee2cc0854d490eaf23abaf9ba6dbce87f1673ccb60a4f5f5e0f9d186b41ead1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bee15f1649cf1f1fb25f1dca24735e98c71ea813ee9a042b6079f7108214ed8d
MD5 8cde00e7cdaed1533d9f4c98c2e962be
BLAKE2b-256 53b3c61a002540616527bf293473a08faf765b927d662204d863fea7e3f54cc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp39-cp39-manylinux_2_28_x86_64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tt_umd-0.9.8-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.8-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dab92bb9809513e23983101298156de6f6f60e6731bd9e1d7fca70f5593e19b8
MD5 b0fe233124691038b4b81c83e5d3b31e
BLAKE2b-256 144da7f10f80a656b74115fcb7052db581d6be0299b2c9fb5740cdd87d73d438

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.8-cp39-cp39-manylinux_2_28_aarch64.whl:

Publisher: release.yml on tenstorrent/tt-umd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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