PyTorch vs TensorFlow 비교
| 항목 | PyTorch | TensorFlow |
|---|
| 개발사 | Meta (Facebook) | Google |
| 성능 | 연구 환경에서 강점 | 대규모 서비스/배포에 강점 |
| 배포 | TorchScript, ONNX | TensorFlow Serving, TFLite |
| 생태계 | 연구 중심 | 산업/서비스 중심 |
| 주요 사용 분야 | 연구, 프로토타이핑 | 프로덕션, 모바일, 웹 |
| 모바일 지원 | PyTorch Mobile | TensorFlow Lite |
| 커뮤니티 | 빠르게 성장 | 매우 큼 (Google 지원) |
| 사용되는 배포 툴 | torch.compile, TorchScript, ONNX export | @tf.function -> TensorFlow Serving / TFLite |
초창기에는 PyTorch 는 Imperative 방식, TensorFlow 는 Graph 기반 형식이어서 아래와 같은 차이점이 있었지만 두 플랫폼 모두 imperative, graph based 방식을 둘다 지원하는 쪽으로 수렴하고 있음.
| 구분 | Imperative 방식 | Graph 기반 방식 |
|---|
| 실행 방식 | 코드 한 줄씩 즉시 실행 | 그래프 생성 후 한 번에 실행 |
| 실행 흐름 | 코드 흐름 = 실제 실행 흐름 | 코드 흐름 ≠ 실제 실행 흐름 (optimization) |
| 디버깅 | 쉬움 | 어려움 (사용자가 작성한 코드가 그대로 실행되지 않음으로) |
| 에러 위치 | 코드 라인과 일치 | 그래프 내부에서 발생 (추적 어려움) |
| 중간 값 확인 | 쉬움 (print, debugger) | 어려움 |
| 연산 실행 | 순차 실행 | 최적화 후 실행 (fusion, 병렬 등) |
결론
실험: Imperative (eager, dynamic)
배포: Graph / Compile (optimized)
| 상황 | 선택 |
|---|
| 초기 실험 | eager (imperative) |
| 구조 안정화 | 상황에 따라 compile |
| 대규모 학습 | compile/graph 적극 사용 |
| 배포 | 거의 무조건 graph |
NumPy Array / Tensor
| 항목 | NumPy | Tensor (PyTorch / TensorFlow) |
|---|
| gradient 계산 | 직접 구현 -> 휴면 에러 가능 | 자동 계산 (autograd) |
| 계산 그래프 | 없음 | 있음 |
| backprop | 수동 | 자동 |
| 연산 기록/추적 | 안됨 | 됨 |
Tensor = 다차원 배열 + autograd 추적 객체