LLM大语言模型部署
手动部署LLM大语言模型需自行配置各项参数,操作复杂,难以保证推理性能。EAS提供了一站式LLM部署解决方案,支持DeepSeek、Qwen等热门模型一键部署,也允许自定义模型灵活上线。通过集成 vLLM、SGLang 等高性能推理引擎,并应用PD分离、动态调度等推理优化技术,显著降低推理延迟,提升吞吐,最大化节约成本。
使用模板部署EAS服务
公共模型建议使用部署模板,或通过Model Gallery进行部署。
以Qwen3-8B为例,操作步骤如下:
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
在模型在线服务(EAS)页面,单击部署服务,然后在场景化模型部署区域,单击LLM大语言模型部署。
在部署LLM大语言模型页面,配置以下关键参数。
模型配置:选择公共模型中的Qwen3-8B。
推理引擎:选择vLLM。
部署模板:选择单机。模板选择之后系统将自动填充实例规格、镜像等参数。
单击部署,等待大约5分钟,服务进入运行中状态,即部署成功。
调用EAS服务
在线调试
在模型在线服务(EAS)页面,单击目标服务操作列下的
>在线调试。
在调试页面的在线调试请求参数区域,构造并发送请求。
请求路径:vLLM部署的服务兼容OpenAI API标准,以对话接口为例,需在自动填充的URL后添加具体接口路径
/v1/chat/completions
。请求体:示例如下
{ "model": "Qwen3-8B", "messages": [ { "role": "user", "content": "Hello!" } ], "max_tokens": 1024 }
重要vLLM/SGLang:model值需配置为模型名称,可通过
/v1/models
接口发送GET请求获取。BladeLLM:无需model参数。 若未设置max_tokens参数,默认会按照max_tokens=16进行截断。建议根据实际需要设置该参数。
结果如下:
API调用
一、获取服务访问地址和Token
在推理服务页签,单击您的服务名称进入概览页面,在基本信息区域单击查看调用信息。
在调用信息面板,可获取访问地址和Token。根据您的实际情况选择公网或VPC地址,下文使用<EAS_ENDPOINT>和<EAS_TOKEN>指代它们。
二、调用API
不同推理引擎调用方式略有差异,示例如下:
OpenAI SDK
vLLM/SGLang
完全兼容OpenAI API标准,适配主流AI应用接入。示例如下:
from openai import OpenAI
##### API 配置 #####
# <EAS_TOKEN> 替换为服务Token。
# <EAS_ENDPOINT> 替换服务访问地址。
openai_api_key = "<EAS_TOKEN>"
openai_api_base = "<EAS_ENDPOINT>/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
print(model)
stream = True
# 如不支持max_completion_tokens参数,请升级openai版本
chat_completion = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful and harmless assistant."},
{
"role": "user",
"content": [
{
"type": "text",
"text": "hello",
}
],
},
],
model=model,
max_completion_tokens=1024,
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
BladeLLM暂不支持使用client.models.list()方式获取模型列表,可设置model值为空字符串("")以兼容使用。
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": "system", "content": "You are a helpful and harmless assistant."},
{"role": "user", "content": "hello"},
],
model=model,
max_tokens=1024,
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
vLLM/SGLang
curl -X POST <EAS_ENDPOINT>/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: <EAS_TOKEN>" \
-d '{
"model": "<model_name>",
"messages": [
{"role": "system", "content": "You are a helpful and harmless assistant."},
{
"role": "user",
"content": [
{
"type": "text",
"text": "hello"
}
]
}
]
}'
import 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": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "hello"},
]
# 使用BladeLLM加速部署方式,如果不指定max_tokens参数,默认会按照max_tokens=16进行截断。建议您根据实际需要调整请求参数max_tokens。
req = {
"messages": messages,
"stream": stream,
"temperature": 0.0,
"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"])
其中,<model_name>需替换为模型名称。可通过模型列表接口<EAS_ENDPOINT>/v1/models
获取。
curl -X GET \
-H "Authorization: <EAS_TOKEN>" \
<EAS_ENDPOINT>/v1/models
BladeLLM
curl -X POST <EAS_ENDPOINT>/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: <EAS_TOKEN>" \
-d '{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "hello!"
}
],
"max_tokens":1024
}'
import 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": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好,请介绍一下你自己。"},
]
# 使用BladeLLM加速部署方式,如果不指定max_tokens参数,默认会按照max_tokens=16进行截断。建议您根据实际需要调整请求参数max_tokens。
req = {
"messages": messages,
"stream": stream,
"temperature": 0.2,
"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"])
WebUI使用
Gradio是一个基于Python的用户友好的界面库,能快速创建机器学习模型的交互式界面。我们提供了使用Gradio构建WebUI的代码,参考以下步骤,本地启动Web应用。
下载WebUI代码。您可以通过GitHub页面下载,或者直接点击OSS链接下载。两种方式下载的代码完全一样。
BladeLLM:BladeLLM_github、 BladeLLM_oss
vLLM、SGLang:vLLM/SGLang_github、vLLM/SGLang_oss
执行以下命令,启动Web应用。
python webui_client.py --eas_endpoint "<EAS_ENDPOINT>" --eas_token "<EAS_TOKEN>"
其中,<EAS_ENDPOINT> 需替换为部署服务的访问地址,<EAS_TOKEN>需替换为部署服务的Token。
接入客户端/开发工具
接入客户端或开发工具所需的EAS服务地址和Token参见获取服务访问地址和Token。
Dify
安装模型供应商OpenAI-API-compatible
单击页面右上角的头像-设置,左侧选择模型供应商。如果模型列表中没有OpenAI-API-compatible,在下方列表查找安装。
添加模型
单击OpenAI-API-compatible卡片右下角添加模型,参数如下配置:
模型类型:选择LLM。
模型名称:本文示例填写Qwen3-8B。vLLM部署建议通过
/v1/models
接口发送GET请求获取。API Key:填写EAS服务Token。
API endpoint URL:填写EAS服务公网调用地址(注意末尾加上/v1)。
测试使用
在Dify主界面单击创建空白应用,选择Chatflow类型,填入应用名称等信息后单击创建。
单击LLM节点,选择添加的模型,并设置上下文和提示词。
单击右上角预览,输入问题。
Chatbox
前往Chatbox,根据您的设备下载并安装合适的版本,或直接启动网页版。本方案以 macOS M3 为例。
添加模型提供方。单击设置,添加模型提供方,填写名称如pai,API模式选择OpenAI API兼容。
选择模型提供方pai,配置如下参数。
API 密钥:填写EAS服务Token。
API 主机:填写EAS服务公网调用地址(注意末尾加上/v1)。
API 路径:无需填写。
模型:单击获取进行添加(若接口不支持获取,可单击新建填写)。
对话测试。单击新对话,文本输入框右下角选择模型服务。
Cherry Studio
安装客户端
访问 Cherry Studio 下载并安装客户端。
也可以访问
https://github.com/CherryHQ/cherry-studio/releases
进行下载。配置模型服务。
单击左下角的设置按钮,在模型服务栏下方单击添加。在提供商名称中填写自定义名称,如PAI,提供商类型为OpenAI。单击确定。
在API 密钥填写EAS服务Token;在API 地址填写EAS服务公网调用地址。
单击添加,在模型ID 中填写
Qwen3-8B
(注意大小写),添加该模型。在API 密钥处点击检测来确认连通性。
快速体验模型
回到对话框界面,在顶部选择模型后开始对话。
推理优化
LLM智能路由:基于LLM特有的Metrics动态分发请求,均衡各推理实例的算力与显存分配,提升集群资源利用率与系统稳定性。
Prefill-Decode分离部署:将推理任务拆分为预填充(Prefill)与解码(Decode)两个阶段,并分配到不同的计算资源上执行,以提升整体吞吐与资源利用率,适用于高并发、长文本生成场景。
常见问题
HTTP调用如何设置温度和top_p参数?
在请求体中增加temperature和top_p参数,示例如下:
curl -X POST <EAS_ENDPOINT>/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: <EAS_TOKEN>" \ -d '{ "model": "<模型名,通过 /v1/models API获取>", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ], "max_tokens": 1024, "top_p": 0.9, "temperature": 0.7 }'
调用返回错误
Unsupported Media Type: Only 'application/json' is allowed
请确保请求Headers中包含
Content-Type: application/json
。调用返回错误
The model "模型名称" does not exist.
请检查请求体中的model字段是否正确。可通过调用
/v1/models
接口(GET请求)获取模型名称。
相关文档
关于BladeLLM的部署,请参见BladeLLM快速入门。