【备忘】LLM部署

 

记录transformers和vLLM的一些使用。

transformers的设置

import os
os.environ['TRANSFORMERS_OFFLINE']="1"  # 让transformers load模型的时候从本地load,不要连接线上避免http timeout
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'  # 使用hf-mirror下载模型

输出格式控制

from typing import Literal
from pydantic import BaseModel, create_model

class Judge(BaseModel):
    rationale: str
    judge: Literal['Yes', 'No']

definitions = dict()
for t in topk_tags:
    definitions[t] = Judge
Results = create_model("Results", **definitions)
LLMOutput = create_model("LLMOutput", description=str, results=Results)


chat_response = self.client.chat.completions.create(
    model="Qwen/Qwen2.5-VL-3B-Instruct",
    messages=[
        {"role": "system", "content": "You are a helpful assistant. Please answer in Chinese."},
        {
            "role": "user",
            "content": [
                content,
                {"type": "text", "text": prompt},
            ],
        }
    ],
    extra_body={
        "guided_json": LLMOutput.model_json_schema(),
        "guided_whitespace_pattern": "",
        "top_k": 1,  # 确定性输出
    },
)

如何减轻大模型幻觉

  • 在上下文提供明确的信息
    • 让大模型搜索,或者调用工具(例如编程),这是RAG的思路
    • 可以通过prompt调优实现,拆解问题,让大模型先回答拆解的问题,再回答最终问题
  • Chain of Thought,一方面提供思考的demo,另一方面让大模型给出决策的时候提供rationale
  • 对于MLLM,可以增大图像分辨率,使用更详细、精确的描述进行监督

大模型应用

  • RAG:大模型自己规划任务如何完成
  • workflow:人为编排任务,通常会使用节点编辑器实现编排