本地部署API交付说明
基本信息
模型名称:
模型存放目录:
推理虚拟环境:
推理引擎: vLLM 0.7.3
API服务端口: 8000
服务器IP:
推理服务部署详情
推理服务基于vLLM引擎启动,具体启动命令如下:
vllm serve /model/deepseek/DeepSeek-671b-R1 \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.98 \
--max-model-len 3072 \
--max-num-batched-tokens 4096 \
--max-num-seqs 16 \
--port 8000 \
--swap-space 100 \
--enforce-eager
参数说明
--tensor-parallel-size 8: 使用8个GPU进行张量并行计算。
--gpu-memory-utilization 0.98: GPU内存利用率设置为98%。
--max-model-len 3072: 模型最大输入长度为3072个token。
--max-num-batched-tokens 4096: 批处理最大token数为4096。
--max-num-seqs 16: 最大并发序列数为16。
--port 8000: API服务运行在8000端口。
--swap-space 100: 设置100GB的交换空间。
--enforce-eager: 强制使用eager模式运行。
服务访问
API地址:
健康检查端点:
API使用说明
端点URL: http://ip/v1/completions
方法: POST
描述: 用于生成基于输入提示的文本内容。
请求格式:Content-Type: application/json
请求体示例:
Json
{
\"prompt\": \"你好,世界\",
\"max_tokens\": 50,
\"temperature\": 0.7,
\"top_p\": 0.9
}
请求参数说明
参数名 类型 是否必填 默认值 描述
prompt string 是 无 输入的提示文本
max_tokens int 否 256 生成文本的最大token数,最大3072
temperature float 否 1.0 控制生成文本的随机性,范围0-2
top_p float 否 1.0 核采样概率,范围0-1
响应格式
状态码: 200 (成功), 400 (请求错误), 500 (服务器错误)
响应体示例:
json
{
\"choices\": [
{
\"text\": \"Hello, World! 这是一个测试响应。\",
\"index\": 0,
\"finish_reason\": \"length\"
}
],
\"usage\": {
\"prompt_tokens\": 4,
\"completion_tokens\": 12,
\"total_tokens\": 16
},
\"status\": \"success\"
}
响应参数说明
参数名 类型 描述
choices array 生成的文本选项数组
choices.text string 生成的文本内容
choices.index int 选项索引,通常为0
choices.finish_reason string 结束原因(length或stop)
usage object token使用统计
usage.prompt_tokens int 提示词token数
usage.completion_tokens int 生成文本token数
usage.total_tokens int 总token数
status string 请求状态(success或error)
示例请求
使用curl调用API:
bash
curl -X POST http://ip/v1/completions \
-H \"Content-Type: application/json\" \
-d \'{\"model\": \"DeepSeek-671b-R1\", \"prompt\": \"你好\", \"max_tokens\": 50, \"temperature\": 0.7}\'
示例响应
json
{
\"choices\": [
{
\"text\": \"Hello, World! 这是一个测试响应。\",
\"index\": 0,
\"finish_reason\": \"length\"
}
],
\"usage\": {
\"prompt_tokens\": 4,
\"completion_tokens\": 12,
\"total_tokens\": 16
},
\"status\": \"success\"
}
注意事项
输入的prompt长度加上max_tokens不得超过3072(由--max-model-len限制)。
如果请求超载(超过max-num-seqs 16),可能返回503状态码,需稍后重试。
未提供参数时,使用默认值。
测试环境
测试虚拟环境: /home/demo_env/
已安装测试工具:
wrk: 高性能HTTP基准测试工具
post: 用于发送HTTP POST请求的工具
streamlit: 用于构建交互式Web应用的Python库
测试工具安装验证
在测试虚拟环境(/home/demo_env/)中运行以下命令,验证工具是否正确安装:
bash
source /home/demo_env/bin/activate
wrk --version
post --version # 如果是特定的post工具,替换为相应命令
streamlit --version
测试方法
1. 功能测试
目标: 验证API是否能够正常接收请求并返回推理结果。
测试工具
post 或 curl
测试步骤
激活测试虚拟环境:
bash
source /home/demo_env/bin/activate
发送POST请求到API:
bash
curl -X POST http://ip/v1/completions \
-H \"Content-Type: application/json\" \
-d \'{\"model\": \"/model/deepseek/DeepSeek-671b-R1\", \"prompt\": \"你好\", \"max_tokens\": 50}\'
预期结果
返回状态码:200
返回内容包含生成的文本,例如:
json
{
\"choices\": [{\"text\": \"Hello, World! ...\"}],
\"status\": \"success\"
}
性能测试
目标: 测试API在高并发场景下的性能表现。
测试工具
wrk
测试步骤
激活测试虚拟环境:
bash
source /home/demo_env/bin/activate
运行wrk进行压力测试:
bash
wrk -t10 -c100 -d30s -s script.lua http://ip/v1/completions
示例script.lua内容:
lua
wrk.method = \"POST\"
wrk.body = \'{\"prompt\": \"测试性能\", \"max_tokens\": 50}\'
wrk.headers[\"Content-Type\"] = \"application/json\"
预期结果
输出报告包含请求总数、RPS、平均延迟、错误率(接近0%)。
3. 可视化测试(可选)
目标: 通过Streamlit验证API可用性。
测试步骤
创建app.py:
python
import streamlit as st
import requests
st.title(\"DeepSeek API 测试\")
prompt = st.text_input(\"输入提示词\", \"你好\")
if st.button(\"生成\"):
response = requests.post(
json={\"prompt\": prompt, \"max_tokens\": 50}
)
st.write(response.json()[\"choices\"][0][\"text\"])
运行:
bash
streamlit run app.py
访问http://ip:8501。
预期结果
输入提示词后,显示API返回的文本。
注意事项
确保推理服务运行在/home/oem/dsinfer环境中。
测试时使用ip:8000。
根据实际API端点调整URL(如/v1/completions)。
如需认证,添加相应头信息。
交付验收标准
API服务监听
功能测试返回正确结果。
性能测试达到预期指标。
可视化测试界面正常运行。