书生·浦语2.5开源,推理能力再创新标杆

导读

2024 年 7 月 3 日,上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书⽣·浦语2.5(InternLM2.5)。相比上一代模型,InternLM2.5 有三项突出亮点:

  • 推理能力大幅提升,在部分维度上甚至超越十倍量级的 Llama3-70B;

  • 支持 1M tokens 上下文,能够处理百万字长文;

  • 具有强大的自主规划和工具调用能力,比如可以针对复杂问题,搜索上百个网页并进行整合分析。

InternLM2.5-7B 模型即日起开源可用,更大和更小的模型也将在近期发布开源。上海人工智能实验室秉持“以持续的高质量开源赋能创新”理念,在为社区始终如一地提供高质量开源模型的同时,也将继续坚持免费商用授权。

Github链接:https://github.com/InternLM/InternLM

**模型链接:**https://www.modelscope.cn/models/Shanghai_AI_Laboratory/internlm2_5-7b-chat

**书生·浦语主页:**https://internlm.intern-ai.org.cn/

领先的推理能力

强大的推理能力是大模型通向通用人工智能的重要基础,InternLM2.5 将推理能力作为模型最核心的能力进行优化,为复杂场景的应用落地提供了良好的基础。

基于司南 OpenCompass 开源评测框架,研究团队使用统一可复现的评测方法在多个推理能力权威评测集上进行了评测。相比上一代模型,InternLM2.5 在多个推理能力权威评测集上实现了大幅性能提升,尤其在由竞赛问题构成的数学评测集 MATH 上更是提升100%,以 7B 参数达到了 60% 的准确率(达到 GPT-4 Turbo 1106 版本的水平),充分展示了模型在数学推理上的优异成绩。

在这里插入图片描述

100万 Token 长文本支持,文档对话系统全开源

在长文档理解、复杂的智能体交互等应用场景中,模型的上下文长度支持有着更高的要求。InternLM2.5 提出了解决方案,将上下文长度从上一代模型 InternLM2 的 200K 提升到了 1M(约合 120 万汉字),进一步释放了模型在超长文本应用上的潜力。在模型的预训练中,从自然语料中筛选出了 256K Token 长度的文本,同时为了避免语料类型过于单一而导致的域偏移,通过合成数据进行了补充,使得模型在扩展上下文的同时可以尽量保留其能力。

采用了业界流行的“大海捞针”来评估模型的长文信息召回内容,下图显示,InternLM 2.5 在 1M token 范围内实现了几乎完美的大海捞针召回,呈现了极强的长文处理能力。

在这里插入图片描述

基于网络信息高效解决复杂问题

针对需要大规模复杂信息搜索和整合的复杂问题场景,InternLM2.5 创新性地提出了 MindSearch 多智能体框架,模拟人的思维过程,引入了任务规划、任务拆解、大规模网页搜索、多源信息归纳总结等步骤,有效地整合网络信息。其中,规划器专注于任务的规划、拆解和信息归纳,采用图结构编程的方式进行规划,并根据任务状态进行动态拓展,搜索器负责发散式搜索并总结网络搜索结果,使得整个框架能够基于上百个网页的信息进行筛选和浏览和整合。

在这里插入图片描述

模型下载

SDK下载模型:

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm2_5-7b-chat')

或者使用CLI下载

modelscope download --model=Shanghai_AI_Laboratory/internlm2_5-7b-chat --local_dir ./internlm2_5-7b-chat/

支持git clone下载

git clone https://www.modelscope.cn/Shanghai_AI_Laboratory/internlm2_5-7b-chat.git

04

模型推理

使用transformers推理:

import torch
from modelscope import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Shanghai_AI_Laboratory/internlm2_5-7b-chat", trust_remote_code=True)
# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and cause OOM Error.
model = AutoModelForCausalLM.from_pretrained("Shanghai_AI_Laboratory/internlm2_5-7b-chat", torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()
response, history = model.chat(tokenizer, "hello", history=[])
print(response)
# Hello! How can I help you today?
response, history = model.chat(tokenizer, "please provide three suggestions about time management", history=history)
print(response)

显存占用:

在这里插入图片描述

模型微调

本文介绍使用ms-swift对internlm2.5-7b-chat进行自我认知微调,并对微调前后模型进行推理、部署与评测。swift是魔搭社区官方提供的LLM工具箱,支持300+大语言模型和50+多模态大模型的微调、推理、量化、评估和部署。

swift开源地址:https://github.com/modelscope/swift

自我认知数据集: https://modelscope.cn/datasets/swift/self-cognition

如果需要使用其他数据集对internlm2.5-7b-chat进行微调,只需要修改 --dataset即可。自定义dataset支持传入本地路径、modelscope和huggingface中的dataset_id。文档可以查看:https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%8E%E6%8B%93%E5%B1%95.md#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E9%9B%86

在开始微调之前,请确保您的环境已正确安装

git clone https://github.com/modelscope/swift.git
cd swift
pip install -e .[llm]

微调脚本:

# Experimental environment: A10, 3090, V100, ...
# 22GB GPU memory
CUDA_VISIBLE_DEVICES=0 swift sft \--model_type internlm2_5-7b-chat \--dataset alpaca-zh#500 alpaca-en#500 self-cognition#500 \--logging_steps 5 \--max_length 2048 \--learning_rate 1e-4 \--output_dir output \--lora_target_modules ALL \--model_name 小黄 'Xiao Huang' \--model_author 魔搭 ModelScope \# Experimental environment: A10, 3090, V100, ...
# 4 * 20GB GPU memory
# Deepspeed-ZeRO2
NPROC_PER_NODE=4 CUDA_VISIBLE_DEVICES=0,1,2,3 \
swift sft \--model_type internlm2_5-7b-chat \--dataset alpaca-zh#500 alpaca-en#500 self-cognition#500 \--logging_steps 5 \--max_length 2048 \--learning_rate 1e-4 \--output_dir output \--lora_target_modules ALL \--model_name 小黄 'Xiao Huang' \--model_author 魔搭 ModelScope \--deepspeed default-zero2

微调显存消耗:

在这里插入图片描述

微调过程的loss可视化:

在这里插入图片描述

微调后推理脚本如下,这里的ckpt_dir需要修改为训练生成的last checkpoint文件夹。我们可以使用vLLM对merge后的checkpoint进行推理加速。

# Experimental environment: A10, 3090, V100, ...
CUDA_VISIBLE_DEVICES=0 swift export \--ckpt_dir output/internlm2_5-7b-chat/vx-xxx/checkpoint-xxx \--merge_lora true# 使用vLLM进行推理加速
CUDA_VISIBLE_DEVICES=0 swift infer \--ckpt_dir output/internlm2_5-7b-chat/vx-xxx/checkpoint-xxx-merged \--infer_backend vllm --max_model_len 4096

微调后模型对验证集进行推理的示例:

在这里插入图片描述

对自我认知微调前后的模型进行评测:

# Experimental environment: A100
# 评测后端由llmuses库提供: https://github.com/modelscope/eval-scope
# 原始模型
CUDA_VISIBLE_DEVICES=0 swift eval \--model_type internlm2_5-7b-chat \--eval_dataset arc ceval gsm8k --eval_backend Native \--infer_backend vllm 
# 微调后
CUDA_VISIBLE_DEVICES=0 swift eval \--ckpt_dir output/internlm2_5-7b-chat/vx-xxx/checkpoint-xxx-merged \--eval_dataset arc ceval gsm8k --eval_backend Native \--infer_backend vllm

Model

arc

ceval

gsm8k

原始模型

0.843

0.7452

0.8173

微调后模型

0.8404

0.7489

0.8082

可以看到,自我认知微调会对模型的评测结果产生略微影响,使用更好的混合通用数据集将会缓解这一现象。

模型部署

使用lmdeploy部署

pip install lmdeploy

使用python代码本地批量推理

import lmdeploy
pipe = lmdeploy.pipeline("/mnt/workspace/internlm2_5-7b-chat")
response = pipe(["Hi, pls intro yourself", "Shanghai is"])
print(response)

也可以使用一行代码发布OpenAI格式服务

lmdeploy serve api_server /mnt/workspace/internlm2_5-7b-chat --model-name internlm2_5-7b-chat --server-port 23333 

接口调用方式:

curl http://localhost:23333/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "internlm2_5-7b-chat","messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Introduce deep learning to me."}]}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE与React的生命周期对比

前言 在前端开发中,Vue和React是两个非常流行的JavaScript框架,它们各自有着独特的生命周期机制。了解并熟练掌握这些生命周期,对于开发高效、可维护的前端应用至关重要。本文将详细对比Vue和React的生命周期,帮助开发者更好地理…

Python | Leetcode Python题解之第222题完全二叉树的节点个数

题目: 题解: # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def countNodes(self,…

好玩的珠玑妙算-加作弊带概率空间+日志存储240705mindMaster

Python代码 import random import time import datetimeNUM_DIGITS 10 #NUM_NON_ZERO_DIGITS 9failFlag 0class Mastermind:def __init__(self, code_length, max_attempts, secret01code, game_id): # def __init__(self, code_length, max_attempts):self.code_length…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 📑引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

【Excel】求和带文字的数据

目录标题 1. 给出样例2. CtrlE3. CtrlH → A替换为 → 全部替换 1. 给出样例 2. CtrlE 3. CtrlH → A替换为 → 全部替换

算法期末函数题

R6-1 可重复选择的组合数问题 【考核知识点】可重复选择的组合计数 【问题描述】 有n个不同元素&#xff08;1<n<20&#xff09;&#xff0c;每个元素可以选多次&#xff0c;一共需要选出k个元素出来&#xff08;1<k<20&#xff09;&#xff0c;问有多少种选取的…

监控易V7.6.6.15升级详解2:设备管理功能

随着企业IT架构的日益复杂&#xff0c;对设备管理的需求也在不断提升。为了满足广大用户对于设备管理的高效、精准需求&#xff0c;我们荣幸地宣布监控易系统已完成了一次重要的版本升级。本次升级不仅优化了原有功能&#xff0c;还新增了一系列实用特性&#xff0c;旨在为用户…

仿qq音乐播放微信小程序模板源码

手机qq音乐应用小程序&#xff0c;在线音乐播放器微信小程序网页模板。包含&#xff1a;音乐歌曲主页、推荐、排行榜、搜索、音乐播放器、歌单详情等。 仿qq音乐播放微信小程序模板源码

【ubuntu自启shell脚本】——在ubuntu中如何使用系统自带的启动应用程序设置开机自启自己的本地shell脚本

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、设置开机自启shell脚本1.使用 gnome-session-properties2.测试的shell例程代码 总结 前言 在Ubuntu系统中设置开机自启脚本是一种重要的自动化方法。开机自…

YOLO-World实时开集检测论文阅读

论文&#xff1a;《YOLO-World: Real-Time Open-Vocabulary Object Detection》 代码&#xff1a;https://github.com/AILab-CVC/YOLO-World 1.Abstract 我们介绍了YOLO World&#xff0c;这是一种创新的方法&#xff0c;通过在大规模数据集上进行视觉语言建模和预训练&#…

js之弹性布局使用方法

弹性布局&#xff08;Flexbox&#xff09;是一种现代化的 CSS 布局方法&#xff0c;它可以让您更方便地创建响应式和动态布局。在本篇文档中&#xff0c;我们将介绍弹性布局的基本概念以及如何在项目中使用它。 一、基本概念 容器&#xff08;Container&#xff09;&#xff…

WPF中逻辑树和视觉树

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;“逻辑树”&#xff08;Logical Tree&#xff09;和“可视树”&#xff08;Visual Tree&#xff09;是两个重要的概念&#xff0c;它们代表了不同的对象层次结构&#xff0c;用于描述应用程序的组织…

洛谷 [SNCPC2024] 写都写了,交一发吧 题解

分析 显然&#xff0c;两个相同的数去按位与的结果还是该数。 由于一个代码可以提交多次&#xff0c;那么可以把得分最高的代码提交两次&#xff0c;这样的得分就是这个代码的得分&#xff0c;很明显&#xff0c;这样是最优的。 Code #include<iostream> using names…

STM32微控制器的SPI存储解决方案:W25Q64 Flash存储器深度应用

摘要 在嵌入式系统设计中&#xff0c;存储解决方案对于数据的持久化至关重要。W25Q64 Flash存储器以其高效的存储能力和与SPI总线的兼容性&#xff0c;成为STM32微控制器项目中的优选。本文将深入探讨STM32微控制器的SPI存储解决方案&#xff0c;重点介绍W25Q64 Flash存储器的…

vue3+antd 实现点击按钮弹出对话框

格式1&#xff1a;确认对话框 按钮&#xff1a; 点击按钮之后&#xff1a; 完整代码&#xff1a; <template><div><a-button click"showConfirm">Confirm</a-button></div> </template> <script setup> import {Mod…

如何查看程序是否在运行-Linux

1.命令 ps aux | grep RiboCode2_manythreads.py2.结果&#xff1a; 2020200 1063124 99.8 19.2 56105444 50796184 pts/0 Sl 18:40 114:36 python RiboCode2_manythreads.py -a ./RiboCode_annot -c config15d.txt -o ./ORFs_15d_final_result --gtf -t 15从输出结果可以看出…

阶段三:项目开发---大数据开发运行环境搭建:任务4:安装配置Spark集群

任务描述 知识点&#xff1a;安装配置Spark 重 点&#xff1a; 安装配置Spark 难 点&#xff1a;无 内 容&#xff1a; Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop …

Bean的管理

1.主动获取Bean spring项目在需要时&#xff0c;会自动从IOC容器中获取需要的Bean 我们也可以自己主动的得到Bean对象 &#xff08;1&#xff09;获取bean对象&#xff0c;首先获取SpringIOC对象 private ApplicationContext applicationContext //IOC容器对象 (2 )方法…

昇思25天学习打卡营第13天 | ShuffleNet图像分类

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

ExcelVBA运用Excel的【条件格式】(二)

ExcelVBA运用Excel的【条件格式】&#xff08;二&#xff09;前面知识点回顾1. 访问 FormatConditions 集合 Range.FormatConditions2. 添加条件格式 FormatConditions.Add 方法语法表达式。添加 (类型、 运算符、 Expression1、 Expression2)3. 修改或删除条件格式4. …