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

简介: Satori 是由 MIT 和哈佛大学等机构联合推出的 7B 参数大型语言模型,专注于提升推理能力,具备强大的自回归搜索和自我纠错功能。

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

🥦 微信公众号|搜一搜:蚝油菜花 🥦


大家好,我是蚝油菜花,今天跟大家分享一下 Satori 这个由 MIT、哈佛大学等机构联合推出的大语言推理模型。

🚀 快速阅读

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

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

Satori 是什么

Satori-7B-Gradio

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

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

Satori 的主要功能

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

Satori 的技术原理

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技术!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
社区活动礼品兑换攻略
社区活动礼品兑换攻略
14484 1
|
Ubuntu 数据安全/隐私保护 芯片
M1/M2芯片Parallels Desktop虚拟机安装Ubuntu系统
M1/M2芯片Parallels Desktop虚拟机安装Ubuntu系统
1290 0
M1/M2芯片Parallels Desktop虚拟机安装Ubuntu系统
vscode常用的快捷键
vscode常用的快捷键
301 0
|
机器学习/深度学习 人工智能 测试技术
仅7B的模型数学推理能力完虐70B?MIT哈佛推出行动思维链COAT让LLM实现自我反思并探索新策略
Satori 是由 MIT 和哈佛大学等机构联合推出的 7B 参数大型语言模型,专注于提升推理能力,具备强大的自回归搜索和自我纠错功能。
502 6
仅7B的模型数学推理能力完虐70B?MIT哈佛推出行动思维链COAT让LLM实现自我反思并探索新策略
|
并行计算 PyTorch 算法框架/工具
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
5582 13
|
人工智能 安全 机器人
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
LangBot 是一个开源的多模态即时聊天机器人平台,支持多种即时通信平台和大语言模型,具备多模态交互、插件扩展和Web管理面板等功能。
2418 14
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
|
9月前
|
存储 JSON 数据可视化
从零构建知识图谱:使用大语言模型处理复杂数据的11步实践指南
本文将基于相关理论知识和方法构建一个完整的端到端项目,系统展示如何利用知识图谱方法对大规模数据进行处理和分析。
2616 11
从零构建知识图谱:使用大语言模型处理复杂数据的11步实践指南
|
人工智能 自然语言处理 搜索推荐
浙大通义联手推出慢思考长文本生成框架OmniThink,让AI写作突破知识边界
随着大模型(LLMs)的发展,AI 写作取得了较大进展。然而,现有的方法大多依赖检索知识增强生成(RAG)和角色扮演等技术,其在信息的深度挖掘方面仍存在不足,较难突破已有知识边界,导致生成的内容缺乏深度和原创性。
626 46
|
存储 数据可视化 数据挖掘
图书馆图书可视化分析+大屏
在数字化时代背景下,图书馆已经成为知识获取和共享的重要场所。然而,随着馆藏书籍数量的增加,如何高效管理和利用这些资源成为了图书馆管理者和用户面临的挑战。数据分析和可视化技术的引入为解决这一问题提供了新的途径。本文致力于通过数据分析技术和可视化手段,对图书馆书籍数据进行综合挖掘,希望通过图书分类、书籍价格及读者偏好等多维度信息,进而优化图书馆管理策略、指导书籍采购决策并提升读者服务质量。本文在数字化和信息化快速发展的背景下,图书馆如何利用数据分析与可视化方法来挖掘和优化书籍借阅数据。主要内容包括。
1317 2
|
XML 前端开发 Java
怎样将MultipartFile和File互转
该文介绍了如何在Java开发中优雅地转换MultipartFile和File。MultipartFile是Spring框架用于接收上传文件的类,而File是操作系统文件的代表。文章提供了三种将MultipartFile转换为File的方法:使用`transferTo`方法、FileOutputStream和Java NIO。另外,还介绍了在测试场景下将File转换为MultipartFile,通过MockMultipartFile实现。
1767 1

热门文章

最新文章