news 2026/9/17 14:37:45

ROCm Ubuntu 版本选择器机制解析:从条件化文档指令到 apt 安装实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ROCm Ubuntu 版本选择器机制解析:从条件化文档指令到 apt 安装实战

ROCm Ubuntu 版本选择器机制解析:从条件化文档指令到 apt 安装实战

【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build

本文以 AMD ROCm 官方文档仓库(legacy-rocm-build)中的 ubuntu-ver-selector.rst 为切入点,剖析 ROCm 安装文档中"按 GPU 型号与设备家族动态呈现 Ubuntu 版本选项"的条件化文档机制,并延伸到仓库中真实的安装命令、仓库源配置与 Python 版本要求。读完本文,你将理解这套选择器的指令语法、状态流转与持久化原理,并能据此为不同 Ubuntu 版本(26.04 / 24.04 / 22.04)的 ROCm 环境完成从仓库注册到apt install amdrocm7.14的完整安装。

Ubuntu 版本选择器在 ROCm 安装流程中的位置

ROCm 的安装主文档 rocm.rst 通过一系列include指令将选择器拆分为多个独立文件,组装成一个层层递进的交互式安装向导:

  1. 设备家族(Device family):faminstinct/radeon/ryzen/all),见 fam-multi-arch-selector.rst;
  2. 操作系统发行版(Linux distribution):osubuntu/debian/rhel等),见 os-selector.rst;
  3. GPU 型号:gpu(如mi355xmi300xrx-9070-xt等),见 gpu-selector.rst;
  4. Ubuntu 版本(本文主角)ubuntu-ver,即 ubuntu-ver-selector.rst;
  5. 安装方式:ipkgman/pip/tar/runfile),见 install-method-selector.rst。

也就是说,ubuntu-ver是用户选定"操作系统 = Ubuntu"之后的下一个细分维度,其最终选择结果会反过来驱动安装章节(200-install.rst)中仓库源 URL、内核驱动与 Python 版本等内容的显隐。

条件化指令语法:selected/selector/selector-option

ubuntu-ver-selector.rst全部由三个 Sphinx 自定义指令构成,它们在 selector/init.py 中注册并渲染:

  • .. selected:: 条件:声明"仅当条件满足时,其内部内容才可见"。os=ubuntufam=instinct可以嵌套,形成os=ubuntufam=instinct的叠加条件;
  • .. selector:: 标题:渲染一个选择器组(一组可点击的选项块),核心参数:
    • :key::该组选项写入全局状态所用的键名。这里统一为ubuntu-ver,经 utils.py 的normalize_key()处理:空格转下划线、转小写、去首尾空白;
    • :show-cond::该组整体何时可见,例如gpu=mi355x gpu=mi350x ...(空格分隔的多值即"任一匹配");
  • .. selector-option:: 显示文本:单个可选项,常用参数:
    • :value::选择后写入状态的值(如26.0424.0422.04);
    • :show-cond::该选项的显示条件;
    • :width::选项块的栅格宽度,可为 1–12 的整数(对应 Bootstrapcol-N)或百分比字符串(如50%)。源码中_parse_width()(selector/init.py)负责校验:整数越界或百分比不在 (0,100] 时会告警并回退到默认值 6。

关键语义:show-cond的多值匹配

指令中形如:show-cond: gpu=mi355x gpu=mi350x gpu=mi325x的写法,会被 utils.py 的kv_to_data_attr()解析为 JSON 对象:

{"gpu": ["mi355x", "mi350x", "mi325x"]}

并写入data-show-cond属性。前端 selector.js 的matchesConditions()在匹配数组值时采用"任一命中即满足"的语义,因此该条件等价于"GPU 属于 mi355x / mi350x / mi325x 之一时显示"。

不同设备家族下的 Ubuntu 版本矩阵

把 ubuntu-ver-selector.rst 按selected分支拆解,可以得到完整的版本矩阵:

设备家族分支可见 GPU 条件可选 Ubuntu 版本
fam=instinct(第一组)mi355x / mi350x / mi325x / mi300x / mi300a / mi250x / mi250 / mi210 / mi10026.04、24.04.4(24.04)、22.04.5(22.04
fam=instinct(mi350p 专属)gpu=mi350p26.04、24.04.4
fam=radeon/fam=all(图形工作负载w=graphics26.04、24.04.4
fam=radeon/fam=all(计算工作负载w=compute26.04、24.04.4、22.04.5
fam=ryzen26.04、24.04
os=wsl(WSL2 分支)fam=radeonUbuntu 26.04 / 24.04 / 22.04
os=wsl(WSL2 分支)fam=ryzenUbuntu 26.04 / 24.04

从矩阵可以归纳出三条值得注意的规则:

  1. 22.04 的适用范围最窄:它只出现在 Instinct 计算负载与 Radeon/All 的计算负载分支中,且从不出现在 Ryzen 与mi350p分支——这反映旧版本 LTS 与较新硬件(如 MI350 系列)之间的支持边界;
  2. w=graphicsw=compute的版本集合不同:图形工作负载分支没有 22.04,而计算分支保留了三代 LTS 选项;
  3. 同一:key: ubuntu-ver在多个分支重复出现:前端源码中专门为"多个选择器组共享同一 key"(如gpuubuntu-ver)设计了处理逻辑,保证任一分支的选择都会统一写入同一个状态键。

版本选择如何传导到真实安装命令

选择器本身只是文档的"外壳",其价值在于驱动 200-install.rst 中每个版本的差异化内容。以下是ubuntu-ver三个取值对应的真实仓库证据。

1. ROCm 软件仓库源(apt 源)按版本区分

选择 26.04 / 24.04 / 22.04 后,仓库注册命令中repo.amd.com的路径段分别变为ubuntu2604/ubuntu2404/ubuntu2204,例如 24.04(noble):

# Download and install GPG key sudo mkdir --parents --mode=0755 /etc/apt/keyrings wget https://repo.amd.com/rocm/packages-multi-arch/gpg/rocm.gpg -O - | \ gpg --dearmor | sudo tee /etc/apt/keyrings/amdrocm.gpg > /dev/null sudo tee /etc/apt/sources.list.d/rocm.list << EOF deb [arch=amd64 signed-by=/etc/apt/keyrings/amdrocm.gpg] https://repo.amd.com/rocm/packages-multi-arch/ubuntu2404 stable main EOF sudo apt update

26.04 对应ubuntu2604源,22.04 对应ubuntu2204源,命令结构完全一致,仅路径段不同。

2. 核心元包:amdrocm7.14

注册仓库后,安装命令与 GPU 型号(gfx状态)联动:

# fam=all(通用核心包) sudo apt install amdrocm7.14 # 按 GPU 架构安装对应元包(示例) sudo apt install amdrocm7.14-gfx942 # 对应 MI300 系列 sudo apt install amdrocm7.14-gfx90a # 对应 MI250 系列 sudo apt install amdrocm7.14-gfx1100 # 对应 Radeon RX 7000 系列 sudo apt install amdrocm7.14-gfx1151 # 对应 Ryzen AI APU

3. pip 安装路径下的 Python 版本要求

若选择pip安装方式,100-prerequisites.rst 按ubuntu-ver给出不同的受支持 Python 版本:

Ubuntu 版本推荐 Python安装命令
26.04Python 3.14sudo apt install python3.14 python3.14-venv
24.04Python 3.12sudo apt install python3.12 python3.12-venv
22.04Python 3.11sudo apt install python3.11 python3.11-venv

4. Ryzen APU 的 OEM 内核要求

对 Ryzen 家族且ubuntu-ver=24.04的安装,文档要求安装 OEM 内核 6.14:

sudo apt update && sudo apt install linux-oem-24.04c

安装后必须重启系统。这一要求同时出现在计算负载与图形负载两个分支中,仅针对 24.04 生效。

5. 图形工作负载的amdgpu-install脚本

选择w=graphicsos=ubuntu时,需要先安装amdgpu-install脚本,其.deb包按 Ubuntu 版本使用不同的代号目录:26.04 对应resolute、24.04 对应noble、22.04 对应jammy31.40.1版本示例):

sudo apt update wget https://repo.radeon.com/amdgpu-install/31.40.1/ubuntu/noble/amdgpu-install_31.40.1.314001-1_all.deb sudo apt install ./amdgpu-install_31.40.1.314001-1_all.deb

安装前必备项与 GPU 权限配置

无论选择哪个 Ubuntu 版本,100-prerequisites.rst 都要求完成两项准备工作:

  1. 安装依赖库:部分 ROCm 工具依赖libatomiclibquadmath,在 Ubuntu 上执行:

    sudo apt install libatomic1 libquadmath0
  2. 配置 GPU 访问权限,二选一:

    • 组员方式(默认):将当前用户加入videorender组:

      sudo usermod -a -G render,video $LOGNAME
    • udev 规则方式(系统级、免用户组管理):

      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

    修改后需重启系统使配置生效。

选择器引擎的源码级实现

这套交互式选择器并非静态文档,而是由仓库自研的 Sphinx 扩展(docs/extension/rocm_docs_custom/selector/)驱动。理解其实现有助于解释选择器行为的"为什么"。

指令层:setup()注册与节点渲染

selector/init.py 的setup()注册了 5 个指令:selectorselector-dropdownselector-infoselector-optionselected-content(以及别名selected)。几个值得注意的实现细节:

  • 默认选项自动兜底:若一组选项中没有显式标记:default:,则第一个选项被自动设为默认(option_nodes[0]["default"] = True);
  • 值可携带额外绑定selector-option:value:支持"mi355x gfx=gfx950 arch=cdna3"这种"裸值 + 若干key=value"的写法,前者是选项自身值,后者在选择该选项时作为额外状态注入(代码注释明确解释了这一点)——这也是gpu等键会在多个选择器组间共享的机制基础;
  • 宽度校验_parse_width()接受 1–12 的整数或百分比,非法值回退为 6。

前端状态机:selector.js

selector/static/selector.js 实现了完整的客户端状态管理:

  • 全局状态对象state:以key → value保存所有选择器当前值;
  • 状态持久化与优先级:初始化时按URL 查询参数 > localStorage > 默认值合并状态,因此"安装环境"的选择可以复制 URL 分享、也能跨页面记住;同时会把当前页面上不存在的陈旧状态键立即清除;
  • URL 同步syncStateToURL()通过history.replaceState把选择写入 URL 查询串(如?os=ubuntu&fam=instinct&gpu=mi300x&ubuntu-ver=24.04),方便搜索引擎与用户收藏精确的安装组合;
  • 可见性收敛循环updateVisibility()内使用MAX_VISIBILITY_CYCLES = 5防止无限循环,反复执行"按show-cond显示/隐藏 → 重新调和各组选中项 → 重算额外绑定"直到状态稳定;
  • 自动换选reconcileGroupSelections()保证每个可见组始终有一个合法选中项——当高层级选择使当前选中项被禁用/隐藏时,会按"持久化状态值 → 默认项 → 第一个可用项"的顺序自动替换;
  • 无障碍支持:选项块以role="radiogroup"/role="radio"渲染,支持tabindex与 Enter/Space 键盘操作,隐藏元素带aria-hidden

辅助工具:utils.py

utils.py 中的两个纯函数是所有指令的基石:

  • normalize_key(key)key.replace(" ", "_").lower().strip(),保证所有键名规范统一;
  • kv_to_data_attr(name, kv_str):把"gpu=mi355x gpu=mi350x"这类空格分隔的键值对转换为 JSON 字符串并写入data-show-cond属性,供前端解析匹配。

小结

ubuntu-ver-selector.rst表面上是几十行选择器声明,实际上它是 ROCm 安装体验中"操作系统 → 版本"这一关键决策层的唯一事实来源。它的每个选项取值都精确映射到仓库注册路径(ubuntu2604/ubuntu2404/ubuntu2204)、元包名(amdrocm7.14*)、Python 版本(3.14/3.12/3.11)、OEM 内核乃至amdgpu-install脚本代号,实现了"一次选择、全链路联动"。而其背后的 Sphinx 扩展与前端状态机,则为这类大型产品文档提供了一个可复用、可分享、可检索的条件化文档范式——读者若需在自己的文档体系中复刻类似能力,可直接以本仓库 selector/init.py 与 selector.js 为参考实现。

【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 14:37:26

自然连接⋈的真相:不是自动匹配,而是隐式多条件陷阱

1. 项目概述&#xff1a;为什么“自然连接”是数据库里最常被误解、也最该被吃透的操作&#xff1f;“土话笔记&#xff1a;数据库——自然连接(符号⋈)”这个标题&#xff0c;乍看像学生课后随手记的潦草笔记&#xff0c;但恰恰是这种带点烟火气的命名&#xff0c;戳中了数据库…

作者头像 李华
网站建设 2026/9/17 14:32:36

DataGrip连接达梦数据库完整指南:从JDBC驱动到排障实战

最近接手一个从Oracle往达梦数据库迁移的项目&#xff0c;数据切过去了&#xff0c;开发工具却卡了我整整两天。打开DataGrip一看&#xff0c;驱动列表里根本没达梦这一项。网上翻了很多资料&#xff0c;一半是讲达梦自带的DM管理工具怎么用&#xff0c;另一半是零散提问没人完…

作者头像 李华
网站建设 2026/9/17 14:31:00

基于QPSO的IEEE33配电网重构:MATLAB实现与潮流计算详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 14:30:46

Java筛选法求素数:埃氏筛、BitSet、线性筛与分段并行优化

简介&#xff1a;这份PDF文档围绕Java使用筛选法求n以内素数展开&#xff0c;面向正在学习算法基础、准备课程实验或面试刷题的Java开发者与在校学生。内容以埃拉托斯特尼筛法为主线&#xff0c;给出可直接参考的AratosternyAlgorithm示例&#xff0c;从数组标记0和1的状态约定…

作者头像 李华