为获得最佳性能,请使用 DGX Spark 系统随附的电源适配器。使用其他适配器可能会降低性能、导致无法启动或意外关机。
nvidia-smi报告“内存使用:不支持” 在集成显卡(iGPU)平台上,nvidia-smi即使列出了每个进程的GPU内存,也会显示“内存使用:不支持”。这是预期行为,因为集成显卡没有专用的帧缓冲内存。
在软件更新发布时,您的 DGX Spark 设备上的 CUDA 版本已验证与您的系统硬件兼容。最新功能和性能改进可通过 NVIDIA NGC 容器(例如 PyTorch、vLLM 和 TensorRT-LLM)获得。
NVIDIA 正积极与第三方生态系统合作伙伴携手,将他们的软件引入 DGX Spark。例如,我们已就如何在基于统一内存架构 (UMA) 的系统上实现内存管理提供了指导,以帮助确保可用资源的报告准确无误。
DGX Spark 系统采用统一内存架构 (UMA),其中 GPU 与 CPU 和其他计算引擎共享系统内存 (DRAM)。这种设计降低了延迟,并允许将更多内存用于 GPU 工作负载。在 UMA 系统中,CPU 可以动态管理 DRAM 内容,包括通过在 DRAM 和系统交换区 (SWAP) 之间交换页面来释放内存。但是,APIcudaMemGetInfo并未考虑可能从 SWAP 中回收的内存。因此,报告的内存大小cudaMemGetInfo可能小于实际可分配内存,因为 CPU 可以通过将额外的 DRAM 页面移动到 SWAP 来释放这些页面。
为了更准确地估算 DGX Spark 平台上可分配的设备内存量,CUDA 应用程序开发人员应考虑通过 SWAP 回收 DRAM 的可能性,而不应仅仅依赖cudaMemGetInfo返回的值。以下提供了一个使用 C 标准库的示例实现:
#include <stdio.h>
int getAvailableMemory(long *availableMemoryKb, long *freeSwapKb) {
FILE *meminfoFile = NULL;
char lineBuffer[256];
long hugeTlbTotalPages = -1;
long hugeTlbFreePages = -1;
long hugeTlbPageSize = -1;
if (availableMemoryKb == NULL || freeSwapKb == NULL) {
return 1;
}
meminfoFile = fopen("/proc/meminfo", "r");
if (meminfoFile == NULL) {
return 1; }
*availableMemoryKb = -1;
*freeSwapKb = -1;
while (fgets(lineBuffer, sizeof(lineBuffer), meminfoFile)) {
long value;
if (sscanf(lineBuffer, "MemAvailable: %ld kB", &value) == 1) {
*availableMemoryKb = value;
} else if (sscanf(lineBuffer, "SwapFree: %ld kB", &value) == 1) {
*freeSwapKb = value;
} else if (sscanf(lineBuffer, "HugePages_Total: %ld", &value) == 1) {
hugeTlbTotalPages = value;
} else if (sscanf(lineBuffer, "HugePages_Free: %ld", &value) == 1) {
hugeTlbFreePages = value;
} else if (sscanf(lineBuffer, "Hugepagesize: %ld kB", &value) == 1) {
hugeTlbPageSize = value; }
if (*availableMemoryKb != -1 &&
*freeSwapKb != -1 &&
hugeTlbTotalPages != -1 &&
hugeTlbFreePages != -1 &&
hugeTlbPageSize != -1) {
break; } }
fclose(meminfoFile); if (hugeTlbTotalPages != 0 && hugeTlbTotalPages != -1) {
*availableMemoryKb = hugeTlbFreePages * hugeTlbPageSize;
// Hugetlbfs pages are not swappable.
*freeSwapKb = 0; } return 0;}为了方便调试,您可以手动使用以下命令刷新缓冲区缓存:
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'清除缓存后,请重启应用程序。
在某些情况下,长时间不使用后,连接的HDMI显示器可能会进入深度睡眠模式,即使按下键盘按键或移动鼠标也无法唤醒。如果发生这种情况,请按显示器上的物理按钮将其唤醒。
扫一扫,关注我们最新消息