Skip to main content

User Mode Driver for tenstorrent

Project description

TT-UMD :tm:

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

Suggested third-party dependency is Clang 17:

wget https://apt.llvm.org/llvm.sh
chmod u+x llvm.sh
sudo ./llvm.sh 17

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 libdevice.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 CMAKE_C_COMPILER=/usr/bin/gcc
export CMAKE_CXX_COMPILER=/usr/bin/g++

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

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 libdevice.so by linking against the umd::device 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.

For UMD, sample tests can be found in tests/simulation/test_simulation_device.cpp

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.

Grayskull End of Life

Grayskull is no longer actively supported by Tenstorrent. Last UMD commit supporting Grayskull.

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.

tt_umd-0.9.1-cp313-cp313-manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tt_umd-0.9.1-cp312-cp312-manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tt_umd-0.9.1-cp311-cp311-manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tt_umd-0.9.1-cp310-cp310-manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tt_umd-0.9.1-cp39-cp39-manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

File details

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

File metadata

File hashes

Hashes for tt_umd-0.9.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0557b568137a15d65c0f13a285e002d3a605f9d9f0bbe35ab1f8f12dacc2cd66
MD5 e94343c4dafb2f556ea78de1566a81d3
BLAKE2b-256 7a79eac1fa8aac2fca154cdda1102b39e20d5510622be1710e32ce10d0399628

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.1-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.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aeafdad43604db6535227faf0a67b29eedde44e9b9224ec66074d400a245817c
MD5 e73d11d3af783fefdf4b80da7180aa75
BLAKE2b-256 18c7b23b2fcc5e0d10326e0f199d9d084ac2d98acc8c039d784db56b31e5bcdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.1-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.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a745ce46963475a7f403c29cb8bf91174ecafcfe12a013538f400b05eb28b85a
MD5 7e709d4c28f146c89d6d0533ff23da40
BLAKE2b-256 d3fca477d4e99c9a488020d3421511bbbc06535598760d964308327db6c5f098

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.1-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.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 acea33ab8858ab5b3b48b926d1c74f04dbc1866aca7225ae4f1b12d4bc24f0e0
MD5 b4e1decbc94eb7d8b78bd8dc14336757
BLAKE2b-256 fc396ecceb050cb718eddf86d7757ee9bab8eb3133e411cff23842342e7ab475

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.1-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.1-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tt_umd-0.9.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d7dea62bb9ac044a39454d6bc88adf553e41aa4b8d81a80bcf751670300076b7
MD5 8ba192d5ed6bad0f1a6da0ff8c2a11aa
BLAKE2b-256 1686c731a686e41c909d5b5ffad014dfb23666c114d48927e84cc6f6f5ac33f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for tt_umd-0.9.1-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.

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