Usage
Usage on Linux
You can enable the graph and tensor layers using environment variables only, without modifying the Vulkan® application. The following environment variables are used:
Use the
LD_LIBRARY_PATHenvironment variable to point at theVkLayer_GraphandVkLayer_Tensorlibraries.Use the
VK_ADD_LAYER_PATHenvironment variable to point at theVkLayer_Graph.jsonandVkLayer_Tensor.jsonmanifest file.You must enable the graph layer before the tensor layer. To do this, use the
VK_INSTANCE_LAYERSenvironment variable.
If you have installed the Emulation Layer into a deploy folder, use the following environment variables to enable the layers:
export LD_LIBRARY_PATH=$PWD/deploy/lib:$LD_LIBRARY_PATH
export VK_ADD_LAYER_PATH=$PWD/deploy/share/vulkan/explicit_layer.d
export VK_INSTANCE_LAYERS=VK_LAYER_ML_Graph_Emulation:VK_LAYER_ML_Tensor_Emulation
You can also enable logging using environment variables. Logging must be set
before the application is started. Logging severity can be one of error,
warning, info, or debug. Logging severity is set independently for the
graph and tensor layer using the following commands:
export VMEL_GRAPH_SEVERITY=debug
export VMEL_TENSOR_SEVERITY=info
Common severity for both layers can be set using the following command:
export VMEL_COMMON_SEVERITY=debug
Usage on Windows®
You can enable the graph and tensor layers using environment variables only, without modifying the Vulkan® application. The following environment variables are used:
Use the
VK_ADD_LAYER_PATHenvironment variable to point at theVkLayer_Graph.jsonandVkLayer_Tensor.jsonmanifest files.You must enable the graph layer before the tensor layer. To do this, use the
VK_INSTANCE_LAYERSenvironment variable.
If you have installed the Emulation Layer into a deploy folder, use the following environment variables to enable the layers:
$env:VK_LAYER_PATH="$PWD\deploy\bin"
$env:VK_INSTANCE_LAYERS="VK_LAYER_ML_Graph_Emulation;VK_LAYER_ML_Tensor_Emulation"
Alternatively, you can use the Windows® registry keys to load the manifest files. This can be done using the Windows® GUI. Or, if you have installed the emulation layer into a deploy folder, you set the path to the manifest files using:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ExplicitLayers /v `
{ABSOLUTE_PATH}\deploy\bin /t REG_DWORD /d 0 /f
$env:VK_INSTANCE_LAYERS="VK_LAYER_ML_Graph_Emulation;VK_LAYER_ML_Tensor_Emulation"
Note
If running a Windows® terminal with elevated permissions, VK_ADD_LAYER_PATH is ignored
for security reasons. However, if VK_ADD_LAYER_PATH is set and not ignored, then Vulkan
skips searching the registry keys for manifest files.
You can also enable logging using environment variables. Logging must be set
before the application is started. Logging severity can be one of error,
warning, info, or debug. Logging severity is set independently for the
graph and tensor layer using the following commands:
$env:VMEL_GRAPH_SEVERITY="debug"
$env:VMEL_TENSOR_SEVERITY="info"
Usage on Android™
You can pack the graph and tensor layer libraries into the Application Package
Kit (APK) or push to the /data/local/debug/vulkan directory for Android™ to
discover the Emulation Layer. Applications can enable the layers during Vulkan
instance creation or you can enable the layers without modifying the application
by using following commands:
$ adb shell settings put global enable_gpu_debug_layers 1
$ adb shell settings put global gpu_debug_app ${package_name}
$ adb shell settings put global gpu_debug_layers \
VK_LAYER_ML_Graph_Emulation:VK_LAYER_ML_Tensor_Emulation
Cross compilation for AArch64 on x86-64 (Experimental)
The shader pre-compilation step requires a glslang compiler. There are three ways to accomplish this when cross-compiling:
Provide a custom glslang executable. You can direct CMake to a custom glslang executable file using the
GLSLANG_EXECUTABLEoption. First, build glslang inside its repo. When the repository is initialized using the repo manifest, the glslang source is checked out in<repo_root>/dependencies/glslang/For building glslang, see Building (CMake).Install glslang to the system. Under cross compilation, when no custom glslang executable is provided, it will be searched from the system using CMake’s
find_package. On Ubuntu, you can install it withsudo apt install glslang-toolsor from the source code following the previously mentioned documentation. Note that we require version > 15.4.0, which may not yet be available in Ubuntu’s official package repositories.Disable the shader pre-compilation. This can be done by adding the CMake option
-DVMEL_DISABLE_PRECOMPILE_SHADERS=ONto CMake Command. By doing so, the shaders would be compiled at runtime.
An example build flow using the option 1 would be:
First, build the glslang standalone under <repo_root>/dependencies/glslang/:
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_BINARIES=ON -DENABLE_OPT=OFF -DBUILD_SHARED_LIBS=OFF
cmake --build build --target glslang-standalone
After building, the binary will be at
<repo_root>/dependencies/glslang/build/StandAlone/glslang. Then run the
following under <repo_root>/sw/emulation-layer/:
$ cmake -B build \
-DCMAKE_TOOLCHAIN_FILE=${REPO}/sw/emulation-layer/cmake/toolchain/linux-aarch64-gcc.cmake \
-DGLSLANG_PATH=${REPO}/dependencies/glslang \
-DSPIRV_CROSS_PATH=${REPO}/dependencies/SPIRV-Cross \
-DSPIRV_HEADERS_PATH=${REPO}/dependencies/SPIRV-Headers \
-DSPIRV_TOOLS_PATH=${REPO}/dependencies/SPIRV-Tools \
-DVULKAN_HEADERS_PATH=${REPO}/dependencies/Vulkan-Headers \
-DGLSLANG_EXECUTABLE=${REPO}/dependencies/glslang/build/StandAlone/glslang
$ cmake --build build
Vulkan® Layer Documentation
For more information about using layers, see the Vulkan® Layer Documentation.
Troubleshooting
All zero output from AMD GPUs on Linux
Some workloads may cause silent GPU crashes due to timeout errors. You can check for related kernel messages with the following command:
dmesg | grep -i amdgpu
To change the timeout, follow these steps (applies if your system uses GRUB as the bootloader):
Edit the GRUB configuration file:
sudo nano /etc/default/grub
Add or modify the
GRUB_CMDLINE_LINUXline to include a longer timeout value in milliseconds:GRUB_CMDLINE_LINUX="quiet splash amdgpu.lockup_timeout=20000"
Update the GRUB configuration:
sudo update-grubReboot the system:
sudo reboot
PyPI
The ML Emulation Layer for Vulkan® is available on PyPI as the ai-ml-emulation-layer-for-vulkan package.
Install:
pip install ai-ml-emulation-layer-for-vulkan