Search

241130_1252_gpu를 활용해서 AI를 돌릴때 CPU의 역할

GPU를 활용해서 AI를 돌릴려고 하는데, A5000을 선택해서 지금 쓰고 있다. (A6000이였으면 좋았을…)
시중에 있는 모델을 돌리기 위해서 GPU를 고르는 기준으로 처리속도도 당연히 중요하지만,GPU 메모리를 사실 중점적으로 보는 편이다.
Top-Tier 컨퍼런스의 논문의 AI를 선택하고 구동하려고 보니 통상 20gb 정도 잡아 먹는데, 그걸 A5000에 올리고 내리는 과정속에 에러가 나와서 확인 해보니 cpu이슈로 확인을 하였다.
CUDA를 활용하여 GPU에서 AI 모델을 학습 및 추론할 때, CPU는 다양한 중요한 역할을 수행함. GPU가 높은 연산 성능을 제공하는 반면, CPU는 데이터 준비, 모델 관리, 시스템 자원 분배 등에서 중요한 역할을 함. 주요 내용은 다음과 같음:

CPU의 주요 역할

1.
데이터 준비 및 전처리
데이터 로딩, 전처리, 증강 등을 수행하며 GPU로 데이터를 전달.
일반적으로 DataLoader에서 다수의 CPU 코어를 활용해 병렬 처리로 GPU의 데이터 병목 현상을 방지.
2.
모델 로드 및 초기화
학습 또는 추론 전에 모델 파일(.pt, .onnx 등)을 디스크에서 메모리로 로드.
모델 초기화, 파라미터 설정 등 메모리 관리 작업 수행.
3.
GPU와의 데이터 전송
CPU에서 데이터를 준비한 후 torch.Tensor.to('cuda')와 같은 작업으로 GPU 메모리로 전송.
GPU와의 데이터 전송 속도가 최적화되지 않으면 성능 병목 발생 가능.
4.
추론 및 학습 관리
GPU가 모델 연산을 수행하는 동안 스케줄링, 연산 흐름 제어, 결과 관리 수행.
GPU 작업이 끝난 결과를 수집 및 정리하여 사용자 애플리케이션에 전달.
5.
IO 및 파일 관리
데이터셋 디스크 로딩, 로그 기록, 체크포인트 저장 등 파일 입출력 작업을 수행.
GPU는 메모리와 연산에 집중하고, CPU가 IO 작업을 처리함으로써 전체 작업의 효율성 증가.
6.
모델 관리
GPU 메모리가 제한적이기 때문에, 대형 모델 학습 시 모델을 올리고 내리는 작업 수행.
Ex) 체크포인트를 GPU에 로드하거나, 학습 중간에 GPU 메모리를 비우고 새로운 데이터 배치를 준비.
7.
CPU 연산 활용
GPU만큼 높은 병렬 연산 성능이 필요하지 않은 연산은 CPU에서 처리.
예: 간단한 수치 연산, 모델의 특정 연산(특히 torch의 CPU 전용 연산).

CPU가 중요한 이유

1.
데이터 준비 속도와 효율성
데이터 준비 속도가 느리면 GPU가 대기 상태로 전환됨(Under-utilization).
CPU가 데이터를 효율적으로 준비해야 GPU를 최대한 활용 가능.
2.
메모리 관리 및 작업 스케줄링
GPU 메모리가 제한적일 경우, CPU를 통해 모델 및 데이터를 교체하며 최적화 가능.
3.
시스템 자원 분배
여러 GPU가 연결된 환경에서, CPU가 각 GPU의 작업을 조율.
4.
멀티태스킹
AI 작업과 병렬로 실행되는 시스템 작업(OS, 디스크 관리 등)에 CPU가 관여.

최적화 팁

1.
병렬 데이터 로딩
PyTorch의 DataLoader에서 num_workers를 늘려 병렬 로딩 활용.
데이터 로딩과 GPU 연산을 비동기 처리로 병목 제거.
2.
Pinned Memory 활용
CUDA에서 pinned_memory=True 옵션을 활용해 CPU-GPU 데이터 전송 속도 향상.
3.
CPU/GPU 균형 조정
CPU와 GPU가 서로 대기하지 않도록 작업량을 조정하고 병렬화.
4.
멀티 GPU 및 CPU 활용
PyTorch의 torch.distributed 등을 사용하여 CPU와 GPU 간 작업을 분산.

그럼 정답을 보자

예를 들어 gpu에 모델을 올려놓고 배포를 하려고 하는데, gpu 비디오 램이 20기가 정도 먹는 큰 규모 ai 모델을 활용할때에 적합한 cpu를 고르기 위해서 cpu 성능의 어떤 수치를 보고 결정을 해야할까?
GPU에 큰 규모의 AI 모델을 올려 배포하려고 할 때, 적합한 CPU를 선택하려면 데이터 준비, 모델 관리, IO 처리, GPU와의 통신을 효율적으로 처리할 수 있는 CPU가 필요함. CPU 성능을 결정할 때 다음 주요 지표를 확인해야 함:

1. 코어 개수 (Cores)

데이터 로딩 및 전처리를 병렬로 수행해야 하므로 멀티코어 CPU가 필수적.
코어 수가 많을수록 PyTorch DataLoader의 num_workers를 늘려 병렬 데이터 로딩 속도를 향상 가능.
권장: 최소 8코어/16스레드 이상, 고급 작업의 경우 16코어 이상 추천 (예: AMD Ryzen 9, Intel i9 시리즈).

2. 스레드 수 (Threads)

다중 작업 병렬 처리에서 중요한 지표.
데이터 준비, IO 작업, GPU와의 데이터 전송 작업이 동시에 이루어지므로 고스레드 CPU가 유리.
권장: 스레드 수가 코어 수의 2배 (Hyper-threading 지원 CPU).

3. 클럭 속도 (Clock Speed)

단일 스레드 작업(예: GPU로 데이터 전송, 모델 로드 등)에 중요한 요소.
데이터 로드와 GPU 연산의 속도를 맞추기 위해 클럭 속도가 높을수록 좋음.
권장: 기본 클럭 3.5GHz 이상, 부스트 클럭 4.5GHz 이상.

4. 캐시 크기 (Cache Size)

데이터 전처리와 모델 로딩 시 캐시 메모리에서 자주 접근하는 데이터를 빠르게 처리 가능.
L3 캐시가 클수록 CPU 성능 향상.
권장: L3 캐시 16MB 이상.

5. 메모리 채널 수 (Memory Channels)

GPU 메모리로 대량 데이터를 빠르게 전송하려면 CPU의 메모리 대역폭이 중요.
메모리 채널이 많을수록 고대역폭 처리에 유리.
권장: 듀얼 채널 이상, 고급 작업에서는 쿼드 채널 CPU 플랫폼(예: 서버용 AMD Threadripper, Intel Xeon) 고려.

6. PCIe 레인 수 및 버전

GPU와 데이터 통신에 중요한 요소.
PCIe 4.0 또는 5.0 지원으로 대역폭 최적화 필요.
GPU가 여러 개 사용되거나 데이터 IO 작업이 많은 경우 PCIe 레인 수가 많은 CPU를 선택.

7. 전력 소비 및 발열 관리

AI 배포 환경에서 안정적인 작업을 위해 발열 관리가 중요.
고성능 CPU는 전력 소비가 높아질 수 있으므로, 쿨링 솔루션과 PSU 용량 고려.

추천 CPU 목록 (대규모 AI 모델에 적합한 옵션)

1.
고성능 데스크톱 CPU
AMD Ryzen 9 7950X
16코어 / 32스레드, 기본 클럭 4.5GHz, 부스트 5.7GHz, L3 캐시 64MB.
Intel Core i9-13900K
24코어 (8P + 16E) / 32스레드, 기본 클럭 3.0GHz, 부스트 5.8GHz, L3 캐시 36MB.
2.
워크스테이션 및 서버 CPU
AMD Threadripper PRO 5955WX
16코어 / 32스레드, 기본 클럭 4.0GHz, L3 캐시 64MB, 쿼드 채널 메모리.
Intel Xeon W-3335
12코어 / 24스레드, 기본 클럭 3.4GHz, 부스트 4.0GHz, 쿼드 채널 메모리.

최종 고려사항

1.
작업 부하 분석
데이터 준비가 많은 작업: 코어와 스레드 수가 중요.
GPU와의 데이터 전송이 많은 작업: 메모리 대역폭과 PCIe 버전/레인 수 중요.
2.
GPU 수와 모델 크기
다중 GPU 사용 시 CPU가 모든 GPU에 데이터를 효율적으로 전송해야 하므로 고성능 CPU 필수.
3.
메모리 용량
CPU가 충분한 메모리(RAM)를 활용해야 GPU 메모리 활용 최적화 가능.
권장: 32GB 이상, 대규모 모델의 경우 64GB~128GB.
결론적으로, 대규모 AI 모델 배포에는 멀티코어/멀티스레드 CPU, 높은 클럭 속도, 대용량 캐시, PCIe 4.0 이상 지원 CPU를 선택하는 것이 중요함. 작업 부하와 예산에 따라 워크스테이션급과 데스크톱급 중 적합한 CPU를 선택.

안녕하세요

한국전자기술연구원 김영광입니다.
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

I'm Yeonggwang Kim from the Korea Electronics Research Institute.
For technical and business inquiries, please contact me at “glory@keti.re.kr”