개발자 직군이라면 누구나 한번쯤 들어봤을 풀스택.
대 AI 시대에 들어선 지금, 마침내 딥러닝도 풀스택이란 용어가 생겼다.
나도 AI는 모델만 잘 만들면 되는줄 알았다.
하지만 실제로는 AI를 위한 부수적인 툴과 개념이 수없이 많이 생겼다.
그리고 기업들도 점점 `풀스택 AI 엔지니어`를 선호하기 시작했다.
(데이터 사이언티스트, 리서치 엔지니어도 마찬가지로 풀풀익선이다.)
그래서 Full Stack Deep Learning 이라는 유우명한 강의를 번역 의역하고자 한다.
나에게도 도움이 되고, 딥러닝 입문자, 중급자에게도 도움이 되길 바란다.
이번 내용은 `딥러닝 개발 인프라와 도구` 이다.
원문과 영상의 링크는 여기.
1.딥러닝 개발
먼저 프로그래밍 언어이다.
딥러닝 개발에서 가장 많이 쓰이는 언어는 파이썬이다.
라이브러리가 많고, 데이터 사이언스 분야에서의 지배력이 높다.
파이썬을 위한 코드 에디터는 다양한 종류가 있다.
주피터 노트북
프로젝트의 초안을 빠르게 작성하고 즉각적으로 결과를 확인할 수 있다.
편집 기능이 부족하고 실행 순서에 따른 결과 불일치 현상이 있다.
VS Code
아마 개발자라면 누구나 써봤을 그 검은 화면이다.
FSDL에서는 VS Code를 추천한다.
편집 기능 외에도 git, 원격, 린팅 등 다양한 기능을 제공한다.
파이참
(필자는 파이참을 이용한다.)
파이썬 개발에 최적화된 IDE이다.
VS Code와 유사한 기능을 제공하지만, 무료 버전은 기능이 제한적이다.
추가적으로 대화형 앱은 Streamlit이 있다.
파이썬 스크립트에 위젯을 추가하여 대화형 앱을 만들 수 있다.
웹에 배포할 수 있어 다른 사람들과 공유하기 용이하다.
2. 효율적인 파이썬 환경 설정
GPU를 위한 CUDA 라이브러리 설치를 진행한다.
파이썬 버전, 파이토치와 각 라이브러리 버전을 관리한다.
FSDL에서는 environment.yml에 명시하고 conda를 사용하여 설치하는 것을 권장한다.
`conda`는 가상 환경을 쉽게 관리할 수 있는 도구이다.
그런 다음, pip를 사용해 최소한의 제약 조건으로 다른 모든 요구 사항을 지정한다.
`pip`는 파이썬 패키지 관리 도구이다.
pip가 모든 요구 사항에 대한 버전을 분석하고 고정해준다.
프로젝트를 재사용할 때 동일한 환경을 유지할 수 있다.
`.makefile`을 사용하면 이 과정을 자동화할 수 있다.
3. 딥러닝 프레임워크
GPU 가속화, 레이어 유형, 옵티마이저 등을 제공하는 라이브러리들을 말한다.
파이토치 (PyTorch)
FSDL에서 추천하는 프레임워크이며, 지배적인 위치이다.
허깅페이스와 학술 컨퍼런스에 따르면 75% 이상의 연구자들이 사용한다.
뛰어난 개발 경험과 생산성, 유연성을 제공한다.
TorchScript를 사용하면 모델 컴파일 속도를 더 높일 수 있다.
파이토치 라이트닝 (PyTorch Lightning)
파이토치 위에 구축된 라이브러리이다.
반복적인 코드 (훈련 루프, 검증 루프 등)를 제거하여 생산성을 높인다.
구동 디바이스가 변경되어도 코드가 동일하게 유지된다.
16비트 프리시전, 분산 학습 등의 기능을 포함하고 있다.
텐서플로우 (TensorFlow)
여전히 훌륭한 선택이며, 특정 도메인에서 필수적으로 사용된다.
TensorFlow.js는 브라우저에서 딥러닝 모델을 실행할 수 있게 해준다.
Keras는 레이어를 쉽게 쌓고 모델을 학습시키는 데 유용하다.
JAX
구글의 최근 프로젝트로 모든 코드에 대한 벡터화와 자동 미분을 지원한다.
Flax와 Haiku처럼 별도의 프레임워크로 딥러닝에 사용된다.
Fast.ai
데이터 증강, 개선된 가중치 초기화, 학습 스케쥴러 등 고급 기능을 제공한다.
강력하지만 PyTorch와 스타일이 매우 다른 편이다.
4. 사전 학습 모델 허브
사전 학습된 모델을 쉽게 찾고 사용할 수 있는 플랫폼이다.
이미 개발되고 공개된 아키텍처나 웨이트를 사용할 수 있다.
허깅페이스 (Hugging Face)
NLP에서 시작해 오디오, 이미지 등 모든 종류의 태스크로 확장됐다.
현존하는 최고이자 최대의 모델 허브이다.
ONNX
크로스 플랫폼 모델 형식으로, 다양한 프레임워크에서 사용할 수 있다.
딥러닝 모델은 본질적으로 유사한 점을 활용한다.
파이토치, 텐서플로우 등 모든 모델을 변환하고 상호 운용할 수 있다.
Timm
이미지 모델을 위한 PyTorch 모델 허브이다.
다양한 사전 학습된 모델을 제공하며, 쉽게 사용할 수 있다.
(필자의 경우 석사 때 timm을 끼고 살았다.)
(컴퓨터 비전의 교과서라고 생각하면 된다.)
5. 대규모 학습: 분산 학습 전략
데이터 병렬 처리 (DDP)
파이토치 라이트닝의 DDP를 사용하면 손쉽게 병렬처리를 구현할 수 있다.
배치가 너무 커서 단일 GPU에 적합하지 않을 때 사용한다.
단일 데이터 배치를 여러 GPU에 분할하여 처리한다.
각 GPU에서 처리한 값 (계산된 기울기)를 평균하여 사용한다.
서버용 GPU인 경우, 거의 선형적인 속도 향상을 기대할 수 있다.
일반 GPU인 경우, 인터커넥트 속도 문제로 부분적인 선형 속도 향상을 기대할 수 있다.
모델 병렬 처리 (ZeRO-3, CPU offloading)
용어로 Sharded Data Parallel이라고 부른다.
모델 자체가 너무 커서 단일 GPU에 적합하지 않을 때 사용한다.
모델 뿐만 아니라 데이터도 여러 GPU에 분산해야 한다.
GPU 메모리에는 모델 파라미터, 그라디언트, 옵티마이저 스테이트가 저장된다.
특히 Adam은 옵티마이저 스테이트가 크기 때문에 메모리 사용량이 많다.
`ZeRO`는 이런 메모리를 하나씩 sharding하여 사용한다.
ZeRO-1: 옵티마이저 스테이트를 sharding한다.
ZeRO-2: 그라디언트도 sharding한다.
ZeRO-3: 모델 파라미터도 sharding한다.
ZeRO-3의 경우 기존 대비 10배 이상 메모리를 줄일 수 있다.
`CPU offloading`은 ZeRO-3를 단일 GPU에 적용한 것이다.
GPU가 현재 필요한 모델 파라미터만 메모리에 로드하는 전략이다.
130억개 이상의 파라미터 모델도 V100 단일 GPU에서 학습할 수 있다.
이 외의 기타 방법은 다음과 같다.
파이프라인 병렬 처리,
모델의 각 레이어를 여러 GPU에 나누어 실행한다.
DeepSpped, FairScale
텐서 병렬 처리,
행렬곱을 여러 GPU에 나누어 실행한다.
Megatron-LM
6. 컴퓨팅 파워
GPU
Nvidia GPU는 딥러닝 GPU의 표준이다.
서버용 GPU는 Tesla, A100, H100 등이 있다.
서버용 GPU는 인터커넥트 속도가 매우 빠르다.
모델 및 배치 크기를 고려해 GPU RAM을 선택한다.
데이터 처리 속도를 고려해 32비트, 16비트 중 선택한다.
CPU-GPU 및 GPU-GPU 간의 데이터 전송 속도를 고려한다.
TPU
구글이 개발한 딥러닝 전용 가속기이다.
GCP에서 사용할 수 있다.
각 TPU는 128GB의 RAM을 가지고 있다.
클라우드 vs 직접 구축
클라우드: Lambda, GCP, AWS 등에서 GPU를 임대할 수 있다.
FSDL은 가장 저렴한 클라우드의 가장 비싼 GPU를 추천한다.
직접 구축: 5000 ~ 8000 달러면 두개의 3090을 장착한 PC를 구축할 수 있다.
이는 딥러닝 개발자에게 일종의 '통과 의례'이다.
이미 지불한 하드웨어의 유틸리티를 극대화하는 사고방식에 도움이 된다.
하지만 대규모 실험을 위해서는 클라우드가 더 유리하다.
7. 실험 관리
텐서보드
구글에서 제공하는 솔루션이다.
loss 추척 및 모델 체크포인트 확인 등 단일 실험에 유리하다.
여러 실험을 관리할 때는 복잡해질 수 있다.
MLflow
데이터 브릭스의 오픈 소스 솔루션이다.
강력한 실험 관리 기능을 제공한다.
모델 패키징 등 다양한 기능이 있다.
다만 직접 호스팅 해야 하며, 설치가 복잡할 수 있다.
(필자는 mlflow를 강추한다.)
Weights & Biases
매우 인기있고 사용하기 쉬운 솔루션이다.
공개 프로젝트는 무료이고 비공개 프로젝트는 유료이다.
GPU 사용률과 같은 시스템 정보도 기록할 수 있다.
Sweeps 기능을 통해 하이퍼파라미터 튜닝을 지원한다.
FSDL에서는 Weights & Biases를 추천한다.
올인원 솔루션들
데이터 관리, 개발, 배포, 모니터링 모든 것을 한 시스템에서 지원한다.
대표적으로 AWS Sagemaker, Gradients 등이 있다.
이런 솔루션은 편하지만 GPU만 사용하는 것보다 약 20% 정도 비싸다.
끝.
'이론' 카테고리의 다른 글
딥러닝 공부 순서 정리 (for CV, Computer Vision) (1) | 2025.06.01 |
---|---|
FLOPs, #param, throughput 계산, 의미, 관계 (0) | 2024.03.19 |
learning rate와 batch size 관계 (0) | 2023.11.07 |
옵티마이저(Optimizer) 설명, 의미, 고찰 - SGD? Adam? (0) | 2023.10.12 |
오차 역전파(back propagation) 설명, 의미, 고찰 (0) | 2023.09.18 |