4.0 KiB
4.0 KiB
基于提供的来源,以下是使用 Builder Pattern(构建器模式) 结合 Ray Serve 和 vllm 动态部署**中型大语言模型(Medium-sized LLM)**的原理与操作方案。
一、 核心原理
- 中型 LLM 定义:中型模型(如 Llama-3.1-70B)通常具有约 70B 参数。它们通常运行在单个节点上,利用 4 到 8 个 GPU。
- Builder Pattern 机制:该模式通过
build_openai_app函数提供高度抽象。开发者只需定义一个LLMConfig对象,即可自动构建并链接底层的LLMServer和OpenAiIngress组件。 - 高性能后端 (vLLM):Ray Serve LLM 使用 vLLM 作为推理引擎,支持高性能推理和显存管理。
- 动态扩缩容与资源调度:
- 张量并行 (Tensor Parallelism):通过
tensor_parallel_size将模型权重均匀分布在单节点的所有 GPU 上。 - 副本缩放 (Autoscaling):通过
autoscaling_config动态调整min_replicas和max_replicas,使服务能根据实时流量增减推理副本。
- 张量并行 (Tensor Parallelism):通过
二、 操作方案
1. 环境准备
确保已安装必要的依赖包并配置 Hugging Face 访问令牌(针对 Llama-3.1 等受限模型)。
pip install "ray[serve,llm]"
export HF_TOKEN=<YOUR_HUGGINGFACE_TOKEN>
2. 编写部署脚本 (serve_medium_llm.py)
使用 Builder Pattern 定义配置并构建应用。以下示例配置了一个典型的 70B 模型部署:
# serve_medium_llm.py
from ray.serve.llm import LLMConfig, build_openai_app
import os
llm_config = LLMConfig(
model_loading_config=dict(
model_id="my-llama-3.1-70b",
model_source="meta-llama/Llama-3.1-70B-Instruct",
),
accelerator_type="A100-40G", # 或 L40S
deployment_config=dict(
autoscaling_config=dict(
min_replicas=1, # 最小副本数
max_replicas=4, # 最大副本数,实现动态扩展
)
),
runtime_env=dict(env_vars={"HF_TOKEN": os.environ.get("HF_TOKEN")}),
engine_kwargs=dict(
max_model_len=32768, # 上下文长度
tensor_parallel_size=8, # 在单节点的 8 个 GPU 间拆分权重
),
)
# 使用 Builder Pattern 构建应用
app = build_openai_app({"llm_configs": [llm_config]})
3. 启动部署
在终端运行以下命令启动服务:
serve run serve_medium_llm:app
部署过程通常需要几分钟,包括配置集群、启动 vLLM 服务器以及下载模型权重。
4. 发送请求测试
服务启动后,可以通过符合 OpenAI 标准的接口进行访问。
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="FAKE_KEY")
response = client.chat.completions.create(
model="my-llama-3.1-70b",
messages=[{"role": "user", "content": "解释一下什么是量子纠缠?"}],
stream=True
)
for chunk in response:
if chunk.choices.delta.content:
print(chunk.choices.delta.content, end="", flush=True)
三、 性能与并发优化建议
- 提高并发量:可以通过降低
max_model_len来减少 KV 缓存所需的显存,从而显著提升每个副本支持的最大并发请求数。 - 监控指标:通过 Ray Serve LLM 仪表盘监控 TTFT(首字延迟)、TPOT(单字延迟) 和 Token 吞吐量 来评估服务性能。
- 精度折衷:对于资源受限的场景,可以使用量化模型(如 FP8)来减少模型内存占用,为 KV 缓存留出更多空间,进而提高并发能力。
比喻理解: 部署中型 LLM 就像是在一个大型车间里组装一台复杂的精密机器(模型权重)。Builder Pattern 是你的“全自动组装线”,你只需设定好机器的参数(Config),生产线就会自动帮你把零件固定好并接通电源。而 vLLM 和张量并行 就像是让 8 个熟练工人(GPU)共同抬起这台沉重的机器,每个人只负责自己那一部分的力气,从而让机器能够平稳地运转。