Satori快速体验MIT与哈佛推出7B参数的推理专家模型,具备自回归搜索和自我纠错能力

Written by 30115776@qq.com

今天跟大家分享一下 Satori 这个由 MIT、哈佛大学等机构联合推出的大语言推理模型。Satori快速体验MIT与哈佛推出7B参数的推理专家模型,具备自回归搜索和自我纠错能力

🚀 快速阅读

Satori 是一个 7B 参数的大型语言模型,专注于提升推理能力。

  1. 核心功能:具备自回归搜索和自我纠错能力,能够在数学推理和跨领域任务中表现出色。
  2. 技术原理:采用行动-思维链(COAT)机制和两阶段训练框架,通过强化学习优化模型性能。

Satori 是什么

Satori 是由 MIT、哈佛大学等机构研究者推出的 7B 参数大型语言模型,专注于提升推理能力。基于 Qwen-2.5-Math-7B,Satori 通过小规模的格式微调和大规模的增强学习实现了先进的推理性能。

该模型引入了行动-思维链(COAT)机制,通过特殊的元动作标记引导模型进行推理。Satori 在数学推理和跨领域任务中表现出色,展现了优异的泛化能力。Satori 的代码、数据和模型均已开源,为研究人员和开发者提供了宝贵资源。

Satori 的主要功能

  • 自回归搜索能力:Satori 通过自我反思和探索新策略,能进行自回归搜索,无需外部指导即可完成复杂的推理任务。
  • 数学推理:Satori 在数学推理基准测试中取得了最佳成绩,展现出卓越的推理能力。
  • 跨领域任务:除了数学领域,Satori 在逻辑推理、代码推理、常识推理和表格推理等跨领域任务中也表现出色,具有很强的泛化能力。
  • 自我反思与纠错能力:Satori 在推理过程中能自我反思并进行自我纠错,提升了推理的准确率。
  • 强化学习优化:采用行动-思维链(COAT)机制和两阶段训练框架,包括小规模格式调优和大规模自我优化,主要依靠强化学习(RL)实现先进的推理性能。

Satori 的技术原理

  • 行动-思维链(COAT)推理

    • 继续推理(<|continue|>):鼓励模型生成下一个中间步骤。
    • 反思(<|reflect|>):验证之前的推理步骤是否正确。
    • 探索替代方案(<|explore|>):识别推理中的漏洞并探索新的解决方案。
  • 两阶段训练框架

    • 小规模格式调优阶段:在少量推理轨迹示例的小数据集上进行微调,使模型熟悉 COAT 推理格式。
    • 大规模自我优化阶段:通过强化学习(RL)优化模型性能,采用重启与探索(RAE)技术,提升模型的自回归搜索能力。

如何运行 Satori-7B-Round2

快速部署(WebUI)

1. 克隆项目到本地

首先,您需要从 GitHub 克隆项目到本地。执行以下命令:

git clone https://github.com/Airmomo/satori-7b-round2-webui.git
cd satori-7b-round2-webui

2. 创建虚拟环境

为了确保项目的依赖项不会影响您的系统环境,建议创建一个虚拟环境。执行以下命令来创建虚拟环境:

python -m venv myenv

3. 激活虚拟环境

根据您的操作系统,使用不同的命令来激活虚拟环境:

3.1 Windows

myenv\\Scripts\\activate

3.2 macOS/Linux

source myenv/bin/activate

4. 安装依赖包

激活虚拟环境后,安装项目所需的依赖包。执行以下命令:

pip install torch vllm gradio tqdm

5. 运行程序

安装完成后,您可以运行程序。执行以下命令启动 WebUI:

python gradio_app.py

程序会自动下载模型文件并启动推理引擎和 Gradio App。下载完成后,您将看到类似以下的输出,显示 Gradio App 的访问地址:

* Running on local URL:  http://127.0.0.1:7860
* Running on public URL: https://62c32ff6bbd7ca4d2f.gradio.live

手动部署

1. 准备环境

通过以下命令安装所需的库:

pip install torch vllm tqdm

2. 加载模型

Satori-7B-Round2 是基于 Qwen-2.5-Math-7B 模型训练的,因此你需要下载并加载该模型。你可以从 Hugging Face 或其他模型仓库中获取模型文件。假设你已经下载了模型文件并存储在本地路径 Satori-reasoning/Satori-7B-Round2,接下来可以加载模型。

from vllm import LLM, SamplingParams

def load_model(model_path):
    llm = LLM(
        model=model_path,
        trust_remote_code=True,
        tensor_parallel_size=1,
    )
    return llm

3. 配置推理参数

为了生成高质量的推理结果,你可以通过 SamplingParams 来配置推理参数。以下是推荐的参数设置:

  • max_tokens=4096:限制生成的最大 token 数量。
  • temperature=0.0:使用贪婪搜索(greedy sampling),确保生成的结果更加稳定。
  • n=1:每次生成一条推理路径。
  • skip_special_tokens=True:隐藏特殊 token,如 <|continue|><|reflect|><|explore|>,这些 token 用于内部推理控制,但不希望出现在最终输出中。
def configure_sampling_params():
    sampling_params = SamplingParams(
        max_tokens=4096,
        temperature=0.0,
        n=1,
        skip_special_tokens=True
    )
    return sampling_params

4. 构建提示

Satori-7B-Round2 采用了 Chain-of-Action-Thought (COAT) 推理框架,因此在构建提示时,建议使用清晰的指令来引导模型进行逐步推理。以下是一个示例提示格式:

def prepare_prompt(question):
    prompt = f\"Solve the following math problem efficiently and clearly.\\nPlease reason step by step, and put your final answer within \\\\boxed{
   {}}.\\nProblem: {question}\"
    return prompt

5. 生成推理结果

接下来,你可以编写一个函数来生成推理结果。该函数会加载模型、配置推理参数,并为给定的问题生成推理路径。

def generate(question_list, model_path):
    llm = load_model(model_path)
    sampling_params = configure_sampling_params()
    outputs = llm.generate(question_list, sampling_params, use_tqdm=True)
    completions = [[output.text for output in output_item.outputs] for output_item in outputs]
    return completions

6. 运行示例

以下是一个完整的示例代码,展示了如何使用 Satori-7B-Round2 来解决一个简单的数学问题:

def run():
    model_path = \"Satori-reasoning/Satori-7B-Round2\"
    all_problems = [
        \"which number is larger? 9.11 or 9.9?\",
    ]
    completions = generate(
        [prepare_prompt(problem) for problem in all_problems],
        model_path
    )

    for completion in completions:
        print(completion[0])

if __name__ == \"__main__\":
    run()

7. 输出结果

运行上述代码后,Satori-7B-Round2 将会输出一个逐步推理的过程,并给出最终答案。例如,对于问题 \”which number is larger? 9.11 or 9.9?\”,输出可能如下所示:

To determine which number is larger, we compare 9.11 and 9.9.
1. Compare the integer parts: both numbers have the same integer part, which is 9.
2. Compare the decimal parts: 9.11 has a decimal part of 0.11, while 9.9 has a decimal part of 0.9.
3. Since 0.9 is greater than 0.11, 9.9 is the larger number.
Therefore, the larger number is \\boxed{9.9}.

资源

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

30115776@qq.com

Pretium lorem primis lectus donec tortor fusce morbi risus curae. Dignissim lacus massa mauris enim mattis magnis senectus montes mollis taciti accumsan semper nullam dapibus netus blandit nibh aliquam metus morbi cras magna vivamus per risus.

Airweave快速集成应用数据打造AI知识库的开源平台,支持多源整合和自动同步数据

LangBot无缝集成到QQ、微信等消息平台的AI聊天机器人平台

发表评论