#include <fcntl.h>
#include <unistd.h>
#include <cuda_runtime.h>
#include "cufile.h"
// 1. GDS 드라이버 초기화
CUfileError_t status = cuFileDriverOpen();
// 2. O_DIRECT 모드로 데이터 파일 오픈
int fd = open("/mnt/nvme/model_weights.bin", O_RDONLY | O_DIRECT);
// 3. cuFile 파일 핸들 등록
CUfileDescr_t descr;
memset(&descr, 0, sizeof(descr));
descr.handle.fd = fd;
descr.type = CU_FILE_HANDLE_TYPE_OPAQUE_FD;
CUfileHandle_t cf_handle;
status = cuFileHandleRegister(&cf_handle, &descr);
// 4. GPU 메모리 할당 및 GDS 버퍼 등록 (물리 DMA 주소 고정)
void* d_buf = nullptr;
size_t io_size = 1024 * 1024 * 128; // 128MB 청크
cudaMalloc(&d_buf, io_size);
status = cuFileBufRegister(d_buf, io_size, 0);
// 5. 직접 DMA 읽기 수행 (호스트 CPU 및 DRAM 바이패스)
ssize_t bytes_read = cuFileRead(cf_handle, d_buf, io_size, 0, 0);
// 6. 리소스 안전 해제
status = cuFileBufDeregister(d_buf);
cudaFree(d_buf);
cuFileHandleDeregister(cf_handle);
close(fd);
cuFileDriverClose();I/O 블록 크기 | 레거시 POSIX I/O 지연시간 | GDS (cuFile) 지연시간 | 지연시간 개선 배율 |
4 KB (Random Read) | 85.4 µs | 11.2 µs | 약 7.6배 개선 |
64 KB (Random Read) | 142.0 µs | 18.5 µs | 약 7.7배 개선 |
1 MB (Sequential Read) | 420.0 µs | 58.0 µs | 약 7.2배 개선 |
16 MB (Sequential Read) | 3,850.0 µs | 510.0 µs | 약 7.5배 개선 |
{
"logging": {
"dir": "/var/log/cufile",
"level": "INFO"
},
"execution": {
"max_io_threads": 4,
"max_io_queue_depth": 128,
"parallel_io": true,
"min_io_threshold_size_kb": 4
},
"properties": {
"max_direct_io_size_kb": 16384,
"allow_compat_mode": false
},
"fs": {
"generic": {
"posix_unaligned_writes": false
}
}
}모델 아키텍처 | 레이어 수 | KV 헤드 수 | 헤드 차원 | 토큰당 크기 | 32k 단일 요청 | 128k 단일 요청 | 128k 동시 요청 (배치 16) |
Llama-3-8B | 32 | 8 (GQA) | 128 | 131.07 KB | 4.19 GB | 16.78 GB | 268.44 GB |
Llama-3-70B | 80 | 8 (GQA) | 128 | 327.68 KB | 10.49 GB | 41.94 GB | 671.09 GB |
Llama-3.1-405B | 126 | 8 (GQA) | 128 | 516.10 K | 16.52 GB | 66.06 GB | 1,056.96 GB |
비교 항목 | 모델 가중치 오프로딩 (Weight Offloading) | KV 캐시 오프로딩 (KV Cache Offloading) |
데이터 특성 | 정적(Static), 불변(Immutable) 데이터 | 동적(Dynamic), 토큰 생성마다 증가하는 가변 데이터 |
접근 패턴 | 결정론적 순차 접근 (Layer 0 $\rightarrow$ Layer $N-1$) | 비연속 가상 블록 기반 랜덤 접근 (Block Table 매핑) |
주요 I/O 크기 | 대용량 순차 읽기 (레이어당 수백 MB ~ 수 GB 단위) | 세밀한 청크 읽기/쓰기 (블록당 16~64 토큰, 수 MB 단위) |
I/O 작업 종류 | 읽기 전용 (Read Only) | 읽기 및 쓰기 (Read & Write, 빈번한 스왑 인/아웃) |
연산 중첩 기법 | 더블 버퍼링(Double Buffering) 및 레이어 프리페치 | 비동기 DMA 스트림, 연속 배치 스왑, 청크 프리페치 |
핵심 요구 성능 | 지속적인 대용량 순차 대역폭 | 높은 랜덤 IOPS, 깊은 큐 깊이, 안정적인 p99 지연시간 |
계층 (Tier) | 저장 매체 | 인터페이스 | 실효 대역폭 | 접근 지연시간 | 일반적 구성 용량 | 적합한 데이터 역할 |
Tier 0 | GPU HBM3 / HBM3e | On-Die 1024-bit Bus | 2.0 ~ 8.0 TB/s | 10 ~ 20 ns | 80 ~ 192 GB | 현재 디코딩 중인 활성 토큰, 모델 가중치 |
Tier 1 | Host DRAM / CXL | DDR5 Multi-Channel | 100 ~ 400 GB/s | 100 ~ 200 ns | 512 GB ~ 2TB | 웜(Warm) 세션 캐시, 1차 스왑 완충 버퍼 |
Tier 2 | Local NVMe SSD | PCIe Gen5 x4 Direct | 7 ~ 14 GB/s (드라이브당) | 10 ~ 50 µs | 15 ~ 120 TB | 콜드(Cold) 세션 캐시, 긴 접두사(Prefix) 저장 |
Tier 3 | NVMe-oF Fabric | RoCEv2 InfiniBand | 25 ~ 100 GB/s (NIC당) | 15 ~ 80 µs | 수백 TB ~ 페타바이트 | 클러스터 공유 접두사 캐시 풀, 무중단 노드 복구 |
스토리지 구성 환경 | 실효 읽기 대역폭 | 32k 세션 (10.5 GB) 로드 시간 | 128k 세션 (41.9 GB) 로드 시간 | GPU 연산 중첩 가능 여부 |
단일 PCIe Gen4 NVMe (x4) | 약 6.0 GB/s | 1.75초 | 6.98초 | 불가 (GPU Stall 발생) |
단일 PCIe Gen5 NVMe (x4) | 약 12.0 GB/s | 0.88초 | 3.49초 | 중첩 가능 (제한적) |
4x PCIe Gen5 NVMe (RAID0) | 약 48.0 GB/s | 0.22초 (220 ms) | 0.87초 (870 ms) | 중첩 가능 (권장) |
400Gbps NVMe-oF (RoCEv2) | 약 45.0 GB/s | 0.23초 (233 ms) | 0.93초 (931 ms) | 중첩 가능 (권장) |
비교 항목 | Dell Technologies | Pure Storage | NetApp |
제품군 (대표) | PowerScale F910 / F710 PowerMax 8500 | FlashBlade//S500 FlashBlade//E | AFF A90 / AFF A1K FlexGroup |
확장 아키텍처 | Scale-Out (OneFS 최대 252노드) | Scale-Out (연산/스토리지 블레이드 분리형) | Scale-Out (최대 24 노드) |
플래시 제어 방식 | 표준 NVMe SSD 및 전용 인클로저 | DirectFlash Module (DFM, FTL 제거) | 표준 NVMe SSD 및 최적화 쉘프 |
지원 프로토콜 | NFSv3, NFSv4, NFS over RDMA, S3, NVMe-oF | NFSv3, NFSv4.1, NFS over RDMA, S3, NVMe-oF | NFSv3, NFSv4, NFS over RDMA, NVMe-oF, S3 |
NVIDIA GDS 지원 | 지원 (cuFile API, OneFS 전용 드라이버) | 지원 (NFS over RDMA / Purity GDS 연동) | 지원 (NFS over RDMA / ONTAP GDS 검증) |
DGX SuperPOD 인증 | 획득 (PowerScale F710 등) | 획득 (FlashBlade//S500, AIRI) | 획득 (AFF A90, AFX, EF600) |
압축 효율 (AI 데이터) | 1.0:1 ~ 1.2:1 (인라인/후처리 선택) | 1.0:1 ~ 1.1:1 (하드웨어 가속 인라인 처리) | 1.0:1 ~ 1.2:1 (인라인 제로 탐지 및 압축) |
고 가용성 | OneFS N+M 보호 SRDF 동기·비동기 | ActiveCluster (Symmetric Active-Active) | MetroCluster SyncMirror SnapMirror |
차별화 | 방대한 단일 클러스터 규모와 엔터프라이즈 신뢰성 | DFM 기반 낮은 전력·안정적 지연시간, 단순성 | ONTAP 기반의 정교한 데이터 거버넌스 및 클라우드 연계 |
[ AI 데이터셋의 압축 및 중복 제거 한계 ]
가중치 텐서 (FP16/BF16/FP8) : [0.1284719, -0.982314, 0.003412 ...] ──> 고엔트로피 난수 비트열
중복 블록 탐지 시도 : 해시 일치 확률 0% 수렴 ──> 실제 절감율 1.0:1 ~ 1.1:1 (압축 불가)구분 (워크로드) | RPO (목표 복구 시점) | RTO (목표 복구 시간) | 스토리지 복제 및 HA 설계 전략 |
대규모 분산 학습 (Training) | |||
