AI - 딥러닝 개발 환경: Tensorflow, Keras, GPU
in DEV on AI, Ml, Tensorflow, Keras, Gpu, Tpu, Deep-learning, Machine-learning, Ai-framework, Cpu, Colab, Python
만일 우리가 순수한 프로그래밍 언어만으로 딥러닝 모델의 모든 것을, 즉 신경망의 각 계층부터 역전파(Backpropagation) 알고리즘까지 모두 직접 구현해야 한다면 매우 많은 시간과 노력이 필요할 것이다.
다행히 이런 복잡한 과정을 추상화하고 개발에만 집중할 수 있도록 도와주는 도구들이 있는데 바로 딥러닝 프레임워크이다.
이번 포스트에서는 딥러닝 모델을 보다 쉽고 효율적으로 구축할 수 있도록 돕는 핵심 도구들을 살펴본다.
목차
1. 텐서플로(Tensorflow)
텐서플로는 딥러닝 모델을 쉽게 구축하고 학습시킬 수 있도록 구글이 개발한 오픈소스 라이브러리이다.
프로그래밍 언어 자체가 아니라, 파이썬과 같은 언어에서 불러와 사용하는 라이브러리이다.
- 텐서(Tensor)
- 딥러닝의 기본 재료가 되는 데이터의 단위이다.
- 우리가 흔히 아는 숫자, 벡터, 행렬 등을 포함하는 다차원 배열을 텐서라고 한다.
- 플로(flow)
- 이러한 텐서들이 계산 그래프를 따라 흐르면서 연산되는 과정이 딥러닝의 핵심이며, 여기서 텐서플로라는 이름이 유래했다.
과거 1.x 버전과 현재의 2.x 버전은 사용법에 차이가 있지만, 현재는 텐서플로 2.0 이 표준이며, 훨씬 직관적이고 사용하기 쉬운 구조를 가지고 있다.
Google Colab 과 같은 클라우드 환경에는 기본적으로 텐서플로가 설치되어 있어서 바로 사용할 수 있지만, 개인 PC 에서 사용하려면 별도의 설치 과정이 필요하다.
아래 코드를 실행하여 텐서플로가 잘 설치되었는지 버전을 확인해보자.
import tensorflow as tf
# 설치된 텐서플로의 버전을 출력합니다.
print(tf.__version__)
2.19.0
2. 케라스(Keras)
케라스 역시 딥러닝 모델을 만드는 라이브러리이다. 그렇다면 텐서플로와의 차이점은 무엇일까?
결론부터 말하자면, 케라스는 텐서플로를 더 쉽고 직관적으로 사용할 수 있도록 도와주는 고수준 API 이다.
즉, 텐서플로라는 강력한 엔진을 더 편리하게 조작할 수 있도록 만들어진 사용자 인터페이스와 같다.
과거에는 독립적인 라이브러리였지만, 현재는 텐서플로의 핵심 API 로 완전히 통합되어 tf.keras
라는 이름으로 사용된다.
케라스의 특징은 특정한 딥러닝 라이브러리 하나에 묶여있지 않다는 점이다.
딥러닝 신경망을 생성하는 핵심 도구, 즉 백엔드 엔진에는 구글의 텐서플로 외에도 마이크로소프트의 CNTK 같은 것들이 있다.
케라스는 바로 이러한 다양한 백엔드 엔진들을 모두 지원하며, 사용자가 어떤 엔진을 선택하든 거의 동일한 코드로 모델을 만들 수 있도록 설계되었다.
- 하드웨어
- 딥러닝 연산을 실제로 처리하는 CPU, GPU 등의 물리적 장치
- 백엔드 엔진
- 하드웨어를 직접 제어하여 신경망을 구동하는 텐서플로, CNTK 등의 핵심 라이브러리
- 케라스
- 사용자가 백엔드 엔진의 복잡한 내부를 몰라도 쉽게 모델을 만들 수 있게 해주는 편리한 인터페이스
즉, 케라스는 텐서플로와 같은 도구들을 더 쉽게 사용할 수 있도록 감싸주는 역할을 한다.
사실상 텐서플로가 케라스의 표준 백엔드 엔진으로 자리잡았다. 이로 인해 케라스는 이제 텐서플로 라이브러리에 완전히 통합되어 tf.keras
의 형태로 제공되는 것이 일반적이다.
케라스를 사용하는 방법은 아래와 같이 라이브러리를 불러오면 된다.
# 텐서플로 라이브러리에 포함된 케라스를 불러옵니다.
from tensorflow import keras
# 또는 경우에 따라 케라스 라이브러리를 직접 불러올 수도 있습니다.
# import keras
3. 하드웨어 가속기: CPU vs GPU
딥러닝 모델을 만들고 학습시키는 과정은 수없이 많은 계산의 연속이다. 이 계산을 누가, 어떻게 처리하느냐에 따라 학습 속도가 결정된다.
바로 이 지점에서 CPU 와 GPU 의 역할과 차이점을 이해하는 것이 중요하다.
3.1. CPU: 복잡한 문제를 순차 해결
CPU(Central Processing Unit, 중앙처리장치)는 컴퓨터의 두뇌 역할을 하며, 복잡한 명령어를 해석하고 순서에 맞게 처리하는 데 특화되어 있다.
<작동 원리>
CPU는 처리할 작업을 메모리(DRAM)에서 가져와, 어떤 종류의 작업인지 판단하고(Control Unit), 실제 계산을 수행(ALU)한다.
이러한 구조 덕분에 복잡하고 다양한 계산을 순차적으로 빠르게 처리할 수 있다.
<코어(Core)>
초기의 CPU는 한 번에 하나의 일만 처리했지만, 동시에 여러 작업을 수행하기 위해 명령어를 해석하고 계산하는 핵심 유닛인 코어의 수를 늘리기 시작했다.
듀얼 코어 CPU 는 동시에 2개의 작업을, 쿼드 코어 CPU는 4개의 작업을 처리할 수 있다.
<딥러닝에서의 한계>
하지만 딥러닝에 필요한 연산은 대부분 ‘단순한 행렬 곱셈과 덧셈의 반복’이다. 이는 고성능 CPU가 가진 ‘복잡한 문제를 해석하고 순차적으로 빠르게 푸는 능력’을 온전히 활용하기 어려운 작업이다. 이 때문에 딥러닝 계산에 더 최적화된 하드웨어가 필요하게 되었다.
복잡한 명령어를 해석하는 장치 부분은 줄이고, 실제 계산을 수행하는 부분을 많이 늘린 셈이다.
3.2. GPU: 단순한 작업을 병렬 처리
GPU(Graphics Processing Unit)는 이름처럼 본래 그래픽 처리를 위해 탄생했다.
수많은 픽셀의 색상값을 동시에 계산해야 하는 그래픽 작업의 특성상, ‘단순하지만 많은 계산을 동시에 처리’하도록 설계되었다.
<구조적 차이>
GPU는 복잡한 명령어를 해석하는 Control Unit 의 비중을 줄이는 대신, 실제 계산을 담당하는 ALU 의 수를 CPU 보다 훨씬 많이 가지고 있다.
<작동 방식>
CPU가 소수의 ‘엘리트 박사’들이 모여 복잡한 문제를 하나씩 해결하는 방식이라면, GPU는 수천 명의 ‘계산병’들이 모여 단순 계산을 동시에 처리하는 군단과 같다.
<딥러닝과의 시너지>
바로 이 ‘대규모 병렬 처리’ 능력이 단순 계산을 무한히 반복하는 딥러닝의 요구와 완벽하게 맞아떨어지면서, GPU는 딥러닝의 핵심 하드웨어로 자리 잡게 되었다.
물론 프로그램의 전반적인 흐름을 제어하는 역할은 여전히 CPU가 중요하기 때문에, 실제 딥러닝 환경에서는 CPU와 GPU가 각자의 장점을 살려 협업하는 것이 가장 이상적이다.
<TPU(Tensor Processing Unit)>
TPU는 구글이 텐서플로 연산에 최적화하여 자체 개발한 반도체이다. 이름처럼 ‘텐서’ 연산을 GPU보다 더 빠르고 효율적으로 처리하기 위해 만들어진, 딥러닝만을 위한 전용 하드웨어이다.
3.3. Google Colab에서 하드웨어 가속기(GPU/TPU) 활용
우리가 사용하는 Google Colab 환경에서는 구글이 제공하는 GPU와 TPU를 무료로 사용할 수 있어, 누구나 강력한 하드웨어 가속의 이점을 누릴 수 있다.
사용 방법은 Colab 메뉴에서 [런타임] > [런타임 유형 변경]을 선택하면, ‘하드웨어 가속기’ 옵션에서 GPU 또는 TPU를 선택할 수 있다.
<주의 사항>
- 사용 우선순위
- 구글은 한정된 리소스를 여러 사용자에게 배분하기 때문에, 대화형으로 서비스를 이용하는 사용자에게 더 높은 우선순위를 부여한다. 장시간 무언가를 실행하는 경우 사용에 제한이 생길 수 있다.
- 자원 할당량
- 모든 사용자에게는 자원 할당량이 있다. GPU나 TPU를 장시간 사용하면 할당량이 소진되어 일시적으로 사용이 제한될 수 있다.
- 효율적인 사용
- GPU/TPU가 필요 없는 코드(예: 데이터 전처리, 시각화)를 실행할 때는 하드웨어 가속기를 ‘CPU’로 변경하는 것이 좋다.
참고 사이트 & 함께 보면 좋은 사이트
본 포스트는 이영호 저자의 모두의 인공지능 with 파이썬을 기반으로 스터디하며 정리한 내용들입니다.