Compare commits

..

3 Commits

Author SHA1 Message Date
peterjunpark
abec1ed8c6 update version list link (#5959) 2026-02-11 14:19:04 -05:00
Peter Park
e229b10a06 linux post-install: clean up exports 2025-12-16 16:37:20 -05:00
peterjunpark
b2c4ea3c76 update version list link (#5761) 2025-12-11 17:04:01 -05:00
90 changed files with 4389 additions and 8440 deletions

View File

@@ -3,8 +3,11 @@ ABI
ACE ACE
ACEs ACEs
ACS ACS
AccVGPR
AccVGPRs
AITER AITER
ALU ALU
AllReduce
AMD AMD
AMDGPU AMDGPU
AMDGPUs AMDGPUs
@@ -19,32 +22,28 @@ APIC
APIs APIs
APU APU
APUs APUs
ASAN
ASIC ASIC
ASICs ASICs
ASan ASan
ASAN
ASm ASm
ATI ATI
AccVGPR atomicRMW
AccVGPRs
AddressSanitizer AddressSanitizer
AlexNet AlexNet
AllReduce
Andrej Andrej
Arb Arb
Autocast Autocast
BARs BARs
BatchNorm
BKC BKC
BLAS BLAS
BMC BMC
BabelStream BabelStream
BatchNorm
Bitwise
Blit Blit
Blockwise Blockwise
Bluefield Bluefield
Bootloader Bootloader
BrainFloat
Broadcom Broadcom
CAS CAS
CCD CCD
@@ -63,6 +62,7 @@ CPF
CPP CPP
CPU CPU
CPUs CPUs
Cron
CSC CSC
CSDATA CSDATA
CSE CSE
@@ -73,8 +73,8 @@ CTests
CU CU
CUDA CUDA
CUs CUs
CX
CXX CXX
CX
Cavium Cavium
CentOS CentOS
ChatGPT ChatGPT
@@ -87,32 +87,35 @@ Concretized
Conda Conda
ConnectX ConnectX
CountOnes CountOnes
Cron
CuPy CuPy
da
Dashboarding
Dataloading
DBRX DBRX
DDR DDR
DF DF
DGEMM DGEMM
DGL DGL
DGLGraph DGLGraph
dGPU
dGPUs
DIMM DIMM
DKMS DKMS
DL DL
DMA DMA
DOMContentLoaded
DNN DNN
DNNL DNNL
DOMContentLoaded
DPM DPM
DRI DRI
DW DW
DWORD DWORD
Dashboarding
Dask Dask
DataFrame DataFrame
DataLoader DataLoader
DataParallel DataParallel
Dataloading
Debian Debian
decompositions
DeepSeek DeepSeek
DeepSpeed DeepSpeed
Dependabot Dependabot
@@ -120,20 +123,24 @@ Deprecations
DevCap DevCap
DirectX DirectX
Disaggregated Disaggregated
disaggregated
Dockerfile Dockerfile
Dockerized Dockerized
Doxygen Doxygen
dropless
ELMo ELMo
ENDPGM ENDPGM
EPYC EPYC
ESXi ESXi
EoS EoS
etcd
fas
FBGEMM FBGEMM
FIFOs
FFT FFT
FFTs FFTs
FFmpeg FFmpeg
FHS FHS
FIFOs
FIXME FIXME
FMA FMA
FP FP
@@ -142,8 +149,8 @@ Filesystem
FindDb FindDb
Flang Flang
FlashAttention FlashAttention
FlashInfer
FlashInfers FlashInfers
FlashInfer
FluxBenchmark FluxBenchmark
Fortran Fortran
Fuyu Fuyu
@@ -160,12 +167,16 @@ GDS
GEMM GEMM
GEMMs GEMMs
GFLOPS GFLOPS
GFXIP
GFortran GFortran
GFXIP
GGUF GGUF
Gemma
GiB
GIM GIM
GL GL
Glibc
GLXT GLXT
Gloo
GMI GMI
GPG GPG
GPGPU GPGPU
@@ -174,25 +185,23 @@ GPT
GPU GPU
GPU's GPU's
GPUs GPUs
Graphbolt
GraphSage
GRBM GRBM
GRE GRE
Gemma
GenAI GenAI
GenZ GenZ
GiB
GitHub GitHub
Gitpod Gitpod
Glibc
Gloo
GraphSage
Graphbolt
HBM HBM
HCA HCA
HGX HGX
HIPCC HIPCC
hipDataType
HIPExtension HIPExtension
HIPIFY HIPIFY
HIPification HIPification
hipification
HIPify HIPify
HPC HPC
HPCG HPCG
@@ -202,12 +211,12 @@ HSA
HW HW
HWE HWE
HWS HWS
HX
Haswell Haswell
Higgs Higgs
href
Hyperparameters
Huggingface Huggingface
HunyuanVideo HunyuanVideo
Hyperparameters
IB IB
ICD ICD
ICT ICT
@@ -216,10 +225,13 @@ IDE
IDEs IDEs
IFWI IFWI
IMDb IMDb
IncDec
instrSize
interpolators
IOMMU IOMMU
IOP IOP
IOPM
IOPS IOPS
IOPM
IOV IOV
IRQ IRQ
ISA ISA
@@ -227,7 +239,6 @@ ISV
ISVs ISVs
ITL ITL
ImageNet ImageNet
IncDec
InfiniBand InfiniBand
Inlines Inlines
IntelliSense IntelliSense
@@ -236,8 +247,8 @@ Intersphinx
Intra Intra
Ioffe Ioffe
JAX's JAX's
JSON
Jinja Jinja
JSON
Jupyter Jupyter
KFD KFD
KFDTest KFDTest
@@ -245,10 +256,10 @@ KMD
KV KV
KVM KVM
Karpathy's Karpathy's
Keras
Khronos
KiB KiB
Kineto Kineto
Keras
Khronos
LAPACK LAPACK
LCLK LCLK
LDS LDS
@@ -258,20 +269,21 @@ LLVM
LM LM
LRU LRU
LSAN LSAN
LSTMs
LSan LSan
LTS LTS
LSTMs
LteAll
LanguageCrossEntropy LanguageCrossEntropy
LoRA LoRA
LteAll
MECO MECO
MEM MEM
MERCHANTABILITY MERCHANTABILITY
MFMA MFMA
MiB
MIGraphX MIGraphX
MIOpen MIOpen
MIOpen's
MIOpenGEMM MIOpenGEMM
MIOpen's
MIVisionX MIVisionX
MLM MLM
MMA MMA
@@ -282,9 +294,9 @@ MNIST
MPI MPI
MPT MPT
MSVC MSVC
mul
MVAPICH MVAPICH
MVFFR MVFFR
MXFP
Makefile Makefile
Makefiles Makefiles
ManyLinux ManyLinux
@@ -297,16 +309,16 @@ Megatron
Mellanox Mellanox
Mellanox's Mellanox's
Meta's Meta's
MiB
Miniconda Miniconda
MirroredStrategy MirroredStrategy
Mixtral Mixtral
MosaicML
MoEs MoEs
Mooncake Mooncake
MosaicML
Mpops Mpops
Multicore Multicore
Multithreaded Multithreaded
MXFP
MyEnvironment MyEnvironment
MyST MyST
NANOO NANOO
@@ -314,27 +326,24 @@ NBIO
NBIOs NBIOs
NCCL NCCL
NCF NCF
NCS
NFS NFS
NIC NIC
NICs NICs
NLI NLI
NLP NLP
NN NN
NOP
NPKit NPKit
NPS NPS
NSP NSP
NUMA NUMA
NVCC NVCC
NVIDIA NVIDIA
NVLink
NVPTX NVPTX
NaN NaN
Nano Nano
Navi Navi
NoReturn
Noncoherently Noncoherently
NoReturn
NousResearch's NousResearch's
NumPy NumPy
OAM OAM
@@ -361,10 +370,13 @@ OpenVX
OpenXLA OpenXLA
Optim Optim
Oversubscription Oversubscription
PagedAttention
Pallas
PCC PCC
PCI PCI
PCIe PCIe
PEFT PEFT
perf
PEQT PEQT
PIL PIL
PILImage PILImage
@@ -374,8 +386,6 @@ PRNG
PRs PRs
PaLM PaLM
Pageable Pageable
PagedAttention
Pallas
PeerDirect PeerDirect
PerfDb PerfDb
Perfetto Perfetto
@@ -388,8 +398,8 @@ Pretraining
Primus Primus
Profiler's Profiler's
PyPi PyPi
PyTorch
Pytest Pytest
PyTorch
Qcycles Qcycles
Qwen Qwen
RAII RAII
@@ -400,16 +410,16 @@ RDC's
RDMA RDMA
RDNA RDNA
README README
Recomputation
RHEL RHEL
RLHF
RMW RMW
RNN RNN
RNNs RNNs
ROC ROC
ROCProfiler ROCProfiler
ROCT ROCT
ROCTracer
ROCTx ROCTx
ROCTracer
ROCclr ROCclr
ROCdbgapi ROCdbgapi
ROCgdb ROCgdb
@@ -424,10 +434,8 @@ RPP
RST RST
RW RW
Radeon Radeon
Recomputation
RelWithDebInfo RelWithDebInfo
Req Req
ResNet
Rickle Rickle
RoCE RoCE
Runfile Runfile
@@ -435,6 +443,7 @@ Ryzen
SALU SALU
SBIOS SBIOS
SCA SCA
ScaledGEMM
SDK SDK
SDKs SDKs
SDMA SDMA
@@ -453,6 +462,7 @@ SKU
SKUs SKUs
SLES SLES
SLURM SLURM
Slurm
SMEM SMEM
SMFMA SMFMA
SMI SMI
@@ -463,17 +473,17 @@ SRAM
SRAMECC SRAMECC
SVD SVD
SWE SWE
ScaledGEMM
SerDes SerDes
ShareGPT ShareGPT
Shlens Shlens
simd
Skylake Skylake
Slurm
Softmax Softmax
Spack Spack
SplitK SplitK
Supermicro Supermicro
Szegedy Szegedy
TagRAM
TCA TCA
TCC TCC
TCCs TCCs
@@ -481,33 +491,36 @@ TCI
TCIU TCIU
TCP TCP
TCR TCR
TVM
TheRock
THREADGROUPS
threadgroups
TensorRT
TensorFloat
TF TF
TFLOPS TFLOPS
THREADGROUPS
TP TP
TPS TPS
TPU TPU
TPUs TPUs
TSME TSME
TVM
TagRAM
Tagram
Taichi Taichi
Taichi's Taichi's
Tagram
TensileLite TensileLite
TensorBoard TensorBoard
TensorFloat
TensorFlow TensorFlow
TensorParallel TensorParallel
TensorRT
TheRock
ToC ToC
TopK
TorchAudio TorchAudio
torchaudio
TorchElastic TorchElastic
TorchMIGraphX TorchMIGraphX
torchrec
TorchScript TorchScript
TorchServe TorchServe
torchserve
torchtext
TorchVision TorchVision
TransferBench TransferBench
TrapStatus TrapStatus
@@ -519,18 +532,17 @@ UE
UIF UIF
UMC UMC
USM USM
USM
UTCL UTCL
UTCL
UTIL
UTIL UTIL
UltraChat UltraChat
Uncached Uncached
Unhandled
Unittests Unittests
Unhandled
unwindowed
VALU VALU
VBIOS VBIOS
VCN VCN
verl's
VGPR VGPR
VGPRs VGPRs
VM VM
@@ -541,7 +553,6 @@ VSIX
VSkipped VSkipped
Vanhoucke Vanhoucke
Vulkan Vulkan
WDAG
WGP WGP
WGPs WGPs
WR WR
@@ -550,6 +561,7 @@ WikiText
Wojna Wojna
Workgroups Workgroups
Writebacks Writebacks
xcc
XCD XCD
XCDs XCDs
XGBoost XGBoost
@@ -569,8 +581,8 @@ ZeRO
ZenDNN ZenDNN
accuracies accuracies
activations activations
addEventListener
addr addr
addEventListener
ade ade
ai ai
alloc alloc
@@ -581,7 +593,6 @@ amdgpu
api api
aten aten
atmi atmi
atomicRMW
atomics atomics
autogenerated autogenerated
autotune autotune
@@ -598,16 +609,17 @@ bilinear
bitcode bitcode
bitsandbytes bitsandbytes
bitwise bitwise
Bitwise
blit blit
bootloader bootloader
boson boson
bosons bosons
br br
BrainFloat
btn btn
buildable buildable
bursty bursty
bzip bzip
cTDP
cacheable cacheable
carveout carveout
cd cd
@@ -622,7 +634,6 @@ cmd
coalescable coalescable
codename codename
collater collater
comfyui
comgr comgr
compat compat
completers completers
@@ -639,18 +650,16 @@ copyable
cpp cpp
csn csn
cuBLAS cuBLAS
cuda
cuDNN cuDNN
cudnn
cuFFT cuFFT
cuLIB cuLIB
cuRAND cuRAND
cuSOLVER cuSOLVER
cuSPARSE cuSPARSE
cuda
cudnn
customizations customizations
dGPU cTDP
dGPUs
da
dataset dataset
datasets datasets
dataspace dataspace
@@ -660,9 +669,8 @@ datatypes
dbgapi dbgapi
de de
deallocation deallocation
debian
debuggability debuggability
decompositions debian
deepseek deepseek
denoise denoise
denoised denoised
@@ -677,13 +685,10 @@ devicelibs
devsel devsel
dgl dgl
dimensionality dimensionality
disaggregated
disambiguates disambiguates
distro distro
distros distros
dkms dkms
dnf
dropless
dtype dtype
eb eb
el el
@@ -696,14 +701,10 @@ endpgm
enqueue enqueue
env env
epilog epilog
etcd
etcetera etcetera
ethernet ethernet
exascale exascale
executables executables
fam
fam
fas
ffmpeg ffmpeg
filesystem filesystem
forEach forEach
@@ -712,7 +713,6 @@ fp
framebuffer framebuffer
gRPC gRPC
galb galb
gb
gcc gcc
gdb gdb
gemm gemm
@@ -725,15 +725,14 @@ globals
gnupg gnupg
gpu gpu
grayscale grayscale
gre
gx gx
gzip gzip
heterogenous heterogenous
hipBLAS hipBLAS
hipBLASLt hipBLASLt
hipBLASLt's hipBLASLt's
hipblaslt
hipCUB hipCUB
hipDataType
hipFFT hipFFT
hipFORT hipFORT
hipLIB hipLIB
@@ -744,12 +743,10 @@ hipSPARSELt
hipTensor hipTensor
hipamd hipamd
hipblas hipblas
hipblaslt
hipcc hipcc
hipcub hipcub
hipfft hipfft
hipfort hipfort
hipification
hipify hipify
hipsolver hipsolver
hipsparse hipsparse
@@ -758,10 +755,8 @@ hostname
hotspotting hotspotting
hpc hpc
hpp hpp
href
hsa hsa
hsakmt hsakmt
hx
hyperparameter hyperparameter
hyperparameters hyperparameters
iDRAC iDRAC
@@ -775,9 +770,7 @@ init
initializer initializer
inlining inlining
installable installable
instrSize
interop interop
interpolators
interprocedural interprocedural
intra intra
intrinsics intrinsics
@@ -804,7 +797,6 @@ lm
localscratch localscratch
logits logits
lossy lossy
lp
macOS macOS
matchers matchers
maxtext maxtext
@@ -821,21 +813,23 @@ mjx
mkdir mkdir
mlirmiopen mlirmiopen
mtypes mtypes
mul
mutex mutex
mvffr mvffr
namespace namespace
namespaces namespaces
nanoGPT nanoGPT
NCS
NOP
NVLink
num num
numref numref
ocl ocl
ol
opencl opencl
opencv opencv
openmp openmp
openssl openssl
optimizers optimizers
ol
os os
oversubscription oversubscription
pageable pageable
@@ -846,11 +840,9 @@ param
parameterization parameterization
passthrough passthrough
pe pe
perf
perfcounter perfcounter
performant performant
perl perl
pkgman
pragma pragma
pre pre
prebuild prebuild
@@ -880,6 +872,8 @@ pseudorandom
px px
py py
pytorch pytorch
recommender
recommenders
quantile quantile
quantizer quantizer
quasirandom quasirandom
@@ -891,10 +885,8 @@ radeon
rccl rccl
rdc rdc
rdma rdma
reStructuredText
recommender
recommenders
redhat redhat
reStructuredText
redirections redirections
refactorization refactorization
reformats reformats
@@ -908,6 +900,7 @@ rescaling
reusability reusability
rhel rhel
rl rl
RLHF
roadmap roadmap
roc roc
rocAL rocAL
@@ -934,8 +927,8 @@ rocm
rocminfo rocminfo
rocprim rocprim
rocprof rocprof
rocprofiler
rocprofv rocprofv
rocprofiler
rocr rocr
rocrand rocrand
rocsolver rocsolver
@@ -945,8 +938,8 @@ roctracer
rst rst
runtime runtime
runtimes runtimes
rx
ryzen ryzen
ResNet
sL sL
scalability scalability
scalable scalable
@@ -961,7 +954,6 @@ sglang
shader shader
sharding sharding
sigmoid sigmoid
simd
sles sles
sm sm
smi smi
@@ -982,7 +974,6 @@ submodule
submodules submodules
subnet subnet
supercomputing supercomputing
suse
symlink symlink
symlinks symlinks
sys sys
@@ -992,7 +983,6 @@ td
tensorfloat tensorfloat
tf tf
th th
threadgroups
tokenization tokenization
tokenize tokenize
tokenized tokenized
@@ -1002,21 +992,17 @@ toolchain
toolchains toolchains
toolset toolset
toolsets toolsets
torchaudio
torchrec
torchserve
torchtext
torchtitan torchtitan
torchvision torchvision
tp tp
tqdm tqdm
tracebacks tracebacks
txt txt
TopK
uarch uarch
ubuntu ubuntu
udev
uncacheable
uncached uncached
uncacheable
uncorrectable uncorrectable
underoptimized underoptimized
unhandled unhandled
@@ -1025,11 +1011,12 @@ unmapped
unsqueeze unsqueeze
unstacking unstacking
unswitching unswitching
untar
untrusted untrusted
untuned untuned
unwindowed
upvote upvote
USM
UTCL
UTIL
utils utils
vL vL
variational variational
@@ -1041,7 +1028,6 @@ vectorized
vectorizer vectorizer
vectorizes vectorizes
verl verl
verl's
virtualize virtualize
virtualized virtualized
vjxb vjxb
@@ -1060,14 +1046,11 @@ writeback
writebacks writebacks
wrreq wrreq
wzo wzo
xargs
xDiT xDiT
xdit
xGMI xGMI
xPacked xPacked
xargs
xcc
xdit
xt
xtx
xz xz
yaml yaml
ysvmadyb ysvmadyb

1841
RELEASE.md

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,115 +0,0 @@
****************************************
ROCm |ROCM_VERSION| compatibility matrix
****************************************
To plan your ROCm |ROCM_VERSION| installation, use the following selector to
view ROCm compatibility and system requirements information for your AMD
hardware configuration. For installation instructions, see
:doc:`/install/rocm`.
.. include:: ./includes/selector.rst
----
Hardware, software, and firmware requirements
=============================================
ROCm depends on a coordinated stack of compatible firmware, driver, and user
space components. Maintaining version alignment between these layers ensures
expected GPU operation and performance, especially for AMD data center products.
Future preview releases will expand hardware and operating system coverage.
ROCm 7.11.0 enables support for primarily compute workloads. Future releases
will support mixed workloads (compute and graphics).
.. selected:: os=ubuntu os=rhel os=sles
.. selected:: fam=radeon-pro fam=radeon
If youre interested in testing AMD Radeon GPUs with preview support for
graphics use cases with AMD ROCm 7.11.0, install Radeon Software for Linux
version 25.35 from `Linux Drivers for AMD Radeon and Radeon PRO
Graphics <https://www.amd.com/en/support/download/linux-drivers.html>`__.
.. selected:: fam=ryzen
If you're interested in testing AMD Ryzen APUs with preview support for
graphics use cases with AMD ROCm 7.11.0, use the inbox graphics drivers of
Ubuntu 24.04.3.
.. include:: ./includes/system-instinct.rst
.. include:: ./includes/system-radeon-pro.rst
.. include:: ./includes/system-radeon.rst
.. include:: ./includes/system-ryzen.rst
----
.. _rocm-compat-frameworks:
Deep learning frameworks
========================
ROCm |ROCM_VERSION| provides optimized support for popular deep learning
frameworks. The following table lists supported frameworks and their supported
versions.
.. _rocm-compat-pytorch:
.. matrix::
.. matrix-head::
.. matrix-row::
.. matrix-cell:: Framework
:header:
.. matrix-cell:: Supported versions
:header:
.. matrix-row::
:show-when: fam=instinct fam=ryzen
.. matrix-cell:: PyTorch
.. matrix-cell:: 2.9.1, 2.8.0, 2.7.1
:show-when: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
.. matrix-cell:: 2.9.1
:show-when: os=windows
.. matrix-row::
:show-when: fam=radeon fam=radeon-pro
.. matrix-cell:: PyTorch
.. matrix-cell:: 2.9.1
For installation instructions, see :ref:`pip-install-pytorch`.
.. _rocm-compat-python:
.. note::
ROCm |ROCM_VERSION| is compatible with Python versions 3.11, 3.12, and
3.13.
----
ROCm Core SDK components
========================
The following table lists core components included in the ROCm |ROCM_VERSION|
release. Expect future releases in this stream to expand the list of
components.
.. include:: ./includes/core-sdk-components-linux.rst
.. include:: ./includes/core-sdk-components-windows.rst
----
.. include:: ./includes/virtualization-instinct.rst

View File

@@ -1,263 +0,0 @@
.. matrix::
:show-when: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
.. matrix-head::
.. matrix-row::
:header:
.. matrix-cell:: Component group
.. matrix-cell:: Component name
.. matrix-row::
.. matrix-cell:: Math and compute libraries
:rowspan: 18
.. matrix-cell::
`Composable Kernel <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/composablekernel>`__
.. matrix-row::
.. matrix-cell::
`hipBLAS <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipblas>`__
.. matrix-row::
.. matrix-cell::
`hipBLASLt <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipblaslt>`__
.. matrix-row::
.. matrix-cell::
`hipCUB <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipcub>`__
.. matrix-row::
.. matrix-cell::
`hipFFT <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipfft>`__
.. matrix-row::
.. matrix-cell::
`hipRAND <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hiprand>`__
.. matrix-row::
.. matrix-cell::
`hipSOLVER <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipsolver>`__
.. matrix-row::
.. matrix-cell::
`hipSPARSE <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipsparse>`__
.. matrix-row::
.. matrix-cell::
`hipSPARSELt <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipsparselt>`__
.. matrix-row::
.. matrix-cell::
`MIOpen <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/miopen>`__
.. matrix-row::
.. matrix-cell::
`rocBLAS <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocblas>`__
.. matrix-row::
.. matrix-cell::
`rocFFT <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocfft>`__
.. matrix-row::
.. matrix-cell::
`rocPRIM <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocprim>`__
.. matrix-row::
.. matrix-cell::
`rocRAND <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocrand>`__
.. matrix-row::
.. matrix-cell::
`rocSOLVER <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocsolver>`__
.. matrix-row::
.. matrix-cell::
`rocSPARSE <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocsparse>`__
.. matrix-row::
.. matrix-cell::
`rocThrust <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocthrust>`__
.. matrix-row::
.. matrix-cell::
`rocWMMA <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocwmma>`__
.. matrix-row::
.. matrix-cell:: Communication librarires
.. matrix-cell::
`RCCL <https://github.com/ROCm/rccl/tree/release/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell:: Support libraries
.. matrix-cell::
`ROCm CMake <https://github.com/ROCm/rocm-cmake/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell:: Runtimes and compilers
:rowspan: 5
:show-when: fam=instinct fam=radeon-pro fam=radeon
.. matrix-cell:: Runtimes and compilers
:rowspan: 4
:show-when: fam=ryzen
.. matrix-cell::
`HIP <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/hip>`__
.. matrix-row::
.. matrix-cell::
`HIPIFY <https://github.com/ROCm/HIPIFY/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell::
`LLVM <https://github.com/ROCm/llvm-project/tree/release/therock-7.11>`__
.. matrix-row::
:show-when: fam=instinct fam=radeon-pro fam=radeon
.. matrix-cell::
`ROCr Runtime <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/rocr-runtime>`__
.. matrix-row::
.. matrix-cell::
`SPIRV-LLVM-Translator <https://github.com/ROCm/SPIRV-LLVM-Translator/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell:: Profiling and debugging tools
:rowspan: 6
:show-when: fam=instinct
.. matrix-cell:: Profiling and debugging tools
:rowspan: 4
:show-when: fam=radeon-pro fam=radeon
.. matrix-cell::
:show-when: fam=instinct
`ROCm Compute Profiler (rocprofiler-compute) <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/rocprofiler-compute>`__
.. matrix-cell::
:show-when: fam=radeon-pro fam=radeon
`ROCprofiler-SDK <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/rocprofiler-sdk>`__
.. matrix-row::
:show-when: fam=instinct
.. matrix-cell::
`ROCm Systems Profiler (rocprofiler-systems) <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/rocprofiler-systems>`__
.. matrix-row::
:show-when: fam=instinct
.. matrix-cell::
`ROCprofiler-SDK <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/rocprofiler-sdk>`__
.. matrix-row::
:show-when: fam=instinct fam=radeon-pro fam=radeon
.. matrix-cell::
`ROCdbgapi <https://github.com/ROCm/ROCdbgapi/tree/release/therock-7.11>`__
.. matrix-row::
:show-when: fam=instinct fam=radeon-pro fam=radeon
.. matrix-cell::
`ROCm Debugger (ROCgdb) <https://github.com/ROCm/ROCgdb/tree/release/therock-7.11>`__
.. matrix-row::
:show-when: fam=instinct fam=radeon-pro fam=radeon
.. matrix-cell::
`ROCr Debug Agent <https://github.com/ROCm/rocr_debug_agent/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell:: Control and monitoring tools
:rowspan: 2
.. matrix-cell::
:show-when: fam=instinct fam=radeon-pro fam=radeon
`AMD SMI <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/amdsmi>`__
.. matrix-row::
.. matrix-cell::
`rocminfo <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/rocminfo>`__
.. matrix-row::
.. matrix-cell:: System validation tools
:rowspan: 2
.. matrix-cell::
`ROCm Bandwidth Test <https://github.com/ROCm/rocm_bandwidth_test>`__
.. matrix-row::
.. matrix-cell::
`TransferBench <https://github.com/ROCm/TransferBench>`__

View File

@@ -1,151 +0,0 @@
.. matrix::
:show-when: os=windows
.. matrix-head::
.. matrix-row::
:header:
.. matrix-cell:: Component group
.. matrix-cell:: Component name
.. matrix-row::
.. matrix-cell:: Math and compute libraries
:rowspan: 17
.. matrix-cell::
`Composable Kernel <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/composablekernel>`__
.. matrix-row::
.. matrix-cell::
`hipBLAS <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipblas>`__
.. matrix-row::
.. matrix-cell::
`hipBLASLt <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipblaslt>`__
.. matrix-row::
.. matrix-cell::
`hipCUB <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipcub>`__
.. matrix-row::
.. matrix-cell::
`hipFFT <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipfft>`__
.. matrix-row::
.. matrix-cell::
`hipRAND <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocsolver>`__
.. matrix-row::
.. matrix-cell::
`hipSOLVER <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipsolver>`__
.. matrix-row::
.. matrix-cell::
`hipSPARSE <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/hipsparse>`__
.. matrix-row::
.. matrix-cell::
`MIOpen <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/miopen>`__
.. matrix-row::
.. matrix-cell::
`rocBLAS <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocblas>`__
.. matrix-row::
.. matrix-cell::
`rocFFT <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocfft>`__
.. matrix-row::
.. matrix-cell::
`rocPRIM <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocprim>`__
.. matrix-row::
.. matrix-cell::
`rocRAND <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocrand>`__
.. matrix-row::
.. matrix-cell::
`rocSOLVER <https://github.com/ROCm/rocm-libraries/tree/therock-7.9.0/projects/rocsolver>`__
.. matrix-row::
.. matrix-cell::
`rocSPARSE <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocsparse>`__
.. matrix-row::
.. matrix-cell::
`rocThrust <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocthrust>`__
.. matrix-row::
.. matrix-cell::
`rocWMMA <https://github.com/ROCm/rocm-libraries/tree/release/therock-7.11/projects/rocwmma>`__
.. matrix-row::
.. matrix-cell:: Support libraries
.. matrix-cell::
`ROCm CMake <https://github.com/ROCm/rocm-cmake/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell:: Runtimes and compilers
:rowspan: 3
.. matrix-cell::
`HIP <https://github.com/ROCm/rocm-systems/tree/release/therock-7.11/projects/hip>`__
.. matrix-row::
.. matrix-cell::
`HIPIFY <https://github.com/ROCm/HIPIFY/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell::
`LLVM <https://github.com/ROCm/llvm-project/tree/release/therock-7.11>`__
.. matrix-row::
.. matrix-cell:: Control and monitoring tools
.. matrix-cell:: hipinfo

View File

@@ -1,357 +0,0 @@
.. =========================================================== GPU/APU FAMILY ==
.. selector:: AMD device family
:key: fam
.. selector-option:: Instinct
:value: instinct
:width: 3
.. selector-option:: Radeon PRO
:value: radeon-pro
:width: 3
.. selector-option:: Radeon
:value: radeon
:width: 3
.. selector-option:: Ryzen AI
:value: ryzen
:width: 3
.. ================================================================ GPU / APU ==
.. selector:: Instinct GPU
:key: gpu
:show-when: fam=instinct
.. selector-info:: https://www.amd.com/en/products/accelerators/instinct.html
.. selector-option:: MI355X
:width: 3
.. selector-option:: MI350X
:width: 3
.. selector-option:: MI325X
:width: 3
.. selector-option:: MI300X
:width: 3
.. selector-option:: MI300A
:width: 3
.. selector-option:: MI250X
:width: 3
.. selector-option:: MI250
:width: 3
.. selector-option:: MI210
:width: 3
.. selector:: Radeon PRO GPU
:key: gpu
:show-when: fam=radeon-pro
.. selector-info:: https://www.amd.com/en/products/graphics/workstations.html
.. selector-option:: AI PRO R9700
:value: ai-r9700
:width: 3
.. selector-option:: AI PRO R9600D
:value: ai-r9600d
:width: 3
.. selector-option:: W7900 Dual Slot
:value: w7900-dual-slot
:width: 3
.. selector-option:: W7900
:value: w7900
:width: 3
.. selector-option:: W7800 48GB
:value: w7800-48gb
:width: 3
.. selector-option:: W7800
:value: w7800
:width: 3
.. selector-option:: W7700
:value: w7700
:width: 3
.. selector-option:: V710
:value: v710
:width: 3
.. selector:: Radeon GPU
:key: gpu
:show-when: fam=radeon
.. selector-info:: https://www.amd.com/en/products/graphics/desktops/radeon.html
.. selector-option:: RX 9070 XT
:value: rx-9070-xt
:width: 3
.. selector-option:: RX 9070 GRE
:value: rx-9070-gre
:width: 3
.. selector-option:: RX 9070
:value: rx-9070
:width: 3
.. selector-option:: RX 9060 XT LP
:value: rx-9060-xt-lp
:width: 3
.. selector-option:: RX 9060 XT
:value: rx-9060-xt
:width: 3
.. selector-option:: RX 9060
:value: rx-9060
:width: 3
.. selector-option:: RX 7900 XTX
:value: rx-7900-xtx
:width: 3
.. selector-option:: RX 7900 XT
:value: rx-7900-xt
:width: 3
.. selector-option:: RX 7900 GRE
:value: rx-7900-gre
:width: 3
.. selector-option:: RX 7800 XT
:value: rx-7800-xt
:width: 3
.. selector-option:: RX 7700 XT
:value: rx-7700-xt
:width: 3
.. selector-option:: RX 7700
:value: rx-7700
:width: 3
.. selector:: Ryzen AI APU
:key: gpu
:show-when: fam=ryzen
.. selector-info:: https://www.amd.com/en/products/processors/workstations/mobile.html
.. selector-option:: Max+ PRO 395
:value: max-pro-395
:width: 3
.. selector-option:: Max PRO 390
:value: max-pro-390
:width: 3
.. selector-option:: Max PRO 385
:value: max-pro-385
:width: 3
.. selector-option:: Max PRO 380
:value: max-pro-380
:width: 3
.. selector-option:: Max+ 395
:value: max-395
:width: 2
.. selector-option:: Max 390
:value: max-390
:width: 2
.. selector-option:: Max 385
:value: max-385
:width: 2
.. selector-option:: 9 HX 375
:value: 9-hx-375
:width: 2
.. selector-option:: 9 HX 370
:value: 9-hx-370
:width: 2
.. selector-option:: 9 365
:value: 9-365
:width: 2
.. ========================================================= OPERATING SYSTEM ==
.. selected:: fam=instinct
.. selector:: Linux distribution
:key: os
:show-when: gpu=mi355x gpu=mi350x gpu=mi325x
.. selector-option:: Ubuntu
:value: ubuntu
:width: 20%
.. selector-option:: Debian
:value: debian
:width: 20%
:show-when: gpu=mi355x gpu=mi350x gpu=mi325x
.. selector-option:: RHEL
:value: rhel
:width: 20%
.. selector-option:: Oracle Linux
:value: oracle-linux
:width: 20%
.. selector-option:: SLES
:value: sles
:width: 20%
.. selector:: Linux distribution
:key: os
:show-when: gpu=mi300x
.. selector-option:: Ubuntu
:value: ubuntu
:width: 4
.. selector-option:: Debian
:value: debian
:width: 4
.. selector-option:: RHEL
:value: rhel
:width: 4
.. selector-option:: Oracle Linux
:value: oracle-linux
:width: 4
.. selector-option:: Rocky Linux
:value: rocky-linux
:width: 4
.. selector-option:: SLES
:value: sles
:width: 4
.. selector:: Linux distribution
:key: os
:show-when: gpu=mi300a
.. selector-option:: Ubuntu
:value: ubuntu
:width: 3
.. selector-option:: RHEL
:value: rhel
:width: 3
.. selector-option:: Rocky Linux
:value: rocky-linux
:width: 3
.. selector-option:: SLES
:value: sles
:width: 3
.. selector:: Linux distribution
:key: os
:show-when: gpu=mi250x gpu=mi250 gpu=mi210
.. selector-option:: Ubuntu
:value: ubuntu
:width: 4
.. selector-option:: RHEL
:value: rhel
:width: 4
.. selector-option:: SLES
:value: sles
:width: 4
.. selected:: fam=radeon-pro
.. selector:: Operating system
:key: os
:show-when: gpu=ai-r9700 gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700 gpu=w6800
.. selector-option:: Ubuntu
:value: ubuntu
:width: 4
.. selector-option:: RHEL
:value: rhel
:width: 4
.. selector-option:: Windows
:value: windows
:width: 4
.. selector:: Linux distribution
:key: os
:show-when: gpu=v710 gpu=ai-r9600d
.. selector-option:: Ubuntu
:value: ubuntu
:width: 6
.. selector-option:: RHEL
:value: rhel
:width: 6
.. selected:: fam=radeon
.. selector:: Linux distribution
:key: os
:show-when: gpu=rx-9070-xt gpu=rx-9070-gre gpu=rx-9070 gpu=rx-9060-xt-lp gpu=rx-9060-xt gpu=rx-9060
.. selector-option:: Ubuntu
:value: ubuntu
:width: 6
.. selector-option:: RHEL
:value: rhel
:width: 6
.. selector:: Operating system
:key: os
:show-when: gpu=rx-7900-xtx gpu=rx-7900-xt gpu=rx-7900-gre gpu=rx-7800-xt gpu=rx-7700-xt gpu=rx-7700
.. selector-option:: Ubuntu
:value: ubuntu
:width: 4
.. selector-option:: RHEL
:value: rhel
:width: 4
.. selector-option:: Windows
:value: windows
:width: 4
.. selector:: Operating system
:key: os
:show-when: fam=ryzen
.. selector-option:: Ubuntu
:value: ubuntu
:width: 6
.. selector-option:: Windows
:value: windows
:width: 6

View File

@@ -1,209 +0,0 @@
.. matrix::
:show-when: fam=instinct
.. matrix-head::
.. raw:: html
<colgroup style="width: 50%;">
.. matrix-row::
.. matrix-cell:: AMD GPU series
:header:
.. matrix-cell::
:show-when: gpu=mi355x gpu=mi350x
`AMD Instinct MI350 Series <https://www.amd.com/en/products/accelerators/instinct/mi350.html>`__
.. matrix-cell::
:show-when: gpu=mi325x gpu=mi300x gpu=mi300a
`AMD Instinct MI300 Series <https://www.amd.com/en/products/accelerators/instinct/mi300.html>`__
.. matrix-cell::
:show-when: gpu=mi250x gpu=mi250 gpu=mi210
`AMD Instinct MI200 Series <https://www.amd.com/en/products/accelerators/instinct/mi200.html>`__
.. matrix-row::
.. matrix-cell:: Architecture
:header:
.. matrix-cell:: CDNA 4
:show-when: gpu=mi355x gpu=mi350x
.. matrix-cell:: CDNA 3
:show-when: gpu=mi325x gpu=mi300x gpu=mi300a
.. matrix-cell:: CDNA 2
:show-when: gpu=mi250x gpu=mi250 gpu=mi210
.. matrix-row::
.. matrix-cell:: LLVM target
:header:
.. matrix-cell:: gfx950
:show-when: gpu=mi355x gpu=mi350x
.. matrix-cell:: gfx942
:show-when: gpu=mi325x gpu=mi300x gpu=mi300a
.. matrix-cell:: gfx90a
:show-when: gpu=mi250x gpu=mi250 gpu=mi210
.. matrix-row::
:show-when: os=ubuntu
.. matrix-cell:: Supported Ubuntu versions
:header:
.. matrix-cell::
Ubuntu 24.04.3 (GA kernel: 6.8)
Ubuntu 22.04.5 (GA kernel: 5.15)
.. matrix-row::
:show-when: os=rhel
.. matrix-cell:: Supported Red Hat Enterprise Linux versions
:header:
.. matrix-cell::
:show-when: gpu=mi325x
RHEL 10.1 (kernel: 6.12.0-124)
RHEL 10.0 (kernel: 6.12.0-55)
RHEL 9.7 (kernel: 5.14.0-611)
RHEL 9.6 (kernel: 5.14.0-570)
RHEL 9.4 (kernel: 5.14.0-427)
.. matrix-cell::
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
RHEL 10.1 (kernel: 6.12.0-124)
RHEL 10.0 (kernel: 6.12.0-55)
RHEL 9.7 (kernel: 5.14.0-611)
RHEL 9.6 (kernel: 5.14.0-570)
RHEL 9.4 (kernel: 5.14.0-427)
RHEL 8.10 (kernel: 4.18.0-553)
.. matrix-row::
:show-when: os=debian
.. matrix-cell:: Supported Debian version
:header:
.. matrix-cell:: Debian 13 (kernel: 6.12)
.. matrix-row::
:show-when: os=oracle-linux
.. matrix-cell:: Supported Oracle Linux versions
:header:
.. matrix-cell::
:show-when: gpu=mi355x gpu=mi350x gpu=mi325x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
Oracle Linux 10 (kernel: UEK 8.1)
Oracle Linux 9 (kernel: UEK 8)
.. matrix-cell::
:show-when: gpu=mi300x
Oracle Linux 10 (kernel: UEK 8.1)
Oracle Linux 9 (kernel: UEK 8)
Oracle Linux 8 (kernel: UEK 7)
.. matrix-row::
:show-when: os=rocky-linux
.. matrix-cell:: Supported Rocky Linux versions
:header:
.. matrix-cell::
:show-when: gpu=mi300x gpu=mi300a
Rocky Linux 9 (kernel: 5.14.0-570)
.. matrix-row::
:show-when: os=sles
.. matrix-cell:: Supported SUSE Linux Enterprise Server versions
:header:
.. matrix-cell::
SLES 16.0 (kernel: 6.12)
SLES 15.7 (kernel: 6.4.0-150700.51)
.. matrix-row::
.. matrix-cell:: Supported AMD GPU Driver (amdgpu) versions
:header:
.. matrix-cell::
`31.10.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/31.10.0-preview/documentation/release-notes.html>`__
`30.20.1 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.20.1/documentation/release-notes.html>`__
`30.20.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.20.0/documentation/release-notes.html>`__
`30.10.2 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10.2/documentation/release-notes.html>`__
`30.10.1 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10.1/documentation/release-notes.html>`__
`30.10.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10/documentation/release-notes.html>`__
.. matrix-row::
.. matrix-cell:: Supported PLDM bundle (firmware) versions
:header:
.. matrix-cell::
:show-when: gpu=mi355x gpu=mi350x
01.25.16.03
.. matrix-cell::
:show-when: gpu=mi325x
01.25.04.02
.. matrix-cell::
:show-when: gpu=mi300x
01.25.03.12
.. matrix-cell::
:show-when: gpu=mi300a
BKC 26.1
.. matrix-cell::
:show-when: gpu=mi250x
IFWI 75 (or later)
.. matrix-cell::
:show-when: gpu=mi250 gpu=mi210
Maintenance update 5 with IFWI 75 (or later)

View File

@@ -1,123 +0,0 @@
.. matrix::
:show-when: fam=radeon-pro
.. matrix-head::
.. raw:: html
<colgroup style="width: 50%;">
.. matrix-row::
.. matrix-cell:: AMD GPU series
:header:
.. matrix-cell::
:show-when: gpu=ai-r9700 gpu=ai-r9600d
`AMD Radeon AI PRO R9000 Series <https://www.amd.com/en/products/graphics/workstations/radeon-ai-pro.html#tabs-95fa144b96-item-b95ec9e1ca-tab>`__
.. matrix-cell::
:show-when: gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700
`AMD Radeon PRO W7000 Series <https://www.amd.com/en/products/graphics/workstations/radeon-pro.html#tabs-990fdead92-item-20daa37284-tab>`__
.. matrix-cell::
:show-when: gpu=w6800
`AMD Radeon PRO W6000 Series <https://www.amd.com/en/products/graphics/workstations/radeon-pro/w6800.html>`__
.. matrix-cell::
:show-when: gpu=v710 gpu=v620
`AMD Radeon PRO V Series <https://www.amd.com/en/products/accelerators/radeon-pro.html>`__
.. matrix-row::
.. matrix-cell:: Architecture
:header:
.. matrix-cell:: RDNA 4
:show-when: gpu=ai-r9700 gpu=ai-r9600d
.. matrix-cell:: RDNA 3
:show-when: gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700 gpu=v710 gpu=w6800 gpu=v620
.. matrix-row::
.. matrix-cell:: LLVM target
:header:
.. matrix-cell:: gfx1201
:show-when: gpu=ai-r9700 gpu=ai-r9600d
.. matrix-cell:: gfx1100
:show-when: gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800
.. matrix-cell:: gfx1101
:show-when: gpu=w7700 gpu=v710
.. matrix-cell:: gfx1030
:show-when: gpu=w6800 gpu=v620
.. matrix-row::
:show-when: os=ubuntu
.. matrix-cell:: Supported Ubuntu versions
:header:
.. matrix-cell::
24.04.3 (GA kernel: 6.8)
22.04.5 (GA kernel: 5.15)
.. matrix-row::
:show-when: os=rhel
.. matrix-cell:: Supported RHEL versions
:header:
.. matrix-cell::
10.1 (kernel: 6.12.0-124)
9.7 (kernel: 5.14.0-427)
.. matrix-row::
:show-when: os=windows
.. matrix-cell:: Supported Windows version
:header:
.. matrix-cell:: Windows 11 25H2
.. matrix-row::
:show-when: os=ubuntu os=rhel
.. matrix-cell:: Supported AMD GPU Driver (amdgpu) versions
:header:
.. matrix-cell::
`31.10.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/31.10.0-preview/documentation/release-notes.html>`__
`30.20.1 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.20.1/documentation/release-notes.html>`__
`30.20.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.20.0/documentation/release-notes.html>`__
`30.10.2 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10.2/documentation/release-notes.html>`__
`30.10.1 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10.1/documentation/release-notes.html>`__
`30.10.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10/documentation/release-notes.html>`__
.. matrix-row::
:show-when: os=windows
.. matrix-cell:: Supported Adrenalin Driver version
:header:
.. matrix-cell::
`26.1.1 <https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-26-1-1.html>`__

View File

@@ -1,113 +0,0 @@
.. matrix::
:show-when: fam=radeon
.. matrix-head::
.. raw:: html
<colgroup style="width: 50%;">
.. matrix-row::
.. matrix-cell:: AMD GPU series
:header:
.. matrix-cell::
:show-when: gpu=rx-9070 gpu=rx-9070-gre gpu=rx-9070-xt gpu=rx-9060 gpu=rx-9060-xt gpu=rx-9060-xt-lp
`AMD Radeon RX 9000 Series <https://www.amd.com/en/products/graphics/desktops/radeon.html#tabs-ff9c5c3863-item-37fb38a236-tab>`__
.. matrix-cell::
:show-when: gpu=rx-7900-xtx gpu=rx-7900-xt gpu=rx-7900-gre gpu=rx-7800-xt gpu=rx-7700-xt gpu=rx-7700
`AMD Radeon RX 7000 Series <https://www.amd.com/en/products/graphics/desktops/radeon/7000-series.html>`__
.. matrix-row::
.. matrix-cell:: Architecture
:header:
.. matrix-cell:: RDNA 4
:show-when: gpu=rx-9070-xt gpu=rx-9070-gre gpu=rx-9070 gpu=rx-9060-xt-lp gpu=rx-9060-xt gpu=rx-9060
.. matrix-cell:: RDNA 3
:show-when: gpu=rx-7900-xtx gpu=rx-7900-xt gpu=rx-7900-gre gpu=rx-7800-xt gpu=rx-7700-xt gpu=rx-7700
.. matrix-row::
.. matrix-cell:: LLVM target
:header:
.. matrix-cell:: gfx1201
:show-when: gpu=rx-9070 gpu=rx-9070-gre gpu=rx-9070-xt
.. matrix-cell:: gfx1200
:show-when: gpu=rx-9060 gpu=rx-9060-xt gpu=rx-9060-xt-lp
.. matrix-cell:: gfx1100
:show-when: gpu=rx-7900-xtx gpu=rx-7900-xt gpu=rx-7900-gre
.. matrix-cell:: gfx1101
:show-when: gpu=rx-7800-xt gpu=rx-7700-xt gpu=rx-7700
.. matrix-row::
:show-when: os=ubuntu
.. matrix-cell:: Supported Ubuntu versions
:header:
.. matrix-cell::
24.04.3 (GA kernel: 6.8)
22.04.5 (GA kernel: 5.15)
.. matrix-row::
:show-when: os=rhel
.. matrix-cell:: Supported RHEL versions
:header:
.. matrix-cell::
10.1 (kernel: 6.12.0-124)
9.7 (kernel: 5.14.0-427)
.. matrix-row::
:show-when: os=windows
.. matrix-cell:: Supported Windows version
:header:
.. matrix-cell:: Windows 11 25H2
.. matrix-row::
:show-when: os=ubuntu os=rhel
.. matrix-cell:: Supported AMD GPU Driver (amdgpu) versions
:header:
.. matrix-cell::
`31.10.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/31.10.0-preview/documentation/release-notes.html>`__
`30.20.1 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.20.1/documentation/release-notes.html>`__
`30.20.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.20.0/documentation/release-notes.html>`__
`30.10.2 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10.2/documentation/release-notes.html>`__
`30.10.1 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10.1/documentation/release-notes.html>`__
`30.10.0 <https://instinct.docs.amd.com/projects/amdgpu-docs/en/docs-30.10/documentation/release-notes.html>`__
.. matrix-row::
:show-when: os=windows
.. matrix-cell:: Supported Adrenalin Driver version
:header:
.. matrix-cell::
`26.1.1 <https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-26-1-1.html>`__

View File

@@ -1,100 +0,0 @@
.. matrix::
:show-when: fam=ryzen
.. matrix-head::
.. raw:: html
<colgroup style="width: 50%;">
.. matrix-row::
.. matrix-cell:: AMD APU series
:header:
.. matrix-cell::
:show-when: gpu=max-pro-395 gpu=max-pro-390 gpu=max-pro-385 gpu=max-pro-380
`AMD Ryzen AI Max PRO 300 Series <https://www.amd.com/en/products/processors/workstations/mobile.html#tabs-7f0c432fb2-item-5116ab7a74-tab>`__
.. matrix-cell::
:show-when: gpu=max-395 gpu=max-390 gpu=max-385
`AMD Ryzen AI Max 300 Series <https://www.amd.com/en/products/processors/laptop/ryzen.html#tabs-1181ea0b44-item-6ccfea5f65-tab>`__
.. matrix-cell::
:show-when: gpu=9-hx-375 gpu=9-hx-370 gpu=9-365
`AMD Ryzen AI 300 Series <https://www.amd.com/en/products/processors/consumer/ryzen-ai.html#tabs-f556098628-item-54e149d850-tab>`__
.. matrix-row::
.. matrix-cell:: Graphics model (iGPU)
:header:
.. matrix-cell:: Radeon 8060S
:show-when: gpu=max-pro-395 gpu=max-395
.. matrix-cell:: Radeon 8050S
:show-when: gpu=max-pro-390 gpu=max-pro-385 gpu=max-390 gpu=max-385
.. matrix-cell:: Radeon 8040S
:show-when: gpu=max-pro-380
.. matrix-cell:: Radeon 890M
:show-when: gpu=9-hx-375 gpu=9-hx-370
.. matrix-cell:: Radeon 880M
:show-when: gpu=9-365
.. matrix-row::
.. matrix-cell:: Architecture
:header:
.. matrix-cell:: RDNA 3.5
.. matrix-row::
.. matrix-cell:: LLVM target
:header:
.. matrix-cell:: gfx1151
:show-when: gpu=max-pro-395 gpu=max-pro-390 gpu=max-pro-385 gpu=max-pro-380 gpu=max-395 gpu=max-390 gpu=max-385
.. matrix-cell:: gfx1150
:show-when: gpu=9-hx-375 gpu=9-hx-370 gpu=9-365
.. matrix-row::
:show-when: os=ubuntu
.. matrix-cell:: Supported Ubuntu versions
:header:
.. matrix-cell:: 24.04.3 (HWE kernel: 6.14)
.. matrix-row::
:show-when: os=windows
.. matrix-cell:: Supported Windows version
:header:
.. matrix-cell:: Windows 11 25H2
.. matrix-row::
:show-when: os=ubuntu
.. matrix-cell:: Supported kernel driver version
:header:
.. matrix-cell:: Inbox kernel driver in Ubuntu 24.04.3
.. matrix-row::
:show-when: os=windows
.. matrix-cell:: Supported Adrenalin Driver version
:header:
.. matrix-cell::
`26.1.1 <https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-26-1-1.html>`__

View File

@@ -1,113 +0,0 @@
.. selected:: gpu=mi355x gpu=mi350x gpu=mi325x gpu=mi300x
:heading: GPU virtualization support
.. selected:: gpu=mi355x
AMD Instinct MI355X GPUs support the following virtualization
configurations.
Supported SR-IOV configurations require the GPU-IOV Module (GIM) driver
8.7.0K -- see the `AMD Instinct Virtualization Driver documentation
<https://instinct.docs.amd.com/projects/virt-drv/en/mainline-8.7.0.k/>`__ to
get started.
.. selected:: gpu=mi350x
AMD Instinct MI350X GPUs support the following virtualization
configurations.
Supported SR-IOV configurations require the GPU-IOV Module (GIM) driver
8.7.0K -- see the `AMD Instinct Virtualization Driver documentation
<https://instinct.docs.amd.com/projects/virt-drv/en/mainline-8.7.0.k/>`__ to
get started.
.. selected:: gpu=mi325x
AMD Instinct MI325X GPUs support the following virtualization
configurations.
Supported SR-IOV configurations require the GPU-IOV Module (GIM) driver
8.7.0K -- see the `AMD Instinct Virtualization Driver documentation
<https://instinct.docs.amd.com/projects/virt-drv/en/mainline-8.7.0.k/>`__ to
get started.
.. selected:: gpu=mi300x
AMD Instinct MI300X GPUs support the following virtualization
configurations.
Supported SR-IOV configurations require the GPU-IOV Module (GIM) driver
8.7.0K -- see the `AMD Instinct Virtualization Driver documentation
<https://instinct.docs.amd.com/projects/virt-drv/en/mainline-8.7.0.k/>`__ to
get started.
.. matrix::
.. matrix-row::
:header:
.. matrix-cell:: Hypervisor
.. matrix-cell:: Virtualization technology
.. matrix-cell:: Virtualization driver
.. matrix-cell:: Host OS
.. matrix-cell:: Guest OS
.. matrix-row::
:show-when: gpu=mi355x gpu=mi350x
.. matrix-cell:: KVM
:rowspan: 2
.. matrix-cell:: Passthrough
.. matrix-cell::
.. matrix-cell:: Ubuntu 24.04
:rowspan: 2
.. matrix-cell:: Ubuntu 24.04
:rowspan: 2
.. matrix-row::
:show-when: gpu=mi325x
.. matrix-cell:: KVM
.. matrix-cell:: SR-IOV
.. matrix-cell::
`GIM 8.7.0K <https://github.com/amd/MxGPU-Virtualization/releases/tag/8.7.0.K>`__
.. matrix-cell:: Ubuntu 22.04
.. matrix-cell:: Ubuntu 22.04
.. matrix-row::
:show-when: gpu=mi300x
.. matrix-cell:: KVM
:rowspan: 2
.. matrix-cell:: Passthrough
.. matrix-cell::
.. matrix-cell:: Ubuntu 22.04
:rowspan: 2
.. matrix-cell:: Ubuntu 22.04
:rowspan: 2
.. matrix-row::
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x
.. matrix-cell:: SR-IOV
.. matrix-cell::
`GIM 8.7.0K <https://github.com/amd/MxGPU-Virtualization/releases/tag/8.7.0.K>`__
See the :ref:`release notes <release-virtualization-support>`
for the full list of supported configurations.

View File

@@ -9,8 +9,8 @@ import shutil
import sys import sys
from pathlib import Path from pathlib import Path
ROCM_VERSION = "7.11.0" ROCM_VERSION = "7.9.0"
GA_DATE = "2026-02-11" GA_DATE = "2025-10-20"
DOCS_DIR = Path(__file__).parent.resolve() DOCS_DIR = Path(__file__).parent.resolve()
ROOT_DIR = DOCS_DIR.parent ROOT_DIR = DOCS_DIR.parent
@@ -102,40 +102,47 @@ html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "rocm.docs.amd.com")
html_context = {} html_context = {}
# configurations for PDF output by Read the Docs # configurations for PDF output by Read the Docs
project = "ROCm documentation" project = "ROCm Documentation"
project_path = str(DOCS_DIR).replace("\\", "/") project_path = str(DOCS_DIR).replace("\\", "/")
author = "Advanced Micro Devices, Inc." author = "Advanced Micro Devices, Inc."
copyright = "Copyright (c) %Y Advanced Micro Devices, Inc. All rights reserved." copyright = "Copyright (c) %Y Advanced Micro Devices, Inc. All rights reserved."
version = ROCM_VERSION version = ROCM_VERSION
release = ROCM_VERSION release = ROCM_VERSION
setting_all_article_info = False setting_all_article_info = True
all_article_info_os = ["linux", "windows"] all_article_info_os = ["linux", "windows"]
all_article_info_author = "" all_article_info_author = ""
# pages with specific settings # pages with specific settings
article_pages = [ article_pages = [
{"file": "about/release-notes", "date": GA_DATE, "os": ["linux", "windows"]}, {"file": "about/release-notes", "date": GA_DATE},
{"file": "rocm-for-ai/xdit-diffusion-inference", "os": ["linux"]},
] ]
external_toc_path = "./sphinx/_toc.yml" external_toc_path = "./sphinx/_toc.yml"
# Register Sphinx extensions and static assets # Register Sphinx extensions and static assets
sys.path.append(str(DOCS_DIR / "extension")) sys.path.append(str(DOCS_DIR / "extension"))
# "sphinx/static/css", "extension/how-to/rocm-for-ai/inference"]
# html_css_files = [
# "rocm_custom.css",
# "rocm_rn.css",
# "dynamic_picker.css",
# "vllm-benchmark.css",
# ]
templates_path = ["extension/rocm_docs_custom/templates", "extension/templates"]
extensions = [ extensions = [
"rocm_docs", "rocm_docs",
"rocm_docs_custom.selector", "rocm_docs_custom.selector",
"rocm_docs_custom.matrix", "rocm_docs_custom.table",
"rocm_docs_custom.icon", "rocm_docs_custom.icon",
# "sphinxcontrib.datatemplates", "sphinxcontrib.datatemplates",
# "sphinx_reredirects", # "sphinx_reredirects",
# "sphinx_sitemap", # "sphinx_sitemap",
# "version-ref", # "version-ref",
# "csv-to-list-table", # "csv-to-list-table",
] ]
templates_path = ["extension/rocm_docs_custom/templates"]
html_static_path = ["sphinx/static"]
html_js_files = ["setup-toc-install-headings.js"]
# compatibility_matrix_file = str( # compatibility_matrix_file = str(
# DOCS_DIR / "compatibility/compatibility-matrix-historical-6.0.csv" # DOCS_DIR / "compatibility/compatibility-matrix-historical-6.0.csv"
@@ -144,34 +151,31 @@ html_js_files = ["setup-toc-install-headings.js"]
external_projects_current_project = "rocm" external_projects_current_project = "rocm"
html_theme = "rocm_docs_theme" html_theme = "rocm_docs_theme"
html_theme_options = { html_theme_options = {
"announcement": f"This is ROCm {ROCM_VERSION} technology preview release documentation. For the latest production stream release, refer to <a id='rocm-banner' href='https://rocm.docs.amd.com/en/latest/'>ROCm documentation</a>.", "announcement": "This is ROCm 7.9.0 technology preview release documentation. For the latest production stream release, refer to <a id='rocm-banner' href='https://rocm.docs.amd.com/en/latest/'>ROCm documentation</a>.",
"flavor": "generic", "flavor": "generic",
"header_title": f"ROCm™ {ROCM_VERSION} Preview", "header_title": "ROCm™ 7.9.0 Preview",
"header_link": f"https://rocm.docs.amd.com/en/{ROCM_VERSION}-preview/index.html", "header_link": "https://rocm.docs.amd.com/en/7.9.0-preview/index.html",
"version_list_link": f"https://rocm.docs.amd.com/en/{ROCM_VERSION}-preview/release/versions.html", "version_list_link": "https://rocm.docs.amd.com/en/7.11.0-preview/release/versions.html",
"nav_secondary_items": { "nav_secondary_items": {
"GitHub": "https://github.com/ROCm/ROCm", "GitHub": "https://github.com/ROCm/ROCm",
"Community": "https://github.com/ROCm/ROCm/discussions", "Community": "https://github.com/ROCm/ROCm/discussions",
"Blogs": "https://rocm.blogs.amd.com/", "Blogs": "https://rocm.blogs.amd.com/",
"System and Infra Docs": "https://instinct.docs.amd.com/", "Instinct™ Docs": "https://instinct.docs.amd.com/",
"Support": "https://github.com/ROCm/ROCm/issues/new/choose", "Support": "https://github.com/ROCm/ROCm/issues/new/choose",
}, },
"link_main_doc": False, "link_main_doc": False,
"secondary_sidebar_items": { "secondary_sidebar_items": {
"**": ["page-toc"], "**": ["page-toc"],
"compatibility/compatibility-matrix": ["selector-toc2"],
"install/rocm": ["selector-toc2"], "install/rocm": ["selector-toc2"],
"rocm-for-ai/pytorch-comfyui": ["selector-toc2"], "compatibility/compatibility-matrix": ["selector-toc2"],
}, }
} }
html_title = f"AMD ROCm {ROCM_VERSION} preview" html_title = f"AMD ROCm {ROCM_VERSION} preview"
html_static_path = ["sphinx/static/css", "sphinx/static/js"]
html_css_files = ["vllm-benchmark.css"]
html_js_files = ["vllm-benchmark.js"]
numfig = False numfig = False
rst_prolog = f"""
.. |ROCM_VERSION| replace:: {ROCM_VERSION}
"""
exclude_patterns = ["**/includes/**"]
suppress_warnings = ["autosectionlabel.*"] suppress_warnings = ["autosectionlabel.*"]
# html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "https://rocm-stg.amd.com/") # html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "https://rocm-stg.amd.com/")
@@ -197,3 +201,7 @@ suppress_warnings = ["autosectionlabel.*"]
# } # }
if os.environ.get("READTHEDOCS", "") == "True": if os.environ.get("READTHEDOCS", "") == "True":
html_context["READTHEDOCS"] = True html_context["READTHEDOCS"] = True
# temporary settings to speed up docs build for faster iteration
# external_projects_remote_repository = ""
# external_toc_exclude_missing = True

View File

@@ -0,0 +1,55 @@
xdit_diffusion_inference:
docker:
pull_tag: rocm/pytorch-xdit:v25.10
docker_hub_url: https://hub.docker.com/r/rocm/pytorch-xdit
ROCm: 7.9.0
components:
TheRock: 7afbe45
rccl: 9b04b2a
composable_kernel: b7a806f
rocm-libraries: f104555
rocm-systems: 25922d0
torch: 2.10.0a0+gite9c9017
torchvision: 0.22.0a0+966da7e
triton: 3.5.0+git52e49c12
accelerate: 1.11.0.dev0
aiter: 0.1.5.post4.dev20+ga25e55e79
diffusers: 0.36.0.dev0
xfuser: 0.4.4
yunchang: 0.6.3.post1
model_groups:
- group: Hunyuan Video
tag: hunyuan
models:
- model: Hunyuan Video
model_name: hunyuanvideo
model_repo: tencent/HunyuanVideo
revision: refs/pr/18
url: https://huggingface.co/tencent/HunyuanVideo
github: https://github.com/Tencent-Hunyuan/HunyuanVideo
mad_tag: pyt_xdit_hunyuanvideo
- group: Wan-AI
tag: wan
models:
- model: Wan2.1
model_name: wan2_1-i2v-14b-720p
model_repo: Wan-AI/Wan2.1-I2V-14B-720P
url: https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P
github: https://github.com/Wan-Video/Wan2.1
mad_tag: pyt_xdit_wan_2_1
- model: Wan2.2
model_name: wan2_2-i2v-a14b
model_repo: Wan-AI/Wan2.2-I2V-A14B
url: https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B
github: https://github.com/Wan-Video/Wan2.2
mad_tag: pyt_xdit_wan_2_2
- group: FLUX
tag: flux
models:
- model: FLUX.1
model_name: FLUX.1-dev
model_repo: black-forest-labs/FLUX.1-dev
url: https://huggingface.co/black-forest-labs/FLUX.1-dev
github: https://github.com/black-forest-labs/flux
mad_tag: pyt_xdit_flux

View File

@@ -1,562 +0,0 @@
<p>
<div class="rocm-docs-ontology-diagram container-fluid p-1 pl-3 text-white">
<div class="row g-1">
<div class="col-1"></div>
<div class="col-11">
<div class="row g-1">
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey h-100 d-flex align-items-center small fw-bold"
>
Enterprise applications
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Customer service
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Sales assistant
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Human resources
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Marketing
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Personal assistant
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Coding assistant
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Drug discovery
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey small h-100"
>
Material science
</div>
</div>
</div>
</div>
</div>
</div>
<div
class="col-1 d-flex align-items-center justify-content-center bg-amd-grey fw-bold vertical-text"
>
AMD ROCm<span class="trademark">&trade;</span> software ecosystem
</div>
<div class="col-11">
<div class="row g-1">
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal h-100 d-flex align-items-center small fw-bold"
>
AMD enterprise AI
</div>
</div>
<div class="col-9">
<div class="row g-1 h-100">
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
AMD Resource Manager
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
AMD Solution Blueprints
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
AMD Developer Console
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
AMD Inference Microservices
</div>
</div>
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold h-100 d-flex align-items-center small fw-bold"
>
AI ecosystem
</div>
</div>
<div class="col-9">
<div class="row g-1 h-100">
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
Hugging Face
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
PyTorch
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
JAX
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
TensorFlow
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
ONNX
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
Triton
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
DeepSpeed
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
OpenXLA
</div>
</div>
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red h-100 d-flex align-items-center small fw-bold"
>
Cluster operations
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col-4">
<div class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100">
Monitoring:
<ul>
<li>Prometheus</li>
<li>Grafana</li>
</ul>
</div>
</div>
<div class="col-4">
<div class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100">
MLOps platforms:
<ul>
<li>mlflow</li>
<li>Kubeflow</li>
</ul>
</div>
</div>
<div class="col-4">
<div class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100">
Model serving runtimes:
<ul>
<li>vLLM</li>
<li>PyTorch</li>
</ul>
</div>
</div>
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange h-100 d-flex align-items-center small fw-bold"
>
Vertical SDKs
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange small h-100"
>
ROCm-DS
</div>
</div>
<div class="col">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange small h-100"
>
ROCm-LS
</div>
</div>
<div class="col">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange small h-100"
>
ROCm-Finance
</div>
</div>
<div class="col">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange small h-100"
>
ROCm-Simulation
</div>
</div>
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal h-100 d-flex align-items-center small fw-bold"
>
ROCm Core SDK
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Math and compute libraries
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Communication libraries
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Support libraries
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Media libraries
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Storage
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Runtimes and compilers
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Profiling and debugging tools
</div>
</div>
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-teal small h-100"
>
Control and monitoring tools
</div>
</div>
</div>
</div>
<div class="col-3 d-flex align-items-center">
<div
class="
rocm-docs-ontology-tile p-2 bg-amd-gold h-100 w-100
d-flex align-items-center
small fw-bold
"
>
Systems and infrastructure
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col-6">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-gold small h-100"
>
Kubernetes:
<ul>
<li>GPU Operator</li>
<li>Device Plugin</li>
<li>Container Toolkit</li>
<li>Device Metrics Exporter</li>
<li>Device Plugin</li>
</ul>
</div>
</div>
<div class="col-6">
<div class="row h-100">
<div class="col-12 d-flex flex-grow-1">
<div
class="
rocm-docs-ontology-tile p-2 bg-amd-gold small w-100
d-flex align-items-center mb-1
"
>
AMD GPU Driver and runtime firmware
</div>
</div>
<div class="col-12 d-flex flex-grow-1">
<div
class="
rocm-docs-ontology-tile p-2 bg-amd-gold small w-100
d-flex align-items-center mb-1
"
>
AMD Virtualization Driver
</div>
</div>
<div class="col-12 d-flex flex-grow-1">
<div
class="
rocm-docs-ontology-tile p-2 bg-amd-gold small w-100
d-flex align-items-center mb-1
"
>
AMD Instinct<span class="trademark">&trade;</span> Fabric
Manager
</div>
</div>
<div class="col-12 d-flex flex-grow-1">
<div
class="
rocm-docs-ontology-tile p-2 bg-amd-gold small w-100
d-flex align-items-center
"
>
Management tools
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-3 d-flex align-items-center">
<div
class="
rocm-docs-ontology-tile p-2 bg-amd-red h-100 w-100
d-flex align-items-center
small fw-bold
"
>
Supported OSes
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
Ubuntu
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
Debian
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
RHEL
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
Oracle Linux
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
Rocky Linux
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
SLES
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-red small h-100"
>
Windows
</div>
</div>
</div>
</div>
<div class="col-3">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange h-100 d-flex align-items-center small fw-bold"
>
OEM/ODM firmware
</div>
</div>
<div class="col-9">
<div class="row g-1">
<div class="col">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-orange small h-100"
>
Baseboard and GPU firmware (platform-optimized firmware)
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-1"></div>
<div class="col-11">
<div class="row g-1">
<div class="col-12">
<div
class="rocm-docs-ontology-tile p-2 bg-amd-grey h-100 d-flex justify-content-center align-items-center small fw-bold"
>
AMD GPUs and APUs
</div>
</div>
</div>
</div>
</div>
</div>
</p>
<style>
.rocm-docs-ontology-diagram {
background-color: #1b1b1b;
.bg-amd-grey {
background-color: #6e6e6e;
}
.bg-amd-gold {
background-color: #b08a3a;
}
.bg-amd-orange {
background-color: #3a5f4b;
}
.bg-amd-red {
background-color: #2f4d69;
}
.bg-amd-teal {
background-color: #007c97;
}
.rocm-docs-ontology-tile:not(.vertical-text) {
transition: transform 0.25s ease, box-shadow 0.25s ease;
will-change: transform;
cursor: pointer;
}
.rocm-docs-ontology-tile:hover {
transform: scale(1.02);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.25);
z-index: 1;
}
/* Rotates the text for the sidebar */
.vertical-text {
writing-mode: vertical-rl;
transform: rotate(180deg);
}
.vertical-text .trademark {
display: inline-block;
transform: rotate(90deg);
}
.row {
display: flex;
}
}
</style>

BIN
docs/data/rocm-ontology.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@@ -1,211 +0,0 @@
<p>
<div class="rocm-docs-core-sdk-diagram container-fluid p-1 pl-3 text-white">
<div class="row g-1">
<div
class="col-1 d-flex align-items-center justify-content-center bg-amd-grey fw-bold vertical-text"
>
ROCm<span class="trademark">&trade;</span> Core SDK
</div>
<div class="col-11">
<div class="row g-1">
<div class="col-4">
<div
class="rocm-docs-core-sdk-tile bg-amd-blue p-2 h-100 d-flex align-items-center small fw-bold"
>
Math and compute libraries
</div>
</div>
<div class="col-8">
<div class="row g-1">
<div class="col-12">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
<strong>Deep learning and GPU compute kernels</strong>:<br>
Composable Kernel, MIOpen, rocWMMA, hipDNN (coming soon)
</div>
</div>
<div class="col-12">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
<strong>BLAS dense and sparse libraries</strong>:<br>
hipBLAS, hipBLASLt, hipSOLVER, hipSPARSE, hipSPARSELt
</div>
</div>
<div class="col-12">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
<strong>Kernel primitives</strong>:<br>
hipCUB, rocPRIM, rocThrust
</div>
</div>
<div class="col-12">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
<strong>Other math</strong>:<br>
hipRAND, hipFFT
</div>
</div>
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-core-sdk-tile bg-amd-blue p-2 h-100 d-flex align-items-center small fw-bold"
>
Communication libraries
</div>
</div>
<div class="col-8">
<div class="row g-1">
<div class="col">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
RCCL, rocSHMEM
</div>
</div>
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-core-sdk-tile bg-amd-blue p-2 h-100 d-flex align-items-center small fw-bold"
>
Storage
</div>
</div>
<div class="col-8">
<div class="row g-1">
<div class="col">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
hipFile (coming soon)
</div>
</div>
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-core-sdk-tile bg-amd-blue p-2 h-100 d-flex align-items-center small fw-bold"
>
Runtimes and compilers
</div>
</div>
<div class="col-8">
<div class="row g-1">
<div class="col">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
HIP, HIPIFY, LLVM, ROCr Runtime, SPIRV-LLVM-Translator
</div>
</div>
</div>
</div>
<div class="col-4">
<div
class="rocm-docs-core-sdk-tile bg-amd-blue p-2 h-100 d-flex align-items-center small fw-bold"
>
Profiling and debugging tools
</div>
</div>
<div class="col-8">
<div class="row g-1">
<div class="col-12">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
<strong>ROCprofiler family</strong>:<br>ROCm Compute Profiler
(rocprofiler-compute), ROCm Systems Profiler
(rocprofiler-systems), ROCprofiler-SDK and rocprofv3 CLI
</div>
</div>
<div class="col-12">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
<strong>ROCm Debugger family</strong>:<br>ROCm Debugger
(ROCgdb), ROCdbgapi, ROCr Debug Agent
</div>
</div>
</div>
</div>
<div class="col-4">
<div
class="
rocm-docs-core-sdk-tile bg-amd-blue p-2 h-100 w-100
d-flex align-items-center
small fw-bold
"
>
Control and monitoring tools
</div>
</div>
<div class="col-8">
<div class="row g-1">
<div class="col">
<div
class="rocm-docs-core-sdk-tile p-2 small h-100"
>
AMD SMI, hipinfo, rocminfo
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</p>
<style>
.rocm-docs-core-sdk-diagram {
background-color: #1b1b1b;
.rocm-docs-core-sdk-tile {
background-color: #007c97;
}
.bg-amd-grey {
background-color: #6e6e6e;
}
.bg-amd-blue {
opacity: 90%;
}
.rocm-docs-core-sdk-tile:not(.vertical-text) {
transition: transform 0.25s ease, box-shadow 0.25s ease;
will-change: transform;
cursor: pointer;
}
.rocm-docs-core-sdk-tile:hover {
transform: scale(1.02);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.25);
z-index: 1;
}
/* Rotates the text for the sidebar */
.vertical-text {
writing-mode: vertical-rl;
transform: rotate(180deg);
}
.vertical-text .trademark {
display: inline-block;
transform: rotate(90deg);
}
.row {
display: flex;
}
}
</style>

BIN
docs/data/rocm-sdk-arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

View File

@@ -1,289 +0,0 @@
from pathlib import Path
from docutils import nodes
from docutils.parsers.rst import directives
from sphinx.util.docutils import SphinxDirective
from .utils import kv_to_data_attr, logger
class CustomTable(nodes.General, nodes.Element):
"""Bootstrap-flavoured table container."""
@staticmethod
def visit_html(translator, node):
show_when_attr = kv_to_data_attr("show-when", node.get("show-when", ""))
classes = ["rocm-docs-table", "table"]
classes.extend(node.get("classes", []))
class_attr = " ".join(classes)
table_id = node.get("id") or ""
attrs = []
if table_id:
attrs.append(f'id="{table_id}"')
attrs.append(f'class="{class_attr}"')
if show_when_attr:
attrs.append(show_when_attr)
attrs_str = " ".join(attrs)
translator.body.append(f"<!-- start custom-table --><table {attrs_str}>")
caption = node.get("caption", "")
if caption:
translator.body.append(f"<caption>{caption}</caption>")
translator._in_matrix_body = False # internal state flag
@staticmethod
def depart_html(translator, node):
# Close an open <tbody> if present
if getattr(translator, "_in_matrix_body", False):
translator.body.append("</tbody>")
translator._in_matrix_body = False
translator.body.append("</table><!-- end custom-table -->")
class CustomTableDirective(SphinxDirective):
""".. matrix:: Optional caption"""
required_arguments = 0
optional_arguments = 1
final_argument_whitespace = True
has_content = True
option_spec = {
"id": directives.unchanged,
"class": directives.class_option,
"show-when": directives.unchanged,
}
def run(self):
node = CustomTable()
node["caption"] = self.arguments[0] if self.arguments else ""
node["id"] = self.options.get("id", "")
node["classes"] = self.options.get("class", [])
node["show-when"] = self.options.get("show-when", "")
self.state.nested_parse(self.content, self.content_offset, node)
return [node]
class CustomTableHead(nodes.General, nodes.Element):
"""A table header section (renders <thead>).</thead>"""
@staticmethod
def visit_html(translator, node):
translator.body.append("<!-- start table head --><thead>")
@staticmethod
def depart_html(translator, node):
translator.body.append("</thead><!-- end table head -->")
class CustomTableHeadDirective(SphinxDirective):
""".. matrix-head::"""
has_content = True
def run(self):
node = CustomTableHead()
self.state.nested_parse(self.content, self.content_offset, node)
return [node]
class CustomTableRow(nodes.General, nodes.Element):
"""A table row (<tr> inside <thead> or <tbody>)."""
@staticmethod
def visit_html(translator, node):
# handle automatic <tbody> opening for body rows
if not node.get("header-row", False):
if not getattr(translator, "_in_matrix_body", False):
translator.body.append("<!-- start tbody --><tbody>")
translator._in_matrix_body = True
show_when_attr = kv_to_data_attr("show-when", node.get("show-when", ""))
disable_when_attr = kv_to_data_attr(
"disable-when", node.get("disable-when", "")
)
classes = " ".join(node.get("classes", []))
attrs = []
if classes:
attrs.append(f'class="{classes}"')
if show_when_attr:
attrs.append(show_when_attr)
if disable_when_attr:
attrs.append(disable_when_attr)
attrs_str = "" if not attrs else " " + " ".join(attrs)
translator.body.append(f"<!-- start custom-table row --><tr{attrs_str}>")
@staticmethod
def depart_html(translator, node):
translator.body.append("</tr><!-- end custom-table row -->")
class CustomTableRowDirective(SphinxDirective):
""".. matrix-row::"""
required_arguments = 0
final_argument_whitespace = True
has_content = True
option_spec = {
"class": directives.class_option,
"show-when": directives.unchanged,
"disable-when": directives.unchanged,
"header": directives.flag,
}
def run(self):
node = CustomTableRow()
node["classes"] = self.options.get("class", [])
node["show-when"] = self.options.get("show-when", "")
node["disable-when"] = self.options.get("disable-when", "")
node["header-row"] = self.options.get("header", False) is not False
# Parse nested cells
self.state.nested_parse(self.content, self.content_offset, node)
# Inherit header status if inside matrix-head
parent_in_head = any(
isinstance(p, CustomTableHead)
for p in self.state.parent.traverse(include_self=True)
)
if parent_in_head:
node["header-row"] = True
# Mark all cells as headers if this is a header row
if node["header-row"]:
for cell in node.findall(CustomTableCell):
if "header" not in cell:
cell["header"] = True
# Sanity check
parent = getattr(self.state, "parent", None)
if not parent or not any(
isinstance(p, (CustomTable, CustomTableHead))
for p in parent.traverse(include_self=True)
):
logger.warning(
"'.. matrix-row::' at line %s should be nested under a '.. matrix::'.",
self.lineno,
location=(self.env.docname, self.lineno),
)
return [node]
class CustomTableCell(nodes.General, nodes.Element):
"""A table cell (<td> or <th>)."""
@staticmethod
def visit_html(translator, node):
is_header = bool(node.get("header", False))
tag = "th" if is_header else "td"
classes = " ".join(node.get("classes", []))
colspan = node.get("colspan", 1)
rowspan = node.get("rowspan", 1)
show_when_attr = kv_to_data_attr("show-when", node.get("show-when", ""))
attrs = []
if classes:
attrs.append(f'class="{classes}"')
if colspan and colspan > 1:
attrs.append(f'colspan="{colspan}"')
if rowspan and rowspan > 1:
attrs.append(f'rowspan="{rowspan}"')
if show_when_attr:
attrs.append(show_when_attr)
attrs_str = "" if not attrs else " " + " ".join(attrs)
translator.body.append(f"<{tag}{attrs_str}>")
@staticmethod
def depart_html(translator, node):
tag = "th" if node.get("header", False) else "td"
translator.body.append(f"</{tag}>")
class CustomTableCellDirective(SphinxDirective):
""".. matrix-cell::"""
required_arguments = 0
optional_arguments = 1
final_argument_whitespace = True
has_content = True
option_spec = {
"header": directives.flag,
"class": directives.class_option,
"colspan": directives.nonnegative_int,
"rowspan": directives.nonnegative_int,
"show-when": directives.unchanged,
}
def run(self):
label = self.arguments[0] if self.arguments else ""
node = CustomTableCell()
# Explicit :header: always wins
explicit_header = self.options.get("header", False) is not False
# Detect if the parent row (matrix-row) or one of its ancestors
# (matrix-head) marks this as a header section.
parent_header_row = False
parent_node = getattr(self.state, "parent", None)
if parent_node:
for ancestor in parent_node.traverse(include_self=True):
if isinstance(ancestor, CustomTableRow) and ancestor.get("header-row", False):
parent_header_row = True
break
if isinstance(ancestor, CustomTableHead):
parent_header_row = True
break
node["header"] = explicit_header or parent_header_row
node["classes"] = self.options.get("class", [])
node["colspan"] = self.options.get("colspan", 1)
node["rowspan"] = self.options.get("rowspan", 1)
node["show-when"] = self.options.get("show-when", "")
if self.content:
self.state.nested_parse(self.content, self.content_offset, node)
elif label:
node += nodes.Text(label)
# Sanity check nesting
if not parent_node or not any(
isinstance(p, CustomTableRow)
for p in parent_node.traverse(include_self=True)
):
logger.warning(
"'.. matrix-cell::' at line %s should be nested under a '.. matrix-row::' directive",
self.lineno,
location=(self.env.docname, self.lineno),
)
return [node]
def setup(app):
app.add_node(CustomTable, html=(CustomTable.visit_html, CustomTable.depart_html))
app.add_node(CustomTableHead, html=(CustomTableHead.visit_html, CustomTableHead.depart_html))
app.add_node(CustomTableRow, html=(CustomTableRow.visit_html, CustomTableRow.depart_html))
app.add_node(CustomTableCell, html=(CustomTableCell.visit_html, CustomTableCell.depart_html))
app.add_directive("matrix", CustomTableDirective)
app.add_directive("matrix-head", CustomTableHeadDirective)
app.add_directive("matrix-row", CustomTableRowDirective)
app.add_directive("matrix-cell", CustomTableCellDirective)
static_assets_dir = Path(__file__).parent / "static"
app.config.html_static_path.append(str(static_assets_dir))
app.add_css_file("table.css")
return {
"version": "1.1",
"parallel_read_safe": True,
"parallel_write_safe": True,
}

View File

@@ -1,10 +1,20 @@
from sphinx.util.docutils import SphinxDirective, directives, nodes from sphinx.util.docutils import SphinxDirective, directives, nodes
from pathlib import Path from pathlib import Path
from .utils import kv_to_data_attr, normalize_key, logger from .utils import kv_to_data_attr, normalize_key
import random
import string
class SelectorGroup(nodes.General, nodes.Element): class SelectorGroup(nodes.General, nodes.Element):
""" """
A row or dropdown within a selector container. A row within a selector container.
rST usage:
.. selector-group:: Heading
:key:
:show-when: os=ubuntu (list of key=value pairs separated by spaces)
:heading-width: 4 (defaults to 6)
""" """
@staticmethod @staticmethod
@@ -13,46 +23,32 @@ class SelectorGroup(nodes.General, nodes.Element):
key = node["key"] key = node["key"]
show_when_attr = kv_to_data_attr("show-when", node["show-when"]) show_when_attr = kv_to_data_attr("show-when", node["show-when"])
heading_width = node["heading-width"] heading_width = node["heading-width"]
list_mode = node.get("list", False) icon = node["icon"]
# Standard tile mode icon_html = ""
info_nodes = list(node.findall(SelectorInfo)) if icon:
info_link = info_nodes[0]["link"] if info_nodes else None icon_html = f'<i class="rocm-docs-selector-icon {icon}"></i>'
info_icon = info_nodes[0]["icon"] if info_nodes else None
info_icon_html = ""
if info_link:
info_icon_html = f"""
<a href="{info_link}" target="_blank">
<i class="rocm-docs-selector-icon {info_icon}"></i>
</a>
"""
translator.body.append( translator.body.append(
"<!-- start selector-group row -->" "<!-- start selector-group row -->"
f""" f"""
<div id="{nodes.make_id(label)}" <div id="{nodes.make_id(label)}" class="rocm-docs-selector-group row gx-0 pt-2"
class="rocm-docs-selector-group row gx-0 pt-2"
data-selector-key="{key}" data-selector-key="{key}"
{show_when_attr} {show_when_attr}
{'role="radiogroup"' if list_mode else ""} role="radiogroup"
aria-label="{label}" aria-label="{label}"
> >
<div class="col-{heading_width} me-1 px-2 rocm-docs-selector-group-heading"> <div class="col-{heading_width} me-1 px-2 rocm-docs-selector-group-heading">
<span class="rocm-docs-selector-group-heading-text">{label}{info_icon_html}</span> <span class="rocm-docs-selector-group-heading-text">{label}{icon_html}</span>
</div> </div>
<div class="row col-{12 - heading_width} pe-0"> <div class="row col-{12 - heading_width} pe-0">
{f'<select class="form-select rocm-docs-selector-dropdown-list" aria-label="{label}">' if list_mode else ""}
""".strip() """.strip()
) )
@staticmethod @staticmethod
def depart_html(translator, node): def depart_html(translator, _):
list_mode = node.get("list", False)
translator.body.append( translator.body.append(
f""" """
{"</select>" if list_mode else ""}
</div> </div>
</div> </div>
""" """
@@ -61,146 +57,81 @@ class SelectorGroup(nodes.General, nodes.Element):
class SelectorGroupDirective(SphinxDirective): class SelectorGroupDirective(SphinxDirective):
required_arguments = 1 # title text required_arguments = 1 # tile text
final_argument_whitespace = True final_argument_whitespace = True
has_content = True has_content = True
option_spec = { option_spec = {
"key": directives.unchanged, "key": directives.unchanged,
"show-when": directives.unchanged, "show-when": directives.unchanged,
"heading-width": directives.nonnegative_int, "heading-width": directives.nonnegative_int,
"list": directives.flag, "icon": directives.unchanged,
} }
def run(self): def run(self):
env = self.state.document.settings.env
app = env.app
# Add required JS and CSS if selector exists
if not hasattr(env, '_selector_js_added'):
static_assets_dir = Path(__file__).parent / "static" / "selector"
app.config.html_static_path.append(str(static_assets_dir))
app.add_js_file("selector.js", type="module", defer="defer")
app.add_css_file("selector.css")
env._selector_js_added = True
label = self.arguments[0] label = self.arguments[0]
node = SelectorGroup() node = SelectorGroup()
node["label"] = label node["label"] = label
node["key"] = normalize_key(self.options.get("key", label)) node["key"] = normalize_key(self.options.get("key", label))
node["show-when"] = self.options.get("show-when", "") node["show-when"] = self.options.get("show-when", "")
node["heading-width"] = self.options.get("heading-width", 3) node["heading-width"] = self.options.get("heading-width", 3)
node["list"] = "list" in self.options node["icon"] = self.options.get("icon")
# Parse nested content (selector-info + selector-option) # Parse nested content
self.state.nested_parse(self.content, self.content_offset, node) self.state.nested_parse(self.content, self.content_offset, node)
# Find all SelectorOption descendants
option_nodes = list(node.findall(SelectorOption)) option_nodes = list(node.findall(SelectorOption))
if option_nodes: if option_nodes:
# Set the group key on all options
for opt in option_nodes: for opt in option_nodes:
opt["group_key"] = node["key"] opt["group_key"] = node["key"]
opt["list"] = node["list"]
# Default marking # Find all options marked as default
default_options = [opt for opt in option_nodes if opt["default"]] default_options = [opt for opt in option_nodes if opt["default"]]
if not default_options:
if default_options:
# Multiple options marked :default: - only keep first as default
for i, opt in enumerate(default_options):
if i > 0:
opt["default"] = False
else:
# No explicit default - make first option default
option_nodes[0]["default"] = True option_nodes[0]["default"] = True
return [node] return [node]
class SelectorInfo(nodes.General, nodes.Element):
"""
Represents an informational icon/link associated with a selector group.
Appears as a clickable icon in the selector group heading.
rST usage:
.. selector:: AMD EPYC Server CPU
:key: cpu
.. selector-info:: https://www.amd.com/en/products/processors/server/epyc.html
:icon: fa-solid fa-circle-info fa-lg
.. selector-option:: EPYC 9005 (5th gen.)
:value: 9005
"""
@staticmethod
def visit_html(translator, node):
# Do nothing — rendering handled by SelectorGroup
pass
@staticmethod
def depart_html(translator, node):
# Do nothing — prevent NotImplementedError
pass
class SelectorInfoDirective(SphinxDirective):
required_arguments = 1 # link URL
final_argument_whitespace = True
has_content = False
option_spec = {"icon": directives.unchanged}
def run(self):
node = SelectorInfo()
node["link"] = self.arguments[0]
node["icon"] = self.options.get("icon", "fa-solid fa-circle-info fa-lg")
parent = getattr(self.state, "parent", None)
if not parent or not any(isinstance(p, SelectorGroup) for p in parent.traverse(include_self=True)):
logger.warning(
f"'.. selector-info::' at line {self.lineno} should be nested under a '.. selector::' directive",
location=(self.env.docname, self.lineno),
)
return [node]
class SelectorOption(nodes.General, nodes.Element): class SelectorOption(nodes.General, nodes.Element):
""" """
A selectable tile or list-item option within a selector group. A selectable tile within a selector group.
rST usage:
.. selector-option::
""" """
@staticmethod @staticmethod
def visit_html(translator, node): def visit_html(translator, node):
label = node["label"] label = node["label"]
value = node["value"] value = node["value"]
show_when_attr = kv_to_data_attr("show-when", node["show-when"])
disable_when_attr = kv_to_data_attr("disable-when", node["disable-when"]) disable_when_attr = kv_to_data_attr("disable-when", node["disable-when"])
default = node["default"] default = node["default"]
width = node["width"] width = node["width"]
list_mode = node.get("list", False) group_key = node.get("group_key", "")
if list_mode:
selected_attr = " selected" if default else ""
translator.body.append(
f'<option value="{value}"{selected_attr} {show_when_attr} {disable_when_attr}>{label}</option>'
)
return
default_class = "rocm-docs-selector-option-default" if default else "" default_class = "rocm-docs-selector-option-default" if default else ""
# Handle width: either bootstrap col-N or percentage
if isinstance(width, str) and width.endswith("%"):
width_class = ""
width_style = f' style="width: {width}"'
else:
width_class = f"col-{width}"
width_style = ""
translator.body.append( translator.body.append(
"<!-- start selector-option tile -->" "<!-- start selector-option tile -->"
f""" f"""
<div class="rocm-docs-selector-option {default_class} {width_class} px-2" <div class="rocm-docs-selector-option {default_class} col-{width} px-2"
data-selector-key="{node.get('group_key', '')}" data-selector-key="{group_key}"
data-selector-value="{value}" data-selector-value="{value}"
{show_when_attr}
{disable_when_attr} {disable_when_attr}
tabindex="0" tabindex="0"
role="radio" role="radio"
aria-checked="false" aria-checked="false"
{width_style}
> >
<span>{label}</span> <span>{label}</span>
""".strip() """.strip()
@@ -208,13 +139,10 @@ class SelectorOption(nodes.General, nodes.Element):
@staticmethod @staticmethod
def depart_html(translator, node): def depart_html(translator, node):
list_mode = node.get("list", False)
if list_mode:
return # no closing tag needed for <option>
icon = node["icon"] icon = node["icon"]
if icon: if icon:
translator.body.append(f'<i class="rocm-docs-selector-icon {icon}"></i>') translator.body.append(f'<i class="rocm-docs-selector-icon {icon}"></i>')
translator.body.append("</div><!-- end selector-option tile -->") translator.body.append("</div>" "<!-- end selector-option tile -->")
class SelectorOptionDirective(SphinxDirective): class SelectorOptionDirective(SphinxDirective):
@@ -222,10 +150,9 @@ class SelectorOptionDirective(SphinxDirective):
final_argument_whitespace = True final_argument_whitespace = True
option_spec = { option_spec = {
"value": directives.unchanged, "value": directives.unchanged,
"show-when": directives.unchanged,
"disable-when": directives.unchanged, "disable-when": directives.unchanged,
"default": directives.flag, "default": directives.flag,
"width": directives.unchanged, "width": directives.nonnegative_int,
"icon": directives.unchanged, "icon": directives.unchanged,
} }
has_content = True has_content = True
@@ -235,52 +162,22 @@ class SelectorOptionDirective(SphinxDirective):
node = SelectorOption() node = SelectorOption()
node["label"] = label node["label"] = label
node["value"] = normalize_key(self.options.get("value", label)) node["value"] = normalize_key(self.options.get("value", label))
node["show-when"] = self.options.get("show-when", "") # node["show-when"] = self.options.get("show-when", "")
node["disable-when"] = self.options.get("disable-when", "") node["disable-when"] = self.options.get("disable-when", "")
node["default"] = self.options.get("default", False) is not False node["default"] = self.options.get("default", False) is not False
node["width"] = self.options.get("width", 6)
# Parse width - supports bootstrap (1-12) or percentage (like "25%")
width_value = self.options.get("width", "6")
if isinstance(width_value, str) and width_value.endswith("%"):
try:
pct = float(width_value[:-1])
if pct <= 0 or pct > 100:
raise ValueError("must be between 0 and 100")
node["width"] = width_value
except ValueError as e:
logger.warning(
f"Invalid percentage width '{width_value}' ({e}), using default",
location=(self.env.docname, self.lineno),
)
node["width"] = 6
else:
try:
col_num = int(width_value)
if col_num < 1 or col_num > 12:
raise ValueError("must be between 1 and 12")
node["width"] = col_num
except ValueError as e:
logger.warning(
f"Invalid width '{width_value}' ({e}), using default",
location=(self.env.docname, self.lineno),
)
node["width"] = 6
node["icon"] = self.options.get("icon") node["icon"] = self.options.get("icon")
parent = getattr(self.state, "parent", None) # Content replaces label if provided
if not parent or not any(isinstance(p, SelectorGroup) for p in parent.traverse(include_self=True)): # if self.content:
logger.warning( # self.state.nested_parse(self.content, self.content_offset, node)
f"'.. selector-option::' at line {self.lineno} should be nested under a '.. selector::' directive", # else:
location=(self.env.docname, self.lineno), # node += nodes.Text(label)
)
return [node] return [node]
class SelectedContent(nodes.General, nodes.Element): class SelectedContent(nodes.General, nodes.Element):
""" """
A container to hold documentation content to be shown conditionally. A container to hold conditional content.
rST usage:: rST usage::
@@ -290,21 +187,20 @@ class SelectedContent(nodes.General, nodes.Element):
@staticmethod @staticmethod
def visit_html(translator, node): def visit_html(translator, node):
show_when = node.get("show-when", "") show_when_attr = kv_to_data_attr("show-when", node["show-when"])
show_when_attr = kv_to_data_attr("show-when", show_when)
classes = " ".join(node.get("class", [])) classes = " ".join(node.get("class", []))
heading = node.get("heading", "") heading = node.get("heading", "")
# default to <h2> heading_level = node.get("heading-level") or (SelectedContent._get_depth(node) + 1)
heading_level = min(node.get("heading-level") or 2, 6) # maximum depth is <h6> heading_level = min(heading_level, 6)
id_attr = ""
heading_elem = "" heading_elem = ""
combined_show_when = node.get("combined-show-when", show_when)
if heading: if heading:
id_attr = nodes.make_id(f"{heading}-{combined_show_when}") # HACK to fix secondary sidebar observer
suffix = "".join(random.choices(string.ascii_lowercase + string.digits, k=3))
id_attr = nodes.make_id(f"{heading}-{suffix}")
heading_elem = ( heading_elem = (
f'<h{heading_level} class="rocm-docs-custom-heading">' f'<h{heading_level} id="{id_attr}" class="rocm-docs-custom-heading">'
f'{heading}<a class="headerlink" href="#{id_attr}" title="Link to this heading">#</a>' f'{heading}<a class="headerlink" href="#{id_attr}" title="Link to this heading">#</a>'
f'</h{heading_level}>' f'</h{heading_level}>'
) )
@@ -312,22 +208,24 @@ class SelectedContent(nodes.General, nodes.Element):
translator.body.append( translator.body.append(
f""" f"""
<!-- start selected-content --> <!-- start selected-content -->
<{"section" if heading else "div"} <div class="rocm-docs-selected-content {classes}" {show_when_attr} aria-hidden="true">
id="{id_attr}"
class="rocm-docs-selected-content {classes}"
{show_when_attr}
aria-hidden="true">
{heading_elem} {heading_elem}
""".strip() """.strip()
) )
@staticmethod @staticmethod
def depart_html(translator, node): def depart_html(translator, _):
heading = node.get("heading", "") translator.body.append("</div><!-- end selected-content -->")
translator.body.append(f""" @staticmethod
</{"section" if heading else "div"}> def _get_depth(node):
<!-- end selected-content -->""") depth = 1
parent = node.parent
while parent is not None:
if isinstance(parent, SelectedContent) and parent.get("heading"):
depth += 1
parent = getattr(parent, "parent", None)
return depth
class SelectedContentDirective(SphinxDirective): class SelectedContentDirective(SphinxDirective):
@@ -346,20 +244,9 @@ class SelectedContentDirective(SphinxDirective):
node["show-when"] = self.arguments[0] node["show-when"] = self.arguments[0]
node["id"] = self.options.get("id", "") node["id"] = self.options.get("id", "")
node["class"] = self.options.get("class", "") node["class"] = self.options.get("class", "")
node["heading"] = self.options.get("heading", "") node["heading"] = self.options.get("heading", "") # empty string if none
node["heading-level"] = self.options.get("heading-level", None) node["heading-level"] = self.options.get("heading-level", None)
# Collect parent show-whens (if nested)
# to create a completely unique id
parent_show_whens = []
for ancestor in self.state.parent.traverse(include_self=True):
if isinstance(ancestor, SelectedContent) and "show-when" in ancestor:
parent_show_whens.append(ancestor["show-when"])
# Compose combined show-when chain
combined_show_when = "+".join(parent_show_whens + [node["show-when"]])
node["combined-show-when"] = combined_show_when
# Parse nested content # Parse nested content
self.state.nested_parse(self.content, self.content_offset, node) self.state.nested_parse(self.content, self.content_offset, node)
return [node] return [node]
@@ -370,10 +257,6 @@ def setup(app):
SelectorGroup, SelectorGroup,
html=(SelectorGroup.visit_html, SelectorGroup.depart_html), html=(SelectorGroup.visit_html, SelectorGroup.depart_html),
) )
app.add_node(
SelectorInfo,
html=(SelectorInfo.visit_html, SelectorInfo.depart_html),
)
app.add_node( app.add_node(
SelectorOption, SelectorOption,
html=(SelectorOption.visit_html, SelectorOption.depart_html), html=(SelectorOption.visit_html, SelectorOption.depart_html),
@@ -384,9 +267,13 @@ def setup(app):
) )
app.add_directive("selector", SelectorGroupDirective) app.add_directive("selector", SelectorGroupDirective)
app.add_directive("selector-info", SelectorInfoDirective)
app.add_directive("selector-option", SelectorOptionDirective) app.add_directive("selector-option", SelectorOptionDirective)
app.add_directive("selected-content", SelectedContentDirective) app.add_directive("selected-content", SelectedContentDirective)
app.add_directive("selected", SelectedContentDirective) app.add_directive("selected", SelectedContentDirective)
return {"version": "1.2", "parallel_read_safe": True} static_assets_dir = Path(__file__).parent / "static"
app.config.html_static_path.append(str(static_assets_dir))
app.add_css_file("selector.css")
app.add_js_file("selector.js", type="module", defer="defer")
return {"version": "1.0", "parallel_read_safe": True}

View File

@@ -7,11 +7,6 @@ html {
--rocm-docs-selector-option-hover-color: var(--pst-color-link-hover); --rocm-docs-selector-option-hover-color: var(--pst-color-link-hover);
--rocm-docs-selector-option-selected-color: var(--pst-color-primary); --rocm-docs-selector-option-selected-color: var(--pst-color-primary);
--rocm-docs-selector-tile-padding: 0.2rem; --rocm-docs-selector-tile-padding: 0.2rem;
--rocm-docs-selector-tile-gap: 0.5rem;
--rocm-docs-selector-focus-ring: 2px solid var(
--rocm-docs-selector-accent-color
);
--rocm-docs-selector-focus-offset: 2px;
} }
html[data-theme="light"] { html[data-theme="light"] {
@@ -26,38 +21,16 @@ html[data-theme="dark"] {
--rocm-docs-selector-shadow-hover: 0 2px 8px rgba(0, 0, 0, 0.4); --rocm-docs-selector-shadow-hover: 0 2px 8px rgba(0, 0, 0, 0.4);
} }
/* Avoid odd sizing interactions with Bootstrap width utilities */ /* Selector container */
.rocm-docs-selector-group, .rocm-docs-selector-container {
.rocm-docs-selector-group * { padding: 0 0 1rem 0;
box-sizing: border-box;
} }
/* Hide selectors during initialization to prevent FOUC */ /* Selector group heading when one of its options is hovered */
.rocm-docs-selector-group:not(.rocm-docs-selector-initialized) {
visibility: hidden;
}
/* Smooth fade-in when ready */
.rocm-docs-selector-group.rocm-docs-selector-initialized {
visibility: visible;
animation: rocm-docs-selector-fade-in 0.2s ease-in;
}
@keyframes rocm-docs-selector-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@supports selector(.x:has(.y)) {
.rocm-docs-selector-group:has(.rocm-docs-selector-option:hover) .rocm-docs-selector-group:has(.rocm-docs-selector-option:hover)
.rocm-docs-selector-group-heading { .rocm-docs-selector-group-heading {
border-right-color: var(--rocm-docs-selector-option-hover-color); border-right-color: var(--rocm-docs-selector-option-hover-color);
} }
}
/* Selector group heading box */ /* Selector group heading box */
.rocm-docs-selector-group-heading { .rocm-docs-selector-group-heading {
@@ -66,7 +39,7 @@ html[data-theme="dark"] {
font-weight: 600; font-weight: 600;
border-right: solid 3px var(--rocm-docs-selector-accent-color); border-right: solid 3px var(--rocm-docs-selector-accent-color);
border-radius: var(--rocm-docs-selector-border-radius); border-radius: var(--rocm-docs-selector-border-radius);
transition: border-color 0.25s ease; transition: border-right-color 0.25s ease;
box-shadow: var(--rocm-docs-selector-shadow); box-shadow: var(--rocm-docs-selector-shadow);
} }
@@ -84,25 +57,16 @@ html[data-theme="dark"] {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
background-color: var(--rocm-docs-selector-bg-color); background-color: var(--rocm-docs-selector-bg-color);
padding: var(--rocm-docs-selector-tile-padding); padding: var(--rocm-docs-selector-tile-padding);
border: solid 2px var(--rocm-docs-selector-border-color); border: solid 2px var(--rocm-docs-selector-border-color);
cursor: pointer;
transition: all 0.2 ease;
border-radius: var(--rocm-docs-selector-border-radius); border-radius: var(--rocm-docs-selector-border-radius);
box-shadow: var(--rocm-docs-selector-shadow); box-shadow: var(--rocm-docs-selector-shadow);
cursor: pointer;
user-select: none;
transition:
background-color 0.2s ease,
color 0.2s ease,
transform 0.2s ease,
box-shadow 0.2s ease,
border-color 0.2s ease;
} }
/* Hover (not disabled) */ /* Selector option when hovered */
.rocm-docs-selector-option:hover:not(.rocm-docs-disabled) { .rocm-docs-selector-option:hover:not(.rocm-docs-disabled) {
background-color: var(--rocm-docs-selector-option-hover-color); background-color: var(--rocm-docs-selector-option-hover-color);
color: var(--rocm-docs-selector-fg-color); color: var(--rocm-docs-selector-fg-color);
@@ -110,94 +74,30 @@ html[data-theme="dark"] {
box-shadow: var(--rocm-docs-selector-shadow-hover); box-shadow: var(--rocm-docs-selector-shadow-hover);
} }
/* Accessible keyboard focus */
.rocm-docs-selector-option:focus-visible:not(.rocm-docs-disabled) {
outline: var(--rocm-docs-selector-focus-ring);
outline-offset: var(--rocm-docs-selector-focus-offset);
}
/* Keep it above neighbors if it gets an outline/box-shadow */
.rocm-docs-selector-option:focus:not(.rocm-docs-disabled) { .rocm-docs-selector-option:focus:not(.rocm-docs-disabled) {
position: relative; z-index: 69;
z-index: 1;
} }
/* Selected */ /* Selector option when selected */
.rocm-docs-selector-option.rocm-docs-selected { .rocm-docs-selector-option.rocm-docs-selected {
background-color: var(--rocm-docs-selector-option-selected-color); background-color: var(--rocm-docs-selector-option-selected-color);
color: var(--rocm-docs-selector-fg-color); color: var(--rocm-docs-selector-fg-color);
} }
/* Prevent hover lift on selected (keeps it steady) */ /* Prevent hover effect on selected */
.rocm-docs-selector-option.rocm-docs-selected:hover { .rocm-docs-selector-option.rocm-docs-selected:hover {
transform: none; transform: none;
} }
/* Disabled */ /* Selector option when disabled */
.rocm-docs-selector-option.rocm-docs-disabled { .rocm-docs-selector-option.rocm-docs-disabled {
background-color: var(--rocm-docs-selector-border-color); background-color: var(--rocm-docs-selector-border-color);
color: var(--rocm-docs-selector-fg-color); color: var(--rocm-docs-selector-fg-color);
cursor: not-allowed; cursor: not-allowed;
pointer-events: none; pointer-events: none;
opacity: 0.75;
} }
/* Hidden state */ /* Hidden state */
.rocm-docs-hidden { .rocm-docs-hidden {
display: none; display: none;
} }
/* Put selected option summary in secondary page-level TOC on a new line */
.rocm-docs-selector-toc2-item .nav-link span {
display: block;
padding-left: 1rem;
}
@media (max-width: 768px) {
.rocm-docs-selector-group {
row-gap: var(--rocm-docs-selector-tile-gap);
}
}
@media (max-width: 576px) {
.rocm-docs-selector-option {
flex: 0 0 100%;
max-width: 100%;
}
}
@media (max-width: 440px) {
.rocm-docs-selector-group-heading {
flex: 0 0 100%;
max-width: 100%;
/* When stacked, puth the accent on the bottom */
border-right: 0;
border-bottom: solid 3px var(--rocm-docs-selector-accent-color);
}
.rocm-docs-selector-group.row .row {
flex: 0 0 100%;
max-width: 100%;
}
.rocm-docs-selector-option {
flex: 0 0 100%;
max-width: 100%;
}
}
/* Motion reduction */
@media (prefers-reduced-motion: reduce) {
.rocm-docs-selector-group.rocm-docs-selector-initialized {
animation: none;
}
.rocm-docs-selector-option {
transition: none;
}
.rocm-docs-selector-option:hover:not(.rocm-docs-disabled) {
transform: none;
}
}

View File

@@ -0,0 +1,305 @@
const READY_EVENT = "ROCmDocsSelectorsReady";
const STATE_CHANGE_EVENT = "ROCmDocsSelectorStateChanged";
const GROUP_QUERY = ".rocm-docs-selector-group";
const OPTION_QUERY = ".rocm-docs-selector-option";
const COND_QUERY = "[data-show-when]";
const TOC2_OPTIONS_LIST_QUERY = ".rocm-docs-selector-toc2-options";
const TOC2_CONTENTS_LIST_QUERY = ".rocm-docs-selector-toc2-contents";
const HEADING_QUERY = ".rocm-docs-selected-content h1,h2,h3,h4,h5,h6[id]";
const isDefaultOption = (elem) =>
elem.classList.contains("rocm-docs-selector-option-default");
const DISABLED_CLASS = "rocm-docs-disabled";
const disable = (elem) => {
elem.classList.add(DISABLED_CLASS);
elem.setAttribute("aria-disabled", "true");
elem.setAttribute("tabindex", "-1");
};
// const enable = (elem) => {
// elem.classList.remove(DISABLED_CLASS);
// elem.setAttribute("aria-disabled", "false");
// elem.setAttribute("tabindex", "0");
// };
const HIDDEN_CLASS = "rocm-docs-hidden";
const hide = (elem) => {
elem.classList.add(HIDDEN_CLASS);
elem.setAttribute("aria-hidden", "true");
};
const show = (elem) => {
elem.classList.remove(HIDDEN_CLASS);
elem.setAttribute("aria-hidden", "false");
};
const SELECTED_CLASS = "rocm-docs-selected";
const select = (elem) => {
elem.classList.add(SELECTED_CLASS);
elem.setAttribute("aria-checked", "true");
};
const deselect = (elem) => {
elem.classList.remove(SELECTED_CLASS);
elem.setAttribute("aria-checked", "false");
};
const state = {};
function getState() {
return { ...state };
}
function setState(updates) {
const previousState = getState();
Object.assign(state, updates);
const event = new CustomEvent(STATE_CHANGE_EVENT, {
detail: {
previousState,
currentState: getState(),
changes: updates,
},
});
document.dispatchEvent(event);
}
function validateOptionElem(optionElem) {
const key = optionElem.dataset.selectorKey;
const value = optionElem.dataset.selectorValue;
const errors = [];
if (!key) errors.push("Missing 'data-selector-key'");
if (!value) errors.push("Missing 'data-selector-value'");
if (errors.length === 0) return;
const label = optionElem.textContent.trim() || "<unnamed option>";
console.error(
`[ROCmDocsSelector] Invalid selector option '${label}': ${
errors.join(", ")
}!`,
);
disable(optionElem);
}
function handleOptionSelect(e) {
const option = e.currentTarget;
const parentGroup = option.closest(GROUP_QUERY);
const siblingOptions = parentGroup.querySelectorAll(OPTION_QUERY);
siblingOptions.forEach((elem) => deselect(elem));
select(option);
// Update global state
const key = option.dataset.selectorKey;
const value = option.dataset.selectorValue;
if (key && value) setState({ [key]: value });
updateVisibility();
}
function shouldBeShown(elem) {
const conditionsData = elem.dataset.showWhen;
if (!conditionsData) return true; // Default visible
try {
const conditions = JSON.parse(conditionsData);
// Ensure it's an object
if (typeof conditions !== "object" || Array.isArray(conditions)) {
console.warn(
"[ROCmDocsSelector] Invalid 'show-when' format (must be key/value object):",
conditionsData,
);
return true;
}
for (const [key, value] of Object.entries(conditions)) {
const currentValue = state[key];
if (currentValue === undefined) return false;
if (Array.isArray(value)) {
if (!value.includes(currentValue)) return false;
continue;
}
if (state[key] !== value) {
return false;
}
}
return true;
} catch (err) {
console.error(
"[ROCmDocsSelector] Couldn't parse 'show-when' conditions:",
err,
);
return true;
}
}
function updateTOC2OptionsList() {
const tocOptionsList = document.querySelector(TOC2_OPTIONS_LIST_QUERY);
if (!tocOptionsList) return;
// Clear previous entries
tocOptionsList.innerHTML = "";
// Get only visible selector groups
const groups = Array.from(document.querySelectorAll(GROUP_QUERY)).filter(
(g) => g.offsetParent !== null,
);
if (groups.length === 0) {
const li = document.createElement("li");
li.className =
"nav-item toc-entry toc-h3 rocm-docs-selector-toc2-item empty";
const span = document.createElement("span");
span.textContent = "(no visible selectors)";
li.appendChild(span);
tocOptionsList.appendChild(li);
return;
}
groups.forEach((group) => {
// ✅ Find group heading span
const headingSpan = group.querySelector(
".rocm-docs-selector-group-heading-text",
);
const headingText = headingSpan
? headingSpan.textContent.trim()
: "(Unnamed Selector)";
// Find currently selected option
const selectedOption = group.querySelector(`.${SELECTED_CLASS}`);
let optionText = "(none selected)";
if (selectedOption) {
const clone = selectedOption.cloneNode(true);
// Remove all <i> elements
clone.querySelectorAll("i, svg").forEach((el) => el.remove());
optionText = clone.innerHTML.trim();
}
// Build list item
const li = document.createElement("li");
li.className = "nav-item toc-entry toc-h3 rocm-docs-selector-toc2-item";
const link = document.createElement("a");
link.className = "nav-link";
link.href = `#${group.id}`;
link.innerHTML = `<strong>${headingText}</strong>: ${optionText}`;
li.appendChild(link);
tocOptionsList.appendChild(li);
});
}
function updateTOC2ContentsList() {
const tocOptionsList = document.querySelector(TOC2_OPTIONS_LIST_QUERY);
const tocContentsList = document.querySelector(TOC2_CONTENTS_LIST_QUERY);
if (!tocContentsList || !tocOptionsList) return;
const visibleHeaders = [...document.querySelectorAll(HEADING_QUERY)]
.filter((h) => h.offsetParent !== null); // only visible headings
tocContentsList
.querySelectorAll("li.toc-entry.rocm-docs-selector-toc2-item")
.forEach((node) => node.remove());
if (visibleHeaders.length === 0) return;
let lastH2Li = null;
visibleHeaders.forEach((h) => {
const level = parseInt(h.tagName.substring(1), 10);
const li = document.createElement("li");
li.className =
`nav-item toc-entry toc-${h.tagName.toLowerCase()} rocm-docs-selector-toc2-item`;
const a = document.createElement("a");
a.className = "reference internal nav-link";
const section = h.closest("section");
const fallbackId = section ? section.id : "";
a.href = h.id ? `#${h.id}` : fallbackId ? `#${fallbackId}` : "#";
a.textContent = h.cloneNode(true).childNodes[0].textContent.trim();
li.appendChild(a);
// Nest logic: h3+ belong to last h2's inner list
if (level === 2) {
tocContentsList.appendChild(li);
lastH2Li = li;
} else if (level === 3 && lastH2Li) {
// ensure nested UL exists
let innerUl = lastH2Li.querySelector("ul");
if (!innerUl) {
innerUl = document.createElement("ul");
innerUl.className = "nav section-nav flex-column";
lastH2Li.appendChild(innerUl);
}
innerUl.appendChild(li);
} else {
tocContentsList.appendChild(li);
}
});
}
function updateVisibility() {
document.querySelectorAll(COND_QUERY).forEach((elem) => {
if (shouldBeShown(elem)) {
show(elem);
} else {
hide(elem);
}
});
updateTOC2OptionsList();
updateTOC2ContentsList();
}
function init() {
const selectorOptions = document.querySelectorAll(OPTION_QUERY);
const initialState = {};
// Attach listeners and gather defaults
selectorOptions.forEach((option) => {
validateOptionElem(option);
option.addEventListener("click", handleOptionSelect);
option.addEventListener("keydown", (e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
handleOptionSelect(e);
}
});
if (isDefaultOption(option)) {
select(option);
const { selectorKey: key, selectorValue: value } = option.dataset;
if (key && value) {
initialState[key] = value;
}
}
});
setState(initialState);
updateVisibility();
document.dispatchEvent(new CustomEvent(READY_EVENT));
}
function domReady(callback) {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback, { once: true });
}
}
// window.rocmDocsSelector = {
// setState,
// getState,
// };
// Initialize when DOM is ready
domReady(init);

View File

@@ -1,180 +0,0 @@
const GROUP_QUERY = ".rocm-docs-selector-group";
const SELECTED_CLASS = "rocm-docs-selected";
const TOC2_OPTIONS_LIST_QUERY = ".rocm-docs-selector-toc2-options";
const TOC2_CONTENTS_LIST_QUERY = ".rocm-docs-selector-toc2-contents";
const HEADING_QUERY = ".rocm-docs-selected-content h1,h2,h3,h4,h5,h6";
const TOC_ITEM_CLASS = "rocm-docs-selector-toc2-item";
const EMPTY_ITEM_CLASS = "empty";
function isVisible(el) {
return !!(el && el.offsetParent !== null);
}
function getUniqueGroups(groups) {
const seen = new Set();
return groups.filter((group) => {
// Use group ID as primary identity; fallback to heading text
const headingSpan = group.querySelector(
".rocm-docs-selector-group-heading-text"
);
const headingText = headingSpan
? headingSpan.textContent.trim()
: "(Unnamed Selector)";
const identifier = group.id ? `id:${group.id}` : `heading:${headingText}`;
if (seen.has(identifier)) return false;
seen.add(identifier);
return true;
});
}
export function updateTOC2OptionsList() {
const tocOptionsList = document.querySelector(TOC2_OPTIONS_LIST_QUERY);
if (!tocOptionsList) return;
let visibleGroups = Array.from(document.querySelectorAll(GROUP_QUERY)).filter(
isVisible
);
visibleGroups = getUniqueGroups(visibleGroups);
// Always rebuild fresh (simpler, avoids state drift)
tocOptionsList.innerHTML = "";
if (visibleGroups.length === 0) {
const li = document.createElement("li");
li.className = `nav-item toc-entry toc-h3 ${TOC_ITEM_CLASS} ${EMPTY_ITEM_CLASS}`;
const span = document.createElement("span");
span.textContent = "(no visible selectors)";
li.appendChild(span);
tocOptionsList.appendChild(li);
return;
}
visibleGroups.forEach((group) => {
const headingSpan = group.querySelector(
".rocm-docs-selector-group-heading-text"
);
const headingText = headingSpan
? headingSpan.textContent.trim()
: "(Unnamed Selector)";
const li = document.createElement("li");
li.className = `nav-item toc-entry toc-h3 ${TOC_ITEM_CLASS}`;
li.dataset.groupId = group.id || "";
const link = document.createElement("a");
link.className = "nav-link";
link.href = group.id ? `#${group.id}` : "#";
link.dataset.headingText = headingText;
const selectedOption = group.querySelector(`.${SELECTED_CLASS}`);
let optionText = "(none selected)";
if (selectedOption) {
const clone = selectedOption.cloneNode(true);
clone.querySelectorAll("i, svg").forEach((el) => el.remove());
optionText = clone.innerHTML.trim();
}
link.innerHTML = `<strong>${headingText}</strong>: ${optionText}`;
li.appendChild(link);
tocOptionsList.appendChild(li);
});
}
let contentsTocInitialized = false;
function initTOC2ContentsList() {
const tocContentsList = document.querySelector(TOC2_CONTENTS_LIST_QUERY);
if (!tocContentsList) return;
// Remove any previous dynamic items (idempotent init)
tocContentsList
.querySelectorAll(`li.toc-entry.${TOC_ITEM_CLASS}`)
.forEach((node) => node.remove());
const headings = Array.from(document.querySelectorAll(HEADING_QUERY));
if (headings.length === 0) {
contentsTocInitialized = true;
return;
}
const lastLiByLevel = {};
headings.forEach((h) => {
const level = parseInt(h.tagName.substring(1), 10);
if (Number.isNaN(level) || level < 2 || level > 6) return;
const li = document.createElement("li");
li.className = `nav-item toc-entry toc-${h.tagName.toLowerCase()} ` +
TOC_ITEM_CLASS;
const a = document.createElement("a");
a.className = "reference internal nav-link";
const section = h.closest("section");
const targetId = h.id || (section ? section.id : "");
a.href = targetId ? `#${targetId}` : "#";
// Use only the text from the heading (ignore headerlink icon etc.)
const clone = h.cloneNode(true);
const firstTextNode = clone.childNodes.length > 0
? clone.childNodes[0].textContent
: "";
a.textContent = (firstTextNode || "").trim();
li.dataset.targetId = targetId;
li.appendChild(a);
// Nest under closest previous shallower heading
let parentUl = null;
for (let parentLevel = level - 1; parentLevel >= 2; parentLevel -= 1) {
const parentLi = lastLiByLevel[parentLevel];
if (parentLi) {
parentUl = parentLi.querySelector("ul");
if (!parentUl) {
parentUl = document.createElement("ul");
parentUl.className = "nav section-nav flex-column";
parentLi.appendChild(parentUl);
}
break;
}
}
if (parentUl) {
parentUl.appendChild(li);
} else {
tocContentsList.appendChild(li);
}
lastLiByLevel[level] = li;
for (let deeper = level + 1; deeper <= 6; deeper += 1) {
delete lastLiByLevel[deeper];
}
});
contentsTocInitialized = true;
}
export function updateTOC2ContentsList() {
const tocOptionsList = document.querySelector(TOC2_OPTIONS_LIST_QUERY);
const tocContentsList = document.querySelector(TOC2_CONTENTS_LIST_QUERY);
if (!tocContentsList || !tocOptionsList) return;
if (!contentsTocInitialized) {
initTOC2ContentsList();
}
tocContentsList
.querySelectorAll(`li.toc-entry.${TOC_ITEM_CLASS}`)
.forEach((li) => {
const targetId = li.dataset.targetId;
if (!targetId) {
li.style.display = "none";
return;
}
const target = document.getElementById(targetId);
const visible = target && target.offsetParent !== null;
li.style.display = visible ? "" : "none";
});
}

View File

@@ -1,441 +0,0 @@
import { domReady, logDebug } from "./utils.js";
import {
updateTOC2ContentsList,
updateTOC2OptionsList,
} from "./selector-toc.js";
const GROUP_QUERY = ".rocm-docs-selector-group";
const OPTION_QUERY = ".rocm-docs-selector-option";
const COND_QUERY = "[data-show-when],[data-disable-when]";
const DEFAULT_OPTION_CLASS = "rocm-docs-selector-option-default";
const DISABLED_CLASS = "rocm-docs-disabled";
const HIDDEN_CLASS = "rocm-docs-hidden";
const SELECTED_CLASS = "rocm-docs-selected";
const STORAGE_KEY = "rocm-docs-selector-state";
// Toggle helpers -------------------------------------------------------------
const isDefaultOption = (elem) => elem.classList.contains(DEFAULT_OPTION_CLASS);
const disable = (elem) => {
elem.classList.add(DISABLED_CLASS);
elem.setAttribute("aria-disabled", "true");
elem.setAttribute("tabindex", "-1");
};
const enable = (elem) => {
elem.classList.remove(DISABLED_CLASS);
elem.setAttribute("aria-disabled", "false");
elem.setAttribute("tabindex", "0");
};
const hide = (elem) => {
elem.classList.add(HIDDEN_CLASS);
elem.setAttribute("aria-hidden", "true");
};
const show = (elem) => {
elem.classList.remove(HIDDEN_CLASS);
elem.setAttribute("aria-hidden", "false");
};
const select = (elem) => {
elem.classList.add(SELECTED_CLASS);
elem.setAttribute("aria-checked", "true");
};
const deselect = (elem) => {
elem.classList.remove(SELECTED_CLASS);
elem.setAttribute("aria-checked", "false");
};
// URL synchronization --------------------------------------------------------
function syncStateToURL() {
const params = new URLSearchParams();
for (const [key, value] of Object.entries(state)) {
params.set(key, value);
}
const newURL = params.toString()
? `${window.location.pathname}?${params.toString()}${window.location.hash}`
: `${window.location.pathname}${window.location.hash}`;
window.history.replaceState({}, "", newURL);
logDebug("URL updated:", newURL);
}
function getStateFromURL() {
const params = new URLSearchParams(window.location.search);
const urlState = {};
for (const [key, value] of params) {
urlState[key] = value;
}
return urlState;
}
// localStorage synchronization -----------------------------------------------
function syncStateToLocalStorage() {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(state));
logDebug("localStorage updated:", state);
} catch (err) {
console.warn("[ROCmDocsSelector] Failed to save to localStorage:", err);
}
}
function getStateFromLocalStorage() {
try {
const stored = localStorage.getItem(STORAGE_KEY);
if (!stored) return {};
const parsed = JSON.parse(stored);
logDebug("localStorage loaded:", parsed);
return parsed;
} catch (err) {
console.warn(
"[ROCmDocsSelector] Failed to read from localStorage:",
err,
);
return {};
}
}
// Global selector state ------------------------------------------------------
const state = {};
function getState() {
return { ...state };
}
function setState(updates) {
Object.assign(state, updates);
logDebug("State updated:", state);
syncStateToURL();
syncStateToLocalStorage();
}
// Condition handling ---------------------------------------------------------
/**
* Safely parse JSON-encoded conditions from a data-* attribute.
* Expects a key/value object, where values may be strings or arrays of strings.
*/
function parseConditions(attrName, raw) {
if (!raw) return null;
try {
const conditions = JSON.parse(raw);
if (typeof conditions !== "object" || Array.isArray(conditions)) {
console.warn(
`[ROCmDocsSelector] Invalid '${attrName}' format ` +
"(must be a key/value object):",
raw,
);
return null;
}
return conditions;
} catch (err) {
console.error(
`[ROCmDocsSelector] Couldn't parse '${attrName}' conditions:`,
err,
);
return null;
}
}
/**
* Return true iff all conditions match the current state.
* - Values can be a string or an array of strings.
* - A condition with an undefined state key is treated as not matching.
*/
function matchesConditions(conditions, currentState) {
for (const [key, expected] of Object.entries(conditions)) {
const actual = currentState[key];
// If no value yet, this condition does not match.
if (actual === undefined) return false;
if (Array.isArray(expected)) {
if (!expected.includes(actual)) return false;
} else if (actual !== expected) {
return false;
}
}
return true;
}
function shouldBeDisabled(elem) {
const raw = elem.dataset.disableWhen;
if (!raw) return false; // no conditions => never disabled
const conditions = parseConditions("disable-when", raw);
if (!conditions) {
console.warn(
"[ROCmDocsSelector] Invalid 'disable-when' conditions; not disabling affected element.",
);
return false;
}
return matchesConditions(conditions, state);
}
function shouldBeShown(elem) {
const raw = elem.dataset.showWhen;
if (!raw) return true; // no conditions => always visible
const conditions = parseConditions("show-when", raw);
if (!conditions) return true;
return matchesConditions(conditions, state);
}
// Event handlers -------------------------------------------------------------
function handleOptionSelect(e) {
const option = e.currentTarget;
// Ignore interaction with disabled or already selected options
if (
option.classList.contains(DISABLED_CLASS) ||
option.classList.contains(SELECTED_CLASS)
) {
return;
}
const { selectorKey: key, selectorValue: value } = option.dataset;
if (!key || !value) return;
// Update all selectors sharing the same key
const allOptions = document.querySelectorAll(
`${OPTION_QUERY}[data-selector-key="${key}"]`,
);
allOptions.forEach((opt) => {
if (opt.dataset.selectorValue === value) {
select(opt);
} else {
deselect(opt);
}
});
// Update global state
setState({ [key]: value });
// Re-run visibility rules and TOC sync
updateVisibility();
}
function handleOptionKeydown(e) {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
handleOptionSelect(e);
}
}
// Visibility / enablement update ---------------------------------------------
// Ensure each selector group always has a valid selected option.
// If the current selection becomes disabled/hidden due to another selector's
// change, automatically pick a replacement.
function reconcileGroupSelections() {
const currentState = getState();
const updates = {};
document.querySelectorAll(GROUP_QUERY).forEach((group) => {
// Skip groups that are hidden OR inside a hidden parent
if (
group.classList.contains(HIDDEN_CLASS) ||
group.closest(`.${HIDDEN_CLASS}`)
) {
return;
}
const options = Array.from(group.querySelectorAll(OPTION_QUERY));
if (!options.length) return;
const groupKey = group.dataset.selectorKey ||
options[0].dataset.selectorKey;
if (!groupKey) return;
// Options that are both enabled and visible
const enabledVisible = options.filter(
(opt) =>
!opt.classList.contains(DISABLED_CLASS) &&
!opt.classList.contains(HIDDEN_CLASS),
);
if (!enabledVisible.length) {
// No valid options left; just clear visual selection.
options.forEach(deselect);
return;
}
const currentlySelected = options.find((opt) =>
opt.classList.contains(SELECTED_CLASS)
);
const selectedStillValid = currentlySelected &&
enabledVisible.includes(currentlySelected);
if (selectedStillValid) {
const selectedValue = currentlySelected.dataset.selectorValue;
if (selectedValue && currentState[groupKey] !== selectedValue) {
updates[groupKey] = selectedValue;
}
return;
}
// Need a new selection: prioritize current state value
let replacement;
// 1. Try to match the current global state value (if exists)
const stateValue = currentState[groupKey];
if (stateValue) {
replacement = enabledVisible.find(
(opt) => opt.dataset.selectorValue === stateValue,
);
}
// 2. If no match, prefer a default option
if (!replacement) {
replacement = enabledVisible.find(isDefaultOption);
}
// 3. Otherwise use the first enabled+visible option
if (!replacement) {
replacement = enabledVisible[0];
}
if (!replacement) return;
options.forEach(deselect);
select(replacement);
const newValue = replacement.dataset.selectorValue;
if (newValue && currentState[groupKey] !== newValue) {
updates[groupKey] = newValue;
}
});
const changedKeys = Object.keys(updates);
if (changedKeys.length > 0) {
setState(updates);
return true;
}
return false;
}
let isUpdatingVisibility = false;
function updateVisibility() {
// Prevent re-entrancy if something triggers updateVisibility
// while it is already running.
if (isUpdatingVisibility) return;
isUpdatingVisibility = true;
try {
let stateChanged = false;
let iterations = 0;
// We may need multiple passes: reconciling selections can change the
// global state, which in turn affects show/disable conditions.
do {
document.querySelectorAll(COND_QUERY).forEach((elem) => {
// Show/hide only if element has show-when
if (elem.dataset.showWhen !== undefined) {
if (shouldBeShown(elem)) {
show(elem);
} else {
hide(elem);
}
}
// Enable/disable only if element has disable-when
if (elem.dataset.disableWhen !== undefined) {
if (shouldBeDisabled(elem)) {
disable(elem);
} else {
enable(elem);
}
}
});
stateChanged = reconcileGroupSelections();
iterations += 1;
// Hard stop to avoid infinite loops in case of conflicting rules.
} while (stateChanged && iterations < 5);
updateTOC2OptionsList();
updateTOC2ContentsList();
} finally {
isUpdatingVisibility = false;
}
}
// Initialization -------------------------------------------------------------
domReady(() => {
const selectorOptions = document.querySelectorAll(OPTION_QUERY);
if (!selectorOptions?.length) {
// Clear URLSearchParams if page does not have selector
const url = new URL(window.location);
url.search = "";
window.history.replaceState({}, "", url);
return;
}
const defaultState = {};
const localStorageState = getStateFromLocalStorage();
const urlState = getStateFromURL();
// Attach listeners and gather defaults
selectorOptions.forEach((option) => {
option.addEventListener("click", handleOptionSelect);
option.addEventListener("keydown", handleOptionKeydown);
if (isDefaultOption(option)) {
const { selectorKey: key, selectorValue: value } = option.dataset;
if (key && value && defaultState[key] === undefined) {
defaultState[key] = value;
}
}
});
// Merge with priority: URL > localStorage > defaults
const initialState = {
...defaultState,
...localStorageState,
...urlState,
};
// Apply initial selections from merged state
for (const [key, value] of Object.entries(initialState)) {
const allOptions = document.querySelectorAll(
`${OPTION_QUERY}[data-selector-key="${key}"]`,
);
allOptions.forEach((opt) => {
if (opt.dataset.selectorValue === value) {
select(opt);
} else {
deselect(opt);
}
});
}
setState(initialState);
updateVisibility();
// Mark all selector groups as initialized to make them visible
document.querySelectorAll(GROUP_QUERY).forEach((group) => {
group.classList.add("rocm-docs-selector-initialized");
});
});

View File

@@ -1,14 +0,0 @@
export function domReady(callback) {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback, { once: true });
}
}
const DEBUG = true;
export const logDebug = (...args) => {
if (DEBUG) {
console.debug("[ROCmDocsSelector]", ...args);
}
};

View File

@@ -29,12 +29,7 @@ html[data-theme="dark"] {
background-color: var(--rocm-docs-table-head-bg-color); background-color: var(--rocm-docs-table-head-bg-color);
border: 2px solid var(--rocm-docs-table-border-color); border: 2px solid var(--rocm-docs-table-border-color);
} }
.rocm-docs-table td { .rocm-docs-table td {
background-color: var(--rocm-docs-table-bg-color); background-color: var(--rocm-docs-table-bg-color);
border: 2px solid var(--rocm-docs-table-border-color) !important; border: 2px solid var(--rocm-docs-table-border-color) !important;
} }
.rocm-docs-table p:not(:last-child) {
margin-bottom: 0.3rem;
}

View File

@@ -0,0 +1,9 @@
from sphinx.util.docutils import SphinxDirective, directives, nodes
from pathlib import Path
def setup(app):
static_assets_dir = Path(__file__).parent / "static"
app.config.html_static_path.append(str(static_assets_dir))
app.add_css_file("table.css")
return {"version": "1.0", "parallel_read_safe": True}

View File

@@ -1,7 +1,6 @@
<!-- Summary of selected options in secondary TOC -->
<div class="tocsection onthispage"> <div class="tocsection onthispage">
<i class="fa-solid fa-computer"></i> <i class="fa-solid fa-filter"></i>
Installation environment Options
</div> </div>
<nav class="page-toc rocm-docs-selector-toc2"> <nav class="page-toc rocm-docs-selector-toc2">
<ul <ul
@@ -9,7 +8,6 @@
> >
</ul> </ul>
</nav> </nav>
<!-- Summary of page contents in secondary TOC -->
<div class="page-toc tocsection onthispage"> <div class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> <i class="fa-solid fa-list"></i>
Contents Contents

View File

@@ -1,6 +1,5 @@
import json import json
import html import html
from sphinx.util import logging
def normalize_key(key): def normalize_key(key):
return key.replace(" ", "_").lower().strip() return key.replace(" ", "_").lower().strip()
@@ -29,6 +28,3 @@ def kv_to_data_attr(name, kv_str, separator="="):
return f'data-{name}="{html.escape(json.dumps(pairs))}"' if pairs else "" return f'data-{name}="{html.escape(json.dumps(pairs))}"' if pairs else ""
logger = logging.getLogger(__name__)

View File

@@ -2,16 +2,16 @@
:description: Learn what ROCm is AMD's open software stack for GPU programming, including runtimes, compilers, libraries, and tools for Linux and Windows. :description: Learn what ROCm is AMD's open software stack for GPU programming, including runtimes, compilers, libraries, and tools for Linux and Windows.
:keywords: ROCm, AMD, GPU computing, ROCm Core SDK, ROCm components, TheRock, ROCm architecture, HPC, AI, machine learning, ROCm runtime :keywords: ROCm, AMD, GPU computing, ROCm Core SDK, ROCm components, TheRock, ROCm architecture, HPC, AI, machine learning, ROCm runtime
******************************* **********************
AMD ROCm |ROCM_VERSION| preview AMD ROCm 7.9.0 preview
******************************* **********************
AMD ROCm is an open, modular, and highperformance GPU software ecosystem AMD ROCm is an open, modular, and highperformance GPU software ecosystem
built collaboratively with the community, maintained transparently, and built collaboratively with the community, maintained transparently, and
optimized for consistent, scalable performance across data centers, optimized for consistent, scalable performance across data centers, desktops,
workstations, and edge devices. and edge devices.
ROCm |ROCM_VERSION| is a technology preview release built with ROCm 7.9.0 is a technology preview release built with
`TheRock <https://github.com/ROCm/TheRock>`__, AMDs new open build and release `TheRock <https://github.com/ROCm/TheRock>`__, AMDs new open build and release
system. system.
This preview introduces a new modular build workflow that will become standard This preview introduces a new modular build workflow that will become standard
@@ -34,13 +34,14 @@ frameworks such as PyTorch.
* **Open source** -- Transparent development driven by community feedback * **Open source** -- Transparent development driven by community feedback
* **Crossplatform** -- Supports Linux and Windows environments * **Crossplatform** -- Supports Linux and Windows environments
* **Comprehensive** -- Endtoend toolchain from compilers to libraries * **Comprehensive** -- Endtoend toolchain from compilers to libraries
* **Performancefocused** -- Tuned for AMD Instinct™, AMD Radeon™, and AMD Ryzen™ devices * **Performancefocused** -- Tuned for AMD Instinct™, AMD Radeon™, and AMD Ryzen™ architectures
.. raw:: html .. image:: data/rocm-ontology.png
:file: data/rocm-ontology.html :align: center
:alt: ROCm software ecosystem and components illustration
ROCm supports AMD GPU architectures spanning data center, workstation, and APU ROCm supports AMD GPU architectures spanning data center, workstation, and APU
product lines. TheRock enables a unified ROCm userspace experience across categories. TheRock enables a unified ROCm userspace experience across
devices. devices.
* **AMD Instinct GPUs** -- Purposebuilt for largescale compute, AI training, and HPC workloads. * **AMD Instinct GPUs** -- Purposebuilt for largescale compute, AI training, and HPC workloads.
@@ -72,8 +73,9 @@ The ROCm Core SDK provides the foundational components that power the ROCm
ecosystem — runtimes, compilers, math libraries, and system utilities for GPGPU ecosystem — runtimes, compilers, math libraries, and system utilities for GPGPU
computing. computing.
.. raw:: html .. image:: data/rocm-sdk-arch.png
:file: data/rocm-sdk-arch.html :align: center
:alt: ROCm Core SDK internal architecture illustration
The TheRock infrastructure keeps these components modular, consistent, and easy The TheRock infrastructure keeps these components modular, consistent, and easy
to integrate across configurations. to integrate across configurations.

View File

@@ -8,11 +8,11 @@ Build the ROCm Core SDK from source
You can build the ROCm Core SDK from source using the open-source unified build You can build the ROCm Core SDK from source using the open-source unified build
system `TheRock <https://github.com/ROCm/TheRock>`__. To learn more about the system `TheRock <https://github.com/ROCm/TheRock>`__. To learn more about the
motivation and architecture behind this system, see `ROCm Technology Preview: motivation and architecture behind this system, see `ROCm 7.9 Technology
ROCm Core SDK and TheRock Build System Preview: ROCm Core SDK and TheRock Build System
<https://rocm.blogs.amd.com/software-tools-optimization/therock/README.html>`__. <https://rocm.blogs.amd.com/software-tools-optimization/therock/README.html>`__.
This page consists mainly of key references to `TheRock's README This page consists mostly of key references to `TheRock's README
<https://github.com/ROCm/TheRock?tab=readme-ov-file#building-from-source>`__ <https://github.com/ROCm/TheRock?tab=readme-ov-file#building-from-source>`__
and `supporting development manuals and `supporting development manuals
<https://github.com/ROCm/TheRock/blob/main/README.md#development-manuals>`__ <https://github.com/ROCm/TheRock/blob/main/README.md#development-manuals>`__
@@ -26,7 +26,7 @@ to learn about the overall build architecture.
Building from source is recommended only if you need custom builds or are Building from source is recommended only if you need custom builds or are
contributing to ROCm development. contributing to ROCm development.
For most users, installing from official AMD releases is faster and easier. For most users, installing from official AMD releases is faster and easier.
See :doc:`/install/rocm` for installation instructions. See :doc:`rocm` for installation instructions.
Prerequisites Prerequisites
============= =============

View File

@@ -0,0 +1,21 @@
1. Register your Enterprise Linux.
```bash
subscription-manager register --username <username> --password <password>
```
2. Update your Enterprise Linux.
```bash
sudo dnf update --releasever=10.0 --exclude=\*release\*
```
3. Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,27 @@
1. Register your Enterprise Linux.
```bash
subscription-manager register --username <username> --password <password>
```
2. Update your Enterprise Linux.
```bash
sudo dnf update --releasever=10.0 --exclude=\*release\*
```
3. Install Python 3.12 or 3.13.
```bash
sudo dnf install python3.12 python3.12-pip
```
4. Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,22 @@
1. Register your Enterprise Linux.
```bash
subscription-manager register --username <username> --password <password>
sudo subscription-manager attach --auto
```
2. Update your Enterprise Linux.
```bash
sudo dnf update --releasever=9.6 --exclude=\*release\*
```
3. Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,28 @@
1. Register your Enterprise Linux.
```bash
subscription-manager register --username <username> --password <password>
sudo subscription-manager attach --auto
```
2. Update your Enterprise Linux.
```bash
sudo dnf update --releasever=9.6 --exclude=\*release\*
```
3. Install Python 3.11, 3.12 or 3.13.
```bash
sudo dnf install python3.11 python3.11-pip
```
4. Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,15 @@
1. Install Python 3.11.
```bash
sudo apt install python3.11 python3.11-venv
```
2. Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,15 @@
1. Install Python 3.12 or 3.13.
```bash
sudo apt install python3.12 python3.12-venv
```
2. Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,9 @@
Configure permissions for GPU access.
```bash
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
```
```{note}
To apply all settings, reboot your system.
```

View File

@@ -0,0 +1,6 @@
1. Remove any existing HIP SDK installations and other
conflicting AMD graphics software.
2. Install the [Adrenalin Driver version
25.9.2](https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-25-9-2.html).
For instructions, see [Install AMD Software: Adrenalin Edition](https://www.amd.com/en/resources/support-articles/faqs/RSX2-INSTALL.html).

View File

@@ -0,0 +1,8 @@
1. Remove any existing HIP SDK installations and other
conflicting AMD graphics software.
2. Install the [Adrenalin Driver version
25.9.2](https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-25-9-2.html).
For instructions, see [Install AMD Software: Adrenalin Edition](https://www.amd.com/en/resources/support-articles/faqs/RSX2-INSTALL.html).
3. Install a supported Python version: 3.11, 3.12, or 3.13.

View File

@@ -0,0 +1,6 @@
For information about driver compatibility, see the {doc}`/compatibility/compatibility-matrix`.
For information about the AMD GPU driver installation, see the
[RHEL native
installation](https://instinct.docs.amd.com/projects/amdgpu-docs/en/latest/install/detailed-install/package-manager/package-manager-rhel.html)
in the AMD Instinct Data Center GPU Documentation.

View File

@@ -0,0 +1,6 @@
For information about driver compatibility, see the {doc}`/compatibility/compatibility-matrix`.
For information about the AMD GPU driver installation, see the
[Ubuntu native
installation](https://instinct.docs.amd.com/projects/amdgpu-docs/en/latest/install/detailed-install/package-manager/package-manager-ubuntu.html)
in the AMD Instinct Data Center GPU Documentation.

View File

@@ -0,0 +1,20 @@
1. Create the installation directory. For example:
```bash
mkdir therock-tarball && cd therock-tarball
```
```{note}
Subsequent commands assume you're working with the
`therock-tarball` directory.
If you choose a different directory name, adjust the
subsequent commands accordingly.
```
2. Download and unpack the tarball.
```bash
wget https://repo.amd.com/rocm/tarball/therock-dist-linux-gfx1151-7.9.0rc1.tar.gz
mkdir install
tar -xf *.tar.gz -C install
```

View File

@@ -0,0 +1,20 @@
1. Create the installation directory. For example:
```bash
mkdir therock-tarball && cd therock-tarball
```
```{note}
Subsequent commands assume you're working with the
`therock-tarball` directory.
If you choose a different directory name, adjust the
subsequent commands accordingly.
```
2. Download and unpack the tarball.
```bash
wget https://repo.amd.com/rocm/tarball/therock-dist-linux-gfx94X-dcgpu-7.9.0rc1.tar.gz
mkdir install
tar -xf *.tar.gz -C install
```

View File

@@ -0,0 +1,20 @@
1. Create the installation directory. For example:
```bash
mkdir therock-tarball && cd therock-tarball
```
```{note}
Subsequent commands assume you're working with the
`therock-tarball` directory.
If you choose a different directory name, adjust the
subsequent commands accordingly.
```
2. Download and unpack the tarball.
```bash
wget https://repo.amd.com/rocm/tarball/therock-dist-linux-gfx950-dcgpu-7.9.0rc1.tar.gz
mkdir install
tar -xf *.tar.gz -C install
```

View File

@@ -0,0 +1,12 @@
1. Set up your Python virtual environment.
```bash
python3.12 -m venv .venv
source .venv/bin/activate
```
2. Install ROCm wheels packages.
```bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx1151/ "rocm[libraries,devel]"
```

View File

@@ -0,0 +1,12 @@
1. Set up your Python virtual environment.
```bash
python3.11 -m venv .venv
source .venv/bin/activate
```
2. Install ROCm wheels packages.
```bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx94X-dcgpu/ "rocm[libraries,devel]"
```

View File

@@ -0,0 +1,12 @@
1. Set up your Python virtual environment.
```bash
python3.12 -m venv .venv
source .venv/bin/activate
```
2. Install ROCm wheels packages.
```bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx94X-dcgpu/ "rocm[libraries,devel]"
```

View File

@@ -0,0 +1,12 @@
1. Set up your Python virtual environment.
```bash
python3.11 -m venv .venv
source .venv/bin/activate
```
2. Install ROCm wheels packages.
```bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx950-dcgpu/ "rocm[libraries,devel]"
```

View File

@@ -0,0 +1,12 @@
1. Set up your Python virtual environment.
```bash
python3.12 -m venv .venv
source .venv/bin/activate
```
2. Install ROCm wheels packages.
```bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx950-dcgpu/ "rocm[libraries,devel]"
```

View File

@@ -0,0 +1,47 @@
```{important}
- Do not copy/replace the ROCm-SDK compiler and runtime DLLs to
`System32` as this can cause conflicts.
- Disable the following Windows security features as they
can interfere with ROCm functionality:
- Turn off WDAG (Windows Defender Application Guard)
- Control Panel > Programs > Programs and Features > Turn Windows features on or off > **Deselect** "Microsoft Defender Application Guard"
- Turn off SAC (Smart App Control)
- Settings > Privacy & security > Windows Security > App & browser control > Smart App Control settings > **Off**
```
1. Create the installation directory in `C:\TheRock\build`.
```{note}
Subsequent commands assume you're working with the
`C:\TheRock\build` directory.
```
2. Download the tarball and extract the contents to
`C:\TheRock\build`.
- Download link: [https://repo.amd.com/rocm/tarball/therock-dist-windows-gfx1151-7.9.0rc1.tar.gz](https://repo.amd.com/rocm/tarball/therock-dist-windows-gfx1151-7.9.0rc1.tar.gz)
3. Set the following environment variables using the command
prompt as an administrator:
```bat
setx HIP_DEVICE_LIB_PATH “C:\TheRock\build\lib\llvm\amdgcn\bitcode” /M
setx HIP_PATH “C:\TheRock\build” /M
setx HIP_PLATFORM “amd” /M
setx LLVM_PATH “C:\TheRock\build\lib\llvm” /M
```
4. Add the following paths into PATH environment variable using your system settings GUI.
- `C:\TheRock\build\bin`
- `C:\TheRock\build\lib\llvm\bin`
5. Open a new command prompt window for the environment variables to take effect. Run `set`
to see the list of active variables.
```bat
set
````

View File

@@ -0,0 +1,12 @@
1. Set up your Python virtual environment.
```bash
python3.12 -m venv .venv
.venv\Scripts\activate
```
2. Install ROCm wheels packages.
```bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx1151/ "rocm[libraries,devel]"
```

View File

@@ -0,0 +1,53 @@
1. Configure ROCm PATH. Make sure you're in the `therock-tarball` directory before proceeding.
```bash
export ROCM_PATH=$PWD/install
export PATH=$PATH:$ROCM_PATH/bin
```
2. Configure `LD_LIBRARY_PATH`.
```bash
export LD_LIBRARY_PATH=$ROCM_PATH/lib
```
3. Verify the ROCm installation.
```bash
rocminfo
amd-smi
```
```{eval-rst}
.. dropdown:: Example output of ``rocminfo``
.. code-block:: shell-session
ROCk module is loaded
=====================
HSA System Attributes
=====================
Runtime Version: 1.18
Runtime Ext Version: 1.14
System Timestamp Freq.: 1000.000000MHz
Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model: LARGE
System Endianness: LITTLE
Mwaitx: DISABLED
XNACK enabled: NO
DMAbuf Support: YES
VMM Support: YES
==========
HSA Agents
==========
*******
Agent 1
*******
Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Uuid: CPU-XX
Marketing Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Vendor Name: CPU
[output truncated]
```

View File

@@ -0,0 +1,71 @@
1. Verify the ROCm installation.
```bash
rocminfo
amd-smi
```
```{eval-rst}
.. dropdown:: Example output of ``rocminfo``
.. code-block:: shell-session
ROCk module is loaded
=====================
HSA System Attributes
=====================
Runtime Version: 1.18
Runtime Ext Version: 1.14
System Timestamp Freq.: 1000.000000MHz
Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model: LARGE
System Endianness: LITTLE
Mwaitx: DISABLED
XNACK enabled: NO
DMAbuf Support: YES
VMM Support: YES
==========
HSA Agents
==========
*******
Agent 1
*******
Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Uuid: CPU-XX
Marketing Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Vendor Name: CPU
[output truncated]
```
2. Inspect your ROCm installation in your Python environment.
```bash
pip freeze | grep rocm
which rocm-sdk
ls .venv/bin
```
3. Test your ROCm installation.
```bash
rocm-sdk targets
rocm-sdk path --cmake
rocm-sdk path --bin
rocm-sdk path --root
rocm-sdk test
```
To learn more about the `rocm-sdk` tool and to see example expected outputs,
see [Using ROCm Python packages
(TheRock)](https://github.com/ROCm/TheRock/blob/main/RELEASES.md#using-rocm-python-packages).
````{tip}
If you need to deactivate your Python virtual environment when finished,
run:
```shell
deactivate
```
````

View File

@@ -0,0 +1,71 @@
1. Verify the ROCm installation.
```bash
rocminfo
amd-smi
```
```{eval-rst}
.. dropdown:: Example output of ``rocminfo``
.. code-block:: shell-session
ROCk module is loaded
=====================
HSA System Attributes
=====================
Runtime Version: 1.18
Runtime Ext Version: 1.14
System Timestamp Freq.: 1000.000000MHz
Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model: LARGE
System Endianness: LITTLE
Mwaitx: DISABLED
XNACK enabled: NO
DMAbuf Support: YES
VMM Support: YES
==========
HSA Agents
==========
*******
Agent 1
*******
Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Uuid: CPU-XX
Marketing Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Vendor Name: CPU
[output truncated]
```
2. Inspect your ROCm installation in your Python environment.
```bash
pip freeze | grep rocm
which rocm-sdk
ls .venv/bin
```
3. Test your ROCm installation.
```bash
rocm-sdk targets
rocm-sdk path --cmake
rocm-sdk path --bin
rocm-sdk path --root
rocm-sdk test
```
To learn more about the `rocm-sdk` tool and to see example expected outputs,
see [Using ROCm Python packages
(TheRock)](https://github.com/ROCm/TheRock/blob/main/RELEASES.md#using-rocm-python-packages).
````{tip}
If you need to deactivate your Python virtual environment when finished,
run:
```shell
deactivate
```
````

View File

@@ -0,0 +1,21 @@
Verify the ROCm installation.
```shell
hipinfo
```
```{eval-rst}
.. dropdown:: Example output of ``hipinfo``
.. code-block:: shell-session
--------------------------------------------------------------------------------
device# 0
Name: AMD Radeon(TM) 8060S Graphics
pciBusID: 197
pciDeviceID: 0
pciDomainID: 0
multiProcessorCount: 20
[output truncated]
```

View File

@@ -0,0 +1,48 @@
1. Verify the ROCm installation.
```bash
hipinfo
```
```{eval-rst}
.. dropdown:: Example output of ``hipinfo``
.. code-block:: shell-session
--------------------------------------------------------------------------------
device# 0
Name: AMD Radeon(TM) 8060S Graphics
pciBusID: 197
pciDeviceID: 0
pciDomainID: 0
multiProcessorCount: 20
[output truncated]
```
2. Inspect your ROCm installation in your Python environment.
```bash
pip freeze
where rocm-sdk
dir .venv\Scripts
```
3. Test your ROCm installation.
```bash
rocm-sdk test
```
To learn more about the `rocm-sdk` tool and to see example expected outputs,
see [Using ROCm Python packages
(TheRock)](https://github.com/ROCm/TheRock/blob/main/RELEASES.md#using-rocm-python-packages).
````{tip}
If you need to deactivate your Python virtual environment when finished,
run:
```shell
deactivate
```
````

View File

@@ -0,0 +1,5 @@
To uninstall ROCm, remove your installation directory.
```bash
sudo rm -rf therock-tarball
```

View File

@@ -0,0 +1,11 @@
1. Clear the pip cache.
```bash
sudo rm -rf ~/.cache/pip
```
2. Remove your local Python virtual environment.
```bash
sudo rm -rf .venv
```

View File

@@ -0,0 +1,11 @@
1. Clear the pip cache.
```bash
pip cache purge
```
2. Remove your local Python virtual environment.
```bash
rmdir /s /q .venv
```

View File

@@ -0,0 +1,18 @@
1. Delete the `C:\TheRock\build` and its contents.
2. Delete the environment variables. For example, using PowerShell as an administrator:
```powershell
[Environment]::SetEnvironmentVariable("HIP_PATH", $null, "Machine")
[Environment]::SetEnvironmentVariable("HIP_DEVICE_LIB_PATH", $null, "Machine")
[Environment]::SetEnvironmentVariable("HIP_PLATFORM", $null, "Machine")
[Environment]::SetEnvironmentVariable("LLVM_PATH", $null, "Machine")
```
3. Remove the following paths from your PATH environment variable using your system settings GUI.
- `C:\TheRock\build\bin`
- `C:\TheRock\build\lib\llvm\bin`
4. If you want to uninstall the Adrenalin driver, see [Uninstall AMD Software](https://www.amd.com/en/resources/support-articles/faqs/RSX2-UNINSTALL.html).

View File

@@ -0,0 +1,8 @@
Docker images often only include a minimal set of installations, meaning some
essential packages might be missing. When installing ROCm within a Docker
container, you might need to install additional packages for a successful
installation. Use the following commands to install the prerequisite packages.
```bash
dnf install sudo libatomic
```

View File

@@ -0,0 +1,9 @@
Docker images often only include a minimal set of installations, meaning some
essential packages might be missing. When installing ROCm within a Docker
container, you might need to install additional packages for a successful
installation. Use the following commands to install the prerequisite packages.
```bash
apt update
apt install sudo wget
```

File diff suppressed because it is too large Load Diff

View File

@@ -1,317 +0,0 @@
Post-installation
=================
.. dropdown:: Installation environment
:animate: fade-in-slide-down
:icon: desktop-download
:chevron: down-up
.. include:: ./includes/selector.rst
After installing the ROCm Core SDK |ROCM_VERSION|, complete these
post-installation steps to complete your system configuration and validate the
installation.
.. selected:: i=tar
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
:heading: Configure your environment
:heading-level: 3
Configure environment variables so that ROCm libraries and tools are
available either to all users on the system or only to your user account.
.. _rocm-post-install-system-wide:
.. tab-set::
.. tab-item:: System-wide setup
Create a profile script so that all users inherit the ROCm
environment variables when they start a shell session. Make sure
you're in the ``therock-tarball`` directory before proceeding.
.. code-block:: bash
# Configure ROCm PATH. Make sure you're in the therock-tarball directory before proceeding.
ROCM_INSTALL_PATH=$(pwd)/install
sudo tee /etc/profile.d/set-rocm-env.sh << EOF
export ROCM_PATH=$ROCM_INSTALL_PATH
export PATH=\$PATH:\$ROCM_PATH/bin
export LD_LIBRARY_PATH=\$ROCM_PATH/lib
EOF
sudo chmod +x /etc/profile.d/set-rocm-env.sh
source /etc/profile.d/set-rocm-env.sh
.. tab-item:: User setup
Configure the ROCm environment for your user by updating your shell
configuration file.
1. Add the following to your shell configuration file
(``~/.bashrc``, ``~/.profile``). Make sure you're in the
``therock-tarball`` directory before proceeding.
.. code-block:: bash
# Configure ROCm PATH. Make sure you're in the therock-tarball directory before proceeding.
export ROCM_PATH=$PWD/install
export PATH=$PATH:$ROCM_PATH/bin
export LD_LIBRARY_PATH=$ROCM_PATH/lib
2. After modifying your shell configuration, apply the change to
your current session by sourcing your updated shell
configuration file.
.. tab-set::
.. tab-item:: .bashrc
.. code-block:: bash
source ~/.bashrc
.. tab-item:: .profile
.. code-block:: bash
source ~/.profile
.. selected:: os=windows
:heading: Configure your environment
:heading-level: 3
Configure environment variables so that ROCm libraries and tools are
available on your Windows system.
1. **Run command prompt as an administrator** and set the following environment variables.
.. code-block:: cmd
setx HIP_DEVICE_LIB_PATH “C:\TheRock\build\lib\llvm\amdgcn\bitcode” /M
setx HIP_PATH “C:\TheRock\build” /M
setx HIP_PLATFORM “amd” /M
setx LLVM_PATH “C:\TheRock\build\lib\llvm” /M
2. Add the following paths into the PATH environment variable.
.. code-block:: cmd
setx PATH "%PATH%;C:\TheRock\build\bin" /M
setx PATH "%PATH%;C:\TheRock\build\lib\llvm\bin" /M
3. Open a new command prompt window for the environment variables to take effect. Run ``set``
to see the list of active variables.
.. code-block:: bat
set
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
:heading: Verify your installation
:heading-level: 3
Use the following ROCm tools to verify that the ROCm Core SDK is correctly
installed and that your AMD devices are visible to the system.
1. Use ``rocminfo`` to list detected AMD GPUs and confirm that the ROCm
runtimes and drivers are correctly installed and loaded.
.. code-block:: bash
rocminfo
.. dropdown:: Example output of ``rocminfo``
:animate: fade-in-slide-down
:color: success
:icon: note
:chevron: down-up
.. code-block:: shell-session
ROCk module version 6.18.4 is loaded
=====================
HSA System Attributes
=====================
Runtime Version: 1.18
Runtime Ext Version: 1.14
System Timestamp Freq.: 1000.000000MHz
Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model: LARGE
System Endianness: LITTLE
Mwaitx: DISABLED
XNACK enabled: NO
DMAbuf Support: YES
VMM Support: YES
==========
HSA Agents
==========
*******
Agent 1
*******
Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Uuid: CPU-XX
Marketing Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Vendor Name: CPU
... [output truncated]
2. Use the AMD SMI CLI ``amd-smi`` to validate system information.
.. code-block:: bash
amd-smi version
.. dropdown:: Example output of ``amd-smi version``
:animate: fade-in-slide-down
:color: success
:icon: note
:chevron: down-up
.. code-block:: shell-session
AMDSMI Tool: 26.2.1+7b886380f9 | AMDSMI Library version: 26.2.1 | ROCm version: 7.11.0 | amdgpu version: 6.18.4 | hsmp version: N/A
.. selected:: i=pip
3. Inspect your installation in your Python environment and confirm that
ROCm packages, including the ``rocm-sdk`` CLI, are available.
.. code-block:: bash
pip freeze | grep rocm
which rocm-sdk
ls .venv/bin
.. selected:: os=windows
:heading: Verify your installation
:heading-level: 3
Use the following ROCm tools to verify that the ROCm Core SDK is correctly
installed and that your AMD devices are visible to the system.
.. selected:: i=pip
1. Use ``hipinfo`` to list detected AMD GPUs and confirm that the ROCm
runtimes and drivers are correctly installed and loaded.
.. code-block:: bash
hipinfo
.. dropdown:: Example output of ``hipinfo``
:animate: fade-in-slide-down
:color: success
:icon: note
:chevron: down-up
.. code-block:: shell-session
--------------------------------------------------------------------------------
device# 0
Name: AMD Radeon(TM) 8060S Graphics
pciBusID: 197
pciDeviceID: 0
pciDomainID: 0
multiProcessorCount: 20
... [output truncated]
2. Inspect your installation in your Python environment and confirm that
ROCm packages, including the ``rocm-sdk`` CLI, are available.
.. code-block:: bash
pip freeze
where rocm-sdk
dir .venv\Scripts
.. selected:: i=tar
Use ``hipinfo`` to list detected AMD GPUs and confirm that the ROCm
runtimes and drivers are correctly installed and loaded.
.. code-block:: bash
hipinfo
.. dropdown:: Example output of ``hipinfo``
:animate: fade-in-slide-down
:color: success
:icon: note
:chevron: down-up
.. code-block:: shell-session
--------------------------------------------------------------------------------
device# 0
Name: AMD Radeon(TM) 8060S Graphics
pciBusID: 197
pciDeviceID: 0
pciDomainID: 0
multiProcessorCount: 20
... [output truncated]
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
.. selected:: i=pip
:heading: Test your installation
:heading-level: 3
Run the following commands from your Python virtual environment to confirm
that the ROCm SDK is correctly configured and that basic checks complete
successfully.
.. code-block:: bash
rocm-sdk targets
rocm-sdk path --cmake
rocm-sdk path --bin
rocm-sdk path --root
rocm-sdk test
To learn more about the ``rocm-sdk`` tool and to see example expected
outputs, see `Using ROCm Python packages (TheRock)
<https://github.com/ROCm/TheRock/blob/main/RELEASES.md#using-rocm-python-packages>`__.
.. selected:: i=tar
:heading: Test your installation
:heading-level: 3
Run the ``test_hip_api`` tool to verify that the HIP runtime can access
your GPU and execute a simple workload.
.. code-block:: bash
test_hip_api
.. selected:: os=windows
.. selected:: i=pip
:heading: Test your installation
:heading-level: 3
Run the following commands from your Python virtual environment to confirm
that the ROCm SDK is correctly configured and that basic checks complete
successfully.
.. code-block:: bash
rocm-sdk test
To learn more about the ``rocm-sdk`` tool and to see example expected
outputs, see `Using ROCm Python packages (TheRock)
<https://github.com/ROCm/TheRock/blob/main/RELEASES.md#using-rocm-python-packages>`__.
.. selected:: i=pip
.. tip::
If you need to deactivate your Python virtual environment when finished, run:
.. code-block:: bash
deactivate

View File

@@ -1,486 +0,0 @@
Prerequisites
=============
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
Before installing the ROCm Core SDK |ROCM_VERSION|, ensure your system meets
all prerequisites. This includes installing the required dependencies and
configuring permissions for GPU access. To confirm that your system is
supported, see the :doc:`Compatibility matrix
</compatibility/compatibility-matrix>`.
.. selected:: os=windows
Before installing the ROCm Core SDK |ROCM_VERSION|, ensure your system meets
all prerequisites. To confirm that your system is supported, see the
:doc:`Compatibility matrix </compatibility/compatibility-matrix>`.
.. ====================================================== DOCKER REQUIREMENTS ==
.. selected:: i=pip i=tar i=pkgman
.. selected:: os=ubuntu os=debian os=rhel os=rocky-linux os=oracle-linux os=sles
.. dropdown:: Install essential packages for Docker containers
:animate: fade-in-slide-down
:color: info
:icon: tools
:chevron: down-up
Docker images often include only a minimal set of installations, so some
essential packages might be missing. When installing ROCm within a Docker
container, you might need to install additional packages for a successful
installation.
If applicable, run the following command to install essential packages:
.. selected:: os=ubuntu os=debian
.. selected:: i=pkgman
.. code-block:: bash
apt update
apt install sudo wget
.. selected:: i=pip
.. code-block:: bash
apt update
apt install sudo cmake libgfortran5
.. selected:: i=tar
.. code-block:: bash
apt update
apt install sudo wget python3
.. selected:: os=rhel os=rocky-linux os=oracle-linux
.. code-block:: bash
dnf install sudo wget
.. selected:: os=sles
.. selected:: i=pkgman
.. code-block:: bash
zypper install sudo wget SUSEConnect
.. selected:: i=pip
.. code-block:: bash
zypper install sudo wget cmake libgfortran5
.. selected:: i=tar
.. code-block:: bash
zypper install sudo wget
.. selected:: os=windows
1. Remove any existing HIP SDK for Windows installations and other
conflicting AMD graphics software. To uninstall the HIP SDK using the
GUI, navigate to the following screen:
* Control Panel > Programs > Uninstall a program
2. Install AMD Software: Adrenalin Edition for Windows. For details and the
download link, see `AMD Software: Adrenalin Edition 26.1.1
<https://www.amd.com/en/resources/support-articles/release-notes/RN-RAD-WIN-26-1-1.html#Downloads>`__.
3. Disable the following Windows security features as they can interfere
with ROCm functionality:
* Turn off WDAG (Windows Defender Application Guard)
* Control Panel > Programs > Programs and Features > Turn Windows
features on or off > **Clear** “Microsoft Defender Application
Guard”
* Turn off SAC (Smart App Control)
* Settings > Privacy & security > Windows Security > App & browser
control > Smart App Control settings > **Off**
.. =============================================================== OEM KERNEL ==
.. selected:: fam=ryzen
.. selected:: os=ubuntu
:heading: Install the OEM kernel
:heading-level: 3
Ryzen APUs require the OEM kernel 6.14 for Ubuntu 24.04. Use the
following command to install it using ``apt``.
.. code-block:: bash
sudo apt update && sudo apt install linux-image-6.14.0-1018-oem
.. note::
Reboot your system after installing the OEM kernel.
.. ================================================ REGISTER ENTERPRISE LINUX ==
.. selected:: os=rhel
:heading: Register your Red Hat Enterprise Linux system
:heading-level: 3
Register your Red Hat Enterprise Linux (RHEL) system to enable access to Red
Hat repositories and ensure youre able to download and install packages.
Run the following command to register your system:
.. selected:: os-version=10.1 os-version=10.0
.. code-block:: bash
subscription-manager register --username <username> --password <password>
.. selected:: os-version=9.7 os-version=9.6 os-version=9.4 os-version=8.10
.. code-block:: bash
subscription-manager register --username <username> --password <password>
subscription-manager attach --auto
.. selected:: os=sles
:heading: Register your SUSE Linux Enterprise Server system
:heading-level: 3
Register your SUSE Linux Enterprise Server (SLES) system to enable access to
SUSE repositories and ensure youre able to download and install packages.
Run the following command to register your system:
.. code-block:: bash
sudo SUSEConnect -r <REGCODE>
.. ========================================== ADDITIONAL PACKAGE REPOSITORIES ==
.. selected:: os=rhel
:heading: Update your system
:heading-level: 3
After registering your system, update RHEL to the latest packages. This is
particularly important for newer hardware on older versions of RHEL.
Run the following command to update your system:
.. selected:: os-version=10.1
.. code-block:: bash
sudo dnf update --releasever=10.1 --exclude=\*release\*
.. selected:: os-version=10.0
.. code-block:: bash
sudo dnf update --releasever=10.0 --exclude=\*release\*
.. selected:: os-version=9.7
.. code-block:: bash
sudo dnf update --releasever=9.7 --exclude=\*release\*
.. selected:: os-version=9.6
.. code-block:: bash
sudo dnf update --releasever=9.6 --exclude=\*release\*
.. selected:: os-version=9.4
.. code-block:: bash
sudo dnf update --releasever=9.4 --exclude=\*release\*
.. selected:: os-version=8.10
.. code-block:: bash
sudo dnf update --releasever=8.10 --exclude=\*release\*
.. selected:: os=sles
:heading: Update your system
:heading-level: 3
After registering your system, update SLES to the latest available packages.
This is particularly important for newer hardware on older versions of SLES.
Run the following command to update your system:
.. code-block:: bash
sudo zypper update
.. selected:: i=pkgman
.. selected:: os=oracle-linux
:heading: Update your system
:heading-level: 3
Update Oracle Linux to the latest available packages.
Run the following command to update your system:
.. code-block:: bash
sudo dnf update
.. selected:: os=rhel
:heading: Add additional package repositories
:heading-level: 3
ROCm installation packages depend on packages that arent included in
the default package repositories. Use the following command to add the
necessary repositories.
.. selected:: os-version=10.1 os-version=10.0
.. code-block:: bash
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
sudo rpm -ivh epel-release-latest-10.noarch.rpm
.. code-block:: bash
sudo dnf config-manager --enable codeready-builder-for-rhel-10-x86_64-rpms
.. selected:: os-version=9.7 os-version=9.6 os-version=9.4
.. code-block:: bash
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo rpm -ivh epel-release-latest-9.noarch.rpm
.. code-block:: bash
sudo dnf config-manager --enable codeready-builder-for-rhel-9-x86_64-rpms
.. selected:: os-version=8.10
.. code-block:: bash
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo rpm -ivh epel-release-latest-8.noarch.rpm
.. code-block:: bash
sudo dnf config-manager --enable codeready-builder-for-rhel-8-x86_64-rpms
.. selected:: os=oracle-linux os=rocky-linux
:heading: Add additional package repositories
:heading-level: 3
ROCm installation packages depend on packages that arent included in
the default package repositories. Use the following command to add the
necessary repositories.
.. selected:: os-version=10.1 os-version=10.0
.. code-block:: bash
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
sudo rpm -ivh epel-release-latest-10.noarch.rpm
.. selected:: os-version=9.7 os-version=9.6 os-version=9.4
.. code-block:: bash
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo rpm -ivh epel-release-latest-9.noarch.rpm
.. selected:: os-version=8.10
.. code-block:: bash
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo rpm -ivh epel-release-latest-8.noarch.rpm
.. code-block:: bash
sudo crb enable
.. ============================================== INSTALL ADDITIONAL PACKAGES ==
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
.. selected:: i=pkgman i=pip i=tar
:heading: Install additional packages
:heading-level: 3
Some ROCm tools require the ``libatomic`` library to run correctly. Install
it using your distribution's package manager.
.. selected:: os=ubuntu os=debian
.. code-block:: bash
sudo apt install libatomic1
.. selected:: os=rhel os=oracle-linux os=rocky-linux
.. code-block:: bash
sudo dnf install libatomic
.. selected:: os=sles
.. code-block:: bash
sudo zypper install libatomic1
.. =========================================================== INSTALL PYTHON ==
.. selected:: i=pip
.. selected:: os=ubuntu
.. selected:: os-version=24.04
:heading: Install Python
:heading-level: 3
Install a supported Python version. For example, to install Python
3.12, run the following command:
.. code-block:: bash
sudo apt install python3.12 python3.12-venv
.. selected:: os-version=22.04
:heading: Install Python
:heading-level: 3
Install a supported Python version. For example, to install Python
3.11, run the following command:
.. code-block:: bash
sudo apt install python3.11 python3.11-venv
.. selected:: os=debian
.. selected:: os-version=13
:heading: Install Python
:heading-level: 3
Install a supported Python version. For example, to install Python
3.13, run the following command:
.. code-block:: bash
sudo apt install python3.13 python3.13-venv
.. selected:: os=rhel os=oracle-linux os=rocky-linux
.. selected:: os-version=10.1 os-version=10.0
:heading: Install Python
:heading-level: 3
Install a supported Python version. For example, to install Python
3.12, run the following command:
.. code-block:: bash
sudo dnf install python3.12 python3.12-pip
.. selected:: os-version=9.7 os-version=9.6 os-version=8
:heading: Install Python
:heading-level: 3
Install a supported Python version. For example, to install Python
3.11, run the following command:
.. code-block:: bash
sudo dnf install python3.11 python3.11-pip
.. selected:: os=sles
:heading: Install Python
:heading-level: 3
.. selected:: os-version=16.0
Install a supported Python version. For example, to install Python 3.13,
run the following command:
.. code-block:: bash
sudo zypper install -y python313 python313-pip
.. selected:: os-version=15.7
Install a supported Python version. For example, to install Python 3.11,
run the following command:
.. code-block:: bash
sudo zypper install -y python311 python311-pip
.. selected:: os=windows
:heading: Install Python
:heading-level: 3
Install a supported Python version: 3.11, 3.12, or 3.13. See `Python
Releases for Windows <https://www.python.org/downloads/windows/>`__ for
installation details.
.. =================================================== GPU ACCESS PERMISSIONS ==
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
:heading: Configure permissions for GPU access
:heading-level: 3
There are two primary methods of configuring GPU access for ROCm: group
membership or udev rules. Each method has its own advantages. The choice
depends on your specific requirements and system management preferences.
.. tab-set::
.. tab-item:: Group membership
By default, GPU access is controlled by membership in the ``video`` and
``render`` Linux system groups. The ``video`` group traditionally handles
video device access, while the ``render`` group manages GPU rendering
through DRM render nodes.
.. code-block:: bash
# Add the current user to the render and video groups
sudo usermod -a -G render,video $LOGNAME
.. tab-item:: udev rules
udev rules are a flexible, system-wide approach for managing device
permissions, eliminating the need for user group management while
allowing granular GPU access. To enable them and grant GPU access to
all users, run the following command:
.. code-block:: bash
sudo tee /etc/udev/rules.d/70-amdgpu.rules << EOF
KERNEL=="kfd", GROUP="render", MODE="0666"
SUBSYSTEM=="drm", KERNEL=="renderD*", GROUP="render", MODE="0666"
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger
.. note::
To apply all settings, reboot your system.

View File

@@ -1,231 +0,0 @@
.. include:: /compatibility/includes/selector.rst
.. =========================================================== UBUNTU VERSION ==
.. selected:: os=ubuntu
.. selector:: Ubuntu version
:key: os-version
.. selector-option:: 24.04.3
:show-when: fam=instinct fam=radeon-pro fam=radeon
:value: 24.04
:width: 6
.. selector-option:: 22.04.5
:show-when: fam=instinct fam=radeon-pro fam=radeon
:value: 22.04
:width: 6
.. selector-option:: 24.04.3
:show-when: fam=ryzen
:value: 24.04
:width: 12
.. =========================================================== DEBIAN VERSION ==
.. selected:: os=debian
.. selector:: Debian version
:show-when: gpu=mi355x gpu=mi325x gpu=mi350x gpu=mi300x
:key: os-version
.. selector-option:: 13
:width: 12
.. ============================================================= RHEL VERSION ==
.. selected:: os=rhel
.. selector:: RHEL version
:key: os-version
:show-when: fam=instinct fam=radeon-pro fam=radeon
.. selector-option:: 10.1
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
:width: 2
.. selector-option:: 10.0
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
:width: 2
.. selector-option:: 9.7
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
:width: 2
.. selector-option:: 9.6
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
:width: 2
.. selector-option:: 9.4
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
:width: 2
.. selector-option:: 8.10
:show-when: gpu=mi355x gpu=mi350x gpu=mi300x gpu=mi300a gpu=mi250x gpu=mi250 gpu=mi210
:width: 2
.. selector-option:: 10.1
:show-when: gpu=mi325x
:width: 20%
.. selector-option:: 10.0
:show-when: gpu=mi325x
:width: 20%
.. selector-option:: 9.7
:show-when: gpu=mi325x
:width: 20%
.. selector-option:: 9.6
:show-when: gpu=mi325x
:width: 20%
.. selector-option:: 9.4
:show-when: gpu=mi325x
:width: 20%
.. selector-option:: 10.1
:show-when: fam=radeon-pro fam=radeon
:width: 6
.. selector-option:: 9.7
:show-when: fam=radeon-pro fam=radeon
:width: 6
.. ===================================================== ORACLE LINUX VERSION ==
.. selected:: os=oracle-linux
.. selector:: Oracle Linux version
:show-when: gpu=mi355x gpu=mi350x gpu=mi325x gpu=mi300x
:key: os-version
.. selector-option:: 10
:show-when: gpu=mi355x gpu=mi350x gpu=mi325x
:width: 6
:value: 10.1
.. selector-option:: 9
:show-when: gpu=mi355x gpu=mi350x gpu=mi325x
:width: 6
:value: 9.6
.. selector-option:: 10
:show-when: gpu=mi300x
:width: 4
:value: 10.1
.. selector-option:: 9
:show-when: gpu=mi300x
:width: 4
:value: 9.6
.. selector-option:: 8
:show-when: gpu=mi300x
:width: 4
:value: 8.10
.. ====================================================== ROCKY LINUX VERSION ==
.. selected:: os=rocky-linux
.. selector:: Rocky Linux version
:show-when: gpu=mi300x gpu=mi300a
:key: os-version
.. selector-option:: 9
:width: 12
:value: 9.7
.. ============================================================= SLES VERSION ==
.. selected:: os=sles
.. selector:: SLES version
:show-when: fam=instinct
:key: os-version
.. selector-option:: 16.0
:width: 6
.. selector-option:: 15.7
:width: 6
.. ========================================================== WINDOWS VERSION ==
.. selected:: os=windows
.. selector:: Windows version
:key: os-version
.. selector-option:: 11 25H2
:width: 12
.. ====================================================== INSTALLATION METHOD ==
.. selector:: Installation method
:show-when: os=ubuntu os=debian
:key: i
.. selector-option:: apt
:value: pkgman
:width: 4
.. selector-option:: pip
:value: pip
:width: 4
.. selector-option:: Tarball
:value: tar
:width: 4
.. selector:: Installation method
:show-when: os=rhel os=oracle-linux os=rocky-linux
:key: i
.. selector-option:: dnf
:value: pkgman
:width: 4
.. selector-option:: pip
:value: pip
:width: 4
.. selector-option:: Tarball
:value: tar
:width: 4
.. selector:: Installation method
:show-when: os=sles
:key: i
.. selector-option:: zypper
:value: pkgman
:width: 4
.. selector-option:: pip
:value: pip
:width: 4
.. selector-option:: Tarball
:value: tar
:width: 4
.. selector:: Installation method
:show-when: os=windows
:key: i
.. selector-option:: pip
:value: pip
.. selector-option:: Tarball
:value: tar

View File

@@ -1,249 +0,0 @@
Uninstalling
============
.. dropdown:: Installation environment
:animate: fade-in-slide-down
:icon: desktop-download
:chevron: down-up
.. include:: ./includes/selector.rst
.. ========================================================== PACKAGE MANAGER ==
.. selected:: i=pkgman
:heading: Uninstall ROCm packages
:heading-level: 3
1. Use your package manager to remove :ref:`ROCm meta packages <rocm-install-meta-packages>` installed on your system.
.. selected:: os=ubuntu os=debian
.. selected:: gpu=mi355x gpu=mi350x
.. code-block:: bash
sudo apt autoremove amdrocm7.11-gfx950
.. selected:: gpu=mi325x gpu=mi300x gpu=mi300a
.. code-block:: bash
sudo apt autoremove amdrocm7.11-gfx94x
.. selected:: gpu=mi250x gpu=mi250 gpu=mi210
.. code-block:: bash
sudo apt autoremove amdrocm7.11-gfx90x
.. selected:: gpu=ai-r9700 gpu=ai-r9600d gpu=rx-9070-xt gpu=rx-9070-gre gpu=rx-9070 gpu=rx-9060-xt-lp gpu=rx-9060-xt gpu=rx-9060
.. code-block:: bash
sudo apt autoremove amdrocm7.11-gfx120x
.. selected:: gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700 gpu=v710 gpu=v620
.. code-block:: bash
sudo apt autoremove amdrocm7.11-gfx110x
.. selected:: gpu=w6800 gpu=v620
.. code-block:: bash
sudo apt autoremove amdrocm7.11-gfx103x
.. selected:: gpu=max-pro-395 gpu=max-pro-390 gpu=max-pro-385 gpu=max-pro-380 gpu=max-395 gpu=max-390 gpu=max-385
.. code-block:: bash
sudo apt install amdrocm7.11-gfx1151
.. selected:: gpu=9-hx-375 gpu=9-hx-370 gpu=9-365
.. code-block:: bash
sudo apt install amdrocm7.11-gfx1150
.. selected:: os=rhel os=oracle-linux os=rocky-linux
.. selected:: gpu=mi355x gpu=mi350x
.. code-block:: bash
sudo dnf remove amdrocm7.11-gfx950
.. selected:: gpu=mi325x gpu=mi300x gpu=mi300a
.. code-block:: bash
sudo dnf remove amdrocm7.11-gfx94x
.. selected:: gpu=mi250x gpu=mi250 gpu=mi210
.. code-block:: bash
sudo dnf remove amdrocm7.11-gfx90x
.. selected:: gpu=ai-r9700 gpu=ai-r9600d gpu=rx-9070-xt gpu=rx-9070-gre gpu=rx-9070 gpu=rx-9060-xt-lp gpu=rx-9060-xt gpu=rx-9060
.. code-block:: bash
sudo dnf remove amdrocm7.11-gfx120x
.. selected:: gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700 gpu=v710 gpu=v620
.. code-block:: bash
sudo dnf remove amdrocm7.11-gfx110x
.. selected:: gpu=w6800 gpu=v620
.. code-block:: bash
sudo dnf remove amdrocm7.11-gfx103x
.. selected:: os=sles
.. code-block:: bash
sudo zypper remove amdrocm*
2. Remove ROCm repositories.
.. selected:: os=ubuntu os=debian
.. code-block:: bash
# Remove ROCm repositories
sudo rm /etc/apt/sources.list.d/rocm.list
# Clear the cache and clean the system
sudo rm -rf /var/cache/apt/*
sudo apt clean all
sudo apt update
.. selected:: os=rhel os=oracle-linux os=rocky-linux
.. code-block:: bash
# Remove ROCm repositories
sudo rm /etc/yum.repos.d/rocm.repo*
# Clear the cache and clean the system
sudo rm -rf /var/cache/dnf
sudo dnf clean all
.. selected:: os=sles
.. code-block:: bash
# Remove ROCm repositories
sudo zypper removerepo "rocm"
# Clear the cache and clean the system
sudo zypper clean --all
sudo zypper refresh
.. ====================================================================== PIP ==
.. selected:: i=pip
:heading: Remove your Python virtual environment
:heading-level: 3
1. Clear the pip cache.
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
.. code-block:: bash
sudo rm -rf ~/.cache/pip
.. selected:: os=windows
.. code-block:: bat
pip cache purge
2. Remove your local Python virtual environment.
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
.. code-block:: bash
sudo rm -rf .venv
.. selected:: os=windows
.. code-block:: bat
rmdir /s /q .venv
.. ================================================================== TARBALL ==
.. selected:: i=tar
:heading: Remove your installation directory
:heading-level: 3
.. selected:: os=ubuntu os=debian os=rhel os=oracle-linux os=rocky-linux os=sles
1. To uninstall ROCm, remove your installation directory.
.. important::
The following command assumes youre working with the
``therock-tarball`` directory. If you chose a different directory
name when :ref:`installing ROCm <rocm-install>`, adjust the command
accordingly.
.. code-block:: bash
sudo rm -rf therock-tarball
2. If you opted for a :ref:`system-wide setup
<rocm-post-install-system-wide>` during the installation process,
remove the ROCm environment variables.
.. code-block:: bash
sudo rm -f /etc/profile.d/set-rocm-env.sh
.. selected:: os=windows
1. To uninstall ROCm, remove your installation directory.
.. code-block:: cmd
rmdir /s /q C:\TheRock
.. important::
This step assumes youre working with the ``C:\TheRock\build``
directory. If you chose a different directory name when
:ref:`installing ROCm <rocm-install>`, adjust this step
accordingly.
2. **Run command prompt as an administrator** and delete the following environment variables.
.. code-block:: cmd
setx HIP_DEVICE_LIB_PATH "" /M
setx HIP_PATH "" /M
setx HIP_PLATFORM "" /M
setx LLVM_PATH "" /M
Remove the following paths from your PATH environment variable using your system settings GUI.
Navigate to the following screen:
* Control Panel > System and Security > Edit environment variables
Edit the PATH variable and delete the following paths:
* ``C:\TheRock\build\bin``
* ``C:\TheRock\build\lib\llvm\bin``
3. To uninstall the Adrenalin Driver, see `Uninstall AMD Software
<https://www.amd.com/en/resources/support-articles/faqs/RSX2-UNINSTALL.html>`__.

View File

@@ -0,0 +1,190 @@
.. meta::
:description: Step-by-step guide to installing PyTorch with AMD ROCm 7.9.0 and setting up ComfyUI for AI image generation on Ryzen AI (gfx1151) APUs. Covers Linux and Windows installation, environment setup, and troubleshooting.
:keywords: PyTorch ROCm, ComfyUI, ROCm 7.9.0, AMD GPU, Ryzen AI APU, install PyTorch ROCm, ROCm PyTorch Windows, ROCm PyTorch Linux, ROCm AI image generation, ROCm gfx1151, ComfyUI ROCm setup, PyTorch 2.9.0 ROCm
*****************************************
Install PyTorch and ComfyUI on ROCm 7.9.0
*****************************************
This guide walks you through installing PyTorch with ROCm support on AMD
hardware. It applies to :ref:`supported AMD GPUs and platforms
<790-supported-hw>`. It also includes additional setup steps for ComfyUI on
Windows using Ryzen AI (gfx1151) APUs, showcasing AI-powered image generation.
Prerequisites
=============
Before beginning, ensure your system meets these requirements:
- Python version: 3.11, 3.12, or 3.13 installed and accessible
- ROCm 7.9.0: A working ROCm installation (if not already installed via pip, this guide covers the setup)
Review the :doc:`ROCm 7.9.0 compatibility </compatibility/compatibility-matrix>` information.
.. _790-install-pyt:
Install PyTorch
===============
For prerequisite steps and post-installation recommendations, see :doc:`rocm`.
1. Set up your Python virtual environment. If you already have a successful
:doc:`ROCm 7.9.0 installation via pip <rocm>`, skip this step.
.. code-block:: shell
python3.12 -m venv .venv
2. Activate your Python virtual environment.
.. tab-set::
.. tab-item:: Linux
:sync: linux
.. code-block:: shell
source .venv/bin/activate
.. tab-item:: Windows
:sync: windows
.. code-block:: shell
.venv\Scripts\activate
3. Install the appropriate ROCm-enabled PyTorch build for your operating system
and AMD hardware architecture.
.. tab-set::
.. tab-item:: Linux (PyTorch 2.7.1)
:sync: linux
.. tab-set::
.. tab-item:: Instinct MI350 Series
:sync: gfx950
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx950-dcgpu/ torch torchvision torchaudio
.. tab-item:: Instinct MI300 Series
:sync: gfx942
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx94X-dcgpu/ torch torchvision torchaudio
.. tab-item:: Ryzen AI Max APU
:sync: gfx1151
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx1151/ torch torchvision torchaudio
.. tab-item:: Windows (PyTorch 2.9.0)
:sync: windows
.. tab-set::
.. tab-item:: Ryzen AI Max APU
:sync: gfx1151
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx1151/ torch torchvision torchaudio
4. Check your PyTorch installation.
.. code-block:: shell
python -c "import torch; print(torch.cuda.is_available())"
This prints ``True`` if PyTorch and ROCm are installed properly.
Optionally, if you're running Windows on a supported Ryzen AI APU, try
:ref:`ComfyUI on Windows <790-install-comfyui>`.
.. _790-install-comfyui:
Install ComfyUI on Windows
==========================
ComfyUI is tested for support only on Ryzen AI (gfx1151) APUs on
Windows.
1. Ensure your working environment is running ROCm-enabled PyTorch 2.9.0 on Windows.
See :ref:`Install PyTorch <790-install-pyt>`.
2. Clone the ComfyUI repository.
.. code-block:: shell
git clone https://github.com/comfyanonymous/ComfyUI.git
3. Install Python dependencies.
.. code-block:: shell
pip install -r ComfyUI\requirements.txt
4. Run ComfyUI.
a. Start the ComfyUI server from the command line.
.. code-block:: bash
python ComfyUI\main.py
This will start the server and display a prompt like:
.. code-block:: text
To see the GUI go to: http://127.0.0.1:8188
b. Navigate to ``http://127.0.0.1:8188`` in your web browser. You might need to
replace `8188` with the appropriate port number.
.. image:: /data/comfyui/comfyui-main.png
:align: center
c. Search for one of the following templates and download any missing
models.
.. tab-set::
.. tab-item:: SD3.5 Simple
Select **Template****Model Filter****SD3.5****SD3.5 Simple**
.. image:: /data/comfyui/sd3_5-simple-card.png
:align: center
Download any missing required models.
.. image:: /data/comfyui/sd3_5-missing-models.png
:align: center
.. tab-item:: Chroma1 Radiance text to image
Select **Template****Model Filter****Chroma****Chroma1 Radiance text to image**
.. image:: /data/comfyui/chroma1-radiance-tti-card.png
:align: center
Download any missing required models.
.. image:: /data/comfyui/chroma1-radiance-tti-missing-models.png
:align: center
d. Click the **Run** button.
The application will use your AMD GPU to convert the prompted text to an image.
Known limitations
-----------------
ComfyUI might not start if Smart App Control is enabled.

View File

@@ -1,14 +0,0 @@
.. raw:: html
<meta http-equiv="refresh" content="0; url=../rocm.html#rocm-install">
*******************************
Install AMD ROCm |ROCM_VERSION|
*******************************
Redirecting...
==============
.. important::
If you're not redirected automatically, go to :ref:`rocm-install`.

View File

@@ -1,14 +0,0 @@
.. raw:: html
<meta http-equiv="refresh" content="0; url=../rocm.html#post-install">
*******************************
Install AMD ROCm |ROCM_VERSION|
*******************************
Redirecting...
==============
.. important::
If you're not redirected automatically, go to :ref:`rocm-post-install`.

View File

@@ -1,14 +0,0 @@
.. raw:: html
<meta http-equiv="refresh" content="0; url=../rocm.html#rocm-prerequisites">
*******************************
Install AMD ROCm |ROCM_VERSION|
*******************************
Redirecting...
==============
.. important::
If you're not redirected automatically, go to :ref:`rocm-prerequisites`.

View File

@@ -1,14 +0,0 @@
.. raw:: html
<meta http-equiv="refresh" content="0; url=../rocm.html#rocm-uninstall">
*******************************
Install AMD ROCm |ROCM_VERSION|
*******************************
Redirecting...
==============
.. important::
If you're not redirected automatically, go to :ref:`rocm-uninstall`.

View File

@@ -1,62 +1,442 @@
.. meta:: .. meta::
:description: Learn how to install AMD ROCm 7.11.0 for supported Instinct GPUs and Ryzen AI APUs on Ubuntu, RHEL, and Windows. This step-by-step guide covers prerequisites, driver setup, installation methods (pip and tarball), and troubleshooting. :description: Learn how to install AMD ROCm 7.9.0 for supported Instinct GPUs and Ryzen AI APUs on Ubuntu, RHEL, and Windows. This step-by-step guide covers prerequisites, driver setup, installation methods (pip and tarball), and troubleshooting.
:keywords: AMD ROCm 7.11.0, install ROCm, Instinct GPU, Ryzen APU, Ubuntu, RHEL, Windows, pip install ROCm, ROCm wheel, ROCm tarball, ROCm GPU driver, ROCm setup, ROCm uninstall, ROCm troubleshooting :keywords: AMD ROCm 7.9.0, install ROCm, Instinct GPU, Ryzen APU, Ubuntu, RHEL, Windows, pip install ROCm, ROCm wheel, ROCm tarball, ROCm GPU driver, ROCm setup, ROCm uninstall, ROCm troubleshooting
******************************* **********************
Install AMD ROCm |ROCM_VERSION| Install AMD ROCm 7.9.0
******************************* **********************
.. _rocm-install-selector:
Use the following selector to choose your installation method for your Use the following selector to choose your installation method for your
supported AMD GPU or APU and operating system. For system requirements and supported AMD GPU or APU and operating system. For information about supported
support information, see the :doc:`Compatibility matrix operating systems and compatible AMD devices, see the :doc:`Compatibility matrix
</compatibility/compatibility-matrix>`. To learn more about changes introduced </compatibility/compatibility-matrix>`.
in ROCm |ROCM_VERSION|, see the :doc:`Release notes </about/release-notes>`.
.. include:: ./includes/selector.rst .. selector:: AMD product family
:key: plat
---- .. selector-option:: Instinct GPU
:value: instinct
:width: 6
.. _rocm-prerequisites: .. selector-option:: Ryzen APU
:value: ryzen
:width: 6
.. include:: ./includes/prerequisites.rst .. selected:: plat=instinct
---- .. selector:: Instinct GPU
:key: instinct-arch
.. _rocm-install: .. selector-option:: Instinct MI355X, MI350X
:value: gfx950
.. include:: ./includes/install.rst .. selector-option:: Instinct MI325X, MI300X, MI300A
:value: gfx942
---- .. selector:: Operating system
:key: instinct-os
.. _rocm-post-install: .. selector-option:: Ubuntu
:value: ubuntu
:icon: fab fa-linux fa-lg
.. include:: ./includes/post-install.rst .. selector-option:: Red Hat Enterprise Linux
:value: rhel
:icon: fab fa-linux fa-lg
---- .. selector:: Ubuntu version
:key: instinct-ubuntu-version
:show-when: instinct-os=ubuntu
.. _rocm-uninstall: .. selector-option:: 24.04.3
:value: 24.04
:icon: fab fa-ubuntu fa-lg
.. include:: ./includes/uninstall.rst .. selector-option:: 22.04.5
:value: 22.04
:icon: fab fa-ubuntu fa-lg
| .. selector:: RHEL version
| :key: instinct-rhel-version
| :show-when: instinct-os=rhel
|
|
|
|
|
|
.. raw:: html .. selector-option:: 10.0
:value: 10.0
:icon: fab fa-redhat fa-lg
<script> .. selector-option:: 9.6
document.addEventListener("DOMContentLoaded", () => { :value: 9.6
const nextLink = document.querySelector("footer.prev-next-footer a.right-next"); :icon: fab fa-redhat fa-lg
const nextTitle = nextLink.querySelector(".prev-next-title");
nextTitle.textContent = "Build the ROCm Core SDK from source"; .. selected:: plat=ryzen
nextLink.href = "./build-from-source.html";
}); .. selector:: Ryzen APU
</script> :key: ryzen
.. selector-option:: Ryzen AI Max+ PRO 395<br>Ryzen AI Max PRO 390, 385, 380
:value: ryzen-ai-max-pro
:width: 7
.. selector-option:: Ryzen AI Max+ 395<br>Ryzen AI Max 390, 385
:value: ryzen-ai-max
:width: 5
.. selector:: Operating system
:key: ryzen-os
.. selector-option:: Ubuntu
:value: ubuntu
:icon: fab fa-linux fa-lg
.. selector-option:: Windows
:value: windows
:icon: fab fa-windows fa-lg
.. selector:: Ubuntu version
:key: ryzen-ubuntu-version
:show-when: ryzen-os=ubuntu
.. selector-option:: 24.04.3
:value: 24.04
:icon: fab fa-ubuntu fa-lg
:width: 12
.. selector:: Windows version
:key: ryzen-windows-version
:show-when: ryzen-os=windows
.. selector-option:: 11 24H2
:value: 11_24h2
:icon: fab fa-windows fa-lg
:width: 12
.. selector:: Installation method
:key: install-method
.. selector-option:: pip
:value: wheel
.. selector-option:: Tarball
:value: tar
.. selected:: install-method=wheel
:heading: Prerequisites
.. selected:: plat=instinct
.. selected:: instinct-os=ubuntu
.. selected:: instinct-ubuntu-version=22.04
.. include:: ./includes/1_ubuntu-22.04-wheel-prerequisites.md
:parser: myst
.. selected:: instinct-ubuntu-version=24.04
.. include:: ./includes/1_ubuntu-24.04-wheel-prerequisites.md
:parser: myst
.. selected:: instinct-os=rhel
.. selected:: instinct-rhel-version=9.6
.. include:: ./includes/1_rhel-9.6-wheel-prerequisites.md
:parser: myst
.. selected:: instinct-rhel-version=10.0
.. include:: ./includes/1_rhel-10.0-wheel-prerequisites.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. selected:: ryzen-ubuntu-version=24.04
.. include:: ./includes/1_ubuntu-24.04-wheel-prerequisites.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/1_windows-wheel-prerequisites.md
:parser: myst
.. selected:: install-method=tar
:heading: Prerequisites
.. selected:: plat=instinct
.. selected:: instinct-os=ubuntu
.. include:: ./includes/1_ubuntu-tar-prerequisites.md
:parser: myst
.. selected:: instinct-os=rhel
.. selected:: instinct-rhel-version=9.6
.. include:: ./includes/1_rhel-9.6-tar-prerequisites.md
:parser: myst
.. selected:: instinct-rhel-version=10.0
.. include:: ./includes/1_rhel-10.0-tar-prerequisites.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/1_ubuntu-tar-prerequisites.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/1_windows-tar-prerequisites.md
:parser: myst
.. selected:: plat=instinct
:heading: Installing
.. selected:: instinct-os=ubuntu
:heading: Install AMD GPU Driver
:heading-level: 3
.. include:: ./includes/2_ubuntu-instinct-install-kmd.md
:parser: myst
.. selected:: instinct-os=rhel
:heading: Install AMD GPU Driver
:heading-level: 3
.. include:: ./includes/2_rhel-instinct-install-kmd.md
:parser: myst
.. selected:: plat=ryzen
:heading: Installing
.. selected:: ryzen-os=ubuntu
:heading: Install kernel driver
:heading-level: 3
Supported Ryzen AI APUs require the inbox kernel driver included with
Ubuntu 24.04.3.
.. selected:: install-method=wheel
:heading: Install ROCm
:heading-level: 3
.. selected:: plat=instinct
.. selected:: instinct-arch=gfx950
.. selected:: instinct-os=ubuntu
.. selected:: instinct-ubuntu-version=22.04
.. include:: ./includes/3_wheel-gfx950-install-rocm-py311.md
:parser: myst
.. selected:: instinct-ubuntu-version=24.04
.. include:: ./includes/3_wheel-gfx950-install-rocm.md
:parser: myst
.. selected:: instinct-os=rhel
.. selected:: instinct-rhel-version=10.0
.. include:: ./includes/3_wheel-gfx950-install-rocm.md
:parser: myst
.. selected:: instinct-rhel-version=9.6
.. include:: ./includes/3_wheel-gfx950-install-rocm-py311.md
:parser: myst
.. selected:: instinct-arch=gfx942
.. selected:: instinct-os=ubuntu
.. selected:: instinct-ubuntu-version=22.04
.. include:: ./includes/3_wheel-gfx942-install-rocm-py311.md
:parser: myst
.. selected:: instinct-ubuntu-version=24.04
.. include:: ./includes/3_wheel-gfx942-install-rocm.md
:parser: myst
.. selected:: instinct-os=rhel
.. selected:: instinct-rhel-version=10.0
.. include:: ./includes/3_wheel-gfx942-install-rocm.md
:parser: myst
.. selected:: instinct-rhel-version=9.6
.. include:: ./includes/3_wheel-gfx942-install-rocm-py311.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/3_wheel-gfx1151-install-rocm.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/3_windows-wheel-install-rocm.md
:parser: myst
.. selected:: install-method=tar
:heading: Install ROCm
:heading-level: 3
.. selected:: plat=instinct
.. selected:: instinct-arch=gfx950
.. include:: ./includes/3_tar-gfx950-install-rocm.md
:parser: myst
.. selected:: instinct-arch=gfx942
.. include:: ./includes/3_tar-gfx942-install-rocm.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/3_tar-gfx1151-install-rocm.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/3_windows-tar-install-rocm.md
:parser: myst
.. selected:: install-method=tar
:heading: Post-installation
.. selected:: plat=instinct
.. include:: ./includes/4_linux-tar-post-install.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/4_linux-tar-post-install.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/4_windows-tar-post-install.md
:parser: myst
.. selected:: install-method=wheel
:heading: Post-installation
.. selected:: plat=instinct
.. selected:: instinct-os=ubuntu
.. include:: ./includes/4_ubuntu-wheel-post-install.md
:parser: myst
.. selected:: instinct-os=rhel
.. include:: ./includes/4_rhel-wheel-post-install.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/4_ubuntu-wheel-post-install.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/4_windows-wheel-post-install.md
:parser: myst
.. selected:: install-method=tar
:heading: Uninstalling
.. selected:: plat=instinct
.. include:: ./includes/5_tar-uninstall.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/5_tar-uninstall.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/5_windows-tar-uninstall.md
:parser: myst
.. selected:: install-method=wheel
:heading: Uninstalling
.. selected:: plat=instinct
.. include:: ./includes/5_wheel-linux-uninstall.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
.. include:: ./includes/5_wheel-linux-uninstall.md
:parser: myst
.. selected:: ryzen-os=windows
.. include:: ./includes/5_wheel-windows-uninstall.md
:parser: myst
.. selected:: plat=instinct
:heading: Troubleshooting
.. selected:: instinct-os=ubuntu
.. selected:: instinct-os=ubuntu
:heading-level: 3
:heading: Additional packages for Docker installation
.. include:: ./includes/6_ubuntu-troubleshooting.md
:parser: myst
.. selected:: instinct-os=rhel
.. selected:: instinct-os=rhel
:heading-level: 3
:heading: Additional packages for Docker installation
.. include:: ./includes/6_rhel-troubleshooting.md
:parser: myst
.. selected:: plat=ryzen
.. selected:: ryzen-os=ubuntu
:heading: Troubleshooting
.. selected:: ryzen-os=ubuntu
:heading-level: 3
:heading: Additional packages for Docker installation
.. include:: ./includes/6_ubuntu-troubleshooting.md
:parser: myst

23
docs/release/versions.md Normal file
View File

@@ -0,0 +1,23 @@
<head>
<meta charset="UTF-8">
<meta name="description" content="ROCm preview release history">
<meta name="keywords" content="documentation, release history, ROCm, AMD">
</head>
# ROCm preview release history
| Version | Release date |
| ------- | ------------ |
| [7.9.0](https://rocm.docs.amd.com/en/7.9.0-preview/) | October 20, 2025 |
```{important}
ROCm 7.9.0 introduces a versioning discontinuity following
the previous 7.0 releases. Versions 7.0 through 7.8 are reserved for
production stream ROCm releases, while versions 7.9 and later represent the
technology preview release stream.
Maintaining parallel release streams allows users ample time to evaluate and
adopt the new build system and dependency changes. The technology preview
stream is planned to continue through mid2026, after which it will replace the
[current production stream](https://rocm.docs.amd.com/en/latest/).
```

View File

@@ -1,38 +0,0 @@
:orphan:
.. meta::
:description: ROCm preview release history
:keywords: documentation, rocm, amd, past, previous, rel, ver, versions, docs
****************************
ROCm preview release history
****************************
.. list-table::
:header-rows: 1
* - Version
- Release date
* - `7.11.0 <https://rocm.docs.amd.com/en/7.11.0-preview>`__
- February 11, 2026
* - `7.10.0 <https://rocm.docs.amd.com/en/7.10.0-preview>`__
- December 11, 2025
* - `7.9.0 <https://rocm.docs.amd.com/en/7.9.0-preview>`__
- October 20, 2025
.. important::
ROCm 7.9.0 introduced a versioning discontinuity following the previous `7.0
releases <https://rocm.docs.amd.com/en/latest/release/versions.html>`__.
Versions 7.0 through 7.8 are reserved for production stream ROCm releases,
while versions 7.9.0 and later listed on this page represent the technology
preview release stream. Both streams share a largely similar code base but
differ in their build systems.
Maintaining parallel release streams -- preview and production -- gives
users ample time to evaluate and adopt the new build system and dependency
changes. The technology preview stream is planned to continue through
mid2026, after which it will replace the current production stream.

View File

@@ -1,414 +0,0 @@
**************************************************
Install PyTorch and ComfyUI on ROCm |ROCM_VERSION|
**************************************************
This topic guides you through installing PyTorch with ROCm support on AMD
hardware. It applies to :ref:`supported AMD GPUs and platforms
<release-supported-hw>`. It also includes additional setup steps for ComfyUI,
showcasing AI-powered image generation.
.. selector:: AMD device family
:key: fam
.. selector-option:: Instinct
:value: instinct
:width: 3
.. selector-option:: Radeon PRO
:value: radeon-pro
:width: 3
.. selector-option:: Radeon
:value: radeon
:width: 3
.. selector-option:: Ryzen AI
:value: ryzen
:width: 3
.. selector:: Instinct GPU
:key: gpu
:show-when: fam=instinct
.. selector-info:: https://www.amd.com/en/products/accelerators/instinct.html
.. selector-option:: MI355X
:width: 3
.. selector-option:: MI350X
:width: 3
.. selector-option:: MI325X
:width: 3
.. selector-option:: MI300X
:width: 3
.. selector-option:: MI300A
:width: 3
.. selector-option:: MI250X
:width: 3
.. selector-option:: MI250
:width: 3
.. selector-option:: MI210
:width: 3
.. selector:: Radeon PRO GPU
:key: gpu
:show-when: fam=radeon-pro
.. selector-info:: https://www.amd.com/en/products/graphics/workstations.html
.. selector-option:: AI PRO R9700
:value: ai-r9700
:width: 3
.. selector-option:: AI PRO R9600D
:value: ai-r9600d
:width: 3
.. selector-option:: W7900 Dual Slot
:value: w7900-dual-slot
:width: 3
.. selector-option:: W7900
:value: w7900
:width: 3
.. selector-option:: W7800 48GB
:value: w7800-48gb
:width: 3
.. selector-option:: W7800
:value: w7800
:width: 3
.. selector-option:: W7700
:value: w7700
:width: 3
.. selector-option:: V710
:value: v710
:width: 3
.. selector:: Radeon GPU
:key: gpu
:show-when: fam=radeon
.. selector-info:: https://www.amd.com/en/products/graphics/desktops/radeon.html
.. selector-option:: RX 9070 XT
:value: rx-9070-xt
:width: 3
.. selector-option:: RX 9070 GRE
:value: rx-9070-gre
:width: 3
.. selector-option:: RX 9070
:value: rx-9070
:width: 3
.. selector-option:: RX 9060 XT LP
:value: rx-9060-xt-lp
:width: 3
.. selector-option:: RX 9060 XT
:value: rx-9060-xt
:width: 3
.. selector-option:: RX 9060
:value: rx-9060
:width: 3
.. selector-option:: RX 7900 XTX
:value: rx-7900-xtx
:width: 3
.. selector-option:: RX 7900 XT
:value: rx-7900-xt
:width: 3
.. selector-option:: RX 7900 GRE
:value: rx-7900-gre
:width: 3
.. selector-option:: RX 7800 XT
:value: rx-7800-xt
:width: 3
.. selector-option:: RX 7700 XT
:value: rx-7700-xt
:width: 3
.. selector-option:: RX 7700
:value: rx-7700
:width: 3
.. selector:: Ryzen AI APU
:key: gpu
:show-when: fam=ryzen
.. selector-info:: https://www.amd.com/en/products/processors/workstations/mobile.html
.. selector-option:: Max+ PRO 395
:value: max-pro-395
:width: 3
.. selector-option:: Max PRO 390
:value: max-pro-390
:width: 3
.. selector-option:: Max PRO 385
:value: max-pro-385
:width: 3
.. selector-option:: Max PRO 380
:value: max-pro-380
:width: 3
.. selector-option:: Max+ 395
:value: max-395
:width: 2
.. selector-option:: Max 390
:value: max-390
:width: 2
.. selector-option:: Max 385
:value: max-385
:width: 2
.. selector-option:: 9 HX 375
:value: 9-hx-375
:width: 2
.. selector-option:: 9 HX 370
:value: 9-hx-370
:width: 2
.. selector-option:: 9 365
:value: 9-365
:width: 2
.. selector:: Operating system
:key: os
:show-when: fam=instinct gpu=v710 gpu=ai-r9600d gpu=rx-9070-xt gpu=rx-9070-gre gpu=rx-9070 gpu=rx-9060-xt-lp gpu=rx-9060-xt gpu=rx-9060
.. selector-option:: Linux
:value: linux
:width: 12
.. selector:: Operating system
:key: os
:show-when: fam=ryzen gpu=ai-r9700 gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700 gpu=w6800 gpu=rx-7900-xtx gpu=rx-7900-xt gpu=rx-7900-gre gpu=rx-7800-xt gpu=rx-7700-xt gpu=rx-7700
.. selector-option:: Linux
:value: linux
:width: 6
.. selector-option:: Windows
:value: windows
:width: 6
:disable-when: fam=instinct
Prerequisites
=============
Ensure your system has a :ref:`supported Python version
<rocm-compat-python>` installed and accessible: 3.11, 3.12, or 3.13.
Review the :doc:`/compatibility/compatibility-matrix` for more details.
.. _pip-install-pytorch:
Install PyTorch
===============
For prerequisite steps and post-installation recommendations, see the
:doc:`ROCm installation instructions </install/rocm>`.
1. Set up your Python virtual environment. If you already have a successful
:doc:`ROCm 7.11.0 installation using pip </install/rocm>`, skip this step.
For example, run the following command to create a virtual environment:
.. code-block:: shell
python3.12 -m venv .venv
2. Activate your Python virtual environment. For example:
.. selected:: os=linux
.. code-block:: shell
source .venv/bin/activate
.. selected:: os=windows
.. code-block:: shell
.venv\Scripts\activate
3. Install the appropriate ROCm-enabled PyTorch build for your operating system
and AMD hardware architecture.
.. selected:: gpu=mi355x gpu=mi350x
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx950-dcgpu/ torch torchvision torchaudio
.. selected:: gpu=mi325x gpu=mi300x gpu=mi300a
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx94X-dcgpu/ torch torchvision torchaudio
.. selected:: gpu=mi250x gpu=mi250 gpu=mi210
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx90X-dcgpu/ torch torchvision torchaudio
.. selected:: gpu=ai-r9700 gpu=ai-r9600d gpu=rx-9070-xt gpu=rx-9070-gre gpu=rx-9070 gpu=rx-9060-xt-lp gpu=rx-9060-xt gpu=rx-9060
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx120X-all/ torch torchvision torchaudio
.. selected:: gpu=w7900-dual-slot gpu=w7900 gpu=w7800-48gb gpu=w7800 gpu=w7700 gpu=v710 gpu=rx-7900-xtx gpu=rx-7900-xt gpu=rx-7900-gre gpu=rx-7800-xt gpu=rx-7700-xt gpu=rx-7700
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx110X-dgpu/ torch torchvision torchaudio
.. selected:: gpu=w6800 gpu=v620
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx103X-dgpu/ torch torchvision torchaudio
.. selected:: gpu=max-pro-395 gpu=max-pro-390 gpu=max-pro-385 gpu=max-pro-380 gpu=max-395 gpu=max-390 gpu=max-385
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx1151/ torch torchvision torchaudio
.. selected:: gpu=9-hx-375 gpu=9-hx-370 gpu=9-365
.. code-block:: bash
python -m pip install --index-url https://repo.amd.com/rocm/whl/gfx1150/ torch torchvision torchaudio
4. Check your PyTorch installation.
.. code-block:: shell
python -c "import torch; print(torch.cuda.is_available())"
This prints ``True`` if PyTorch and ROCm are installed properly.
Optionally, for a demonstration of ROCm-powered image generation, try
:ref:`ComfyUI on Windows <install-comfyui-windows>`.
.. _install-comfyui-windows:
Install and run ComfyUI
=======================
1. Ensure your working environment is running ROCm-enabled PyTorch on a supported system.
See :ref:`Install PyTorch <pip-install-pytorch>` for instructions.
2. Clone the ComfyUI repository.
.. code-block:: shell
git clone https://github.com/comfyanonymous/ComfyUI.git
3. Install Python dependencies.
.. selected:: os=linux
.. code-block:: shell
pip install -r ComfyUI/requirements.txt
.. selected:: os=windows
.. code-block:: shell
pip install -r ComfyUI\requirements.txt
4. Run ComfyUI.
a. Start the ComfyUI server from the command line.
.. selected:: os=linux
.. code-block:: bash
python ComfyUI/main.py
.. selected:: os=windows
.. code-block:: bash
python ComfyUI\main.py
This will start the server and display a prompt like:
.. code-block:: text
To see the GUI go to: http://127.0.0.1:8188
b. Navigate to ``http://127.0.0.1:8188`` in your web browser. You might need to
replace ``8188`` with the appropriate port number.
.. image:: /data/comfyui/comfyui-main.png
:align: center
c. Search for one of the following templates and download any missing
models.
.. tab-set::
.. tab-item:: SD3.5 Simple
Select **Template****Model Filter****SD3.5****SD3.5 Simple**
.. image:: /data/comfyui/sd3_5-simple-card.png
:align: center
Download required models, if missing.
.. image:: /data/comfyui/sd3_5-missing-models.png
:align: center
.. tab-item:: Chroma1 Radiance text to image
Select **Template****Model Filter****Chroma****Chroma1 Radiance text to image**
.. image:: /data/comfyui/chroma1-radiance-tti-card.png
:align: center
Download required models, if missing.
.. image:: /data/comfyui/chroma1-radiance-tti-missing-models.png
:align: center
d. Click the **Run** button.
The application will use your AMD GPU to convert the prompted text to an image.
.. selected:: os=windows
:heading: Known limitations
:heading-level: 3
ComfyUI might not start if Smart App Control is enabled in your Windows
security settings.

View File

@@ -0,0 +1,390 @@
.. meta::
:description: Learn to validate diffusion model video generation on MI300X, MI350X and MI355X accelerators using
prebuilt and optimized docker images.
:keywords: xDiT, diffusion, video, video generation, image, image generation, validate, benchmark
************************
xDiT diffusion inference
************************
.. _xdit-video-diffusion:
.. datatemplate:yaml:: /data/rocm-for-ai/xdit-inference-models.yaml
{% set docker = data.xdit_diffusion_inference.docker %}
{% set model_groups = data.xdit_diffusion_inference.model_groups%}
The `rocm/pytorch-xdit <{{ docker.docker_hub_url }}>`_ Docker image offers
a prebuilt, optimized inference environment based on `xDiT
<https://github.com/xdit-project/xDiT>`_ for benchmarking diffusion-based
video and image generation on AMD Instinct MI355X, MI350X (gfx950), MI325X,
and MI300X (gfx942) GPUs.
This image is based on ROCm {{docker.ROCm}} preview release via `TheRock <https://github.com/ROCm/TheRock>`_
and includes the following software components:
.. tab-set::
.. tab-item:: {{ docker.pull_tag }}
.. list-table::
:header-rows: 1
* - Software component
- Version
{% for component_name, component_version in docker.components.items() %}
* - {{ component_name }}
- {{ component_version }}
{% endfor %}
Follow this guide to pull the required image, spin up a container, download the model, and run a benchmark.
For preview and development releases, see `amdsiloai/pytorch-xdit <https://hub.docker.com/r/amdsiloai/pytorch-xdit>`_.
What's new
==========
- Initial ROCm-enabled xDiT Docker release for diffusion inference.
- Supported architectures: gfx942 and gfx950 (AMD Instinct™ MI300X, MI325X, MI350X, and MI355X).
- Supported workloads: Wan 2.1, Wan 2.2, HunyuanVideo, and Flux models.
.. _xdit-video-diffusion-supported-models:
Supported models
================
The following models are supported for inference performance benchmarking.
Some instructions, commands, and recommendations in this documentation might
vary by model -- select one to get started.
.. datatemplate:yaml:: /data/rocm-for-ai/xdit-inference-models.yaml
{% set docker = data.xdit_diffusion_inference.docker %}
{% set model_groups = data.xdit_diffusion_inference.model_groups%}
.. raw:: html
<div id="vllm-benchmark-ud-params-picker" class="container-fluid">
<div class="row gx-0">
<div class="col-2 me-1 px-2 model-param-head">Model</div>
<div class="row col-10 pe-0">
{% for model_group in model_groups %}
<div class="col-4 px-2 model-param" data-param-k="model-group" data-param-v="{{ model_group.tag }}" tabindex="0">{{ model_group.group }}</div>
{% endfor %}
</div>
</div>
<div class="row gx-0 pt-1">
<div class="col-2 me-1 px-2 model-param-head">Variant</div>
<div class="row col-10 pe-0">
{% for model_group in model_groups %}
{% set models = model_group.models %}
{% for model in models %}
{% if models|length == 1 %}
<div class="col-12 px-2 model-param" data-param-k="model" data-param-v="{{ model.mad_tag }}" data-param-group="{{ model_group.tag }}" tabindex="0">{{ model.model }}</div>
{% else %}
<div class="col-6 px-2 model-param" data-param-k="model" data-param-v="{{ model.mad_tag }}" data-param-group="{{ model_group.tag }}" tabindex="0">{{ model.model }}</div>
{% endif %}
{% endfor %}
{% endfor %}
</div>
</div>
</div>
{% for model_group in model_groups %}
{% for model in model_group.models %}
.. container:: model-doc {{ model.mad_tag }}
.. note::
To learn more about your specific model see the `{{ model.model }} model card on Hugging Face <{{ model.url }}>`_
or visit the `GitHub page <{{ model.github }}>`__. Note that some models require access authorization before use via an
external license agreement through a third party.
{% endfor %}
{% endfor %}
System validation
=================
Before running AI workloads, it's important to validate that your AMD hardware is configured
correctly and performing optimally.
If you have already validated your system settings, including aspects like NUMA
auto-balancing, you can skip this step. Otherwise, complete the procedures in
the `System validation and optimization
<https://rocm.docs.amd.com/en/latest/how-to/rocm-for-ai/system-setup/prerequisite-system-validation.html>`__
guide to properly configure your system settings before starting.
Pull the Docker image
=====================
.. datatemplate:yaml:: /data/rocm-for-ai/xdit-inference-models.yaml
{% set docker = data.xdit_diffusion_inference.docker %}
For this tutorial, it's recommended to use the latest ``{{ docker.pull_tag }}`` Docker image.
Pull the image using the following command:
.. code-block:: shell
docker pull {{ docker.pull_tag }}
Validate and benchmark
======================
Once the image has been downloaded you can follow these steps to
run benchmarks and generate outputs.
.. datatemplate:yaml:: /data/rocm-for-ai/xdit-inference-models.yaml
{% set model_groups = data.xdit_diffusion_inference.model_groups %}
{% for model_group in model_groups %}
{% for model in model_group.models %}
.. container:: model-doc {{model.mad_tag}}
The following commands are written for {{ model.model }}.
See :ref:`xdit-video-diffusion-supported-models` to switch to another available model.
{% endfor %}
{% endfor %}
.. _xdit-video-diffusion-setup:
Prepare the model
-----------------
.. note::
If you're using ROCm MAD to :ref:`run your model
<xdit-video-diffusion-run>`, you can skip this section. MAD will handle
starting the container and downloading required models inside the container.
You can either use an existing Hugging Face cache or download the model fresh inside the container.
.. datatemplate:yaml:: /data/rocm-for-ai/xdit-inference-models.yaml
{% set docker = data.xdit_diffusion_inference.docker %}
{% set model_groups = data.xdit_diffusion_inference.model_groups%}
{% for model_group in model_groups %}
{% for model in model_group.models %}
.. container:: model-doc {{model.mad_tag}}
.. tab-set::
.. tab-item:: Option 1: Use existing Hugging Face cache
If you already have models downloaded on your host system, you can mount your existing cache.
1. Set your Hugging Face cache location.
.. code-block:: shell
export HF_HOME=/your/hf_cache/location
2. Download the model (if not already cached).
.. code-block:: shell
huggingface-cli download {{ model.model_repo }} {% if model.revision %} --revision {{ model.revision }} {% endif %}
3. Launch the container with mounted cache.
.. code-block:: shell
docker run \
-it --rm \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--user root \
--device=/dev/kfd \
--device=/dev/dri \
--group-add video \
--ipc=host \
--network host \
--privileged \
--shm-size 128G \
--name pytorch-xdit \
-e HSA_NO_SCRATCH_RECLAIM=1 \
-e OMP_NUM_THREADS=16 \
-e CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
-e HF_HOME=/app/huggingface_models \
-v $HF_HOME:/app/huggingface_models \
{{ docker.pull_tag }}
.. tab-item:: Option 2: Download inside container
If you prefer to keep the container self-contained or don't have an existing cache.
1. Launch the container
.. code-block:: shell
docker run \
-it --rm \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--user root \
--device=/dev/kfd \
--device=/dev/dri \
--group-add video \
--ipc=host \
--network host \
--privileged \
--shm-size 128G \
--name pytorch-xdit \
-e HSA_NO_SCRATCH_RECLAIM=1 \
-e OMP_NUM_THREADS=16 \
-e CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
{{ docker.pull_tag }}
2. Inside the container, set the Hugging Face cache location and download the model.
.. code-block:: shell
export HF_HOME=/app/huggingface_models
huggingface-cli download {{ model.model_repo }} {% if model.revision %} --revision {{ model.revision }} {% endif %}
.. warning::
Models will be downloaded to the container's filesystem and will be lost when the container is removed unless you persist the data with a volume.
{% endfor %}
{% endfor %}
.. _xdit-video-diffusion-run:
Run inference
=============
You can benchmark models through `MAD <https://github.com/ROCm/MAD>`__-integrated automation or standalone
torchrun commands.
.. datatemplate:yaml:: /data/rocm-for-ai/xdit-inference-models.yaml
{% set model_groups = data.xdit_diffusion_inference.model_groups%}
{% for model_group in model_groups %}
{% for model in model_group.models %}
.. container:: model-doc {{ model.mad_tag }}
.. tab-set::
.. tab-item:: MAD-integrated benchmarking
1. Clone the ROCm Model Automation and Dashboarding (`<https://github.com/ROCm/MAD>`__) repository to a local
directory and install the required packages on the host machine.
.. code-block:: shell
git clone https://github.com/ROCm/MAD
cd MAD
pip install -r requirements.txt
2. On the host machine, use this command to run the performance benchmark test on
the `{{model.model}} <{{ model.url }}>`_ model using one node.
.. code-block:: shell
export MAD_SECRETS_HFTOKEN="your personal Hugging Face token to access gated models"
madengine run \
--tags {{model.mad_tag}} \
--keep-model-dir \
--live-output
MAD launches a Docker container with the name
``container_ci-{{model.mad_tag}}``. The throughput and serving reports of the
model are collected in the following paths: ``{{ model.mad_tag }}_throughput.csv``
and ``{{ model.mad_tag }}_serving.csv``.
.. tab-item:: Standalone benchmarking
To run the benchmarks for {{ model.model }}, use the following command:
.. code-block:: shell
{% if model.model == "Hunyuan Video" %}
cd /app/Hunyuanvideo
mkdir results
torchrun --nproc_per_node=8 run.py \
--model tencent/HunyuanVideo \
--prompt "In the large cage, two puppies were wagging their tails at each other." \
--height 720 --width 1280 --num_frames 129 \
--num_inference_steps 50 --warmup_steps 1 --n_repeats 1 \
--ulysses_degree 8 \
--enable_tiling --enable_slicing \
--use_torch_compile \
--bench_output results
{% endif %}
{% if model.model == "Wan2.1" %}
cd Wan2.1
mkdir results
torchrun --nproc_per_node=8 run.py \
--task i2v-14B \
--size 720*1280 --frame_num 81 \
--ckpt_dir "${HF_HOME}/hub/models--Wan-AI--Wan2.1-I2V-14B-720P/snapshots/8823af45fcc58a8aa999a54b04be9abc7d2aac98/" \
--image "/app/Wan2.1/examples/i2v_input.JPG" \
--ulysses_size 8 --ring_size 1 \
--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \
--benchmark_output_directory results --save_file video.mp4 --num_benchmark_steps 1 \
--offload_model 0 \
--vae_dtype bfloat16 \
--allow_tf32 \
--compile
{% endif %}
{% if model.model == "Wan2.2" %}
cd Wan2.2
mkdir results
torchrun --nproc_per_node=8 run.py \
--task i2v-A14B \
--size 720*1280 --frame_num 81 \
--ckpt_dir "${HF_HOME}/hub/models--Wan-AI--Wan2.2-I2V-A14B/snapshots/206a9ee1b7bfaaf8f7e4d81335650533490646a3/" \
--image "/app/Wan2.2/examples/i2v_input.JPG" \
--ulysses_size 8 --ring_size 1 \
--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \
--benchmark_output_directory results --save_file video.mp4 --num_benchmark_steps 1 \
--offload_model 0 \
--vae_dtype bfloat16 \
--allow_tf32 \
--compile
{% endif %}
{% if model.model == "FLUX.1" %}
cd Flux
mkdir results
torchrun --nproc_per_node=8 /app/Flux/run.py \
--model black-forest-labs/FLUX.1-dev \
--seed 42 \
--prompt "A small cat" \
--height 1024 \
--width 1024 \
--num_inference_steps 25 \
--max_sequence_length 256 \
--warmup_steps 5 \
--no_use_resolution_binning \
--ulysses_degree 8 \
--use_torch_compile \
--num_repetitions 1 \
--benchmark_output_directory results
{% endif %}
The generated video will be stored under the results directory. For the actual benchmark step runtimes, see {% if model.model == "Hunyuan Video" %}stdout.{% elif model.model in ["Wan2.1", "Wan2.2"] %}results/outputs/rank0_*.json{% elif model.model == "FLUX.1" %}results/timing.json{% endif %}
{% if model.model == "FLUX.1" %}You may also use ``run_usp.py`` which implements USP without modifying the default diffusers pipeline. {% endif %}
{% endfor %}
{% endfor %}
Further reading
===============
- To learn more about MAD and the ``madengine`` CLI, see the `MAD usage guide <https://github.com/ROCm/MAD?tab=readme-ov-file#usage-guide>`__.
- For a list of other ready-made Docker images for AI with ROCm, see `AMD
Infinity Hub
<https://www.amd.com/en/developer/resources/infinity-hub.html#f-amd_hub_category=AI%20%26%20ML%20Models>`__.

View File

@@ -3,34 +3,22 @@
defaults: defaults:
numbered: False numbered: False
maxdepth: 6 maxdepth: 6
root: index.rst root: index
subtrees: subtrees:
- entries: - entries:
- file: about/release-notes.md - file: about/release-notes.md
title: Release notes title: Release notes
- file: compatibility/compatibility-matrix.rst - file: compatibility/compatibility-matrix.md
title: Compatibility matrix title: Compatibility matrix
- caption: Install - caption: Installation
entries: entries:
- file: install/rocm.rst - file: install/rocm
title: Install ROCm
entries:
# Dummy entries to point to install doc sections
- file: install/redirect/_prerequisites.rst
title: Prerequisites
- file: install/redirect/_install.rst
title: Installation title: Installation
- file: install/redirect/_post-install.rst - file: install/build-from-source
title: Post-installation
- file: install/redirect/_uninstall.rst
title: Uninstall ROCm
- file: install/build-from-source.rst
title: Build from source title: Build from source
- caption: ROCm for AI - caption: ROCm for AI
entries: entries:
- file: rocm-for-ai/pytorch-comfyui.rst - file: install/pytorch-comfyui
title: Install PyTorch and ComfyUI title: Install PyTorch and ComfyUI
- caption: Tutorials - file: rocm-for-ai/xdit-diffusion-inference
entries: title: xDiT diffusion inference
- url: https://github.com/ROCm/rocm-examples/tree/release/therock-7.11
title: ROCm examples

View File

@@ -1,3 +1,4 @@
rocm-docs-core==1.31.3 rocm-docs-core==1.29.0
sphinx-reredirects
sphinx-sitemap sphinx-sitemap
ckdl sphinxcontrib.datatemplates==0.11.0

View File

@@ -2,28 +2,28 @@
# This file is autogenerated by pip-compile with Python 3.10 # This file is autogenerated by pip-compile with Python 3.10
# by the following command: # by the following command:
# #
# pip-compile docs/sphinx/requirements.in # pip-compile requirements.in
# #
accessible-pygments==0.0.5 accessible-pygments==0.0.5
# via pydata-sphinx-theme # via pydata-sphinx-theme
alabaster==1.0.0 alabaster==1.0.0
# via sphinx # via sphinx
asttokens==3.0.1 asttokens==3.0.0
# via stack-data # via stack-data
attrs==25.4.0 attrs==25.4.0
# via # via
# jsonschema # jsonschema
# jupyter-cache # jupyter-cache
# referencing # referencing
babel==2.18.0 babel==2.17.0
# via # via
# pydata-sphinx-theme # pydata-sphinx-theme
# sphinx # sphinx
beautifulsoup4==4.14.3 beautifulsoup4==4.14.2
# via pydata-sphinx-theme # via pydata-sphinx-theme
breathe==4.36.0 breathe==4.36.0
# via rocm-docs-core # via rocm-docs-core
certifi==2026.1.4 certifi==2025.11.12
# via requests # via requests
cffi==2.0.0 cffi==2.0.0
# via # via
@@ -31,26 +31,26 @@ cffi==2.0.0
# pynacl # pynacl
charset-normalizer==3.4.4 charset-normalizer==3.4.4
# via requests # via requests
ckdl==1.0 click==8.3.0
# via -r docs/sphinx/requirements.in
click==8.3.1
# via # via
# jupyter-cache # jupyter-cache
# sphinx-external-toc # sphinx-external-toc
comm==0.2.3 comm==0.2.3
# via ipykernel # via ipykernel
cryptography==46.0.4 cryptography==46.0.3
# via pyjwt # via pyjwt
debugpy==1.8.20 debugpy==1.8.17
# via ipykernel # via ipykernel
decorator==5.2.1 decorator==5.2.1
# via ipython # via ipython
defusedxml==0.7.1
# via sphinxcontrib-datatemplates
docutils==0.21.2 docutils==0.21.2
# via # via
# myst-parser # myst-parser
# pydata-sphinx-theme # pydata-sphinx-theme
# sphinx # sphinx
exceptiongroup==1.3.1 exceptiongroup==1.3.0
# via ipython # via ipython
executing==2.2.1 executing==2.2.1
# via stack-data # via stack-data
@@ -60,21 +60,21 @@ fastjsonschema==2.21.2
# rocm-docs-core # rocm-docs-core
gitdb==4.0.12 gitdb==4.0.12
# via gitpython # via gitpython
gitpython==3.1.46 gitpython==3.1.45
# via rocm-docs-core # via rocm-docs-core
greenlet==3.3.1 greenlet==3.2.4
# via sqlalchemy # via sqlalchemy
idna==3.11 idna==3.11
# via requests # via requests
imagesize==1.4.1 imagesize==1.4.1
# via sphinx # via sphinx
importlib-metadata==8.7.1 importlib-metadata==8.7.0
# via # via
# jupyter-cache # jupyter-cache
# myst-nb # myst-nb
ipykernel==7.1.0 ipykernel==7.1.0
# via myst-nb # via myst-nb
ipython==8.38.0 ipython==8.37.0
# via # via
# ipykernel # ipykernel
# myst-nb # myst-nb
@@ -84,13 +84,13 @@ jinja2==3.1.6
# via # via
# myst-parser # myst-parser
# sphinx # sphinx
jsonschema==4.26.0 jsonschema==4.25.1
# via nbformat # via nbformat
jsonschema-specifications==2025.9.1 jsonschema-specifications==2025.9.1
# via jsonschema # via jsonschema
jupyter-cache==1.0.1 jupyter-cache==1.0.1
# via myst-nb # via myst-nb
jupyter-client==8.8.0 jupyter-client==8.6.3
# via # via
# ipykernel # ipykernel
# nbclient # nbclient
@@ -118,7 +118,7 @@ myst-nb==1.3.0
# via rocm-docs-core # via rocm-docs-core
myst-parser==4.0.1 myst-parser==4.0.1
# via myst-nb # via myst-nb
nbclient==0.10.4 nbclient==0.10.2
# via # via
# jupyter-cache # jupyter-cache
# myst-nb # myst-nb
@@ -129,28 +129,27 @@ nbformat==5.10.4
# nbclient # nbclient
nest-asyncio==1.6.0 nest-asyncio==1.6.0
# via ipykernel # via ipykernel
packaging==26.0 packaging==25.0
# via # via
# ipykernel # ipykernel
# pydata-sphinx-theme
# sphinx # sphinx
parso==0.8.5 parso==0.8.5
# via jedi # via jedi
pexpect==4.9.0 pexpect==4.9.0
# via ipython # via ipython
platformdirs==4.5.1 platformdirs==4.5.0
# via jupyter-core # via jupyter-core
prompt-toolkit==3.0.52 prompt-toolkit==3.0.52
# via ipython # via ipython
psutil==7.2.2 psutil==7.1.3
# via ipykernel # via ipykernel
ptyprocess==0.7.0 ptyprocess==0.7.0
# via pexpect # via pexpect
pure-eval==0.2.3 pure-eval==0.2.3
# via stack-data # via stack-data
pycparser==3.0 pycparser==2.23
# via cffi # via cffi
pydata-sphinx-theme==0.15.4 pydata-sphinx-theme==0.16.1
# via # via
# rocm-docs-core # rocm-docs-core
# sphinx-book-theme # sphinx-book-theme
@@ -162,9 +161,9 @@ pygments==2.19.2
# ipython # ipython
# pydata-sphinx-theme # pydata-sphinx-theme
# sphinx # sphinx
pyjwt[crypto]==2.11.0 pyjwt[crypto]==2.10.1
# via pygithub # via pygithub
pynacl==1.6.2 pynacl==1.6.1
# via pygithub # via pygithub
python-dateutil==2.9.0.post0 python-dateutil==2.9.0.post0
# via jupyter-client # via jupyter-client
@@ -175,6 +174,7 @@ pyyaml==6.0.3
# myst-parser # myst-parser
# rocm-docs-core # rocm-docs-core
# sphinx-external-toc # sphinx-external-toc
# sphinxcontrib-datatemplates
pyzmq==27.1.0 pyzmq==27.1.0
# via # via
# ipykernel # ipykernel
@@ -187,9 +187,9 @@ requests==2.32.5
# via # via
# pygithub # pygithub
# sphinx # sphinx
rocm-docs-core==1.31.3 rocm-docs-core==1.29.0
# via -r docs/sphinx/requirements.in # via -r requirements.in
rpds-py==0.30.0 rpds-py==0.28.0
# via # via
# jsonschema # jsonschema
# referencing # referencing
@@ -199,7 +199,7 @@ smmap==5.0.2
# via gitdb # via gitdb
snowballstemmer==3.0.1 snowballstemmer==3.0.1
# via sphinx # via sphinx
soupsieve==2.8.3 soupsieve==2.8
# via beautifulsoup4 # via beautifulsoup4
sphinx==8.1.3 sphinx==8.1.3
# via # via
@@ -213,26 +213,30 @@ sphinx==8.1.3
# sphinx-design # sphinx-design
# sphinx-external-toc # sphinx-external-toc
# sphinx-last-updated-by-git # sphinx-last-updated-by-git
# sphinx-multitoc-numbering
# sphinx-notfound-page # sphinx-notfound-page
sphinx-book-theme==1.1.4 # sphinx-reredirects
# sphinxcontrib-datatemplates
# sphinxcontrib-runcmd
sphinx-book-theme==1.1.3
# via rocm-docs-core # via rocm-docs-core
sphinx-copybutton==0.5.2 sphinx-copybutton==0.5.2
# via rocm-docs-core # via rocm-docs-core
sphinx-design==0.6.1 sphinx-design==0.6.1
# via rocm-docs-core # via rocm-docs-core
sphinx-external-toc==1.1.0 sphinx-external-toc==1.0.1
# via rocm-docs-core # via rocm-docs-core
sphinx-last-updated-by-git==0.3.8 sphinx-last-updated-by-git==0.3.8
# via sphinx-sitemap # via sphinx-sitemap
sphinx-multitoc-numbering==0.1.3
# via sphinx-external-toc
sphinx-notfound-page==1.1.0 sphinx-notfound-page==1.1.0
# via rocm-docs-core # via rocm-docs-core
sphinx-reredirects==0.1.6
# via -r requirements.in
sphinx-sitemap==2.9.0 sphinx-sitemap==2.9.0
# via -r docs/sphinx/requirements.in # via -r requirements.in
sphinxcontrib-applehelp==2.0.0 sphinxcontrib-applehelp==2.0.0
# via sphinx # via sphinx
sphinxcontrib-datatemplates==0.11.0
# via -r requirements.in
sphinxcontrib-devhelp==2.0.0 sphinxcontrib-devhelp==2.0.0
# via sphinx # via sphinx
sphinxcontrib-htmlhelp==2.1.0 sphinxcontrib-htmlhelp==2.1.0
@@ -241,17 +245,19 @@ sphinxcontrib-jsmath==1.0.1
# via sphinx # via sphinx
sphinxcontrib-qthelp==2.0.0 sphinxcontrib-qthelp==2.0.0
# via sphinx # via sphinx
sphinxcontrib-runcmd==0.2.0
# via sphinxcontrib-datatemplates
sphinxcontrib-serializinghtml==2.0.0 sphinxcontrib-serializinghtml==2.0.0
# via sphinx # via sphinx
sqlalchemy==2.0.46 sqlalchemy==2.0.44
# via jupyter-cache # via jupyter-cache
stack-data==0.6.3 stack-data==0.6.3
# via ipython # via ipython
tabulate==0.9.0 tabulate==0.9.0
# via jupyter-cache # via jupyter-cache
tomli==2.4.0 tomli==2.3.0
# via sphinx # via sphinx
tornado==6.5.4 tornado==6.5.2
# via # via
# ipykernel # ipykernel
# jupyter-client # jupyter-client
@@ -275,11 +281,11 @@ typing-extensions==4.15.0
# pygithub # pygithub
# referencing # referencing
# sqlalchemy # sqlalchemy
urllib3==2.6.3 urllib3==2.5.0
# via # via
# pygithub # pygithub
# requests # requests
wcwidth==0.5.3 wcwidth==0.2.14
# via prompt-toolkit # via prompt-toolkit
zipp==3.23.0 zipp==3.23.0
# via importlib-metadata # via importlib-metadata

View File

@@ -0,0 +1,16 @@
/* Override PyData Sphinx Theme default colors */
html[data-theme="light"] {
--pst-color-table-row-hover-bg: #e2e8f0;
}
html[data-theme="dark"] {
--pst-color-table-row-hover-bg: #1e293b;
}
a svg {
color: var(--pst-color-text-base);
}
a svg:hover {
color: var(--pst-color-link-hover);
}

View File

@@ -0,0 +1,268 @@
#rocm-rn-components col {
width: 6rem;
}
#rocm-rn-components col:nth-child(2) {
width: 12rem;
}
#rocm-rn-components td {
white-space: nowrap;
}
#rocm-rn-components td:last-of-type {
text-align: center;
}
#rocm-rn-components a svg {
color: var(--pst-color-text-base);
}
#rocm-rn-components a svg:hover {
color: var(--pst-color-link-hover);
}
#rocm-rn-components .tbody-reverse-zebra tr:nth-child(2n+1) td {
background-color: var(--pst-color-table-row-zebra-high-bg);
}
#rocm-rn-components .tbody-reverse-zebra tr:nth-child(2n) td {
background-color: var(--pst-color-table-row-zebra-low-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-libs th[rowspan]:first-of-type:hover
)
.rocm-components-libs,
#rocm-rn-components:has(
tbody.rocm-components-libs th[rowspan]:first-of-type:hover
)
.rocm-components-libs
td,
#rocm-rn-components:has(
tbody.rocm-components-libs th[rowspan]:first-of-type:hover
)
tbody.rocm-components-libs
th {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-tools th[rowspan]:first-of-type:hover
)
.rocm-components-tools,
#rocm-rn-components:has(
tbody.rocm-components-tools th[rowspan]:first-of-type:hover
)
.rocm-components-tools
td,
#rocm-rn-components:has(
tbody.rocm-components-tools th[rowspan]:first-of-type:hover
)
tbody.rocm-components-tools
th {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-compilers th[rowspan]:first-of-type:hover
)
.rocm-components-compilers,
#rocm-rn-components:has(
tbody.rocm-components-compilers th[rowspan]:first-of-type:hover
)
.rocm-components-compilers
td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-runtimes th[rowspan]:first-of-type:hover
)
.rocm-components-runtimes,
#rocm-rn-components:has(
tbody.rocm-components-runtimes th[rowspan]:first-of-type:hover
)
.rocm-components-runtimes
td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-tools th[rowspan]:first-of-type:hover
)
.rocm-components-tools
td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-compilers th[rowspan]:first-of-type:hover
)
.rocm-components-compilers
td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-runtimes th[rowspan]:first-of-type:hover
)
.rocm-components-runtimes
td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-ml th[rowspan]:nth-of-type(2):hover
)
.rocm-components-ml
td,
#rocm-rn-components:has(
tbody.rocm-components-ml th[rowspan]:nth-of-type(2):hover
)
.rocm-components-libs
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-communication th[rowspan]:nth-of-type(2):hover
)
.rocm-components-communication
td,
#rocm-rn-components:has(
tbody.rocm-components-communication th[rowspan]:nth-of-type(2):hover
)
.rocm-components-libs
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-math th[rowspan]:nth-of-type(2):hover
)
.rocm-components-math
td,
#rocm-rn-components:has(
tbody.rocm-components-math th[rowspan]:nth-of-type(2):hover
)
.rocm-components-libs
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-primitives th[rowspan]:nth-of-type(2):hover
)
.rocm-components-primitives
td,
#rocm-rn-components:has(
tbody.rocm-components-primitives th[rowspan]:nth-of-type(2):hover
)
.rocm-components-libs
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-dev th[rowspan]:nth-of-type(2):hover
)
.rocm-components-dev
td,
#rocm-rn-components:has(
tbody.rocm-components-dev th[rowspan]:nth-of-type(2):hover
)
.rocm-components-tools
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-perf th[rowspan]:nth-of-type(2):hover
)
.rocm-components-perf
td,
#rocm-rn-components:has(
tbody.rocm-components-perf th[rowspan]:nth-of-type(2):hover
)
.rocm-components-tools
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(
tbody.rocm-components-system th[rowspan]:nth-of-type(2):hover
)
.rocm-components-system
td,
#rocm-rn-components:has(
tbody.rocm-components-system th[rowspan]:nth-of-type(2):hover
)
.rocm-components-tools
th:first-of-type {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-ml td:hover)
.rocm-components-ml
th,
#rocm-rn-components:has(tbody.rocm-components-ml td:hover)
.rocm-components-libs
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-ml td:hover) tr:hover > td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-communication td:hover)
.rocm-components-communication
th,
#rocm-rn-components:has(tbody.rocm-components-communication td:hover)
.rocm-components-libs
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-communication td:hover)
tr:hover
> td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-math td:hover)
.rocm-components-math
th,
#rocm-rn-components:has(tbody.rocm-components-math td:hover)
.rocm-components-libs
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-math td:hover) tr:hover > td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-primitives td:hover)
.rocm-components-primitives
th,
#rocm-rn-components:has(tbody.rocm-components-primitives td:hover)
.rocm-components-libs
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-primitives td:hover)
tr:hover
> td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-dev td:hover)
.rocm-components-dev
th,
#rocm-rn-components:has(tbody.rocm-components-dev td:hover)
.rocm-components-tools
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-dev td:hover) tr:hover > td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-perf td:hover)
.rocm-components-perf
th,
#rocm-rn-components:has(tbody.rocm-components-perf td:hover)
.rocm-components-tools
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-perf td:hover) tr:hover > td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-system td:hover)
.rocm-components-system
th,
#rocm-rn-components:has(tbody.rocm-components-system td:hover)
.rocm-components-tools
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-system td:hover) tr:hover > td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-compilers td:hover)
.rocm-components-compilers
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-compilers td:hover)
tr:hover
> td {
background-color: var(--pst-color-table-row-hover-bg);
}
#rocm-rn-components:has(tbody.rocm-components-runtimes td:hover)
.rocm-components-runtimes
th:first-of-type,
#rocm-rn-components:has(tbody.rocm-components-runtimes td:hover) tr:hover > td {
background-color: var(--pst-color-table-row-hover-bg);
}

View File

@@ -0,0 +1,74 @@
/* ------------------ Compatibility options grid ------------------ */
html {
--compat-border-radius: 2px;
--compat-accent-color: var(--pst-color-primary);
--compat-bg-color: var(--pst-color-on-background);
--compat-fg-color: var(--pst-color-primary-text);
--compat-head-color: var(--pst-color-surface);
--compat-param-hover-color: var(--pst-color-link-hover);
--compat-param-selected-color: var(--pst-color-primary);
--compat-border-color: var(--pst-color-border);
}
html[data-theme="light"] {
--compat-param-disabled-color: var(--pst-gray-300);
}
html[data-theme="dark"] {
--compat-param-disabled-color: var(--pst-gray-600);
}
div#vllm-benchmark-ud-params-picker.container-fluid {
padding: 0 0 1rem 0;
}
div[data-param-k="model-group"],
div[data-param-k="model"] {
background-color: var(--compat-bg-color);
padding: 2px;
border: solid 1px var(--compat-border-color);
font-weight: 500;
cursor: pointer;
}
div[data-param-k="model-group"][data-param-state="selected"],
div[data-param-k="model"][data-param-state="selected"] {
background-color: var(--compat-param-selected-color);
color: var(--compat-fg-color);
}
div[data-param-k="model-group"]:hover,
div[data-param-k="model"]:hover {
background-color: var(--compat-param-hover-color);
color: var(--compat-fg-color);
}
/*
div[data-param-k="model-group"][data-param-state="latest-version"] {
background-color: var(--compat-param-selected-color);
color: var(--compat-fg-color);
}
div[data-param-k="model-group"][data-param-state="disabled"] {
background-color: var(--compat-param-disabled-color);
text-decoration: line-through;
text-decoration-color: var(--pst-color-danger);
cursor: auto;
}
*/
.model-param-head {
background-color: var(--compat-head-color);
padding: 0.15rem 0.15rem 0.15rem 0.67rem;
border-right: solid 3px var(--compat-accent-color);
font-weight: 600;
}
.model-param {
border: solid 1px var(--compat-border-color);
font-weight: 500;
}
.hidden {
display: none !important;
}

View File

@@ -0,0 +1,212 @@
function ready(proc) {
// Check if page is loaded. If so, init.
if (document.readyState !== "loading") {
proc();
} else {
// Otherwise, wait for DOMContentLoaded event.
document.addEventListener("DOMContentLoaded", proc);
}
}
ready(() => {
const ModelPicker = {
// Selector strings for DOM elements
SELECTORS: {
CONTAINER: "#vllm-benchmark-ud-params-picker",
MODEL_GROUP_BTN: 'div[data-param-k="model-group"][data-param-v]',
MODEL_PARAM_BTN: 'div[data-param-k="model"][data-param-v]',
MODEL_DOC: "div.model-doc",
},
CSS_CLASSES: {
HIDDEN: "hidden",
},
ATTRIBUTES: {
PARAM_KEY: "data-param-k", // URL search parameter key (i.e., "model")
PARAM_VALUE: "data-param-v", // URL search param value (e.g., "pyt_vllm_llama-3.1-8b", "pyt_vllm_llama-3.1-70b") -- these are MAD model tags
PARAM_GROUP: "data-param-group", // Model group (e.g., "llama", "mistral")
PARAM_STATE: "data-param-state", // Selection state
},
// Cache DOM elements
elements: {
container: null,
modelGroups: null,
modelParams: null,
modelDocs: null,
},
data: {
availableModels: new Set(),
modelsByGroup: new Map(),
modelToGroupMap: new Map(),
formattedModelClassMap: new Map(), //TODO
},
init() {
this.elements.container = document.querySelector(
this.SELECTORS.CONTAINER,
);
if (!this.elements.container) return;
this.cacheDOMElements();
if (!this.validateElements()) return;
this.buildModelData();
this.bindEvents();
this.initializeState();
},
cacheDOMElements() {
const { CONTAINER, MODEL_GROUP_BTN, MODEL_PARAM_BTN, MODEL_DOC } =
this.SELECTORS;
this.elements = {
container: document.querySelector(CONTAINER),
modelGroups: document.querySelectorAll(MODEL_GROUP_BTN),
modelParams: document.querySelectorAll(MODEL_PARAM_BTN),
modelDocs: document.querySelectorAll(MODEL_DOC),
};
},
validateElements() {
const { modelGroups, modelParams } = this.elements;
if (!modelGroups.length || !modelParams.length) {
console.warn("Model picker is missing required elements");
return false;
}
return true;
},
buildModelData() {
const { PARAM_VALUE, PARAM_GROUP } = this.ATTRIBUTES;
this.elements.modelParams.forEach((model) => {
const modelTag = model.getAttribute(PARAM_VALUE);
const groupTag = model.getAttribute(PARAM_GROUP);
if (!modelTag || !groupTag) return;
this.data.availableModels.add(modelTag);
this.data.modelToGroupMap.set(modelTag, groupTag);
// FIXME: this is because Sphinx auto-formats class names to use dashes
this.data.formattedModelClassMap.set(
modelTag,
modelTag.replace(/[^a-zA-Z0-9]/g, "-"),
);
if (!this.data.modelsByGroup.has(groupTag)) {
this.data.modelsByGroup.set(groupTag, []);
}
this.data.modelsByGroup.get(groupTag).push(modelTag);
});
},
// Event listeners for user interactions
bindEvents() {
const handleInteraction = (event) => {
const target = event.target.closest(`[${this.ATTRIBUTES.PARAM_KEY}]`);
if (!target) return;
const paramType = target.getAttribute(this.ATTRIBUTES.PARAM_KEY);
const paramValue = target.getAttribute(this.ATTRIBUTES.PARAM_VALUE);
if (paramType === "model") {
const groupTag = target.getAttribute(this.ATTRIBUTES.PARAM_GROUP);
if (groupTag) this.updateUI(paramValue, groupTag);
} else if (paramType === "model-group") {
const firstModelInGroup = this.data.modelsByGroup.get(paramValue)
?.[0];
if (firstModelInGroup) this.updateUI(firstModelInGroup, paramValue);
}
};
this.elements.container.addEventListener("click", handleInteraction);
this.elements.container.addEventListener("keydown", (event) => {
if (event.key === "Enter" || event.key === " ") {
event.preventDefault();
handleInteraction(event);
}
});
},
// Update the page based on the selected model
updateUI(modelTag, groupTag) {
const validModel = this.setModelSearchParam(modelTag);
// Update model group buttons
this.elements.modelGroups.forEach((group) => {
const isSelected =
group.getAttribute(this.ATTRIBUTES.PARAM_VALUE) === groupTag;
group.setAttribute(
this.ATTRIBUTES.PARAM_STATE,
isSelected ? "selected" : "",
);
group.setAttribute("aria-selected", isSelected.toString());
});
// Update model buttons
this.elements.modelParams.forEach((model) => {
const isInSelectedGroup =
model.getAttribute(this.ATTRIBUTES.PARAM_GROUP) === groupTag;
const isSelectedModel =
model.getAttribute(this.ATTRIBUTES.PARAM_VALUE) === validModel;
model.classList.toggle(this.CSS_CLASSES.HIDDEN, !isInSelectedGroup);
model.setAttribute(
this.ATTRIBUTES.PARAM_STATE,
isSelectedModel ? "selected" : "",
);
model.setAttribute("aria-selected", isSelectedModel.toString());
});
// Update visibility of doc sections
const formattedClass = this.data.formattedModelClassMap.get(validModel);
if (formattedClass) {
this.elements.modelDocs.forEach((doc) => {
doc.classList.toggle(
this.CSS_CLASSES.HIDDEN,
!doc.classList.contains(formattedClass),
);
});
}
},
// Get the current model from the URL search parameters.
getModelSearchParam() {
return new URLSearchParams(location.search).get("model");
},
// Set the model in the URL search parameters, or fallback to the first available one.
setModelSearchParam(modelTag) {
const defaultModel = [...this.data.availableModels][0];
const model = this.data.availableModels.has(modelTag)
? modelTag
: defaultModel;
const searchParams = new URLSearchParams(location.search);
searchParams.set("model", model);
history.replaceState(
{},
"",
`${location.pathname}?${searchParams.toString()}`,
);
return model;
},
// Initialize the UI state based on the current URL search parameter or default values.
initializeState() {
const currentModel = this.getModelSearchParam();
const validModel = this.setModelSearchParam(currentModel);
const initialGroup = this.data.modelToGroupMap.get(validModel) ??
[...this.data.modelsByGroup.keys()][0];
if (initialGroup) {
this.updateUI(validModel, initialGroup);
}
},
};
ModelPicker.init();
});

View File

@@ -1,92 +0,0 @@
const TOC_QUERY = ".bd-docs-nav";
const TOC2_QUERY = ".bd-sidebar-secondary";
// /install/rocm.html
const INSTALL_PAGE_DIR = "install";
const INSTALL_PAGE_FILE = "rocm.html";
const TOC_ENTRIES_TO_MODIFY = [
{ tocQuery: "a[href$='redirect/_prerequisites.html']", toc2Query: "a[href='#prerequisites']" },
{ tocQuery: "a[href$='redirect/_install.html']", toc2Query: "a[href='#installation']" },
{ tocQuery: "a[href$='redirect/_post-install.html']", toc2Query: "a[href='#post-installation']" },
{ tocQuery: "a[href$='redirect/_uninstall.html']", toc2Query: "a[href='#uninstalling']" },
];
function domReady(callback) {
if (document.readyState !== "loading") callback();
else document.addEventListener("DOMContentLoaded", callback, { once: true });
}
function getDocsRoot() {
const pathname = window.location.pathname;
const parts = pathname.split("/").filter(Boolean);
// If ur already inside /install/, preserve the path up to install/
if (pathname.includes(`/${INSTALL_PAGE_DIR}/`)) {
const installIdx = parts.indexOf(INSTALL_PAGE_DIR);
return "/" + parts.slice(0, installIdx + 1).join("/") + "/";
}
// HACK:
// Look for version pattern: at least two dots (e.g., 6.4.3, 7.10.0-preview)
const versionIdx = parts.findIndex(part =>
(part.match(/\./g) || []).length >= 2 || /^\d+$/.test(part)
);
if (versionIdx !== -1) {
return "/" + parts.slice(0, versionIdx + 1).join("/") + `/${INSTALL_PAGE_DIR}/`;
}
// Fallback to root-level /install/
return `/${INSTALL_PAGE_DIR}/`;
}
function buildHref(docsRoot, page, hash) {
// If already on the install page, just use hash anchors
const pathname = window.location.pathname;
const isOnInstallPage = pathname.endsWith(`/${INSTALL_PAGE_DIR}/${INSTALL_PAGE_FILE}`) ||
pathname.endsWith(`/${INSTALL_PAGE_FILE}`);
if (isOnInstallPage && hash) {
return `#${hash}`;
}
return `${docsRoot}${page}${hash ? "#" + hash : ""}`;
}
function watchClassChange(elem, cls, onAdd, onRemove) {
if (!elem) return;
const obs = new MutationObserver(() => {
elem.classList.contains(cls) ? onAdd?.() : onRemove?.();
});
obs.observe(elem, { attributes: true, attributeFilter: ["class"] });
}
domReady(() => {
const toc = document.querySelector(TOC_QUERY);
const toc2 = document.querySelector(TOC2_QUERY);
if (!toc) return;
const docsRoot = getDocsRoot();
TOC_ENTRIES_TO_MODIFY.forEach((item) => {
const tocElem = toc.querySelector(item.tocQuery);
if (!tocElem) {
console.warn(`[ROCmDocsToc]: No ${item.tocQuery} found on page`);
return;
}
const anchorId = item.toc2Query.match(/#([^'"\]]+)/)?.[1];
if (!anchorId) return;
tocElem.href = buildHref(docsRoot, INSTALL_PAGE_FILE, anchorId);
const toc2Elem = toc2?.querySelector(item.toc2Query);
if (!toc2Elem) return;
watchClassChange(
toc2Elem,
"active",
() => tocElem.parentElement.classList.add("current"),
() => tocElem.parentElement.classList.remove("current"),
);
});
});