部署DeepSeek系列模型需要处理计算环境配置、模型加载和推理优化。PAI Model Gallery提供一键部署能力,几步即可获得兼容OpenAI API的模型服务,快速集成到应用中。
方案架构
核心组件
方案基于PAI平台,核心架构包括以下组件:
Model Gallery:作为模型的分发与部署入口,提供预置的DeepSeek系列模型及部署配置。
模型在线服务 (EAS):承载模型部署与推理的核心服务,自动管理底层计算资源(如GPU)并启动模型服务实例。
推理加速引擎 (SGLang/vLLM/BladeLLM):用于优化模型推理性能。
SGLang/vLLM:提供与OpenAI API完全兼容的接口,便于现有应用迁移。
BladeLLM:自研的高性能推理框架,特定场景下性能更优。
API网关:提供安全的模型服务访问通道,支持通过服务访问地址(Endpoint)和认证令牌(Token)调用模型服务。
部署方式
针对大规模模型,除单机部署外,Model Gallery 还提供了多机分布式、EP+PD分离等一键部署方案。
如DeepSeek-V4-Pro-FP8、DeepSeek-V4-Flash-FP8均可采用EP+PD分离方式部署。
快速部署与验证
步骤一:部署模型服务
登录PAI控制台,在顶部左上角选择目标地域,从左侧导航栏进入工作空间列表,并选择目标工作空间。
在工作空间内,导航至快速开始 > Model Gallery。
在模型列表中搜索并选择目标模型,例如
DeepSeek-R1-Distill-Qwen-7B,进入模型详情页。单击页面右上角部署,配置以下参数。
推理引擎:推荐使用SGLang或vLLM。
部署资源:选择公共资源或专属资源,并根据模型要求选择合适的GPU规格。
默认使用公共资源,并给出了推荐规格。若无可用规格,可尝试切换地域。
重要使用公共资源部署,服务实例拉起资源即开始按时长计费,即使无调用。测试后请及时停止服务。
若选择资源配额,请注意根据机型选择对应的推理引擎和部署模板。如使用真武PPU,推理引擎可选择SGLang,部署模板需选择单机-真武PPU。
部署模板默认选择单机,推荐的GPU规格示例为
ecs.gn7i-c16g1.4xlarge(16 vCPU、60 GiB、NVIDIA A10 × 1),费用约 CNY 11.1/小时。确认所有配置无误后,单击部署。系统将开始创建服务。
说明对于大型模型(如DeepSeek-R1满血版),模型加载可能需要20-30分钟。
部署任务的状态可在Model Gallery > 任务管理 > 部署任务页面查看。单击服务名称可进入服务详情页。还可以通过右上角的,跳转到PAI-EAS的模型服务详情页,获取更多信息。
在服务详情页中,您可以在状态字段旁单击查看部署事件查看详情,在调用信息字段单击查看调用信息获取服务调用地址与Token。您也可以通过左侧导航栏的模型在线服务(EAS)进入EAS服务管理页面。
步骤二:在线调试
在Model Gallery > 任务管理 > 部署任务中单击已部署的服务名称,切换到在线调试页面,支持对话调试和API调试。
对于DeepSeek-R1系列模型,官方给出使用建议如下:
temperature设置在0.5-0.7之间,推荐 0.6,防止输出重复或不连贯。
不要添加system prompt,所有的指令应添加在 user prompt 中。
针对数学类问题,建议在 prompt 中包含“请逐步推理,并将最终答案放在\boxed{}中。”
若仅有API调试页面,以大语言模型服务的对话接口为例,如下进行调试:
确认请求路径:
<EAS_ENDPOINT>/v1/chat/completions。其中,<EAS_ENDPOINT>为服务访问地址,通常已自动填充。SGLang/vLLM部署的服务,可通过
<EAS_ENDPOINT>/openapi.json获取更多支持的API。构造请求体。
如果提示词是:请计算3+5等于几?则请求体格式如下。
其中,model参数值为模型列表接口
<EAS_ENDPOINT>/v1/models获取的模型名称,这里以DeepSeek-R1-Distill-Qwen-7B为例。{ "model": "DeepSeek-R1-Distill-Qwen-7B", "messages": [ { "role": "user", "content": "请计算3+5等于几?" } ] }发起请求。
在在线调试页签中,HTTP 方法选择 POST,URL 填写服务访问地址(如
http://<服务地址>/v1/chat/completions)。在 Body 区域选择 raw,输入 JSON 请求体,包含model(如DeepSeek-R1-Distill-Qwen-7B)和messages字段。单击发送请求,右侧 Response 区域返回 Status Code 200,Body 中以 JSON 格式显示模型的回答结果。
API调用
获取服务的访问地址和Token。
在Model Gallery > 任务管理 > 部署任务中单击已部署的服务名称,进入服务详情页。
单击查看调用信息获取调用的访问地址和Token。
对话接口调用示例。
其中,将<EAS_ENDPOINT>替换为服务访问地址,<EAS_TOKEN>替换为服务Token。
OpenAI SDK
注意:
需要补全endpoint最后的/v1。
BladeLLM加速部署不支持使用client.models.list()方式获取模型列表,您可以直接指定model的值为""以兼容使用。
SGLang/vLLM加速部署
from openai import OpenAI # 1. 配置客户端 # 将<<EAS_ENDPOINT>和<EAS_TOKEN>替换为实际的服务访问地址和Token。 openai_api_key = "<EAS_TOKEN>" openai_api_base = "<EAS_ENDPOINT>/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) # 2. 获取模型名称 try: model = client.models.list().data[0].id print(model) except Exception as e: print(f"无法获取模型列表,检查Endpoint和Token。错误: {e}") # 3. 构造并发送请求 stream = True chat_completion = client.chat.completions.create( messages=[ {"role": "user", "content": "你好,请介绍一下你自己。"} ], model=model, max_tokens=2048, stream=stream, ) if stream: for chunk in chat_completion: print(chunk.choices[0].delta.content, end="") else: result = chat_completion.choices[0].message.content print(result)BladeLLM加速部署
from openai import OpenAI ##### API 配置 ##### # <EAS_ENDPOINT>需替换为部署服务的访问地址,<EAS_TOKEN>需替换为部署服务的Token。 openai_api_key = "<EAS_TOKEN>" openai_api_base = "<EAS_ENDPOINT>/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) # BladeLLM加速部署目前不支持使用client.models.list()方式获取模型名称,您可以直接指定model的值为""以兼容使用。 model="" stream = True chat_completion = client.chat.completions.create( messages=[ {"role": "user", "content": "你好,请介绍一下你自己。"} ], model=model, max_tokens=2048, stream=stream, ) if stream: for chunk in chat_completion: print(chunk.choices[0].delta.content, end="") else: result = chat_completion.choices[0].message.content print(result)HTTP
SGLang/vLLM加速部署
其中,<model_name>请替换为模型列表接口
<EAS_ENDPOINT>/v1/models获取的模型名称。curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: <EAS_TOKEN>" \ -d '{ "model": "<model_name>", "messages": [ { "role": "user", "content": "hello!" } ] }' \ <EAS_ENDPOINT>/v1/chat/completionsimport json import requests # <EAS_ENDPOINT>需替换为部署服务的访问地址,<EAS_TOKEN>需替换为部署服务的Token。 EAS_ENDPOINT = "<EAS_ENDPOINT>" EAS_TOKEN = "<EAS_TOKEN>" url = f"{EAS_ENDPOINT}/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": EAS_TOKEN, } # <model_name>请替换为模型列表接口<EAS_ENDPOINT>/v1/models获取的模型名称。 model = "<model_name>" stream = True messages = [ {"role": "user", "content": "你好,请介绍一下你自己。"}, ] req = { "messages": messages, "stream": stream, "temperature": 0.6, "top_p": 0.5, "top_k": 10, "max_tokens": 300, "model": model, } response = requests.post( url, json=req, headers=headers, stream=stream, ) if stream: for chunk in response.iter_lines(chunk_size=8192, decode_unicode=False): msg = chunk.decode("utf-8") if msg.startswith("data"): info = msg[6:] if info == "[DONE]": break else: resp = json.loads(info) print(resp["choices"][0]["delta"]["content"], end="", flush=True) else: resp = json.loads(response.text) print(resp["choices"][0]["message"]["content"])BladeLLM加速部署
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: <EAS_TOKEN>" \ -d '{ "messages": [ { "role": "user", "content": "hello!" } ] }' \ <EAS_ENDPOINT>/v1/chat/completionsimport json import requests # <EAS_ENDPOINT>需替换为部署服务的访问地址,<EAS_TOKEN>需替换为部署服务的Token。 EAS_ENDPOINT = "<EAS_ENDPOINT>" EAS_TOKEN = "<EAS_TOKEN>" url = f"{EAS_ENDPOINT}/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": EAS_TOKEN, } stream = True messages = [ {"role": "user", "content": "你好,请介绍一下你自己。"}, ] # 使用BladeLLM加速部署方式,如果不指定max_tokens参数,默认会按照max_tokens=16进行截断。建议您根据实际需要调整请求参数max_tokens。 req = { "messages": messages, "stream": stream, "temperature": 0.6, "top_p": 0.5, "top_k": 10, "max_tokens": 300, } response = requests.post( url, json=req, headers=headers, stream=stream, ) if stream: for chunk in response.iter_lines(chunk_size=8192, decode_unicode=False): msg = chunk.decode("utf-8") if msg.startswith("data"): info = msg[6:] if info == "[DONE]": break else: resp = json.loads(info) if resp["choices"][0]["delta"].get("content") is not None: print(resp["choices"][0]["delta"]["content"], end="", flush=True) else: resp = json.loads(response.text) print(resp["choices"][0]["message"]["content"])不同模型和部署框架的调用方式有所差异。更多说明请在Model Gallery的模型介绍页查看。
以 DeepSeek-R1-Distill-Qwen-7B 模型为例,Model Gallery 的模型介绍页展示了 BladeLLM 加速部署的资源要求(需要 24G 显存,仅支持 ecs.gn7 及后续型号),并说明该模型兼容 OpenAI 的
v1/completions和v1/chat/completions接口,同时提供了 curl 命令和 Python 脚本的调用示例。
集成第三方应用
构建本地WebUI
资源清理
使用公共资源部署时,实例拉起后按占用时长计费,不足1小时按分钟折算。使用完成后请及时停止或删除实例。
返回任务管理 > 部署任务页面。
找到需要停止的服务,在其操作列单击停止或删除。
停止:服务实例将被释放,停止计费,但服务配置会保留,可以稍后重新启动。
删除:服务配置和实例都将被永久删除。
选择模型与资源
模型选择决定所需的计算资源和部署成本。DeepSeek模型分为”满血版”和”蒸馏版”,两者资源需求差异巨大。
开发测试:推荐使用蒸馏版模型,如
DeepSeek-R1-Distill-Qwen-7B。此类模型资源占用小(通常为单张24GB显存的GPU),部署快,成本低,适合快速验证功能。生产环境:根据效果和成本综合评估。
DeepSeek-R1-Distill-Qwen-32B在效果和成本之间取得了较好的平衡。如需更强的模型效果,可选择满血版,但这需要多卡高端GPU(如8卡96GB显存的GPU),成本会显著增加。
下表列出了不同模型版本所需的最低配置,以及使用不同机型和推理引擎时支持的最大Token数。
满血版模型
模型 | 部署方式 | 支持的最大Token数(输入+输出) | 最低配置 | |
SGLang(推荐) | vLLM | |||
DeepSeek-V4-Pro | 单机/分布式 | 1M | 1M | 单机8卡H20-3e(8 * 141 GB显存) |
DeepSeek-V4-Flash | 单机 | 1M | 1M | 单机8卡H20-3e(8 * 141 GB显存) |
DeepSeek-V4-Pro-FP8 | 单机/PD分离 | 1M | / | 单机8卡H20-3e(8 * 141 GB显存) |
DeepSeek-V4-Flash-FP8 | 单机/PD分离 | 1M | / | 单机4卡H20-3e(4 * 141 GB显存) |
DeepSeek-V3 | 单机-Nvidia GPU | 56000 | 65536 | 单机8卡GU120(8 * 96 GB显存) |
单机-真武PPU | 56000 | 16384 | ||
分布式-灵骏智算资源 | 163840 | 163840 | ||
DeepSeek-R1 | 单机-Nvidia GPU | 56000 | 65536 | 单机8卡GU120(8 * 96 GB显存) |
单机-真武PPU | 56000 | 16384 | ||
分布式-灵骏资源 | 163840 | 163840 | ||
单机部署机型说明:
Nvidia GPU:
ml.gu8v.c192m1024.8-gu120、ecs.gn8v-8x.48xlarge:公共资源,库存可能较紧张。ecs.ebmgn8v.48xlarge:无法通过公共资源使用,请购买EAS专属资源。
真武PPU:
ml.gp7vf.16.40xlarge为公共资源,仅可竞价使用。当Nvidia GPU资源紧张时,可切换至华北6(乌兰察布)寻找真武PPU资源,部署时请务必配置VPC。
分布式部署(对性能要求较高时推荐使用)机型说明:
分布式部署依赖高速网络,故必须使用PAI灵骏智算资源(提供高性能、高弹性异构算力服务)且部署时务必配置VPC。使用灵骏智算资源请切换地域至华北6(乌兰察布)。
灵骏公共资源:
ml.gu7xf.8xlarge-gu108:单实例部署需机器数4,仅可竞价使用。真武PPU:单实例部署需机器数2。
灵骏预付费资源:需开通白名单,请联系销售经理或提交工单咨询。
蒸馏版模型
模型 | 支持的最大Token数(输入+输出) | 最低配置 | ||
SGLang(推荐) | vLLM | BladeLLM | ||
DeepSeek-R1-Distill-Qwen-1.5B | 131072 | 131072 | 131072 | 1卡A10(24 GB显存) |
DeepSeek-R1-Distill-Qwen-7B | 131072 | 32768 | 131072 | 1卡A10(24 GB显存) |
DeepSeek-R1-Distill-Llama-8B | 131072 | 32768 | 131072 | 1卡A10(24 GB显存) |
DeepSeek-R1-Distill-Qwen-14B | 131072 | 32768 | 131072 | 1卡GPU L(48 GB显存) |
DeepSeek-R1-Distill-Qwen-32B | 131072 | 32768 | 131072 | 2卡GPU L(2 * 48 GB显存) |
DeepSeek-R1-Distill-Llama-70B | 131072 | 32768 | 131072 | 2卡GU120(2 * 96 GB显存) |
PAI优化版模型
Model Gallery提供了DeepSeek相关的PAI优化版模型一键部署:
DeepSeek-R1-PAI-optimized
DeepSeek-R1-0528-PAI-optimized
DeepSeek-V3-0324-PAI-optimized
成本与风险说明
成本构成
使用公共资源部署的服务,从实例拉起到停止或删除为止,按分钟计费,账单按小时结算。即使服务空闲,计费持续。停止服务即可停止计费。
更多详情,请参见模型在线服务(EAS)计费说明。
成本控制建议
关键风险点
意外费用:忘记停止服务将导致持续计费。务必在使用完毕后立即清理资源。
BladeLLM输出截断:使用BladeLLM引擎时,若API请求中未指定
max_tokens,输出将被截断为16个token,导致功能不符合预期。API调用规范错误:
调用DeepSeek-R1系列模型时,在
messages中包含systemprompt可能会导致非预期的行为。API请求的URL必须以
/v1/chat/completions等路径结尾,否则将返回404错误。
资源库存:部署大型模型(特别是满血版)时,特定地域的高端GPU资源可能库存紧张,导致部署失败或长时间等待。可尝试切换到其他地域。
模型部署FAQ
如何选择推理引擎
点击部署后服务长时间等待
可能的原因:
当前地域下机器资源不足。
由于模型较大,模型加载耗时较长(对于DeepSeek-R1、DeepSeek-V3这样的大模型,需要20-30min)。
可耐心等待一段时间。若服务仍无法正常启动,建议尝试以下步骤:
进入任务管理-部署任务,查看部署任务详情页。在页面右上角单击,跳转到PAI-EAS的模型服务详情,查看服务实例状态。
若实例状态列显示库存不足,表示当前资源不足导致实例无法正常调度。
关闭当前服务,并在控制台左上角切换到其他地域重新部署服务。
说明对于DeepSeek-R1、DeepSeek-V3这样的超大参数量模型,需要8卡GPU才能启动服务(资源库存较紧张),您可以选择部署DeepSeek-R1-Distill-Qwen-7B等蒸馏小模型(资源库存较富裕)。
模型调用FAQ
调用API返回404
请检查调用的URL是否加上了OpenAI的API后缀,例如v1/chat/completions。详情可以参考模型主页调用方式介绍。
如果是vLLM加速部署,检查对话接口的请求体中model参数是否填写了正确的模型名称。可以通过v1/models获取模型名称。
请求太长导致网关超时
部署使用的默认网关请求超时时间是180秒,如果需要延长超时时间,可以配置专属网关,并提交工单调整专属网关的请求超时时间,最大可以调整到600秒。
为何没有“联网搜索”
“联网搜索”需要基于模型服务构建AI应用(Agent),不能仅通过部署模型服务实现。
通过PAI的大模型应用开发平台LangStudio,可以构建一个联网搜索的AI应用,详情请参考基于LangStudio&阿里云信息查询服务搭建DeepSeek联网搜索应用流。
模型跳过思考怎么办?
如果部署DeepSeek-R1模型,针对模型有时会跳过思考过程的情况,可采用DeepSeek更新的强制思考的chat模板。使用方式:
修改启动命令。
在服务配置中,编辑JSON配置,修改containers-script字段,加上"--chat-template /model_dir/template_force_thinking.jinja"(可以加在"--served-model-name DeepSeek-R1"之后)。
如果是已经部署的服务,在Model Gallery > 任务管理 > 部署任务中单击已部署的服务名称,在详情页面右上角单击更新服务,即可进入上述页面。
请求体修改。在每次请求中,message最后加上{"role": "assistant", "content": "<think>\n"}。
DeepSeek-R1可以关闭思考模式吗?
DeepSeek-R1系列模型目前不支持关闭思考过程。
如何实现多轮对话?
模型服务本身不会保存历史对话信息,需要客户端保存历史对话,再添加到模型调用的请求中。以SGLang部署的服务,示例如下。
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: <EAS_TOKEN>" \
-d '{
"model": "<model_name>",
"messages": [
{
"role": "user",
"content": "你好"
},
{
"role": "assistant",
"content": "你好!很高兴见到你,有什么我可以帮忙的吗?"
},
{
"role": "user",
"content": "我上一个问题是什么"
}
]
}' \
<EAS_ENDPOINT>/v1/chat/completions