Amazon SageMaker 엔드포인트에서 메모리 부족 문제를 방지하거나 해결하고 싶습니다.
해결 방법
SageMaker 엔드포인트에서 메모리 부족 문제를 방지하거나 해결하려면 다음 단계를 완료하십시오.
CPU 기반 모델의 경우
CPU에서 실행되고 엔드포인트 메모리 문제가 있는 모델을 배포하는 경우 다음 모범 사례를 사용하십시오.
SageMaker 내장 알고리즘 컨테이너를 사용하는 경우 model_server_workers 파라미터를 사용하여 작업자 수를 제한합니다. 자세한 내용은 SageMaker 웹 사이트에서 model_server_workers를 참조하십시오. 값 1로 시작한 다음 점차 값을 늘려 엔드포인트에 포함할 수 있는 최대 작업자 수를 구합니다.
참고: model_server_workers 값을 늘리면 생성되는 모델 사본 수도 늘어납니다. 따라서 메모리 요구 사항이 증가합니다.
SageMaker에서 메모리 사용량을 모니터링하려면 Amazon CloudWatch를 사용하십시오.
엔드포인트 인스턴스 유형이 단일 모델 사본만 수용할 수 있는 경우, 인스턴스 유형을 메모리가 더 많은 유형으로 늘리십시오. 자세한 내용은 Amazon SageMaker 요금을 참조하십시오.
호출이 로컬에서 실행되는 동안 엔드포인트를 테스트하고 메모리 사용량을 모니터링하려면 SageMaker 로컬 모드를 사용합니다. 자세한 내용은 SageMaker 웹 사이트에서 로컬 모드를 참조하십시오. 일관된 결과를 얻으려면 로컬 테스트에 동일한 인스턴스 유형을 사용해야 합니다.
엔드포인트의 단일 인스턴스 메모리를 늘릴 수 없다면 오토 스케일링을 사용합니다. 오토 스케일링을 사용하면 워크로드 수요에 따라 인스턴스 수를 자동으로 조정하여 성능 및 리소스 활용도를 최적화할 수 있습니다. 자세한 내용은 Amazon SageMaker의 오토 스케일링을 통한 기계 학습 배포 최적화를 참조하십시오.
엔드포인트에 필요한 인스턴스 유형과 구성을 식별하려면 추론 추천자를 사용합니다.
GPU 기반 모델의 경우
GPU에서 실행되고 엔드포인트 메모리 문제가 있는 모델을 배포하는 경우 다음 모범 사례를 사용하십시오.
모델 가중치를 로드하는 데 필요한 GPU 메모리를 계산하려면 다음 공식을 사용합니다.
Llama 2 13B를 실행하는 예시:
Model Size Calculation:
Parameters (13B) × 4 bytes (FP32) = 52 GB
Total Memory Required = Initial weights(52 GB) + Attention cache and Token Generation memory(4-10 GB)** + Additional overhead(2-3 GB)
** depends on sequence length, batch strategy, model architecture)
Memory Precision Comparisons:
• FP32 (Full Precision): Base reference ( 4 bytes for 1 parameter)
• FP16 (Half Precision): 1/2 of FP32
• BF16 (Brain Float 16): 1/2 of FP32
• INT8 (8-bit Integer): 1/4 of FP32
모델에 GPU보다 많은 메모리가 필요한 경우 양자화, 텐서 병렬화, 연속 배칭을 사용하여 성능을 최적화합니다. 자세한 내용은 Amazon SageMaker를 사용한 LLM 배포 및 엔드포인트 배포 구성 선택을 참조하십시오. Hugging Face에서 사용할 수 있는 LLM을 배포하는 경우 모델 메모리 추정기를 사용하여 예상 모델 메모리 요구 사항을 파악합니다. 자세한 내용은 Hugging Face 웹 사이트의 모델 메모리 추정기를 참조하십시오.
모델 및 사용 가능한 GPU 메모리에 대한 최적의 배치 크기를 확인하려면 Amazon SageMaker를 사용하여 Llama 2 모델의 처리 성능 개선을 참조하십시오.
모델이 장거리 종속성을 처리하는 경우 시퀀스 길이를 조정합니다. 자세한 내용은 새 Amazon SageMaker 컨테이너를 사용하여 LLM의 추론 성능 향상을 참조하십시오.
모델의 GPU 메모리 할당이 올바르게 구성되었는지 확인합니다. GPU 메모리 사용량을 추적하려면 nvidia-smi와 같은 모니터링 도구를 사용합니다. 자세한 내용은 NVIDIA 웹 사이트의 시스템 관리 인터페이스 SMI를 참조하십시오. 또한 GPU 메모리 문제를 파악하고 해결하는 데 도움이 되도록 추가 로깅 명령문을 사용하여 추론 스크립트를 개선합니다.
일반적인 메모리 관련 오류 문제 해결
"botocore.errorfactory.ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (503) from primary with message "{"code": 503, "type": "ServiceUnavailableException", "message": "No worker is available to serve request: model"}"
위 오류가 발생하면 다음 단계를 완료하십시오.
- 메모리 관련 문제를 파악하려면 엔드포인트의 CloudWatch 로그를 검토합니다.
- 엔드포인트 인스턴스가 동시 요청을 관리할 수 있는지 확인하려면 컨테이너 구성을 검사합니다. 들어오는 요청을 효율적으로 처리할 수 있는 작업자가 여러 명 있는지 확인합니다.
- 여러 작업자를 지원하려면 model_server_workers 파라미터를 조정합니다. 자세한 내용은 SageMaker 웹 사이트에서 model_server_workers를 참조하십시오. TorchServe와 같은 프레임워크를 사용하여 모델을 배포하는 경우 사용 사례에 따라 최소 및 최대 작업자를 구성합니다.
- 엔드포인트에 대한 최적의 구성을 파악하려면 엔드포인트의 부하를 테스트합니다. 컨테이너에 여러 작업자를 처리할 수 있는 리소스가 충분하지 않은 경우 부하를 여러 인스턴스에 분산하도록 오토 스케일링을 구성합니다.
"torch.cuda.OutOfMemoryError: CUDA out of memory."
엔드포인트 배포 단계에서 위 오류가 발생하는 경우 다음 단계를 완료하십시오.
- 모델의 메모리 요구 사항을 확인하고 구성을 검토합니다.
- p4d.* 및 p5.* 패밀리와 같이 GPU당 메모리가 더 큰 인스턴스 유형을 사용합니다. 또는 g5.12xlarge 및 g5.48xlarge와 같이 GPU가 여러 개 있는 인스턴스를 사용할 수 있습니다.
- 모델이 단일 GPU에 맞지 않는 경우 모델 가중치를 여러 GPU로 분할합니다.
추론 중에 위와 같은 오류가 발생하면 GPU에 입력 요청을 처리할 메모리가 충분하지 않은 것입니다. 이 문제를 해결하려면 배치 크기를 1로 줄이고 생성 길이를 단일 토큰으로 줄입니다. 그런 다음 GPU 메모리 사용량을 모니터링하고 배치 크기와 생성 길이를 점진적으로 늘려 GPU 최대 용량을 결정합니다.
참고: Hugging Face의 Accelerate 라이브러리를 사용하는 경우 DeepSpeed를 활성화하여 GPU 메모리 사용량을 줄이십시오. 이 방법은 다운스트림 성능에 영향을 주지 않습니다. 자세한 내용은 Hugging Face 웹 사이트의 Accelerate를 참조하십시오.