Hugging Face Transformers를 사용하여 Amazon SageMaker에서 GPT-J 6B 배포하기

Hugging Face는 Amazon SageMaker와 Hugging Face Inference Toolkit을 사용하여 EleutherAI의 오픈 소스 60억 파라미터 언어 모델인 GPT-J 6B를 실시간 추론용으로 배포하는 방법을 상세히 설명했습니다. 이 접근 방식은 Amazon SageMaker가 부과하는 60초 요청 제한을 초과할 수 있는 긴 모델 로드 시간이라는 중요한 문제를 해결합니다.

프로덕션 환경을 위한 모델 로드 시간 최적화

GPT-J 6B를 프로덕션 환경에 배포하는 것은 메모리 사용량과 로딩 속도 때문에 까다롭습니다. 60억 파라미터 모델의 가중치는 약 24GB의 메모리를 차지합니다. 모델을 float32로 로드하면 최소 48GB의 CPU RAM(초기 가중치용 하나, 체크포인트용 하나)이 필요합니다.

접근성을 높이기 위해 EleutherAI는 float16 가중치를 제공합니다. 메모리 사용량을 줄이는 transformers 옵션과 결합하면 CPU RAM 요구 사항은 약 12.1GB로 떨어집니다. 그러나 표준 로딩 방식은 여전히 느립니다:

  • 표준 로딩: P3.2xlarge AWS EC2 인스턴스에서 모델을 로드하는 데 약 3분 32초가 소요됩니다.
  • 디스크 저장 로딩: 모델을 디스크에 저장하면 이 시간이 1분 23초로 단축됩니다.

Amazon SageMaker는 요청에 응답하는 데 60초 제한이 있으므로, 이러한 로드 시간은 모델을 확장 가능하고 신뢰할 수 있는 프로덕션 워크로드에 부적합하게 만듭니다.

torch.save를 통한 로드 시간 가속화

권장되는 from_pretrained 메서드 대신 torch.save(model, PATH)torch.load(PATH)를 사용하면 GPT-J의 로드 시간을 1분 23초에서 7.7초로 줄일 수 있습니다. 이는 약 10.5배의 속도 향상을 의미합니다.

중요 요구 사항: 호환성 문제를 피하기 위해 사용자는 모델을 저장할할 때 사용한 PyTorch 및 Transformers 버전과 모델을 로드할 때 사용하는 버전을 일치시켜야 합니다.

Amazon SageMaker에서의 배포 워크플로우

GPT-J 6B를 실시간 추론용으로 배포하려면 다음 워크플로우를 사용합니다:

  1. 모델 직렬화: from_pretrained를 사용하여 GPT-J를 로드하고 torch.save()를 사용하여 .pt 파일로 저장합니다.
  2. 아티팩트 생성: 모델 가중치와 필요한 파일(예: tokenizer.json)을 포함하는 model.tar.gz 아카이브를 생성합니다. 이 아티팩트는 S3 버킷에 업로드됩니다.
  3. 엔드포인트 배포: Amazon SageMaker Python SDK의 HuggingFaceModel 클래스를 사용하여 모델을 배포합니다.

이 배포를 위해 Hugging Face는 약 월 $500의 비용이 드는 ml.g4dn.xlarge 인스턴스 유형(NVIDIA T4 GPU)을 권장합니다.

추론 및 사용 모범 사례

엔드포인트가 배포되면 predictor.predict 메서드를 통해 예측을 실행합니다. Hugging Face Inference toolkit은 요청 페이로드의 parameters 속성을 통해 생성 프로세스를 사용자 정의할 수 있습니다.

생성 전략

  • Greedy Search: 기본 요청 메서드입니다. 첫 번째 요청 이후, 추론 시간은 약 3초입니다.
  • Beam Search: 파라미터에 `

Sources

관련