NVIDIA가 GPU 메모리 읽기 경로에 대해 자세히 설명합니다.
NVIDIA는 Magnum IO GPUDirect 스토리지를 통해 파이썬 애플리케이션이 GPU 메모리에 데이터를 직접 읽는 방법과, 읽기가 가속 경로인지 CPU 스테이지 백업을 사용했는지 검증하는 방법을 설명하는 기술 가이드를 2026-10-22 공개했습니다. 게시물에서는 이 구분이 중요하다고 하는데, 이는 KvikIO와 cuFile이 요청이 저장소에 도달하기 전에 별도의 라우팅 결정을 내리기 때문입니다.
경로 선택
NVIDIA에 따르면, GPUDirect 스토리지는 지원되는 스토리지와 GPU 메모리 사이에 직접 데이터 경로를 생성하여 CPU 메모리를 불필요한 스테이징으로 줄이고 전체 CPU 사용률을 낮춥니다. 게시물에서 설명한 Python 스택에서 KvikIO는 cuFile 위에 위치합니다: KvikIO는 cuFile을 호출할지 결정하고, cuFile은 요청이 가속화된 nvidia-fs 경로를 사용할지, 아니면 호스트 메모리를 통해 데이터를 스테이지하는 호환 경로를 사용할지 결정합니다.
이 회사에서는 cuFile API에 도달하는 것만으로는 가속된 경로가 사용되었다는 것을 증명하지 않는다고 말합니다. 이 구분은 튜토리얼에서 핵심으로, 튜토리얼에서는 KvikIO 기본값을 점검하고, GDS 컴포넌트를 gdscheck.py 로 확인하며, gds_stats를 사용해 nvfs 또는 posix 중 어떤 작업이 포함되었는지 판단하는 방법을 보여줍니다.
튜토리얼에서 사용한 것들
NVIDIA는 이 예제가 H100 GPU, CUDA 13.3, cuFile 1.18있는 x86_64 시스템에서 테스트되었다고 밝혔습니다. 이 설정은 또한 ext4포맷된 로컬 NVMe 장치, GPU와 NVMe 장치 간 PIX 연결, IOMMU와 ACS가 비활성화된 상태, 그리고 가속 경로를 제공하는 nvidia-fs 커널 모듈을 로드한 것을 사용했습니다.
Python 예시에서는 가이드가 1 GiB 파일을 생성하고, GPU 메모리에 CuPy 배열을 할당한 뒤, KvikIO로 그 버퍼에 파일을 읽습니다. 게시물에 따르면 KvikIO는 튜토리얼 시스템에서 compat_mode AUTO와 16 KiB gds_threshold으로 보고했습니다. AUTO는 KvikIO에 cuFile을 먼저 시도하고, cuFile이 없으면 POSIX로 다시 전환하라고 지시하며, 임계값 이하로 읽을 경우 POSIX 경로를 직접 사용합니다.
cuFile 통계 검증
기사한 실제 전송 경로를 확인하는 방법은 CUFILE_STATS_LEVEL=3을 활성화하고 gds_stats으로 실행 중인 프로세스를 검사하는 것이라고 합니다. 튜토리얼 예시에서 KvikIO의 기본 4 MiB 작업 크기는 1 GiB 요청을 256 읽기로 나누었고, 통계는 n=256, nvfs=256, posix=0를 보여주어 모든 연산이 nvidia-fs 경로를 사용했음을 나타냅니다.
게시물에서는 설정을 변경하여 계층을 비교하기도 합니다. KVIKIO_COMPAT_MODE=꺼진 상태에서도 KvikIO는 여전히 cuFile을 사용하며, cuFile은 CUFILE_FORCE_COMPAT_MODE=true와의 호환성 모드로 강제로 전환되어 posix 하에서 연산을 이동할 수 있습니다. KVIKIO_COMPAT_MODE=on에서는 cuFile을 완전히 우회하고 자체 CPU 스테이지의 POSIX 백엔드를 통해 읽기를 수행합니다.
cuFile 스케줄링 및 요청 크기
NVIDIA는 cuFile이 cufile.json에서 자체 실행 설정을 가지고 있어 요청이 분할되고 스케줄링되는 방식에 영향을 주는데, 여기에는 execution.parallel_io, execution.max_io_threads, execution.min_io_threshold_size_kb, execution.max_request_parallelism, execution.max_io_queue_depth가 포함됩니다. 예제 구성에서 cuFile 워커 스레드를 네네로 설정한 max_request_parallelism min_io_threshold_size_kb 8192로 설정되면, cuFile이 수신된 후 1 GiB 읽기를 더 세분화할 수 있었습니다.
가이드는 KVIKIO_TASK_SIZE가 1 GiB로 설정되면 KvikIO가 한 큰 요청을 cuFile에 보내고, cuFile은 목적지 버퍼가 명시적으로 등록되지 않아 등록되지 않은 버퍼 스케줄링 경로를 사용한다고 언급합니다. 게시물에서는 이 경우 cuFile이 요청을 네 조각, 각 조각은 256 MiB로 제한하며, 이 조각들은 개별 저장 전송이 아닌 예약된 작업 단위라고 합니다. 또한 16 MiB 요청에서는 8 MiB 스케줄링 목표가 중요하며, cuFile은 이를 두 8 MiB 조각으로 나누게 됩니다.
왜 NVIDIA가 스택을 강조하는가
이 기사는 이 튜토리얼을 더 큰 AI 데이터 이동 수요의 맥락에 놓고 설명하며, 2025 스탠포드 AI 인덱스에 따르면 주목할 만한 AI 모델의 연산량이 약 다섯개월마다 두 배, 대형 언어 모델의 학습 데이터셋이 약 여덟개월마다 두 배로 증가했다고 밝혔습니다. NVIDIA는 또한 파이썬이 많은 AI 프로젝트의 주요 애플리케이션 인터페이스였으며, cuFile은 여전히 C API로 남아 있어 KvikIO가 파이썬 코드와 저장 가속 계층 사이의 다리 역할을 한다고 밝혔습니다.
게시물에 따르면, KvikIO는 데이터 과학을 위한 NVIDIA CUDA-X의 일부이며, 가속된 Parquet과 ORC 인제스팅에 관한 초기 cuDF 연구에서 뿌리를 두고 있습니다. 회사는 같은 저장 경로가 이후 cuCIM 디지털 병리학 워크플로우, cuPhoton xDataReader, GPU 가속 Presto 작업에 사용되었지만, 튜토리얼 자체는 파이썬 읽기가 실제로 가속 경로를 밟았는지 확인하는 방법에 초점을 맞추고 있습니다.
이 게시물은 모든 구성에 성능 향상을 부여하지 않습니다. 대신 직접 경로 작동은 호환 하드웨어, 드라이버, 파일 시스템, 토폴로지 및 설정에 따라 달라지며, 지원되지 않는 구성은 호환 모드로 되돌아가 전환할 수 있음을 강조합니다. NVIDIA는 사용자가 속도 향상을 기대하기보다는 자신의 워크로드를 gds_stats으로 검증해야 한다고 말합니다.