← 返回首页
🧠

LMDeploy部署

📂 llm ⏱ 2 min 247 words

--- 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上运行大参数模型成为可能。