我想防止或解决 Amazon SageMaker 端点中的内存不足问题。
解决方法
要防止或解决 SageMaker 端点中的内存不足问题,请完成以下步骤:
对于基于 CPU 的模型
如果您部署的模型在 CPU 上运行且存在端点内存问题,请使用以下最佳实践:
如果您使用 SageMaker 内置算法容器,请使用 model_server_workers 参数来限制工作线程的数量。有关详细信息,请参阅 SageMaker 网站上的 model_server_workers。起始值为 1,然后逐渐增加该值以确定您的端点可拥有的最大工作线程数。
**注意:**当增加 model_server_workers 值时,创建的模型副本的数量也会增加。因此,内存需求也会增加。
要监控 SageMaker 上的内存使用情况,请使用 Amazon CloudWatch。
如果您的端点实例类型只能容纳单个模型副本,请将该实例类型增加到具有更多内存的类型。有关详细信息,请参阅 Amazon SageMaker 定价。
要在本地运行调用时测试端点并监控内存使用情况,请使用 SageMaker 本地模式。有关详细信息,请参阅 SageMaker 网站上的本地模式。确保使用相同的实例类型进行本地测试,以获得一致的结果。
如果您无法增加端点的单个实例的内存,请使用自动扩缩。自动扩缩允许您根据工作负载需求自动调整实例数量,以实现最佳的性能和资源利用率。有关详细信息,请参阅 Optimize your machine learning deployments with auto scaling on Amazon SageMaker。
要确定端点所需的实例类型和配置,请使用 Inference Recommender。
对于基于 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 内存,请参阅 Improve throughput performance of Llama 2 models using Amazon SageMaker。
如果您的模型需要处理长距离依赖关系,请调整序列长度。有关详细信息,请参阅使用新的 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."
如果上述错误发生在端点部署阶段,请完成以下步骤:
- 检查模型的内存要求并查看配置。
- 使用每个 GPU 内存更大的实例类型,例如 p4d.* 和 p5.* 系列。或者,使用具有多个 GPU 的实例,例如 g5.12xlarge 和 g5.48xlarge。
- 如果您的模型无法容纳单个 GPU,请将模型权重分成多个 GPU。
如果上述错误发生在推理期间,则表示您的 GPU 没有足够的内存来处理输入请求。要解决此问题,请将批量大小减小到 1 并将生成长度缩短为单个令牌。然后,监控您的 GPU 内存使用情况并逐渐增加批量大小和生成长度,以确定 GPU 的最大容量。
**注意:**如果您使用 Hugging Face 的 Accelerate 库,请启用 DeepSpeed 以降低 GPU 内存利用率。此方法不会影响下游性能。有关详细信息,请参阅 Hugging Face 网站上的 Accelerate。