Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

312 lines
10 KiB
ReStructuredText

.. meta::
:description: Building MIOpen from source
:keywords: MIOpen, ROCm, API, documentation, build, installation, testing
********************************************************************
Build MIOpen from source
********************************************************************
To build MIOpen as part of the ROCm Core SDK, see `TheRock build
instructions
<https://github.com/ROCm/TheRock/blob/main/docs/development/README.md>`__.
TheRock is the recommended way to build ROCm components from source.
Alternatively, you can build MIOpen standalone using the following
instructions.
This topic discusses how to build MIOpen from source and configure the resulting application.
It also explains how to build the library and driver and run the tests. For a list of MIOpen
prerequisites, see :doc:`MIOpen prerequisites <./prerequisites>`. To install MIOpen from a
package, see :doc:`Install MIOpen <./install>`.
Prerequisites
=============
To install MIOpen, you must first install these prerequisites. These prerequisites apply to
all types of MIOpen installations.
* A :doc:`ROCm <rocm:index>`-enabled platform
* A base software stack that includes:
* :doc:`HIP <hip:index>` (HIP and HCC libraries and header files)
* `ROCm CMake <https://github.com/ROCm/rocm-cmake>`_: CMake modules for common
build tasks needed for the ROCm software stack
* `Half <http://half.sourceforge.net/>`_: An IEEE 754-based, half-precision floating-point library
* `SQLite3 <https://sqlite.org/index.html>`_: A read-write performance database
* lbzip2: A multi-threaded compression and decompression utility
* :doc:`rocBLAS <rocblas:index>`: AMD's library for Basic Linear Algebra Subprograms (BLAS) on the
ROCm platform.
* Minimum version for pre-ROCm 3.5
`master-rocm-2.10 <https://github.com/ROCm/rocBLAS/tree/master-rocm-2.10>`_
* Minimum version for post-ROCm 3.5
`master-rocm-3.5 <https://github.com/ROCm/rocBLAS/tree/master-rocm-3.5>`_
* `Multi-Level Intermediate Representation (MLIR) <https://github.com/ROCm/rocMLIR>`_, with an
MIOpen dialect to support and complement kernel development
* :doc:`Composable Kernel <composable_kernel:index>`: A C++ templated device library for
GEMM-like and reduction-like operators.
Installing dependencies
================================================
To install the MIOpen dependencies, use the ``install_deps.cmake`` command:
.. note::
You can run ``install_deps.cmake`` from the ``rocm-libraries/projects/miopen`` directory.
.. code:: shell
cmake -P install_deps.cmake
By default, this installs the dependencies in ``/usr/local``, but you can specify another location using the ``--prefix``
argument:
.. code:: shell
cmake -P install_deps.cmake --prefix <miopen-dependency-path>
The following example demonstrates how to use ``cmake`` with a specific installation directory:
.. code:: shell
cmake -P install_deps.cmake --minimum --prefix /root/MIOpen/install_dir
You can specify this directory during the configuration phase using ``CMAKE_PREFIX_PATH``.
MIOpen's HIP backend uses :doc:`rocBLAS <rocblas:index>` by default. You can install the rocBLAS
minimum release using ``apt-get install rocblas``. To disable rocBLAS, set the configuration flag
``-DMIOPEN_USE_ROCBLAS=Off``.
MIOpen's HIP backend can use :doc:`hipBLASLt <hipblaslt:index>`. To install the minimum release of hipBLASLt,
use ``apt-get install hipblaslt``. In addition to installing hipBLASLt, you must also
install :doc:`hipBLAS <hipblas:index>`. To install the hipBLAS minimum release, use ``apt-get install hipblas``.
To disable hipBLASLt, set the configuration flag ``-DMIOPEN_USE_HIPBLASLT=Off``.
Building MIOpen
================================================
You can build MIOpen from source using the HIP backend.
HIP backend
--------------------------------------------------------------------------------------------------------
To build MIOpen using the HIP backend (in ROCm 3.5 and later), follow these steps:
#. Create the build directory:
.. code:: shell
mkdir build; cd build;
#. Configure CMake. Set the backend using the ``-DMIOPEN_BACKEND`` CMake variable and
set the C++ compiler to ``clang++``. The command to build MIOpen with a HIP backend follows this format:
.. code:: shell
export CXX=<location-of-clang++-compiler>
cmake -DMIOPEN_BACKEND=HIP -DCMAKE_PREFIX_PATH="<hip-installed-path>;<rocm-installed-path>;<miopen-dependency-path>" ..
An example of a CMake build is:
.. code:: shell
export CXX=/opt/rocm/llvm/bin/clang++ && \
cmake -DMIOPEN_BACKEND=HIP -DCMAKE_PREFIX_PATH="/opt/rocm/;/opt/rocm/hip;/root/MIOpen/install_dir" ..
.. note::
When specifying the path for the ``CMAKE_PREFIX_PATH`` variable, **do not** use the tilde (``~``)
symbol to represent the home directory.
.. _setting-up-locations:
Setting the install location
--------------------------------------------------------------------------------------------------------
By default, the install location is set to ``/opt/rocm``. To change this, use ``CMAKE_INSTALL_PREFIX``:
.. code:: shell
cmake -DMIOPEN_BACKEND=HIP -DCMAKE_INSTALL_PREFIX=<miopen-installed-path> ..
System performance database and user database
--------------------------------------------------------------------------------------------------------
The default path to the system performance database (System PerfDb) is ``miopen/share/miopen/db/``
within the install location. The default path to the user performance database (User PerfDb) is
``~/.config/miopen/``. Setting ``BUILD_DEV`` for development purposes changes the default path for
both database files to the source directory:
.. code:: shell
cmake -DMIOPEN_BACKEND=HIP -DBUILD_DEV=On ..
To customize the database paths, use the ``MIOPEN_SYSTEM_DB_PATH`` (for the System PerfDb)
and ``MIOPEN_USER_DB_PATH`` (for the User PerfDb) CMake variables.
To learn more, see :doc:`using the performance database <../conceptual/perfdb>`.
Persistent program cache
--------------------------------------------------------------------------------------------------------
By default, MIOpen caches device programs in the ``~/.cache/miopen/`` directory. Within the cache
directory, there is a directory for each version of MIOpen. To change the location of the cache
directory during configuration, use the ``-DMIOPEN_CACHE_DIR=<cache-directory-path>`` flag.
To disable the cache during runtime, set the ``MIOPEN_DISABLE_CACHE=1`` environmental
variable.
For MIOpen version 2.3 and earlier
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If the compiler changes or you modify the kernels, then you must delete the cache for the MIOpen
version in use, for example, ``rm -rf ~/.cache/miopen/<miopen-version-number>``. For more
information, see :doc:`kernel cache <../conceptual/cache>`.
For MIOpen version 2.4 and later
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MIOpen's kernel cache directory is versioned, so cached kernels don't collide when upgrading
from an earlier version.
Changing the CMake configuration
--------------------------------------------------------------------------------------------------------
The configuration can be changed after running CMake by using ``ccmake``:
.. code:: shell
ccmake ..
or
.. code:: shell
cmake-gui: cmake-gui ..
The ``ccmake`` program can be downloaded using the Linux package ``cmake-curses-gui``, but is not
available on Windows.
Building the library
=========================================================
You can build the library from the ``build`` directory using the ``Release`` configuration:
.. code:: shell
cmake --build . --config Release
or
.. code:: shell
make
You can install it using the ``install`` target:
.. code:: shell
cmake --build . --config Release --target install
or
.. code:: shell
make install
This command installs the library to the ``CMAKE_INSTALL_PREFIX`` directory path.
Building the driver
=========================================================
MIOpen provides an application driver that can run any layer in isolation and measure
library performance and verification.
To build the driver, use the ``MIOpenDriver`` target:
.. code:: shell
cmake --build . --config Release --target MIOpenDriver
or
.. code:: shell
make MIOpenDriver
Running the tests
=========================================================
To run tests, use the ``check`` target:
.. code:: shell
cmake --build . --config Release --target check
or
.. code:: shell
make check
To build and run a single test, use the following commands:
.. code:: shell
cmake --build . --config Release --target test_tensor
./bin/test_tensor
Formatting the code
=========================================================
To format the code using ``clang-format``, use this command:
.. code:: shell
clang-format -style=file -i <path-to-source-file>
To format the code per commit, install githooks:
.. code:: shell
./.githooks/install
Storing large file using Git Large File Storage
=========================================================
`Data Versioning System (DVS) <https://dvc.org/>`_ replaces large files, such as audio samples, videos, datasets, and
graphics with text pointers inside Git, while storing the file contents on a remote server. MIOpen uses DVC to
store large files, such as kernel database files (``*.kdb``), which are normally > 0.5 GB.
To install DVC, use the `instructions provided for your platform here <https://dvc.org/doc/install>`_.
You can `pull <https://dvc.org/doc/command-reference/pull>`_ all large files or a single large file using:
.. code:: shell
dvc pull
or
.. code:: shell
dvc pull "filename"
If you are familiar with using Git LFS, a key difference with DVC is that you must manually run ``dvc pull`` after you
switch branches or merge changes in Git to ensure any large binaries are kept in sync with your checkout.
Installing the dependencies manually
===============================================================
If you're using Ubuntu, you can install the ``BZip2`` packages using:
.. code:: shell
sudo apt-get install libbz2-dev
You must install the ``half`` header from the `half website <http://half.sourceforge.net/>`_.