딥러닝 알고리즘을 학습할 때는 GPU가 필수적이라고 생각되지만, 모델 학습이 완료되고 난 후 서빙을 하는 경우에는 GPU 대신 CPU를 쓰는 경우가 많이 있습니다. 예를 들어 어느 정도 최적화 과정을 거치고 나면 BERT 같이 무거운 모델도 32-core Xeon이 비슷한 가격의 V100보다 6배 이상 더 빠르게 inference한다는 Roblox의 리포트도 있습니다. 이는 곧 가성비가 6배 높다는 뜻입니다.
하지만 위의 수치를 조금 더 들여다보면, 공평한 비교는 아니라는 생각이 듭니다. 32-core Xeon의 경우 복수개의 코어로 분할되면서 독립적 캐쉬를 갖추고 있으며 메모리 대역에 대한 사용 측면에서도 유리한 점이 있는 반면, V100의 경우 결국 하나의 GPU이므로 동시에 복수개의 inference를 실행할 경우 캐쉬와 메모리 대역 측면에서 “경쟁”을 하게 되어 최대 성능을 뽑아낼 수 없기 때문입니다.
Inference는 학습에 비해 메모리가 훨씬 적게 사용되기 때문에 단일 GPU를 사용하는 경우에도 동시에 여러개의 inference를 실행할 수 있는데, 실제로 테스트해보면 갯수가 늘어남에 따라 수행속도가 크게 저하되는 것을 확인할 수 있습니다. (완전 병렬의 경우 메모리 한도내라면 속도가 동일해야 합니다. 예를 들어 하나의 inference에서 배치사이즈를 늘려보면 속도 저하가 훨씬 덜합니다)
NVidia의 신규 GPU 구조인 Ampere에서 소개된 Multi-Instance GPU 기술은 이러한 한계를 해소해 줄 것 같습니다. 하나의 GPU를 논리적으로 독립된 Sub-GPU로 최대 7개까지 분할하여 사용할 수 있으며 각 Sub-GPU는 캐쉬와 메모리대역을 별도 할당 받습니다. 실제 inference에서 성능이 크게 향상될 것으로 기대됩니다. 거기에 FP16과 FP32의 중간 형태인 19-bit format TP32가 새로 추가되어 6배 정도 성능 향상을 이루었다고 합니다. (이건 정밀도 희생을 담보로 한 것이므로 lossless한 향상은 아닙니다)
대충 퉁쳐서 MIG와 TF32를 조합해서 20배(!)의 성능 향상을 이루었다고 가정해보면 앞의 Roblox 예제에서 CPU가 6배 더 효율적이던 것을 뒤집어서 GPU가 3배 가량 더 효율적이게 됩니다. 그러면 서빙에서도 GPU의 경쟁력이 생긴다고 볼 수 있지만… 클라우드 인스턴스를 사용하는 경우 GPU 머신의 단가가 CPU 머신 대비 3배 이상 비싸므로^^ 아직도 더 낫다는 말은 쉽게 하기 어렵겠네요. 하반기 RTX 3090 24G가 나온다니까 그걸 사서 실제로 여러가지 테스트를 해 보고 싶네요. (MIG, TP32 효과 검증) 링크는 NVidia Ampere Architecture 소개입니다: