本页记录了当前影响 DGX Spark 系统的已知问题,包括电源适配器使用建议、nvidia-smi 显示异常、CUDA 支持说明、统一内存(unified memory)架构下的内存资源上报指导,以及 HDMI 显示器深度休眠等问题。
请使用随附电源适配器以获得最佳性能
为获得最佳性能,请使用 DGX Spark 系统随附的电源适配器。使用其他电源适配器可能导致性能下降、启动失败或系统意外关机。
nvidia-smi 报告"Memory-Usage: Not Supported"
在集成 GPU 平台上,nvidia-smi 工具的输出中会显示"Memory-Usage: Not Supported",尽管仍可显示每个进程的 GPU 内存分配情况。这是预期行为,因为集成 GPU 没有专用帧缓冲内存。
DGX Spark 上的 CUDA 支持
DGX Spark 上的 CUDA 实现已经过验证,确保在软件发布日期时与系统硬件兼容。如需使用前沿功能和性能增强,请访问 NVIDIA NGC 容器,其中提供了 PyTorch、vLLM 和 TensorRT-LLM 等工具。
统一内存架构下的内存资源上报指南
NVIDIA 正与生态系统合作伙伴协作,持续优化 DGX Spark 的软件兼容性。NVIDIA 已就统一内存(UMA)架构系统的内存管理实现发布了指导,以便准确上报资源信息。
DGX Spark 采用统一内存架构,GPU 与 CPU 及其他计算引擎共享系统 DRAM。这种架构降低了延迟,并为 GPU 处理提供了更大的内存池。在 UMA 配置中,CPU 会动态管理 DRAM,可能通过将内存页面换出到系统 SWAP 区域来释放内存。然而,cudaMemGetInfo API 不会计入可回收的 SWAP 内存,从而导致可分配内存被低估。
实现示例
#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 显示器在长时间不活动后进入深度休眠且无法唤醒
当显示器长时间处于非活动状态时,可能会进入深度休眠状态,此时标准输入方式(键盘或鼠标)无法触发恢复。在这种情况下,按下显示器上的物理按钮即可恢复正常显示。
本页译自 NVIDIA 官方文档 Known Issues,由社区整理,仅供参考;如与官方英文文档不一致,请以官方为准。