LMDeploy部署
--- title: "LMDeploy部署" description: "LMDeploy高性能推理框架实战,掌握TurboMind引擎、W4A16量化与服务化部署技术" tags: ["LMDeploy", "TurboMind", "W4A16量化", "服务化部署"] category: "llm" icon: "🧠"
LMDeploy部署
LMDeploy简介
LMDeploy是上海人工智能实验室(上海AI Lab)推出的大模型推理部署工具链。它以TurboMind为核心推理引擎,支持W4A16、W8A8等多种量化方案,提供高效的推理性能。LMDeploy兼容主流开源模型,特别在国产模型支持方面具有优势。
安装LMDeploy
# 通过pip安装
pip install lmdeploy
# 安装带有CUDA支持的版本
pip install lmdeploy[cuda]
# 从源码安装最新版本
git clone https://github.com/InternLM/lmdeploy.git
cd lmdeploy
pip install -e .
模型量化
LMDeploy提供强大的离线量化工具,将FP16模型转换为更高效的量化格式:
# 使用W4A16量化(推荐)
# 将模型权重量化为INT4,激活值保持FP16
lmdeploy lite quantize \
meta-llama/Meta-Llama-3-8B \
--work-dir ./llama3-8b-w4a16
# 使用W8A8量化
lmdeploy lite quantize \
meta-llama/Meta-Llama-3-8B \
--work-dir ./llama3-8b-w8a8 \
--calib-dataset pileval \
--calib-size 128 \
--calib-max-seq-len 2048
量化后的模型文件可以直接被TurboMind引擎加载,无需额外配置。
TurboMind引擎
TurboMind是LMDeploy的核心推理引擎,针对Transformer结构进行了深度优化:
from lmdeploy import TurbomindEngine, GenerationConfig
# 初始化TurboMind引擎
engine = TurbomindEngine(
model_path="./llama3-8b-w4a16",
session_len=4096,
max_batch_size=32,
tp=1,
quant_policy=4
)
# 创建推理会话
session = engine.create_instance()
# 单轮推理
response = session.infer(
"请解释什么是机器学习",
gen_config=GenerationConfig(
max_new_tokens=512,
temperature=0.7,
top_p=0.9,
top_k=40,
repetition_penalty=1.1
)
)
print(response.text)
# 多轮对话
session.chat([
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!有什么可以帮助你的?"},
{"role": "user", "content": "介绍一下Python"}
], gen_config=GenerationConfig(max_new_tokens=256))
服务化部署
LMDeploy支持多种服务化部署方式:
# 使用内置API Server部署
lmdeploy serve api_server \
./llama3-8b-w4a16 \
--server-name 0.0.0.0 \
--server-port 8080 \
--tp 2 \
--session-len 4096 \
--max-batch-size 64
使用vLLM兼容模式:
# 启动vLLM兼容API
lmdeploy serve api_server \
./llama3-8b-w4a16 \
--backend turbomind \
--server-port 8000
API调用示例:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-needed"
)
# 非流式请求
response = client.chat.completions.create(
model="llama3",
messages=[
{"role": "user", "content": "写一首关于春天的诗"}
],
max_tokens=256,
temperature=0.8
)
# 流式请求
stream = client.chat.completions.create(
model="llama3",
messages=[
{"role": "user", "content": "解释量子计算的基本原理"}
],
max_tokens=512,
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
WebUI部署
LMDeploy提供内置的Web聊天界面:
# 启动WebUI
lmdeploy serve gradio \
./llama3-8b-w4a16 \
--server-name 0.0.0.0 \
--server-port 7860 \
--share true
性能调优
# 多GPU张量并行
lmdeploy serve api_server \
./llama3-70b-w4a16 \
--tp 4 \
--max-batch-size 128
# 启用W4A16量化推理
lmdeploy serve api_server \
./model \
--quant-policy 4 \
--cache-max-entry-count 0.8
LMDeploy特别适合国内模型的部署场景,其W4A16量化技术可以在保持较高推理质量的同时,将显存占用降低约60%,使得在消费级GPU上运行大参数模型成为可能。