NVIDIA 完全过渡到开源 GPU 内核模块
目录
- 支持的 GPU
- 安装程序更改
- 将包管理器与 CUDA 元包配合使用
- 使用 runfile
- 使用安装帮助程序脚本
- 包管理器详细信息
- apt:基于 Ubuntu 和 Debian 的发行版
- dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linux
- zypper:SUSE Linux Enterprise Server 或 OpenSUSE
- 包管理器摘要
- 适用于 Linux 的 Windows 子系统
- CUDA工具包
- Github
- 如何构建
- 支持的目标 CPU 体系结构
- 其他构建旋钮
- 支持的工具链
- 支持的 Linux 内核版本
- 如何贡献
- 如何报告问题
- 内核模块的内核接口和与操作系统无关的组件
- 目录结构布局
- Nouveau 设备驱动程序集成
- 兼容的 GPU
- Forums
- 参考链接
借助 R515 驱动程序,NVIDIA 于 2022 年 5 月发布了一组 Linux GPU 内核模块,作为具有 GPL 和 MIT 双重许可的开源模块。初始版本以数据中心计算 GPU 为目标,GeForce 和 Workstation GPU 处于 alpha 状态。
当时,NVIDIA宣布后续版本将提供更强大、功能更齐全的 GeForce 和 Workstation Linux 支持,NVIDIA 开放内核模块最终将取代闭源驱动程序。
NVIDIA GPU 共享通用的驱动程序架构和功能集。适用于台式机或笔记本电脑的同一驱动程序可在云中运行世界上最先进的 AI 工作负载。对我们来说,恰到好处地做到这一点非常重要。
两年过去了,NVIDIA通过开源 GPU 内核模块实现了同等或更好的应用程序性能,并增加了大量新功能:
- 异构内存管理 (HMM)
- 支持机密计算
- Grace 平台的一致内存架构
- 还有更多…
NVIDIA现在正处于完全过渡到开源 GPU 内核模块的正确举措,NVIDIA将在即将发布的 R560 驱动程序版本中做出这一改变。
支持的 GPU
并非每个 GPU 都与开源 GPU 内核模块兼容。
对于 NVIDIA Grace Hopper 或 NVIDIA Blackwell 等尖端平台,必须使用开源 GPU 内核模块。这些平台不支持专有驱动程序。
对于来自 Turing、Ampere、Ada Lovelace 或 Hopper 架构的较新 GPU,NVIDIA 建议切换到开源 GPU 内核模块。
对于 Maxwell、Pascal 或 Volta 架构中较旧的 GPU,开源 GPU 内核模块与这些平台不兼容。需要继续使用 NVIDIA 专有驱动程序。
对于在同一系统中使用较旧和新 GPU 的混合部署,请继续使用专有驱动程序。
如果不确定,NVIDIA 会提供一个新的检测帮助程序脚本来帮助指导您选择哪个驱动程序。有关详细信息,请参阅本文后面的“使用安装帮助程序脚本”部分。
安装程序更改
通常,所有安装方法安装的驱动程序的默认版本都是从专有驱动程序切换到开源驱动程序。有几个特定方案值得特别注意:
- 使用 CUDA 元包的包管理器
- 运行文件
- 安装帮助程序脚本
- 包管理器详细信息
- 适用于 Linux 的 Windows 子系统
- CUDA工具包
将包管理器与 CUDA 元包配合使用
使用包管理器(而不是 .run 文件)安装 CUDA Toolkit 时,安装CUDA 元包存在并且常用。通过安装顶级软件包,您可以安装 CUDA 工具包和关联的驱动程序版本的组合。例如,通过在 CUDA 12.5 发布时间范围内安装 cuda,您可以获得专有的 NVIDIA 驱动程序 555 以及 CUDA 工具包 12.5。
图 1 显示了此包结构。
以前,使用开源 GPU 内核模块意味着可以使用顶级元包。您必须安装特定于发行版的 NVIDIA 驱动程序开放包以及您选择的 cuda-toolkit-X-Y 包。
从 CUDA 12.6 版本开始,流程有效地切换了位置(图 2)。
使用 runfile
如果您使用该文件安装 CUDA 或 NVIDIA 驱动程序,安装程序会查询您的硬件并自动为您的系统安装最适合的驱动程序。UI 切换也可用于在专有驱动程序和开源驱动程序之间进行选择,具体取决于您的选择。
如果通过 CUDA .run 文件并使用用户界面进行安装,则现在会看到类似于以下内容的菜单:
如果通过驱动程序 .run 文件进行安装,则会看到类似的选择(图 3)。
您还可以使用命令行传递覆盖,以便在没有用户界面的情况下进行安装,或者如果您使用的是 Ansible 等自动化工具。
# sh ./cuda_12.6.0_560.22_linux.run --override --kernel-module-type=proprietary# sh ./NVIDIA-Linux-x86_64-560.run --kernel-module-type=proprietary
使用安装帮助程序脚本
如前所述,如果您不确定要为系统中的 GPU 选择哪个驱动程序,NVIDIA 创建了一个帮助程序脚本来指导您完成选择过程。
要使用它,请先使用包管理器安装包,然后运行脚本:nvidia-driver-assistant
$ nvidia-driver-assistant
包管理器详细信息
为了获得一致的体验,NVIDIA 建议您使用包管理器来安装 CUDA 工具包和驱动程序。但是,不同发行版使用哪些包管理系统或软件包的结构的具体细节可能因特定发行版而异。
本部分概述了各种平台所需的特定详细信息、注意事项或迁移步骤。
apt:基于 Ubuntu 和 Debian 的发行版
运行以下命令:
$ sudo apt-get install nvidia-open
要在 Ubuntu 20.04 上使用 metapackage 进行升级,请先切换到打开内核模块:cuda
$ sudo apt-get install -V nvidia-kernel-source-open$ sudo apt-get install nvidia-open
dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linux
运行以下命令:
$ sudo dnf module install nvidia-driver:open-dkms
要在基于 dnf 的发行版上使用元包进行升级,必须禁用模块流:cuda
$ echo "module_hotfixes=1" | tee -a /etc/yum.repos.d/cuda*.repo
$ sudo dnf install --allowerasing nvidia-open
$ sudo dnf module reset nvidia-driver
zypper:SUSE Linux Enterprise Server 或 OpenSUSE
运行以下命令之一:
# default kernel flavor
$ sudo zypper install nvidia-open
# azure kernel flavor (sles15/x86_64)
$ sudo zypper install nvidia-open-azure
# 64kb kernel flavor (sles15/sbsa) required for Grace-Hopper
$ sudo zypper install nvidia-open-64k
包管理器摘要
为简化起见,我们以表格格式压缩了包管理器建议。驱动程序版本 560 和 CUDA 工具包 12.6 之后的所有版本都将使用这些打包约定。
有关更多信息,请参阅 NVIDIA 数据中心驱动程序。
适用于 Linux 的 Windows 子系统
适用于 Linux 的 Windows 子系统 (WSL) 使用主机 Windows 操作系统中的 NVIDIA 内核驱动程序。您不应专门在此平台中安装任何驱动程序。如果使用的是 WSL,则无需进行任何更改或操作。
CUDA工具包
CUDA Toolkit 的安装通过包管理器保持不变。运行以下命令:
$ sudo apt-get/dnf/zypper install cuda-toolkit
更多信息
有关如何安装 NVIDIA 驱动程序或 CUDA 工具包的更多信息,包括在目前无法迁移到开源 GPU 内核模块时如何确保安装专有驱动程序,请参阅《CUDA 安装指南》中的驱动程序安装。
Github
https://github.com/NVIDIA/open-gpu-kernel-modules
NVIDIA Linux 开放 GPU 内核模块源代码
这是 NVIDIA Linux 开放 GPU 内核模块的源代码版本, 版本 550.100。
如何构建
要构建:
make modules -j$(nproc)
要安装,请先卸载所有现有的 NVIDIA 内核模块。然后 作为 root:
make modules_install -j$(nproc)
请注意,此处构建的内核模块必须与 GSP 一起使用 固件和用户空间 NVIDIA GPU 驱动程序组件来自相应的 550.100 驱动程序版本。这可以通过安装来实现 使用 .run 文件中的 NVIDIA GPU 驱动程序。例如,–no-kernel-modules
sh ./NVIDIA-Linux-[...].run --no-kernel-modules
支持的目标 CPU 体系结构
目前,内核模块可以针对 x86_64 或 aarch64 构建。 如果是交叉编译,请在 make 命令行上设置以下变量:
TARGET_ARCH=aarch64|x86_64
CC
LD
AR
CXX
OBJCOPY
例如,
# compile on x86_64 for aarch64
make modules -j$(nproc) \TARGET_ARCH=aarch64 \CC=aarch64-linux-gnu-gcc \LD=aarch64-linux-gnu-ld \AR=aarch64-linux-gnu-ar \CXX=aarch64-linux-gnu-g++ \OBJCOPY=aarch64-linux-gnu-objcopy
其他构建旋钮
NV_VERBOSE - 将其设置为“1”以打印执行的每个完整命令; 否则,将打印简洁的“CC”行。
DEBUG - 将此值设置为“1”以将内核模块构建为调试。默认情况下, 生成编译,不调试信息。这也使 内核模块中的各种调试日志消息。
这些变量可以在 make 命令行上设置。例如,
make modules -j$(nproc) NV_VERBOSE=1
支持的工具链
任何相当现代的 GCC 或 Clang 版本都可用于构建 内核模块。请注意,内核的内核接口层 模块必须使用用于构建 内核。
支持的 Linux 内核版本
NVIDIA 开放内核模块支持相同范围的 Linux 内核 专有 NVIDIA 内核模块支持的版本。 目前是 Linux 内核 3.10 或更高版本。
如何贡献
可以通过在 https://github.com/NVIDIA/open-gpu-kernel-modules 上创建拉取请求来做出贡献,我们将通过 GitHub 进行响应。
请注意,提交拉取请求时,系统将提示您接受 贡献者许可协议。
该代码库与 NVIDIA 的专有驱动程序共享,并且各种 对共享代码执行处理以生成源代码,即 在这里发布。这对可预见的未来有几个影响:
- GitHub 存储库将主要用作每个驱动程序的快照 释放。
- 我们不希望能够为个人提供修订历史记录 对 NVIDIA 的共享代码库所做的更改。可能会有 每个驱动程序版本只有一个 Git 提交。
- 我们可能无法将个人贡献作为单独的贡献来反映 GitHub 存储库中的 git 提交。
- 由于代码在发布之前会经过各种处理, 此处所做的贡献需要手动合并才能应用于共享 代码库。因此,此处进行的大型重构更改可能难以合并并接受回共享代码库。如果你有大 重构建议,请提前联系我们,以便我们进行协调。
如何报告问题
特定于 Open GPU 内核模块的问题可以在 https://github.com/NVIDIA/open-gpu-kernel-modules 存储库的“问题”部分。
此外,任何现有的错误报告场所都可用于通信 NVIDIA的问题,例如我们的论坛:
https://forums.developer.nvidia.com/c/gpu-graphics/linux/148
或 linux-bugs@nvidia.com。
请参阅“NVIDIA 联系信息和其他资源”部分 的 NVIDIA GPU 驱动程序自述文件了解详情。
如果您符合以下条件,请参阅单独的 SECURITY.md 文档 相信您已在此软件中发现了安全漏洞。
内核模块的内核接口和与操作系统无关的组件
NVIDIA的大多数内核模块都分为两个组件:
- “与操作系统无关”的组件:这是每个内核模块的组件 这与操作系统无关。
- “内核接口层”:这是每个内核模块的组件 特定于 Linux 内核版本和配置。
打包在 NVIDIA .run 安装包中时,与操作系统无关的 组件以二进制形式提供:它很大且耗时 编译,因此提供了预构建版本,以便用户执行 不必在每次驱动程序安装期间对其进行编译。对于 nvidia.ko 内核模块,此组件名为“nv-kernel.o_binary”。 对于 nvidia-modeset.ko 内核模块,此组件名为 “nv-modeset-kernel.o_binary”。nvidia-drm.ko 和 nvidia-uvm.ko 都不是 具有与操作系统无关的组件。
必须构建每个内核模块的内核接口层组件 对于目标内核。
目录结构布局
- kernel-open/内核接口层
- kernel-open/nvidia/nvidia.ko 的内核接口层
- kernel-open/nvidia-drm/nvidia-drm.ko 的内核接口层
- kernel-open/nvidia-modeset/nvidia-modeset.ko 的内核接口层
- kernel-open/nvidia-uvm/nvidia-uvm.ko 的内核接口层
- src/与操作系统无关的代码
- src/nvidia/nvidia.ko 的与操作系统无关的代码
- src/nvidia-modeset/nvidia-modeset.ko 的与操作系统无关的代码
- src/common/nvidia.ko 和 nvidia-modeset.ko 中的一个或多个使用的实用程序代码
- nouveau/用于与 Nouveau 设备驱动程序集成的工具
Nouveau 设备驱动程序集成
“nouveau”目录中的 Python 脚本用于提取一些 在源代码中编码的固件二进制映像(和相关数据)和 将它们存储为不同的文件。这些文件由 Nouveau 设备使用 驱动程序加载并与 GSP 固件通信。
二进制文件的布局如nouveau_firmware_layout.ods中描述, 这是一个 OpenDocument 电子表格文件,与大多数电子表格兼容 软件应用程序。
兼容的 GPU
NVIDIA 开放内核模块可用于任何图灵或更高版本的 GPU (具体见Github链接)。但是,在 DRIVER_VERION 版本中,GeForce 和 工作站支持被认为是 Beta 质量的。开放的内核模块 适合广泛使用,NVIDIA 会就任何问题请求反馈 遇到特定于他们。
有关功能支持和限制的详细信息,请参阅 NVIDIA GPU 驱动程序 最终用户自述文件:
https://us.download.nvidia.com/XFree86/Linux-x86_64/550.100/README/kernel_open.html
有关 vGPU 支持,请参阅 vGPU 主机中打包的 README.vgpu 打包了解更多详情。
在下表中,如果列出了三个 ID,则第一个是 PCI 设备 ID,第二个是 PCI 子系统供应商 ID,第三个是 PCI 子系统设备 ID。
Forums
https://forums.developer.nvidia.com/c/gpu-graphics/linux/148
参考链接
https://developer.nvidia.com/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/
https://developer.nvidia.com/zh-cn/blog/nvidia-releases-open-source-gpu-kernel-modules/
相关文章:

NVIDIA 完全过渡到开源 GPU 内核模块
目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt:基于 Ubuntu 和 Debian 的发行版dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper:SUSE …...

learning-cxx 学习cpp 环境配置 + bug解决
学习CPP网址 https://github.com/LearningInfiniTensor/learning-cxx 安装环境 1.配置xmake的环境 xmake是c的构建工具 最简单的配置方法就是安装mcvs,然后选择必要的那两个包 查看版本,是否安装成功 gcc --version g --version2.安装xmake 我的是…...
PHP 多线程和异步编程的常见陷阱
本文由 ChatMoney团队出品 在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段。然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突、死锁、超时、资源泄漏以及调试困难等。本文将详细探讨这些陷阱,并提供相应的…...

STL 哈希 学习总结
概述 基础概念 哈希是通过特定的算法,将任意长度的数据映射为固定长度的数据串中。该映射的结果就被称为哈希值,也可以称为散列值。 例如在存储一个10000这个数据的时候,如果使用数组的话,则需要开辟对应大小空间内存ÿ…...
vue3页面编写-导入导出excel、展开查询项等
数据保持 <router-view v-slot"{ Component, route }"><keep-alive><component :is"Component" :key"route.name" v-if"route.meta.keepAlive" /></keep-alive><component :is"Component" :key…...

Java学习 - Spring Boot整合 Thymeleaf 实例
什么是 Thymeleaf Thymeleaf 是新一代的 Java 模板引擎,类似于 Velocity、FreeMarker 等传统引擎,其语言和 HTML 很接近,而且扩展性更高; Thymeleaf 的主要目的是将优雅的模板引入开发工作流程中,并将 HTML 在浏览器中…...
ubuntu20.04安装终端终结者并设置为默认终端
1、安装 terminator sudo apt-get install terminator 2、Ctrl Alt T 试一下打开什么终端,我的默认启动的是terminator;如果想换换默认的终端,还需以下一步 3、安装dconf-tools,这个是设置默认终端的必须 sudo apt-get install dconf-tools…...

以Zookeeper为例 浅谈脑裂与奇数节点问题
一、脑裂现象的定义与影响 脑裂(split-brain)是指在分布式系统中,因网络分区或其他故障导致系统被切割成两个或多个相互独立的子系统,每个子系统可能独立选举出自己的领导节点。这一现象在依赖中心领导节点(如Elastic…...

最新版kubeadm搭建k8s(已成功搭建)
kubeadm搭建k8s(已成功搭建) 环境配置 主节点 k8s-master:4核8G、40GB硬盘、CentOS7.9(内网IP:10.16.64.67) 从节点 k8s-node1: 4核8G、40GB硬盘、CentOS7.9(内网IP:10…...
C++学习笔记-友元函数的定义与使用
一、引言 在C中,友元函数(Friend Function)是一个独特而强大的特性,它打破了类的封装性,允许一个或多个非成员函数访问类的私有(private)和保护(protected)成员。尽管这…...

熵、交叉熵、KL散度
这里写目录标题 熵KL散度引入交叉熵。交叉熵的二分类公式: 再次理解SoftMax函数结束 熵 熵,是一个物理上的概念,表示一个系统的不确定性程度,或者表示一个系统的混乱程序。 下边是信息熵的演示: 信息熵的公式如下&…...

THS配置keepalive(yjm)
启动完THS管理控制台和THS后,登录控制台,进入实例管理》节点管理,可以分别使用界面配置和编辑配置设置长连接。 1、界面配置 点击界面配置》集群设置,启用长连接,设置长连接数、最大请求数和超时时间。 2、编辑配置 …...
新加坡裸机云多IP服务器特性
新加坡裸机云多IP服务器是一种高性能、稳定性强,且具备多IP地址特性的服务器。它主要适用于需要高度计算性能、网络连接稳定和高安全性的业务场景,如跨境外贸等。下面将详细探讨该类型服务器的特性,rak部落为您整理发布新加坡裸机云多IP服务器…...

深入理解ADB:Android调试桥详解与使用指南
🍎个人博客:个人主页 🏆个人专栏:Android ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 1. 什么是ADB? ADB的基本原理: 2. ADB的安装与配置 安装ADB工具集: 配置ADB环境变量&am…...

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能
PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备,支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展,能够与医院HIS、集成平台的有效集成和融合,帮助医院实现了全院医学影像…...

无人机搭载无人机反制设备可行性分析
一、引言 随着无人机技术的飞速发展,无人机在各个领域的应用越来越广泛。然而,无人机的不当使用也可能带来安全隐患和隐私问题。因此,无人机反制设备应运而生,用于对非法或危险无人机进行干扰和控制。本文将对无人机搭载无人机反…...

MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、
一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件,提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中,你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例,展示了如何使用MATLAB的命令来实现正弦…...

【通信协议-RTCM】MSM语句(2) - RINEXMSM7语句总结(重要!自动化开发计算卫星状态常用)
注释: 在工作中主要负责的是RTCM-MSM7语句相关开发工作,所以主要介绍的就是MSM7语句相关内容 1. 相位校准参考信号 2. MSM1、MSM2、MSM3、MSM4、MSM5、MSM6和MSM7的消息头内容 DATA FIELDDF NUMBERDATA TYPENO. OF BITSNOTES Message Number - 消息编…...
ios CCUIFont.m
// // CCUIFont.h // CCFC // //#import <Foundation/Foundation.h>// 创建字体对象 #define CREATE_FONT(fontSize) [UIFont systemFontOfSize:(fontSize)]interface UIFont(cc) (void)logAllFonts;end // // CCUIFont.m // CCFC // //#import "CCUIFont.h&…...

调度子系统在特定时间执行
时序逻辑调度器设计模式允许您安排Simulink子系统在指定时间执行。以下模型说明了这种设计模式。 时序逻辑调度器图表包含以下逻辑: 时序逻辑调度器的关键行为 时序逻辑调度器图表包含两个状态,它们以不同的速率调度函数调用子系统A1、A2和A3的执行&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...