CPU 텐서 vs. GPU / MPS 텐서 (260713)

WonTerry·2026년 7월 13일

Deep Learning

목록 보기
12/27
recon_show = reconstructed[i, 0].clamp(0, 1).detach().cpu().numpy()  # unnormalize 생략

구조 자체(shape, dtype, 논리적으로 담고 있는 값)는 완전히 같아요. 다른 건 데이터가 물리적으로 어디에 저장되어 있고, 어떤 하드웨어가 그 값을 계산하느냐입니다.

같은 점

  • shape, dtype(예: float32), 텐서 안의 값 자체는 동일
  • PyTorch API(인덱싱, 연산 등)를 쓰는 방식도 동일

다른 점

CPU 텐서GPU/MPS 텐서
메모리 위치시스템 RAMGPU(또는 Apple Silicon의 MPS) 전용 메모리
연산 처리CPU 코어GPU 코어(병렬 연산에 특화)
numpy 변환바로 가능 (.numpy())불가능 — 먼저 .cpu()로 옮겨야 함
속도순차 연산에 유리대규모 행렬/병렬 연산에 훨씬 빠름

.numpy()가 GPU 텐서에서 바로 안 될까?
numpy는 시스템 RAM에 있는 데이터만 다룰 수 있는 라이브러리예요. GPU(MPS) 메모리는 CPU가 직접 접근할 수 없는 별도의 메모리 공간이라서, numpy가 그 데이터를 읽으려면 먼저 누군가 "GPU 메모리 → 시스템 RAM"으로 복사해줘야 합니다. .cpu()가 바로 그 복사 작업을 하는 거예요.

tensor_gpu = torch.randn(3, 3, device='mps')
tensor_gpu.numpy()        # ❌ 에러: MPS 메모리는 numpy가 못 읽음
tensor_gpu.cpu().numpy()  # ✅ 먼저 시스템 RAM으로 복사 후 변환

비유하자면, GPU 메모리는 옆 건물 창고, CPU(RAM)는 지금 서 있는 사무실이라고 보면 됩니다. numpy는 사무실 안에 있는 물건만 볼 수 있는 도구라서, 창고에 있는 물건(GPU 텐서)을 쓰려면 먼저 사무실로 옮겨(.cpu()) 와야 하는 거죠.

profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글