본문 바로가기

AI Feed
Tech & Product/AI, 더 깊게

RA:X 서비스 개발자의 인사이트: 혼합 정밀도와 GPU 성능 비교

안녕하세요. 저는 TEN에서 RA:X(랙스) 서비스를 담당하는 개발자 정수현입니다. RA:X(랙스)는 AI 인프라 전문 기업 TEN에서 작년 11월에 공개한 AI 인프라 구축 컨설팅 서비스입니다. 고객의 니즈와 상황을 고려한 테스트 데이터를 기반으로 AI 인프라 구성을 제안하는, 합리적인 컨설팅을 제공하고 있습니다.

왜 RA:X(랙스)가 세상에 공개되었는지 궁금해하시는 분들도 있을 것 같습니다. 지금은 AI 인프라 구축에 있어 각 HW 벤더들이 추천하는 것, 그리고 그 벤더들의 파트너사를 통한 추가 HW 요소들을 중심으로 구매 후 구축하는 경우가 많은데요. 이런 경우에는 구체적인 참고 데이터가 없더라도 어쨌든 우수한 사양으로 인프라를 구축하는 방향을 선택하시게 될 겁니다.

그런데 그 결과, 책임은 인프라를 구축한 고객이 지게 됩니다. 어떤 책임인가 싶으실 텐데, 가장 큰 책임이 ‘비용’입니다. 우수한 사양으로 인프라 구축을 하는 데에도 많은 돈이 들어가는데요. 구축한 인프라가 알고 보니 오버 스펙이라 실제 AI를 개발하는 동안 유휴 용량이 생길 수도 있고, 혹은 운영 중인 AI 프로젝트의 볼륨이 커져서 생각보다 많은 프로젝트를 동시 진행하는 데에 제한이 있는 등 효율에서 문제를 낳기도 합니다.

그래서, TEN이 고객의 상황에 맞춰서 인프라를 구축할 수 있도록 ‘트래픽 테스트’를 추가하는 컨설팅 서비스를 제공하게 된 것입니다.

 

 

 

[ 트래픽 테스트 기반의 인프라 구축 컨설팅, RA:X ]

‘테스트’를 기반으로 한 AI 인프라 구축 컨설팅이라고 하니, 테스트를 어떻게 진행하는지 궁금하실 것 같습니다. 이 테스트는 트래픽 테스트(부하 테스트)입니다. 트래픽을 단순 측정하는 방식이 아니라, 고객의 상황을 재현하기 위해 데이터가 필요합니다.

우선 고객으로부터 테스트가 필요한 딥러닝 프로세스(docker image나 py 파일, 또는 ipynb 파일, 학습에 관한 테스트일 경우 학습에 필요한 부가 데이터 필요)를 전달받습니다. 이 프로세스를 TEN이 구축해 놓은 Reference Architecture(레퍼런스 아키텍처)의 클러스터 위 각각의 노드에서 실행하는 방식으로 테스트합니다. 그리고 테스트한 결괏값으로 메트릭을 추출합니다. 매트릭은 소요 시간을 포함하여 고객에게 필요한, 또는 고객이 요청한 내용으로 추출하고 있습니다.

TEN이 구축한 Reference Architecture(레퍼런스 아키텍처)는 TEN이 고객의 AI 개발 또는 서비스 환경을 재현하기 위해 다양하게 구성한 인프라 환경입니다. 각 고객의 상황, 여건을 반영하기 위해 최신 사양의 HW 요소들로 구성되어 있습니다. 딥러닝 프로세스가 종료되면, 추출한 메트릭을 기반으로 한 테스트 결과를 제공합니다. 필요하다면 서버에 대한 제안도 할 수 있습니다.

 

 

 

AI를 개발하고 서비스하기 위한 인프라를 구축한다고 할 때, RA:X(랙스) 같은 테스트 기반 컨설팅을 참고하지 않는 경우를 가정해 보겠습니다. GPU나 패브릭의 제조사에서 내놓는 스펙 정보를 참고하고, 벤더사들의 제안을 받게 되고, 이를 기반으로 인프라를 구축하게 됩니다. 아마 좀 더 익숙하신 방법일 겁니다.

이렇게 구축한 인프라가, 실제 AI를 개발 또는 서비스하실 때 지나치게 상향된 스펙일 수도 혹은 모자랄 수도 있습니다. 앞에서 설명한 것처럼 비용 문제로 이어지기도 합니다. 이 부분은 AI 인프라의 HW 요소를 각각 담당하는 벤더들이 쉽게 파악할 수 없습니다. RA:X(랙스)에서 제공하는 Reference Architecture(레퍼런스 아키텍처)에서의 테스트는 이 문제를 해소해 줄 수 있는 참고 데이터가 됩니다.

이렇게 RA:X(랙스)를 운영하다 보면, 뜻밖의 결과를 만나기도 합니다. 상식적으로 생각해 보면, 아주 좋은 사양의 GPU와 네트워크로 인프라를 구성하면, 효율이 굉장히 좋을 것입니다. 그런데 레퍼런스 아키텍처에서 테스트하고 메트릭을 살펴보면, 그렇지 않다는 인사이트를 도출하게 됩니다. 그래서 개발자인 저조차 예상하지 못한 구성과 내용을 제안하게 되기도 합니다.

그래서 이번에 [AI, 더 깊게]에서 소개할 내용은 RA:X(랙스)를 통해 발굴한 AI 인프라 인사이트가 되겠습니다. 어떤 인사이트를 얻게 되는지, AI, 그리고 인프라에 관심이 있는 분들이라면 매우 흥미로운 내용일 거라 생각합니다. 그 전에, 이해에 도움이 될 ‘배치 사이즈’와 ‘혼합 정밀도’에 대해 먼저 소개하겠습니다.

 

 

 

[ 부동소수점과 혼합정밀도 ]

Google Cloud - bfloat16 숫자 형식 (출처:  https://cloud.google.com/tpu/docs/bfloat16?hl=ko)

우선 결과를 보여드리기 전에 컴퓨터 언어를 배우면서 한 번씩은 들어봤던 부동소수점에 대해서 간단하게 짚고 가려고 합니다. 부동소수점의 개념은 실수를 컴퓨터상에서 근삿값으로 표현하는 방식입니다. 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, 그림1처럼 유효숫자를 나타내는 가수(假數)와 소수점의 위치를 풀이하는 지수(指數)로 나누어 표현합니다.

부동소수점을 저장하는 방식으로 32비트 형식(FP32) 또는 16비트 형식(FP16)이 있습니다. 부동소수점이 길어지면 더 정확하게 실수를 담을 수 있어서, 부동소수점이 더 길게 저장되는 32비트 형식은 일반적으로 딥러닝 모델 학습에 사용합니다. 대신 응답 시간 및 메모리 사용이 증가하기 때문에 비교적 정확도보다 응답시간이 더 중요한 추론에는 16비트 형식을 사용해 왔습니다.

하지만 모델(특히 언어 모델)이 점점 커짐에 따라 OOM(Out Of Memory)이 학습의 발목을 붙잡았고, 연구 끝에 학습에도 단순히 FP32만 사용하는 것이 아니라 ‘혼합 정밀도’를 사용하여 학습하기 시작했습니다.

혼합 정밀도를 사용하면 딥러닝 모델의 파라미터와 활성화 레이어는 32비트 형식으로 저장하고 일부 연산을 16비트 형식으로 수행하여, 32비트만 사용할 때보다 연산 속도를 높이고 메모리 사용량을 줄입니다. 하지만, 모든 연산을 16비트로 수행하는 것이 아니라 기울기 연산과 같은 일부 연산은 여전히 32비트로 수행합니다. (요즘엔 학습 초반에는 16비트로 연산하다가 기울기 소실이 발생 시 32비트로 전환하는 기법도 있습니다)

FP16 mixed, BF16 mixed 등의 혼합 정밀도를 사용하여 메모리 사용량을 줄이고 학습 시간을 단축시켰으며 심지어 정밀도가 더 높은 FP32 형식을 사용했을 때보다 정확도가 오르는 경우도 보고되고 있습니다.

 

 

 

[ H100에서의 학습 효율, 배치 사이즈와 혼합 정밀도에 달렸다 ]

RA:X(랙스)를 통해 컨설팅을 의뢰해 주신 익명의 고객 사례를 가져왔습니다. 좌측의 그림 1과 우측의 그림 2는 1에폭 당 소요 시간 오차를 GPU 제품별로 표기한 막대그래프입니다. FP32 형식의 부동소수점을 사용하는 방식에 배치 사이즈가 64 또는 1,024인 경우를 가정했습니다.

GPU 이름 뒤에 숫자는 세대를 의미하는데, A100, H100처럼 100이라는 숫자가 붙으면 가격이 비싸고 데이터 센터급에 들어가는 고성능 GPU라고 알려져 있습니다. 그런데 그림 2를 보면 일명 ‘100 시리즈’ GPU인 A100과 H100 둘 다 Ada Lovelace 아키텍처(L4, L40, L40S)보다 속도가 느린 것을 확인할 수 있습니다.

그 이유는 각 GPU의 공식 벤치마크 중 FP32 tensor core를 보면 알 수 있습니다. A100은 19.5 TFLOPS, H100은 67 TFLOPS, L40S은 91.6 TFLOPS입니다. 실제로 L40S의 연산 능력이 더 뛰어나다고 수치가 나와 있습니다. 하지만 메모리 대역폭은 A100과 H100이 L40S보다 더 높습니다. 그 때문에 그림 3과 같이 배치 사이즈를 키우면 L40S과의 격차가 좁혀지는 것도 확인할 수 있습니다.

 

그림 2에서의 FP 32이던 부동 소수점 형식을, 혼합정밀도를 도입한 FP16 mixed 형식으로 바꾼 결과가 위의 그림3입니다. 위에서 벤치마크를 확인했던 GPU들의 FP16 tensor core를 확인해 보면 H100이 1,979 TFLOPS, L40S은 733 TFLOPS입니다. FP32일 때의 테스트 결과와 다르게, H100의 학습 속도가 L40S보다 더 빨라졌습니다.

FP16 mixed 혼합정밀도 방식을 사용하였을 때 모든 GPU의 속도가 느려진 것도 확인됩니다. 이것은 모델의 사이즈가 6M으로 비교적 적은 파라미터를 가지고 있기 때문입니다. 메모리가 충분한 상황이 주어지니, 혼합정밀도를 사용하는 것이 굳이 부동소수점 형식을 변환하는 과정이 추가된 게 되었네요. 이때 발생하는 연산으로 인한 학습 속도 저하가 나타나는 것입니다.

RA:X(랙스)에서 테스트한 결과 중 H100과 L40S, 이 두 개의 GPU만 비교해서 정리하자면, 모델 학습 시 배치 사이즈를 키우고 혼합 정밀도를 사용해야 H100이 L40S보다 성능이 좋다는 결론이 나옵니다. 하지만 모델 정확도를 생각하면 배치 사이즈를 하염없이 키울 수도 없는 노릇입니다.

또한 혼합 정밀도를 사용하면 FP32 형식으로 학습했을 때보다 속도가 느립니다. 앞서 이론상으로는 더 빨라진다고 했는데, 고객 사례를 중심으로 테스트하니 효율을 생각했을 때 굳이 선택할 이유가 없는 방법이 됩니다. 여기서 H100의 가격도 하나의 고려 사항이 되겠습니다. 즉, RA:X(랙스)의 테스트로 재현한 고객의 상황에는 H100이 정답이 아닐 수 있겠습니다. 최고 사양의 GPU이지만, 상황과 여건에 맞아야 그 ‘최고 사양’을 온전히 누릴 수 있습니다.

 

 

 

GPU를 비교해 본 결과, 고사양, 고성능, 고가의 GPU 구매가 AI 인프라의 답은 아닙니다. 무조건 비싼 GPU를 구매하는 것이 아니라 수행할 업무에 맞춰서 가성비 좋게 구매하는 것이 중요합니다. 이것이 RA:X(랙스)의 고객 사례를 토대로, 혼합 정밀도와 배치 사이즈를 변수로 설정한 후의 데이터 비교에서 얻을 수 있는 인사이트였습니다. 당연히 좋은 제품을 사용하면 더 좋은 효율이 나와야 하는 것 아닌가 싶은데, 뜻밖의 결과네요.

이는 비단 GPU뿐만 아니라 딥러닝 프로세스에 큰 영향을 주는 스토리지, 네트워크 장비 등에도 해당하는 내용이기도 합니다. 어떤 내용인지 구체적인 내용이 궁금하시다면, RA:X(랙스)의 다른 테스트 사례로 스토리지, 네트워크 장비 등에 대한 추가 인사이트도 공유할 기회를 마련해 보겠습니다.