已知问题

本页记录了当前影响 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 内存,从而导致可分配内存被低估。

实现示例

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;
}

调试临时解决方案

如需调试,可使用以下命令手动清除缓冲区缓存:

Bash
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'

清除缓存后,重新启动您的应用程序。

连接的 HDMI 显示器在长时间不活动后进入深度休眠且无法唤醒

当显示器长时间处于非活动状态时,可能会进入深度休眠状态,此时标准输入方式(键盘或鼠标)无法触发恢复。在这种情况下,按下显示器上的物理按钮即可恢复正常显示。

本页译自 NVIDIA 官方文档 Known Issues,由社区整理,仅供参考;如与官方英文文档不一致,请以官方为准。