TensorFlow
TensorFlow는 서버, 브라우저, 휴대폰에서 모델을 학습하고 배포하기 위한 Google의 오픈소스 ML 프레임워크이며, Keras를 상위 수준 API로 제공합니다.
TensorFlow는 Google이 Apache 2.0 라이선스로 2015년 11월에 공개한 오픈 소스 머신러닝(ML) 프레임워크입니다. Google Brain 팀이 내부 연구와 제품을 위해 개발했습니다. 딥러닝 및 기타 수치 계산 프로그램은 다차원 숫자 배열인 텐서에 대한 연산으로 계산을 표현합니다. TensorFlow는 이러한 연산을 자동으로 미분하고 최적화된 그래프로 컴파일해 CPU, GPU, TPU에서 실행합니다. TensorFlow 생태계는 학습부터 모델 배포까지 전체 MLOps 과정을 지원합니다. 모델 정의를 위한 Keras, 실험 추적을 위한 TensorBoard, 프로덕션 모델 서빙을 위한 TensorFlow Serving, 브라우저용 TensorFlow.js, 그리고 엣지 AI를 실행하는 휴대전화와 임베디드 장치용 LiteRT(이전 TensorFlow Lite)가 포함됩니다. Google은 2026년 3월 TensorFlow 2.21을 발표하면서 향후 TensorFlow 개발은 보안 및 버그 수정, 종속성 업데이트, 커뮤니티 기여에 중점을 둘 것이라고 밝혔으며, 새로운 생성형 AI 프로젝트에는 Keras 3, JAX 또는 PyTorch를 권장했습니다.
TensorFlow 작동 방식#
TensorFlow 1.x에서는 사용자가 먼저 정적 계산 그래프를 구축한 뒤 세션에서 실행해야 했습니다. 2019년에 출시된 TensorFlow 2.0은 즉시 실행을 기본값으로 설정해 일반 Python 코드처럼 연산이 즉시 실행되도록 했으며, 그래프는 최적화 용도로 유지했습니다. tf.function 데코레이터가 적용된 함수는 입력 시그니처마다 한 번씩 추적되어 그래프로 변환됩니다. TensorFlow는 이 그래프를 최적화하고 XLA 컴파일러로 컴파일한 뒤 Python 없이 배포할 수 있도록 SavedModel 형식으로 저장합니다. tf.GradientTape은 순전파의 연산을 기록해 TensorFlow가 역전파와 경사 하강법에 필요한 그래디언트를 계산할 수 있도록 합니다. 다음 코드는 두 기능을 모두 사용합니다.
import tensorflow as tf
w = tf.Variable([[1.0], [-2.0]])
x = tf.constant([[3.0, 4.0]])
@tf.function # trace the Python function into a TensorFlow graph on the first call
def loss_fn(x):
print("Tracing") # Python code runs only while tracing, not on every call
return tf.reduce_sum((x @ w) ** 2)
# Record operations on a tape to compute the gradient of the loss with respect to w
with tf.GradientTape() as tape:
loss = loss_fn(x)
gradient = tape.gradient(loss, w)
loss_fn(x) # same input shape and dtype: reuses the traced graph without printing
print(f"loss {loss.numpy()}, gradient {gradient.numpy().ravel()}")Tracing을 한 번 출력한 다음 loss 25.0, gradient [-30. -40.]을 출력합니다. 두 번째 호출은 Python 함수 본문을 실행하지 않고 캐시된 그래프를 실행하며, w = (1, -2)에서 (3w₁ + 4w₂)²의 그래디언트는 2 × (-5) × (3, 4)입니다. 분산 학습에서는 tf.distribute 전략을 사용해 여러 GPU, TPU 슬라이스 또는 머신에 모델을 복제합니다.
TensorFlow 생태계#
- Keras: 계층과 모델을 정의하고
fit을 사용해 학습시키는 고수준 API입니다. TensorFlow 2.16부터 TensorFlow를 설치하면 JAX와 PyTorch에서도 실행되는 Keras 3가 함께 설치됩니다. - TensorBoard: 학습 중 손실 곡선, 지표, 히스토그램, 모델 그래프를 표시하는 대시보드입니다. Ultralytics YOLO 학습 실행을 포함해 다른 프레임워크가 작성한 로그도 읽을 수 있으며, TensorFlow 2.21은 더 이상 TensorBoard를 종속 항목으로 설치하지 않습니다.
- TensorFlow Serving: SavedModel을 로드하고 gRPC 또는 REST를 통해 예측 요청에 응답하는 서빙 시스템이며, 모델을 중단 없이 교체할 수 있도록 버전 관리를 지원합니다.
- TFX: 데이터 검증, 학습, 평가, 승인된 모델의 서빙 배포를 연결하는 프로덕션 머신러닝 파이프라인 프레임워크입니다.
- TensorFlow.js: 브라우저와 Node.js에서 모델을 실행하고 학습하므로, 데이터를 서버로 보내지 않고 사용자 기기에서 추론할 수 있습니다.
- LiteRT: Google의 Android, iOS, 임베디드 Linux, 마이크로컨트롤러용 온디바이스 런타임으로, 2024년 9월 TensorFlow Lite에서 이름이 변경되었습니다. TensorFlow, PyTorch 또는 JAX에서 변환된
.tflite모델을 실행하며 모바일 GPU와 NPU의 가속을 지원합니다.
TensorFlow, PyTorch, JAX 비교#
- PyTorch와 TensorFlow 비교: PyTorch는 처음부터 즉시 실행을 우선시했으며,
torch.compile을 통해 그래프 컴파일을 추가로 지원합니다. 대부분의 신규 연구 코드와 오픈 웨이트 모델에서 기본 프레임워크로 사용되는 반면, TensorFlow는 서버, 브라우저, 모바일 장치에 배포할 수 있는 성숙한 스택이 강점입니다. - JAX: 조합 가능한 변환을 제공하는 Google의 NumPy 스타일 라이브러리로, 도함수 계산에는
grad, XLA 컴파일에는jit, 벡터화에는vmap을 사용합니다. Google은 JAX로 Gemini 모델을 학습합니다. - Keras: 별도의 엔진이 아니라 고수준 API입니다. Keras 3 코드는 TensorFlow, JAX 또는 PyTorch에서 실행되므로 모델 정의가 프로젝트를 하나의 프레임워크에 종속시키지 않습니다.
TensorFlow 런타임용 모델 변환#
다른 프레임워크에서 학습한 모델은 변환기를 통해 TensorFlow 배포 도구를 사용할 수 있습니다. onnx2tf는 ONNX 그래프를 TensorFlow SavedModel로 재구성하고, jax2tf는 JAX 함수를 TensorFlow 함수로 래핑하며, Google의 LiteRT Torch 변환기는 PyTorch에서 LiteRT 모델을 직접 생성합니다. Ultralytics YOLO 모델은 PyTorch로 작성되며, 해당 내보내기 모드는 YOLO26에 이러한 경로를 사용합니다. format="saved_model"은 ONNX를 내보내고 onnx2tf로 SavedModel로 변환해 TensorFlow Serving에 사용하며, format="edgetpu"은 Coral Edge TPU용 INT8 모델을 컴파일합니다. format="litert"은 LiteRT Torch를 사용하므로 TensorFlow를 설치할 필요가 없습니다. 다음 코드는 SavedModel로 내보냅니다.
from ultralytics import YOLO
# Load the smallest YOLO26 detection model
model = YOLO("yolo26n.pt")
# Convert through ONNX to a TensorFlow SavedModel directory
path = model.export(format="saved_model")
print(f"SavedModel: {path}")내보내면 yolo26n_saved_model 폴더가 생성됩니다. tf.saved_model.load은 Python에서 이 폴더를 로드하며, Ultralytics YOLO 자체도 YOLO("yolo26n_saved_model")로 실행할 수 있습니다.










