LitServer.run()的函数介绍

LitServer.run()的函数签名

1
2
3
4
5
6
7
8
9
10
11
def run(
self,
host: str = "0.0.0.0",
port: Union[str, int] = 8000,
num_api_servers: Optional[int] = None,
log_level: str = "info",
generate_client_file: bool = True,
api_server_worker_type: Literal["process", "thread"] = "process",
pretty_logs: bool = False,
**kwargs, # timeout_keep_alive=30 -> 透传给uvicorn
)

1.run()参数详解

1.1 host 监听地址

默认:

1
host="0.0.0.0"

说明:

配置 含义
127.0.0.1 仅本机访问
0.0.0.0 所有网卡访问
指定IP 绑定指定网卡

示例:

1
2
3
4
server.run(
host="127.0.0.1",
port=8000
)

1.2 port 监听端口

默认:

1
port=8000

示例:

1
server.run(port=8080)

访问:

1
http://localhost:8080/predict

1.3 num_api_servers API Server实例数

默认:

1
None

作用:LitServe底层使用FastAPI + Uvicorn

该参数控制:

1
API Frontend Server 数量

架构:

graph LR

A[Client]

A --> B1[API Server 1]
A --> B2[API Server 2]
A --> B3[API Server 3]

B1 --> C[Inference Workers]
B2 --> C
B3 --> C

例如:

1
2
3
server.run(
num_api_servers=4
)

会启动:

1
4个FastAPI入口进程

适用于:

  • 高QPS
  • 多CPU核心
  • API层成为瓶颈

1.4 log_level 日志级别

1
log_level="info"

可选:

1
2
3
4
5
6
"critical"
"error"
"warning"
"info"
"debug"
"trace"

示例:

1
2
3
server.run(
log_level="debug"
)

生产环境:

1
2
3
server.run(
log_level="warning"
)

1.5 generate_client_file 是否自动生成测试客户端

默认:

1
True

启动后生成:

1
client.py

目录:

1
2
3
.
├── server.py
├── client.py

关闭:

1
2
3
server.run(
generate_client_file=False
)

生产环境通常关闭。


1.6 api_server_worker_typeAPI服务工作模式

默认:

1
process

可选:process thread

process模式

1
2
3
server.run(
api_server_worker_type="process"
)

特点:

  • 多进程
  • 隔离性好
  • CPU利用率高
  • 推荐生产

thread模式

1
2
3
server.run(
api_server_worker_type="thread"
)

特点:

  • 多线程
  • 内存占用低
  • 启动快
  • 适合轻量任务

1.7 pretty_logs 美化日志

默认:False

开启:

1
2
3
server.run(
pretty_logs=True
)

效果:

  • 时间戳
  • 颜色
  • 格式化输出

适合:

  • 本地开发
  • 调试

1.8 **kwargs 透传给底层(uvicorn)

  • Uvicorn
  • FastAPI
  • Starlette

例如:

1
2
3
4
server.run(
ssl_keyfile="server.key",
ssl_certfile="server.crt"
)

启用HTTPS

1
2
3
4
5
6
7
server.run(
host="0.0.0.0",
port=443,
ssl_keyfile="server.key",
ssl_certfile="server.crt",
timeout_keep_alive=30 # 空闲长连接关闭检测
)

2.真正影响性能的参数其实在LitServer()

很多人关注:server.run(…),实际上吞吐量主要由:ls.LitServer(…)

2.1 accelerator

硬件类型:accelerator=”auto”

可选:

  • cpu
  • cuda
  • gpu
  • mps
  • auto

示例:

1
2
3
4
server = ls.LitServer(
api,
accelerator="cuda"
)

2.2 devices设备数

1
devices=4

例如:

1
2
3
4
5
server = ls.LitServer(
api,
accelerator="cuda",
devices=4
)

表示:4张GPU,也支持:devices=[0,1,3]


2.3 workers_per_device

每个设备启动多少Worker。workers_per_device=2

例如:

1
2
3
4
5
6
server = ls.LitServer(
api,
accelerator="cuda",
devices=4,
workers_per_device=2
)

实际:4 GPU × 2 Worker = 8个推理Worker


2.4 timeout队列超时时间

timeout=30请求在队列中等待超过30秒返回504

例如:

1
2
3
4
server = ls.LitServer(
api,
timeout=60
)

3.生产推荐配置

单机CPU

1
2
3
4
5
6
7
server.run(
host="0.0.0.0",
port=8000,
num_api_servers=4,
log_level="warning",
generate_client_file=False
)

单GPU

1
2
3
4
5
6
7
8
9
10
11
12
13
server = ls.LitServer(
api,
accelerator="cuda",
devices=1,
workers_per_device=2,
timeout=60
)

server.run(
host="0.0.0.0",
port=8000,
num_api_servers=4
)

多GPU LLM服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server = ls.LitServer(
api,
accelerator="cuda",
devices=8,
workers_per_device=1,
timeout=300
)

server.run(
host="0.0.0.0",
port=8000,
num_api_servers=8,
log_level="warning"
)

4.run()参数汇总表

参数 默认值 说明
host 0.0.0.0 监听地址
port 8000 服务端口
num_api_servers None API Server数量
log_level info 日志等级
generate_client_file True 自动生成client.py
api_server_worker_type process process/thread
pretty_logs False 美化日志
**kwargs - 透传给Uvicorn/FastAPI