AI 또는 풀스택 개발에 어려움을 겪고 계신가요? 맞춤형 조언, 기술 통합 등 유니티 전문가가 도와드리겠습니다. 다음 연락처로 문의하세요. [email protected].

프로덕션 환경에 GPT-NeoX 20B 배포 및 딥스피드에 초점 맞추기

프로덕션 환경에서 GPT-NeoX 20B를 배포하는 것은 어려운 일이며, 저희는 NLP Cloud에서 이를 어렵게 배웠습니다... 이 글에서는 GPT-NeoX 20B 사용과 관련된 몇 가지 요령, 특히 프로덕션 환경에서 DeepSpeed를 처리하는 방법에 대해 자세히 설명합니다.

GPT-NeoX

GPT-NeoX 20B

GPT-NeoX 20B는 이 글을 쓰는 시점에서 가장 큰 오픈 소스 자연어 처리 모델입니다.

2주 전 EleutherAI가 출시했습니다. 1년간의 노력 끝에 200억 개의 파라미터를 학습시켰습니다. 가장 어려웠던 점 중 하나는 여러 GPU에서 모델을 효율적으로 학습시킬 수 있도록 적절한 병렬 아키텍처를 설정하는 것이었습니다.

이전 모델인 GPT-J는 Google TPU에서 훈련되었으며 TPU에서 사용하도록 설계되었습니다. GPT-NeoX 20B의 내부 아키텍처는 근본적으로 다르며 GPU에서 사용하도록 만들어졌습니다. 이 모델은 더 큰 모델 시리즈 중 첫 번째 모델이어야 한다는 아이디어가 있습니다(여기서 목표는 GPT-3를 따라잡는 것입니다).

GPT-NeoX 20은 텍스트 생성 모델로, 블로그 게시물 생성, 챗봇, 텍스트 분류, 감정 분석, 키워드 추출, 코드 생성, 엔티티 추출, 의도 분류, 질문 답변 등 거의 모든 자연어 처리 사용 사례를 매우 정확하게 구현할 수 있습니다.

의심할 여지 없이 많은 연구자와 기업이 이 새로운 모델을 활용하여 훌륭한 결과를 얻을 것입니다. 하지만 한 가지 과제가 있습니다. GPT-NeoX 20B를 어떻게 배포할까요?

하드웨어 요구 사항

프로덕션 환경에 GPT-NeoX 20B를 배포할 때 가장 먼저 직면하는 과제는 필요한 고급 하드웨어입니다.

매우 비싸더라도 일반 소비자용 하드웨어에 GPT-J를 배포하는 것은 여전히 가능했습니다. 예를 들어, 아주 좋은 CPU(결과가 고통스러울 정도로 느리더라도)나 NVIDIA RTX 3090과 같은 고급 게이밍 GPU에 배포할 수 있었습니다. 하지만 GPT-NeoX 20B는 너무 커서 더 이상 불가능합니다.

기본적으로 GPT-NeoX에는 최소 42GB의 VRAM과 40GB의 디스크 공간이 필요합니다(여기서는 슬림형 fp16 버전에 대해 이야기하고 있습니다). 이러한 요구 사항을 충족하는 GPU는 거의 없습니다. 주요 GPU는 NVIDIA A100, A40, RTX A6000입니다.

이러한 GPU는 매우 비쌀 뿐만 아니라 전 세계적인 반도체 품귀 현상으로 인해 요즘에는 구하기도 어렵습니다.

가장 좋은 해결책은 멀티 GPU 아키텍처를 사용하는 것입니다.

딥스피드를 지원하는 멀티 GPU

모델을 하나의 GPU에 맞출 수 없는 경우 여러 개의 GPU로 분할할 수 있습니다.

두 가지 이유에서 흥미로운 옵션입니다. 첫째, 인프라를 수평으로 확장하는 것이 수직으로 확장하는 것보다 비용이 저렴합니다. 이는 서버에서도 마찬가지이며 GPU에서도 마찬가지입니다. 둘째, NVIDIA A40과 같은 대형 GPU보다 NVIDIA Tesla T4와 같은 소형 GPU를 여러 개 사용하는 것이 더 쉽습니다.

안타깝게도 머신 러닝 모델을 여러 개의 GPU로 분할하는 것은 기술적으로 어려운 문제입니다. 모델 병렬 처리와 선택지에 대한 훌륭한 기사를 Hugging Face에서 작성했습니다. 여기에서 읽어보세요. 하지만 다행히도 EleutherAI는 훈련이든 추론이든 여러 GPU에서 쉽게 병렬화할 수 있도록 GPT-NeoX 20B를 설계했습니다.

GPT-NeoX 아키텍처는 딥스피드를 기반으로 합니다. 딥스피드는 원래 여러 GPU 간의 트레이닝을 병렬화하기 위해 설계된 Microsoft의 프레임워크로, 추론에도 점점 더 많이 사용되고 있습니다. 모든 어려운 작업은 EleutherAI가 수행했기 때문에 구성 파일에서 숫자를 변경하는 것만큼이나 간단하게 GPT-NeoX를 병렬화할 수 있습니다.

GPT-NeoX 병렬 처리
Extract from the GPT-NeoX docs about parallelism

그러나 API를 통한 온라인 추론을 위해 프로덕션 환경에 Deepspeed를 배포하는 것은 어렵습니다... Deepspeed는 웹 서버에 쉽게 통합되도록 설계되지 않았습니다. NLP Cloud에서는 이를 어렵게 배웠지만, 노력 끝에 마침내 API를 통해 Deepspeed와 GPT-NeoX를 효율적으로 작동시킬 수 있는 방법을 찾아냈습니다.

사용 요령

따라서 적절한 하드웨어를 프로비저닝하고 Deepspeed를 사용하여 GPT-NeoX 20B를 올바르게 배포했다고 가정해 보겠습니다. 이제 몇 가지 주의해야 할 사항이 있습니다.

첫째, GPT-J와 비교하여 파라미터(상단 k, 상단 p, 온도)가 모델에 미치는 영향이 동일하지 않습니다. 따라서 GPT-J에 적합한 구성을 찾았다고 해서 당연하게 생각하지 마세요. GPT-NeoX로 새로운 테스트를 수행해야 합니다.

마지막으로, 입력 크기를 2048 토큰까지 늘릴 수 있다고 해도 위에서 언급한 기본 42GB보다 더 많은 메모리가 필요합니다...

일괄 추론?

GPT 모델은 상당히 느리며, GPT-NeoX 20B도 예외는 아닙니다. 따라서 애플리케이션의 처리량을 개선하려면 배치 추론 솔루션으로 작업하는 것이 좋습니다.

현재로서는 NLP Cloud에서 이에 대한 좋은 해결책을 찾지 못했습니다.

GPT-NeoX 코드는 한 번의 요청으로 여러 추론을 동시에 수행할 수 있도록 만들어졌습니다. 하지만 테스트 결과, 응답 시간은 추론 횟수에 따라 선형적으로 증가하여 일괄 추론의 목적에 어긋났습니다...

결론

GPT-NeoX 20B는 프로덕션 환경에 배포하기는 확실히 어렵습니다. 텍스트 생성 품질은 놀랍지만 실제로 이 모델을 설치할 수 있는 용량을 갖춘 곳은 거의 없습니다.

그 어느 때보다 이 모델을 사용하기 위해서는 NLP Cloud와 같은 클라우드 서비스에 의존하는 것이 해결책이 될 것으로 보입니다. 여기에서 NLP 클라우드의 GPT-NeoX 20B를 사용해 보세요!

이 글에 대한 의견이 있으시면 언제든지 문의해 주시면 감사하겠습니다!

Abhinav
NLP 클라우드의 Devops 엔지니어