스프린트미션

[AI] 위클리페이퍼 #5

goodella 2026. 2. 9. 00:23

1. 딥러닝 프레임워크 비교: PyTorch vs TensorFlow

현대 딥러닝 생태계를 주도하는 두 프레임워크는 각기 다른 철학을 바탕으로 발전해 왔습니다. 프로젝트의 목적과 환경에 따라 적절한 도구를 선택하는 것이 중요합니다.

1.1 핵심 비교 요약

비교 항목 PyTorch TensorFlow (Keras)
작동 원리 Dynamic Graph (Define-by-Run) Static Graph (Define-and-Run)
코딩 스타일 Pythonic (직관적, 절차적) 선언적 (고수준 API 중심)
디버깅 매우 용이 (Python 디버거 그대로 사용) 상대적으로 복잡 (그래프 컴파일 필요)
주요 강점 유연성, 빠른 프로토타이핑, 연구용 안정성, 확장성, MLOps 및 배포 최적화

 

 

더보기

여기서 잠깐 ! 용어정리 

 

Static Graph (Define-and-Run)

"설계도 먼저, 실행은 나중에"

 TensorFlow의 핵심 철학입니다.

  • 동작 방식: 데이터를 넣기 전에 모델의 전체 구조(연산 그래프)를 미리 정의합니다. 실제 데이터가 없어도 Placeholder라는 빈 칸을 만들어 연결 구조를 완성합니다.
  • 장점 : * 최적화: 실행 전에 전체 경로를 알고 있기 때문에, 불필요한 연산을 줄이거나 메모리 배치를 미리 최적화할 수 있습니다. (컴파일러와 유사)
    • 배포: 모델 구조가 고정되어 있어 C++, 모바일, 임베디드 기기 등 다른 환경으로 이식하기가 매우 유리합니다.
  • 단점 :
    • 그래프가 실행되는 시점과 정의되는 시점이 분리되어 있어, 일반적인 Python print()문으로 중간 값을 확인하기 어렵습니다.

Dynamic Graph (Define-by-Run)

"실행하면서 설계도 작성"

PyTorch가 대중화시킨 방식이며, 현재의 트렌드입니다.

  • 동작 방식: 코드가 실행되는 시점에 연산 그래프가 생성됩니다. 즉, 데이터를 모델에 넣는 순간순간 그래프가 그려집니다.
  • 장점 :
    • 자유로운 제어문: 데이터의 길이에 따라 if나 for문을 사용하여 그래프 구조를 매 순간 바꿀 수 있습니다. (예: 문장 길이가 매번 다른 자연어 처리)
    • 쉬운 디버깅: 일반적인 Python 프로그램처럼 동작하므로, 중간에 pdb를 걸거나 변수 값을 즉시 확인할 수 있습니다.
  • 단점 :
    • 매번 그래프를 새로 그려야 하므로 이론적으로는 정적 그래프보다 오버헤드가 발생할 수 있습니다. (하지만 하드웨어 성능 향상과 프레임워크 최적화로 현재는 격차가 거의 없습니다.)
특징 Static Graph (정적) Dynamic Graph (동적)
비유 완성된 조립식 가구 (변경 불가) 레고 블록 (조립하며 변경 가능)
대표 도구 TensorFlow 1.x, JAX PyTorch, TensorFlow 2.x(Eager)
유연성 낮음 (구조 고정) 높음 (매 단계 변화 가능)
디버깅 어려움 (특 전용 툴 필요) 매우 쉬움 (Pythonic)

 

1.2 프레임워크별 특징 상세

  • PyTorch :
    데이터가 흐르면서 동시에 연산 그래프가 생성되는 방식입니다. 파이썬의 표준 제어문(if, for)을 자유롭게 사용할 수 있어 모델 구조를 동적으로 변경하기 매우 유리합니다. 최근 생성형 AI(Generative AI) 연구와 논문 구현의 대부분은 PyTorch로 이루어집니다.요즘은 텐서플로우보다 파이토치를 많이 사용하고 있습니다. 
  • TensorFlow :
    모델 구조를 먼저 정의하고 한꺼번에 실행하는 방식입니다. 이는 실행 전 그래프 최적화가 가능하여 연산 효율이 높으며, 특히 모바일(TF Lite)이나 웹(TF.js), 대규모 서버 배포 환경에서 강력한 인프라를 제공합니다.

2. PyTorch Tensor와 NumPy Array의 차이

딥러닝 모델의 기본 데이터 단위인 텐서(Tensor)는 다차원 배열이라는 점에서 NumPy의 Array와 유사해 보이지만, 모델 학습을 위한 핵심적인 차별점을 가집니다.

2.1 텐서(Tensor)란 무엇인가?

수학적으로 텐서는 다차원 데이터를 담는 컨테이너입니다.

  • 0-D: 스칼라 (예: 5)
  • 1-D: 벡터 (예: [1, 2, 3])
  • 2-D: 행렬 (Matrix)
  • 3-D 이상: 텐서 (Tensor)

2.2 NumPy Array vs PyTorch Tensor 결정적 차이

특성 NumPy Array PyTorch Tensor
실행 장치 CPU 전용 CPU, GPU, TPU 지원
자동 미분 지원 안 함 (수동 구현 필요) Autograd 기능을 통한 자동 미분 지원
딥러닝 최적화 일반 수치 계산용 신경망 학습 및 역전파 최적화

2.3 텐서의 핵심 기능

  1. 가속 하드웨어 활용: tensor.to('cuda') 명령 하나로 수천 개의 GPU 코어를 활용한 병렬 연산이 가능합니다. 이는 NumPy 대비 수십 배 이상의 속도 차이를 만듭니다.
  2. Autograd (자동 미분): 딥러닝 학습의 핵심인 역전파(Backpropagation) 시, 연산 그래프를 추적하여 가중치에 대한 기울기($\nabla\theta$)를 자동으로 계산해 줍니다.

💡 주의해야할 점 및 나의 생각  

"효율적인 엔지니어링은 데이터의 흐름(Data Flow)을 이해하는 것에서 시작됩니다."


  1. 병목 현상(Bottleneck) 주의:
    처음 공부할 때 많은 사람들이 GPU Tensor와 CPU 기반의 NumPy 사이를 빈번하게 오가는 실수를 범합니다. 이 과정에서 발생하는 데이터 복사 비용은 전체 학습 속도를 심각하게 저하시킵니다. 가급적 모델 내부 연산은 모두 Tensor 레벨에서 끝내는 것이 좋습니다. 
  2. 메모리 관리:
    PyTorch의 from_numpy()를 사용하면 메모리를 새로 할당하지 않고 원본 데이터를 공유(Zero-copy)할 수 있습니다. 메모리 자원이 한정된 환경에서 반드시 고려해야 할 테크닉입니다.
  3. 선택의 기준:
    실험적이고 빠른 변화가 필요한 프로젝트라면 PyTorch를, 정형화된 서비스와 강력한 배포 파이프라인이 중요하다면 TensorFlow를 우선 고려하는 것이 좋다는 의견이 있으나 요새는 파이토치를 많이 사용하고, 생태계자체도 파이토치가 더 활발하기 때문에 파이토치를 배우는 것이 좋다고 생각이 듭니다. 

 

'스프린트미션' 카테고리의 다른 글

위클리페이퍼 7  (0) 2026.03.03
위클리 페이퍼 #6  (0) 2026.02.22
규칙3  (0) 2026.02.12
규칙1  (0) 2026.02.12
규칙2  (0) 2026.02.12