每月 9 次重大发布
0.10.0 | 2024 年 2 月 10 日 |
---|---|
0.9.0 | 2023 年 1 月 21 日 |
0.8.0 | 2022 年 5 月 27 日 |
0.7.0 | 2020 年 12 月 7 日 |
0.3.0 | 2017 年 7 月 20 日 |
#7 在 硬件支持
48,916 每月下载量
用于 27 个crates(22 个直接使用)
760KB
14K SLoC
nvml-wrapper
nvml-wrapper 是 NVIDIA 管理库(NVML)的一个安全且易于使用的 Rust 封装,NVML 是一个基于 C 的程序接口,用于监控和管理 NVIDIA GPU 中的各种状态。
use nvml_wrapper::Nvml;
let nvml = Nvml::init()?;
// Get the first `Device` (GPU) in the system
let device = nvml.device_by_index(0)?;
let brand = device.brand()?; // GeForce on my system
let fan_speed = device.fan_speed(0)?; // Currently 17% on my system
let power_limit = device.enforced_power_limit()?; // 275k milliwatts on my system
let encoder_util = device.encoder_utilization()?; // Currently 0 on my system; Not encoding anything
let memory_info = device.memory_info()?; // Currently 1.63/6.37 GB used on my system
// ... and there's a whole lot more you can do. Most everything in NVML is wrapped and ready to go
在您的系统上尝试 basic_usage
示例
NVML 旨在作为第三方应用程序的平台,也是 NVIDIA nvidia-smi 工具的底层库。
用法
nvml-wrapper
在 NVML 的生成绑定之上构建,这些绑定使用了 libloading
crate。这意味着 NVML 库在调用 Nvml::init
时被加载,如果 NVML 不存在,则可以返回错误,使得在缺乏相关硬件的系统上运行时可以动态删除与 NVIDIA 相关的功能。
Nvml::init
成功执行意味着
- NVML 库存在于系统上并且可以打开
- 初始化 NVML 的函数符号已成功加载和调用
- 已尝试加载所有其他 NVML 函数符号
从 NVML 库中调用 Nvml::init
调用期间无法加载的每个函数都将返回错误。
请注意,不建议重复调用 Nvml::init
,因为构造函数每次被调用时都必须从库中加载函数符号。相反,调用一次 Nvml::init
并将结果 Nvml
实例存储到某处,以便在整个程序生命周期中访问(例如,在 once_cell
中)。
NVML 支持
本包装器正在针对 NVML 版本 11 进行开发,并目前支持该版本。根据 NVIDIA 的保证,NVML 的每个新版本都将向后兼容,因此,无论 NVML 版本如何升级,本包装器都应该能够继续正常运行,而不会出现任何问题。
旧版功能
在新版 NVML 的发布中,有时会出现 API 版本级别的升级。例如
nvmlDeviceGetComputeRunningProcesses
nvmlDeviceGetComputeRunningProcesses_v2
nvmlDeviceGetComputeRunningProcesses_v3
旧版函数通常可以与新版的 NVML 版本一起工作;然而,新版的函数版本不能与旧版的 NVML 安装兼容。
默认情况下,此包装器仅提供对新版函数版本的访问。如果您需要调用旧版函数的能力,请启用 legacy-functions
功能。
MSRV
当前最低支持的 Rust 版本是 1.60.0。我不会刻意避免升级这个版本。
Cargo 功能
可以通过切换 serde
功能来为每个 NVML 数据结构启用 #[derive(Serialize, Deserialize)]
。
许可
根据您的选择,可在 Apache License, Version 2.0 或 MIT 许可证 下使用。除非您明确说明,否则根据 Apache-2.0 许可证定义的,您提交的旨在包含在此软件包中的任何有意贡献,将根据上述许可进行双重许可,而不附加任何其他条款或条件。
依赖关系
~0.8–6MB
~29K SLoC