Qwen2.5模型加载与推理实战

📌 1. LLM ------ Large Language Model(大型语言模型)

含义:

指参数量巨大(通常 > 1B)、基于 Transformer 架构训练的语言模型,如 GPT-3/4、Llama 系列、Qwen、ChatGLM 等。它们能完成文本生成、问答、翻译、推理等任务。

示例代码(使用 Hugging Face Transformers 加载本地 LLM):

python 复制代码
from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载模型和分词器(以 Qwen2.5 为例)
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")

# 输入提示
prompt = "请用一句话介绍你自己。"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

# 生成回复
outputs = model.generate(**inputs, max_new_tokens=50)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

✅ 输出示例:

"我是一个由阿里巴巴云研发的超大规模语言模型,能够回答问题、创作文字、编写代码......"


📌 2. Prompt ------ 提示词

含义:

用户输入给 LLM 的指令或上下文,用于引导模型输出特定内容。Prompt Engineering 是优化提示以获得更好结果的技术。

示例代码(Few-Shot Prompting):

python 复制代码
prompt = """
你是一个数学助手,请根据以下例子回答问题:

例1: 2 + 3 = ?
答: 5

例2: 7 * 8 = ?
答: 56

问题: 9 - 4 = ?
答:
"""

# 调用上面加载的 model 和 tokenizer
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=10)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

✅ 输出: 5


📌 3. MCP ------ Multi-Component Pipeline / Model Control Plane?(注:此处可能为笔误或非标准缩写)

⚠️ 注意:"MCP"在大模型领域并非通用术语。常见可能性包括:

  • Multi-Component Pipeline:多组件流水线(如数据预处理 → 嵌入 → RAG → 生成)
  • Model Control Plane:模型控制平面(管理多个模型部署与路由)
  • 或者是 Mixture of Experts (MoE) 中的某个子模块?

📌 如果你指的是 MoE(Mixture of Experts),那它是 LLM 内部结构的一种设计,比如 Mixtral、Switch Transformer 使用稀疏激活专家网络提升效率。

MoE 简单示意(伪代码):

python 复制代码
class MoELayer(nn.Module):
    def __init__(self, num_experts=8, expert_dim=512):
        super().__init__()
        self.experts = nn.ModuleList([nn.Linear(512, expert_dim) for _ in range(num_experts)])
        self.gate = nn.Linear(512, num_experts)

    def forward(self, x):
        gate_scores = torch.softmax(self.gate(x), dim=-1)  # [batch, seq_len, num_experts]
        outputs = []
        for i, expert in enumerate(self.experts):
            weighted_input = x * gate_scores[..., i:i+1]
            outputs.append(expert(weighted_input))
        return sum(outputs)  # 加权求和

4. Agent ------ 智能体

含义:

具备自主决策能力的 AI 系统,可以调用工具、规划步骤、记忆历史、与环境交互。例如 AutoGPT、LangChain Agents、ReAct 框架。

bash 复制代码
pip install langchain langchain-community google-search-results
python 复制代码
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
from langchain.utilities import GoogleSearchAPIWrapper

# 初始化搜索工具
search = GoogleSearchAPIWrapper()
tools = [
    Tool(
        name="Google Search",
        func=search.run,
        description="useful for when you need to answer questions about current events"
    )
]

# 初始化 agent
llm = OpenAI(temperature=0)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)

# 执行查询
agent.run("今天北京天气怎么样?")

✅ 输出会显示 agent 如何思考并调用搜索引擎获取实时信息。


5. RAG ------ Retrieval-Augmented Generation(检索增强生成)

含义:

结合外部知识库(向量数据库)进行检索,再将检索结果作为上下文喂给 LLM 生成答案,解决幻觉问题、提高准确性。

示例代码(使用 FAISS + LangChain 实现简易 RAG):

bash 复制代码
pip install langchain faiss-cpu sentence-transformers
python 复制代码
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import HuggingFacePipeline

# 1. 加载文档
loader = TextLoader("knowledge_base.txt")
documents = loader.load()

# 2. 分割文本
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)

# 3. 创建嵌入 & 向量库
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = FAISS.from_documents(docs, embeddings)

# 4. 构建 QA 链
llm = HuggingFacePipeline.from_model_id(
    model_id="Qwen/Qwen2.5-0.5B-Instruct",
    task="text-generation",
    pipeline_kwargs={"max_new_tokens": 128}
)
qa_chain = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever())

# 5. 提问
query = "什么是量子纠缠?"
result = qa_chain.run(query)
print(result)

✅ 输出将基于你的 knowledge_base.txt 文件内容生成准确回答。


📌 6. Embedding ------ 嵌入向量

含义:

将文本、图像等离散对象映射为连续向量空间中的点,便于相似度计算、聚类、检索等操作。常用模型有 BERT、Sentence-BERT、text-embedding-ada-002 等。

示例代码(使用 Sentence Transformers 生成句子嵌入):

python 复制代码
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')

sentences = ["猫坐在垫子上", "狗在公园里跑"]
embeddings = model.encode(sentences)

# 计算余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
similarity = cosine_similarity([embeddings[0]], [embeddings[1]])
print(f"相似度: {similarity[0][0]:.4f}")

✅ 输出类似: 0.3215(表示两句语义有一定相关性但不高)


📌 7. LangChain ------ 大模型应用开发框架

含义:

一个开源框架,用于构建基于 LLM 的应用程序,支持链式调用、代理、记忆、工具集成等功能。

示例代码(简单 Chain:Prompt + LLM):

python 复制代码
from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFacePipeline

# 定义模板
template = """你是一个诗人,请写一首关于{topic}的五言绝句。
诗:"""

prompt = PromptTemplate(input_variables=["topic"], template=template)

# 加载模型
llm = HuggingFacePipeline.from_model_id(
    model_id="Qwen/Qwen2.5-0.5B-Instruct",
    task="text-generation",
    pipeline_kwargs={"max_new_tokens": 64}
)

# 构建 chain
chain = prompt | llm

# 执行
response = chain.invoke({"topic": "春天"})
print(response)

✅ 输出示例:

复制代码
春风吹柳绿,
花开满园香。
燕归巢未稳,
日落西山旁。

📌 8. vLLM ------ 高效推理引擎

含义:

由 UC Berkeley 开发的高性能 LLM 推理服务框架,采用 PagedAttention 技术大幅提升吞吐量和降低延迟,适合生产环境部署。

示例代码(启动 vLLM 服务器并调用 API):

Step 1: 安装 vLLM

bash 复制代码
pip install vllm

Step 2: 启动服务器(终端运行)

bash 复制代码
python -m vllm.entrypoints.api_server \
    --model Qwen/Qwen2.5-0.5B-Instruct \
    --host 0.0.0.0 \
    --port 8000

Step 3: Python 客户端调用

python 复制代码
import requests

url = "http://localhost:8000/generate"
payload = {
    "prompt": "讲个笑话吧",
    "max_tokens": 50,
    "temperature": 0.7
}

response = requests.post(url, json=payload)
print(response.json()["text"])

✅ 输出:一个由模型生成的笑话 😄


📌 9. Token ------ 令牌 / 词元

含义:

LLM 处理文本的基本单位,可以是单词、子词、字符甚至字节。不同模型有不同的 tokenizer(如 BPE、WordPiece)。Token 数量直接影响成本和速度。

示例代码(统计 token 数):

python 复制代码
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")

text = "你好,世界!这是一个测试句子。"
tokens = tokenizer.encode(text)
print(f"原始文本: {text}")
print(f"Token IDs: {tokens}")
print(f"Token 数量: {len(tokens)}")

✅ 输出示例:

复制代码
Token IDs: [151643, 190, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500]
Token 数量: 358

📌 10. 数据蒸馏 ------ Data Distillation

含义:

通过小模型学习大模型的行为(输出分布、中间层特征等),从而压缩模型体积、加速推理,同时保留大部分性能。常用于移动端部署或边缘计算场景。

示例代码(知识蒸馏训练循环伪代码):

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 假设 teacher_model 和 student_model 已定义
teacher_model.eval()
student_model.train()

optimizer = optim.Adam(student_model.parameters(), lr=1e-4)
criterion_kd = nn.KLDivLoss(reduction='batchmean')  # KL 散度损失
criterion_ce = nn.CrossEntropyLoss()                # 交叉损失(可选)

T = 4  # 温度参数
alpha = 0.7  # 蒸馏权重

for batch in dataloader:
    inputs, labels = batch
    
    with torch.no_grad():
        teacher_logits = teacher_model(inputs)
        teacher_probs = torch.softmax(teacher_logits / T, dim=1)
    
    student_logits = student_model(inputs)
    student_log_probs = torch.log_softmax(student_logits / T, dim=1)
    
    loss_kd = criterion_kd(student_log_probs, teacher_probs) * (T ** 2)
    loss_ce = criterion_ce(student_logits, labels)
    
    loss = alpha * loss_kd + (1 - alpha) * loss_ce
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

✅ 此方法可用于将 Qwen-7B 蒸馏成 Qwen-0.5B,保持 90%+ 性能的同时减少 90% 参数量。


🧩 总结图谱(逻辑关系)

复制代码
[User Prompt] 
     ↓
[Agent] ←→ [Tools] (Search, DB, API...)
     ↓
[RAG] ←→ [Embedding] ←→ [Vector DB]
     ↓
[LLM] ←→ [vLLM] (高效推理)
     ↓
[Tokenization] → [Data Distillation] (压缩模型)
     ↑
[LangChain] (编排整个流程)

💡 进阶建议

如果你想进一步实践:

✅ 推荐项目方向:

  • 用 LangChain + RAG 搭建个人知识库问答机器人
  • 用 vLLM 部署自己的 LLM 服务
  • 用 HuggingFace + LoRA 微调一个小模型做垂直领域任务
  • 用 ReAct Agent 实现自动炒股分析助手

相关推荐
Mr数据杨4 小时前
花卉图像分类在植物识别与生态监测中的应用
人工智能·机器学习·分类·数据挖掘·数据分析·kaggle
Codigger官方4 小时前
Phoenix 语言起步指南:开启 Polyglot Singularity 之门
开发语言·人工智能·程序人生
ting94520004 小时前
动手学深度学习(PyTorch版)深度详解(5):深度学习计算核心 —— 卷积操作、填充步幅、汇聚层与 LeNet 完整精讲
人工智能·pytorch·深度学习
miaowu3574 小时前
观点 | 70%的AI 市场将来自于垂直Agent
人工智能
时序之心4 小时前
时序前沿:CNN结合Transformer,通过通道-头绑定实现多变量时序插补!
人工智能·transformer·时间序列
SunnyDays10114 小时前
如何使用 Python 将 PDF 转换为 TIFF 或将 TIFF 转换为 PDF
人工智能·python·pdf
2zcode4 小时前
基于深度学习的违章停车检测系统的设计与实现
人工智能·深度学习
tianyuanwo4 小时前
CentOS 7 使用 CentOS 8 YUM 源报错 “Invalid version flag: if” 深度解析
python·centos·yum
秒云4 小时前
MIAOYUN | 每周AI新鲜事儿 260430
人工智能·ai·语言模型·aigc·ai编程