为了集成DeepSeek系列大模型的能力,需搭建一个稳定、可扩展的后端模型服务。通过Model Gallery可一键部署DeepSeek-V3和DeepSeek-R1系列模型,无需处理底层计算环境配置、模型加载和推理优化等基础设施管理工作。最终获得一个兼容标准API的模型服务终端节点,并可将其集成到应用程序中。
方案架构
方案基于PAI平台实现,其核心架构包括以下组件:
Model Gallery:作为模型的分发与部署入口,提供了预置的DeepSeek系列模型及相应的部署配置。
模型在线服务 (EAS):承载模型部署与推理的核心服务。它负责自动化地管理底层计算资源(如GPU),并根据配置启动模型服务实例。
推理加速引擎 (SGLang/vLLM/BladeLLM):用于优化模型推理性能。
SGLang/vLLM:提供与OpenAI API完全兼容的接口,便于现有应用迁移。
BladeLLM:自研的高性能推理框架,在特定场景下可提供更优的推理性能。
API网关:EAS将部署好的模型服务通过一个安全的API网关暴露出来,提供服务访问地址(Endpoint)和认证令牌(Token)。
步骤一:模型与资源规划
1. 选择推理引擎
2. 选择模型与资源
模型的选择决定了所需的计算资源和部署成本。DeepSeek模型分为“满血版”和“蒸馏版”,其资源需求差异巨大。
开发测试:推荐使用蒸馏版模型,如
DeepSeek-R1-Distill-Qwen-7B。此类模型资源占用小(通常为单张24GB显存的GPU),部署快,成本低,适合快速验证功能。生产环境:根据效果和成本综合评估。
DeepSeek-R1-Distill-Qwen-32B在效果和成本之间取得了较好的平衡。如需更强的模型效果,可选择满血版,但这需要多卡高端GPU(如8卡96GB显存的GPU),成本会显著增加。
下表列出了不同模型版本所需的最低配置,以及使用不同机型和推理引擎时支持的最大Token数。
满血版模型
模型 | 部署方式 | 支持的最大Token数(输入+输出) | 最低配置 | |
SGLang(推荐) | vLLM | |||
DeepSeek-R1 | 单机-Nvidia GPU | 56000 | 65536 | 单机8卡GU120(8 * 96 GB显存) |
单机-GP7V机型 | 56000 | 16384 | ||
分布式-灵骏资源 | 163840 | 163840 | ||
DeepSeek-V3 | 单机-Nvidia GPU | 56000 | 65536 | 单机8卡GU120(8 * 96 GB显存) |
单机-GP7V机型 | 56000 | 16384 | ||
分布式-灵骏智算资源 | 163840 | 163840 | ||
单机部署机型说明:
Nvidia GPU:
ml.gu8v.c192m1024.8-gu120、ecs.gn8v-8x.48xlarge:公共资源,库存可能较紧张。ecs.ebmgn8v.48xlarge:无法通过公共资源使用,请购买EAS专属资源。
GP7V机型:
ml.gp7vf.16.40xlarge为公共资源,仅可竞价使用。当Nvidia GPU资源紧张时,可切换至华北6(乌兰察布)寻找GP7V资源,部署时请务必配置VPC。
分布式部署(对性能要求较高时推荐使用)机型说明:
分布式部署依赖高速网络,故必须使用PAI灵骏智算资源(提供高性能、高弹性异构算力服务)且部署时务必配置VPC。使用灵骏智算资源请切换地域至华北6(乌兰察布)。
灵骏公共资源:
ml.gu7xf.8xlarge-gu108:单实例部署需机器数4,仅可竞价使用。GP7V机型:单实例部署需机器数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-R1-Distill-Qwen-7B,进入模型详情页。单击页面右上角部署,在部署配置页面,参考步骤一的规划设置配置以下参数。
推理引擎:推荐使用SGLang或vLLM。
部署资源:选择公共资源或专属资源,并根据模型要求选择合适的GPU规格。
默认使用公共资源,并给出了推荐规格。若库存不足,可尝试切换地域。
重要使用公共资源部署,服务进入运行中状态即开始按时长计费,即使无调用。测试后请及时停止服务。
若选择资源配额,请注意根据机型选择对应的推理引擎和部署模板。如使用GP7V机型,推理引擎可选择SGLang,部署模板可选择单机-GP7V机型。

确认所有配置无误后,单击部署。系统将开始创建服务。
说明对于大型模型(如DeepSeek-R1满血版),模型加载过程可能需要20-30分钟。
部署任务的状态可在Model Gallery > 任务管理 > 部署任务页面查看。单击服务名称可进入服务详情页。还可以通过右上角的更多信息,跳转到PAI-EAS的模型服务详情页,获取更多信息。

步骤三:在线调试
在Model Gallery > 任务管理 > 部署任务中单击已部署的服务名称,在在线测试模块中找到EAS在线调试的入口。
以SGLang/vLLM部署为例,可通过<EAS_ENDPOINT>/openapi.json获取服务的API 描述文件。以下测试对话接口POST <EAS_ENDPOINT>/v1/chat/completions。
补充请求路径。在线调试中已经填充的路径是
<EAS_ENDPOINT>,需补充具体API路径v1/chat/completions。构造请求体。
如果提示词是:请计算3+5等于几?
请求体格式如下。其中,model参数值为模型列表接口
<EAS_ENDPOINT>/v1/models获取的模型名称,这里以DeepSeek-R1-Distill-Qwen-7B为例。{ "model": "DeepSeek-R1-Distill-Qwen-7B", "messages": [ { "role": "user", "content": "请计算3+5等于几?" } ] }发起请求。

步骤四:调用模型服务
对于DeepSeek-R1系列模型,官方给出使用建议如下:
temperature设置在0.5-0.7之间,推荐 0.6,防止输出重复或不连贯。
不要添加system prompt,所有的指令应添加在 user prompt 中。
针对数学类问题,建议在 prompt 中包含“请逐步推理,并将最终答案放在\boxed{}中。”
使用BladeLLM加速部署方式,如果不指定max_tokens参数,默认会按照max_tokens=16进行截断。建议您根据实际需要调整请求参数max_tokens。
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的模型介绍页查看更多API调用方式的详细说明。

本地构建WebUI
Gradio是一个基于Python的用户友好的界面库,能快速创建机器学习模型的交互式界面。请参考以下步骤,在本地运行Gradio WebUI。
下载代码:根据部署时选择的推理引擎,下载对应代码。如网络环境可稳定访问GitHub,请使用GitHub链接,否则请使用OSS链接。
vLLM、SGLang:vLLM/SGLang_github、vLLM/SGLang_oss
BladeLLM:BladeLLM_github、BladeLLM_oss
环境准备:要求Python3.10 或更高版本,并安装依赖
pip install openai gradio。启动Web应用:在终端执行以下命令(其中<EAS_ENDPOINT>和<EAS_TOKEN> 需替换为部署服务的访问地址和Token)。
python webui_client.py --eas_endpoint "<EAS_ENDPOINT>" --eas_token "<EAS_TOKEN>"启动成功后,会输出一个本地URL(通常是
http://127.0.0.1:7860),在浏览器中打开该URL进行访问。
集成第三方应用
步骤五:清理资源
使用公共资源部署的实例,创建成功后按实例运行时长计费,不满1小时按具体分钟数折算计费;为避免产生更多资源消耗,在完成使用后,应停止或删除实例。
返回任务管理 > 部署任务页面。
找到需要停止的服务,在其操作列单击停止或删除。
停止:服务实例将被释放,停止计费,但服务配置会保留,可以稍后重新启动。
删除:服务配置和实例都将被永久删除。

成本与风险说明
成本构成
使用公共资源部署的服务,从创建成功(状态为“运行中”)到停止或删除为止,按分钟计费,账单按小时结算。即使服务空闲,计费依然持续。停止服务即可停止计费。
更多详情,请参见模型在线服务(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