【AI】AWS SageMaker AI上部署托管DeepSeek系列模型及成本评估
推荐超级课程:
@TOC
DeepSeek-R1 ,由AI初创公司DeepSeek AI 开发,是一种先进的大型语言模型(LLM),以其创新的多阶段训练过程而著称。DeepSeek-R1不仅仅依赖于传统的预训练和微调,还整合了强化学习,以实现更精细的输出。该模型采用链式思维(CoT)方法,系统地分解复杂查询为清晰、逻辑的步骤。此外,它使用NVIDIA的并行线程执行(PTX) 结构来提升训练效率,并结合了监督式微调(SFT) 和群体鲁棒策略优化(GRPO) 的框架,确保其结果既透明又可解释。
在这篇文章中,我们展示了如何使用Hugging Face文本生成推理(TGI) 在Amazon SageMaker AI 上优化托管DeepSeek-R1蒸馏模型。
模型变体
当前的DeepSeek模型系列包括以下模型:
- DeepSeek-V3 – 一种使用混合专家(MoE)架构的LLM。像DeepSeek-V3和Mistral 这样的MoE模型,将变换器中的标准前馈神经网络替换为一组并行的子网络,称为专家。这些专家针对每个输入选择性激活,使得模型在不需要相应增加计算成本的情况下,有效地扩展到更大的规模。例如,DeepSeek-V3是一个拥有6710亿参数的模型,但在每个令牌输出时只有大约370亿参数(大约5%)被激活。DeepSeek-V3-Base是R1变体的基础模型。
- DeepSeek-R1-Zero – 基于使用强化学习指导CoT推理能力的DeepSeek-V3微调变体,之前没有进行任何SFT。根据DeepSeek R1论文 ,DeepSeek-R1-Zero在推理行为上表现出色,但在可读性和语言混合方面遇到了挑战。
- DeepSeek-R1 – 另一个基于DeepSeek-V3-Base的微调变体,构建方式类似于DeepSeek-R1-Zero,但具有多步骤训练流程。DeepSeek-R1在GRPO过程之前使用少量冷启动数据。它还通过拒绝采样结合来自DeepSeek-V3的监督数据,重新训练DeepSeek-V3-base。之后,重新训练的模型再经过一轮RL,形成了DeepSeek-R1模型检查点。
- DeepSeek-R1-Distill – 基于 Qwen 和 Meta 的 Llama 的变体,通过knowledge distillation 对 Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B、Llama-3.1-8B 和 Llama-3.3-70B-Instruct 进行微调。在这个过程中,DeepSeek-R1充当教师,Qwen或Llama充当学生。这些模型保留了其现有架构,同时通过蒸馏过程获得了额外的推理能力。它们仅使用SFT进行微调,不包含任何RL技术。
下图展示了DeepSeek-R1与其他最新模型在标准基准测试(如MATH-500 、MMLU 等)上的性能比较。
Hugging Face文本生成推理(TGI)
Hugging Face文本生成推理(TGI) 是一个高性能、生产就绪的推理框架,专门用于高效部署和服务大型语言模型(LLMs)。它旨在处理最新变换器模型的高计算和低延迟需求,包括Llama、Falcon、Mistral、Mixtral和GPT变体——有关TGI支持模型的完整列表,请参考supported models 。
Amazon SageMaker AI提供了一种托管方式来部署TGI优化的模型,与Hugging Face的推理堆栈深度集成,实现可扩展且成本效益高的LLM部署。要了解更多关于Amazon SageMaker AI上的Hugging Face TGI支持,请参考这个公告 和这篇关于将模型部署到Amazon SageMaker AI 的文档。
Hugging Face TGI的关键优化
Hugging Face TGI旨在解决部署大规模文本生成模型时遇到的挑战,如推理延迟、令牌吞吐量和内存限制。
使用TGI的好处包括:
- 张量并行 —— 将大型模型分割到多个GPU上,以实现高效的内存利用和计算
- 连续批处理 —— 动态地将多个推理请求进行批处理,以最大化令牌吞吐量并减少延迟
- 量化 —— 通过将模型权重转换为INT8或FP16来降低内存使用和计算成本
- 推测解码 —— 使用较小的草案模型来加速令牌预测,同时保持准确性
- 键值缓存优化 —— 减少长文本生成中的冗余计算,以实现更快的响应时间
- 令牌流 —— 实时流式传输令牌,适用于聊天机器人和虚拟助手等低延迟应用
运行时TGI参数
TGI容器支持运行时配置,为LLM部署提供更大的控制权。这些配置允许您使用容器环境变量调整设置,如量化、模型并行大小(张量并行大小)、最大令牌数、数据类型(dtype)等。
影响模型部署的重要运行时参数包括:
HF_MODEL_ID
:此参数指定要加载的模型的标识符,可以是Hugging Face Hub的模型ID(例如,meta-llama/Llama-3.2-11B-Vision-Instruct
)或包含模型文件的简单存储服务(S3)URI。HF_TOKEN
:此参数变量提供从Hugging Face Hub下载受限制模型所需的访问令牌,如Llama或Mistral。SM_NUM_GPUS
:此参数指定用于模型推理的GPU数量,允许模型在多个GPU上分片以提高性能。MAX_CONCURRENT_REQUESTS
:此参数控制服务器可以处理的最大并发请求数量,有效地管理负载并确保最佳性能。DTYPE
:此参数在加载期间设置模型权重的数据类型,选项如float16或bfloat16,影响模型的内存消耗和计算性能。
TGI容器中还有额外的可选运行时参数,这些参数已经过预优化,以在宿主硬件上最大化性能。然而,您可以修改它们以对LLM推理性能进行更大的控制:
MAX_TOTAL_TOKENS
:此参数设置每个请求可以处理的总输入和输出令牌数的上限,有效地定义了客户端交互的“内存预算”。MAX_INPUT_TOKENS
:此参数指定每个请求的输入提示中允许的最大令牌数,控制用户输入的长度以管理内存使用并确保有效处理。MAX_BATCH_PREFILL_TOKENS
:此参数限制在预填充阶段所有批处理请求处理的令牌总数,这一阶段既内存密集又计算受限,从而优化资源利用并防止内存不足错误。
有关运行时配置的完整列表,请参阅text-generation-launcher参数 。
在Amazon SageMaker AI上使用TGI部署DeepSeek模式
Amazon SageMaker AI提供了一种简单且流程化的方法来部署DeepSeek-R1模型,只需几行代码。此外,SageMaker端点支持自动负载平衡和自动扩展,使您的LLM部署能够根据传入请求动态扩展。在非高峰时段,端点可以缩减至零 ,优化资源使用和成本效率。
下表总结了Hugging Face Hub上由原始模型提供商DeepSeek上传的所有DeepSeek-R1模型。
模型 | 总参数数量 | 激活参数数量 | 上下文长度 | 下载 |
---|---|---|---|---|
DeepSeek-R1-Zero | 671B | 37B | 128K | 🤗 deepseek-ai/DeepSeek-R1-Zero |
DeepSeek-R1 | 671B | 37B | 128K | 🤗 deepseek-ai/DeepSeek-R1 |
DeepSeek AI还提供了其DeepSeek-R1模型的蒸馏版本,以提供各种应用更高效的替代方案。
模型 | 基础模型 | 下载 |
---|---|---|
DeepSeek-R1-Distill-Qwen-1.5B | Qwen2.5-Math-1.5B | 🤗 deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B |
DeepSeek-R1-Distill-Qwen-7B | Qwen2.5-Math-7B | 🤗 deepseek-ai/DeepSeek-R1-Distill-Qwen-7B |
DeepSeek-R1-Distill-Llama-8B | Llama-3.1-8B | 🤗 deepseek-ai/DeepSeek-R1-Distill-Llama-8B |
DeepSeek-R1-Distill-Qwen-14B | Qwen2.5-14B | 🤗 deepseek-ai/DeepSeek-R1-Distill-Qwen-14B |
DeepSeek-R1-Distill-Qwen-32B | Qwen2.5-32B | 🤗 deepseek-ai/DeepSeek-R1-Distill-Qwen-32B |
DeepSeek-R1-Distill-Llama-70B | Llama-3.3-70B-Instruct | 🤗 deepseek-ai/DeepSeek-R1-Distill-Llama-70B |
有两种方法可以在Amazon SageMaker上部署LLMs,如DeepSeek-R1及其蒸馏版本:
选项1:直接从Hugging Face Hub部署
在您的AWS账户中托管DeepSeek-R1的最简单方法是使用TGI容器部署它(及其蒸馏版本)。这些容器通过直接的运行时环境规范简化了部署过程。下面的架构图显示了从Hugging Face Hub直接下载,确保与Amazon SageMaker的无缝集成。
以下代码展示了如何将DeepSeek-R1-Distill-Llama-8B模型直接从Hugging Face Hub部署到SageMaker端点。
import sagemaker
from sagemaker.huggingface import (
HuggingFaceModel,
get_huggingface_llm_image_uri
)
role = sagemaker.get_execution_role()
session = sagemaker.Session()
# 选择最新的3+版本容器
deploy_image_uri = get_huggingface_llm_image_uri(
"huggingface",
version="3.0.1"
)
deepseek_tgi_model = HuggingFaceModel(
image_uri=deploy_image_uri,
env={
"HF_MODEL_ID": "deepseek-ai/DeepSeek-R1-Distill-Llama-8B",
"ENDPOINT_SERVER_TIMEOUT": "3600",
...
},
role=role,
sagemaker_session=session,
name="deepseek-r1-llama-8b-model" # 可选
)
pretrained_tgi_predictor = deepseek_tgi_model.deploy(
endpoint_name="deepseek-r1-llama-8b-endpoint", # 可选
initial_instance_count=1,
instance_type="ml.g5.2xlarge",
container_startup_health_check_timeout=600,
wait=False, # 设置为true以等待端点InService
)
要部署其他蒸馏模型,只需将HF_MODEL_ID
更新为任何DeepSeek蒸馏模型变体,例如deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
,deepseek-ai/DeepSeek-R1-Distill-Qwen-32B
或deepseek-ai/DeepSeek-R1-Distill-Llama-70B
。
选项2:从私有S3存储桶部署
要在您的AWS账户内私有部署模型,请将DeepSeek-R1模型权重上传到S3存储桶,并将HF_MODEL_ID
设置为相应的S3存储桶前缀。然后TGI将从S3检索并部署模型权重,从而消除了每次部署时的互联网下载需求。这种方法通过将权重保持在您的SageMaker端点附近来减少模型加载延迟,并允许您的组织的安全团队在部署前进行漏洞扫描。SageMaker端点还支持自动扩展,允许DeepSeek-R1根据传入请求量水平扩展,同时与弹性负载均衡无缝集成。
从S3部署DeepSeek-R1蒸馏模型变体的过程与选项1相同,只有一个关键区别:HF_MODEL_ID
指向S3存储桶前缀,而不是Hugging Face Hub。在部署之前,您必须首先从Hugging Face Hub下载模型权重,并将其上传到您的S3存储桶。
deepseek_tgi_model = HuggingFaceModel(
image_uri=deploy_image_uri,
env={
"HF_MODEL_ID": "s3://my-model-bucket/path/to/model",
...
},
vpc_config={
"Subnets": ["subnet-xxxxxxxx", "subnet-yyyyyyyy"],
"SecurityGroupIds": ["sg-zzzzzzzz"]
},
role=role,
sagemaker_session=session,
name="deepseek-r1-llama-8b-model-s3" # 可选
)
部署最佳实践
以下是在SageMaker AI上部署DeepSeek-R1模型时需要考虑的一些最佳实践:
- 在私有VPC中部署 —— 建议在虚拟私有云(VPC)内并在私有子网后部署您的LLM端点,最好是没有出口。请参见以下代码:
deepseek_tgi_model = HuggingFaceModel(
image_uri=deploy_image_uri,
env={
"HF_MODEL_ID": "deepseek-ai/DeepSeek-R1-Distill-Llama-8B",
"ENDPOINT_SERVER_TIMEOUT": "3600",
...
},
role=role,
vpc_config={
"Subnets": ["subnet-xxxxxxxx", "subnet-yyyyyyyy"],
"SecurityGroupIds": ["sg-zzzzzzzz"]
},
sagemaker_session=session,
name="deepseek-r1-llama-8b-model" # 可选
)
- 实施安全和合规的护栏 - 始终应用护栏以验证传入和传出模型响应的安全性、偏见和毒性。您可以使用亚马逊基石护栏 来强制执行这些保护措施,以保护您的SageMaker端点响应。
推理性能评估
本部分展示了DeepSeek-R1蒸馏变体在Amazon SageMaker AI上的推理性能示例。评估LLM在关键指标上的性能——端到端延迟、吞吐量和资源效率——对于确保实际应用中的响应性、可扩展性和成本效益至关重要。优化这些指标可以直接提升用户体验、系统可靠性和大规模部署的可行性。
所有DeepSeek-R1 Qwen(1.5B、7B、14B、32B)和Llama(8B、70B)变体都针对以下四个关键性能指标进行了评估:
- 端到端延迟
- 吞吐量(每秒令牌数)
- 首个令牌时间
- 令牌间延迟
请注意,此次性能评估的主要目的是让您了解蒸馏R1模型在不同硬件上的相对性能。我们没有尝试针对每个模型/硬件/用例组合优化性能。这些结果不应被视为特定模型在特定实例类型上的最佳可能性能。您应该始终使用自己的数据集和输入/输出序列长度进行自己的测试。
如果您有兴趣在自己的账户内运行此评估作业,请参考我们在GitHub 上的代码。
场景
我们测试了以下场景:
- 令牌 - 使用两种输入令牌长度来评估在SageMaker端点上托管的DeepSeek-R1蒸馏变体的性能。每个测试执行了100次,并发设置为1,记录了关键性能指标的平均值。所有模型均以dtype=bfloat16运行。
- 短长度测试 - 512个输入令牌,256个输出令牌。
- 中等长度测试 - 3,072个输入令牌,256个输出令牌。
- 硬件 - 测试了几个实例家族,包括p4d(NVIDIA A100)、g5(NVIDIA A10G)、g6(NVIDIA L4)和g6e(NVIDIA L40s),每个实例配备了1、4或8个GPU。有关定价和实例规格的详细信息,请参考Amazon SageMaker AI定价 。在以下表格中,绿色单元格表示模型在特定实例类型上进行了测试,红色单元格表示模型未进行测试,因为实例类型或大小对模型来说过大,或者由于GPU内存不足而无法运行。
DeepSeek-R1-Distill-Qwen-1.5B
单个GPU实例足以托管一个或多个并发的DeepSeek-R1-Distill-Qwen-1.5B服务工作者。在此测试中,部署了一个工作者,并针对四个概述的指标评估了性能。结果显示,ml.g5.xlarge
在所有指标上都优于ml.g6.xlarge
。
DeepSeek-R1-Distill-Qwen-7B
DeepSeek-R1-Distill-Qwen-7B在ml.g5.xlarge
、ml.g5.2xlarge
、ml.g6.xlarge
、ml.g6.2xlarge
和ml.g6e.xlarge
上进行了测试。ml.g6e.xlarge
实例表现最佳,其次是ml.g5.2xlarge
、ml.g5.xlarge
,然后是ml.g6
实例。
与7B变体类似,DeepSeek-R1-Distill-Llama-8B在ml.g5.xlarge
、ml.g5.2xlarge
、ml.g6.xlarge
、ml.g6.2xlarge
和ml.g6e.xlarge
上进行了基准测试,其中ml.g6e.xlarge
在所有实例中展现出最高的性能。
DeepSeek-R1-Distill-Qwen-14B
DeepSeek-R1-Distill-Qwen-14B在ml.g5.12xlarge
、ml.g6.12xlarge
、ml.g6e.2xlarge
和ml.g6e.xlarge
上进行了测试。ml.g5.12xlarge
展现出最高的性能,其次是ml.g6.12xlarge
。尽管性能配置较低,但由于内存容量较大,DeepSeek-R1-14B也可以部署在单个GPU的g6e
实例上。
DeepSeek-R1-Distill-Qwen-32B
DeepSeek-R1-Distill-Qwen-32B需要超过48GB的内存,使得ml.g5.12xlarge
、ml.g6.12xlarge
和ml.g6e.12xlarge
适合进行性能比较。在此测试中,ml.g6e.12xlarge
提供了最高的性能,其次是ml.g5.12xlarge
,ml.g6.12xlarge
排名第三。
DeepSeek-R1-Distill-Llama-70B
DeepSeek-R1-Distill-Llama-70B在ml.g5.48xlarge
、ml.g6.48xlarge
、ml.g6e.12xlarge
、ml.g6e.48xlarge
和ml.p4dn.24xlarge
上进行了测试。最佳性能是在ml.p4dn.24xlarge
上观察到的,其次是ml.g6e.48xlarge
,然后是ml.g6e.12xlarge
,ml.g5.48xlarge
,最后是ml.g6.48xlarge
。
清理
在完成评估后,为了避免产生额外费用,请确保删除您之前创建的端点。
import boto3
# 创建一个低级别的SageMaker服务客户端。
sagemaker_client = boto3.client('sagemaker', region_name=<region>)
# 删除端点
sagemaker_client.delete_endpoint(EndpointName=endpoint_name)
结论
在这篇博客中,您了解了DeepSeek模型的当前版本,以及如何使用Hugging Face TGI容器简化DeepSeek-R1蒸馏模型(或任何其他LLM)在Amazon SageMaker AI上的部署, 只需几行代码即可。您还学习了如何直接从Hugging Face Hub进行快速实验,以及从私有S3存储桶部署模型,以提供增强的安全性和模型部署性能。
最后,您看到了对所有DeepSeek-R1蒸馏模型在四个关键推理性能指标上的全面评估, 使用了13种不同的NVIDIA加速器实例类型。 这份分析提供了宝贵的见解,帮助您为DeepSeek-R1部署选择最佳实例类型。