分享

LLMs之InternLM:InternLM/InternLM-7B模型的简介、安装、使用方法之详细攻略

 处女座的程序猿 2023-07-14 发布于上海

LLMs之InternLM:InternLM/InternLM-7B模型的简介、安装、使用方法之详细攻略

导读:InternLM有 1040亿参数,是在包含1.6万亿token的多语种高质量数据集上训练而成。同时,InternLM-7B完全可商用,支持8k语境窗口长度,中文超ChatGPT,训练和评估动态反馈调整基于ML deploy部署(基于Fast Transform研发)快速加载大模型,比Transform快到2~3倍Hybrid Zero提速 ,开放OpenCompass 评测标准


InternLM模型的简介

         2023年6月7日,上海人工智能实验室(上海AI实验室)、商汤科技联合香港中文大学、复旦大学及上海交通大学发布千亿级参数大语言模型“书生·浦语”(InternLM)。“书生·浦语”具有 1040亿参数,是在包含1.6万亿token的多语种高质量数据集上训练而成。全面评测结果显示,“书生·浦语”不仅在知识掌握、阅读理解、数学推理、多语翻译等多个测试任务上表现优秀,而且具备很强的综合能力,因而在综合性考试中表现突出,在多项中文考试中取得超越ChatGPT的成绩,其中就包括中国高考各科目的数据集(GaoKao)。
         2023年7月6日,在2023世界人工智能大会(WAIC)科学前沿全体会议上,深度学习与计算机专家、上海人工智能实验室教授、香港中文大学教授林达华,发布了“书生通用大模型体系”(以下简称“书生大模型”),包括书生·多模态、书生·浦语InternLM和书生·天际LandMark等三大基础模型,以及首个面向大模型研发与应用的全链条开源体系。当天,正式开源的版本为一个70亿参数的轻量级InternLM-7B,在包含40个评测集的全维度评测中展现出卓越且平衡的性能,全面领先现有开源模型。
         InternLM ,即书生·浦语大模型,包含面向实用场景的70亿参数基础模型与对话模型 (InternLM-7B)。模型具有以下特点:

  • 使用上万亿高质量预料,建立模型超强知识体系;
  • 支持8k语境窗口长度,实现更长输入与更强推理体验;
  • 通用工具调用能力,支持用户灵活自助搭建流程;

         提供了支持模型预训练的轻量级训练框架,无需安装大量依赖包,一套代码支持千卡预训练和单卡人类偏好对齐训练,同时实现了极致的性能优化,实现千卡训练下近90%加速效率。

GitHub地址GitHub - InternLM/InternLM: InternLM has open-sourced a 7 billion parameter base model, a chat model tailored for practical scenarios and the training system.

论文地址https://github.com/InternLM/InternLM-techreport/blob/main/InternLM.pdf

InternLM-techreportGitHub - InternLM/InternLM-techreport

1、InternLM的techreport

        我们推出了InternLM,一个具有1,040亿参数的多语言基础语言模型。InternLM使用多阶段渐进式的过程,在1.6T个标记的大型语料库上进行预训练,然后通过微调来与人类喜好相匹配。我们还开发了一个名为Uniscale-LLM的训练系统,用于高效的大型语言模型训练。在多个基准测试上的评估表明,InternLM在多个方面,包括知识理解、阅读理解、数学和编码方面,均实现了最先进的性能。凭借如此全面的能力,InternLM在包括MMLU、AGIEval、C-Eval和GAOKAO-Bench在内的综合考试中取得了出色的表现,而无需使用外部工具。在这些基准测试中,InternLM不仅表现优于开源模型,而且相对于ChatGPT也获得了更优异的性能。此外,InternLM展示了出色的理解中文语言和中华文化的能力,这使得它成为支持面向中文语言应用的基础模型的合适选择。本文详细介绍了我们的结果,包括跨越各种知识领域和任务的基准测试和示例。

(1)、主要结果

        随着最新的大型语言模型开始展现人类级别的智能,针对人类设计的考试,如中国的高考、美国的SAT和GRE,被视为评估语言模型的重要手段。值得注意的是,在其关于GPT-4的技术报告中,OpenAI通过跨多个领域的考试对GPT-4进行了测试,并将考试成绩作为关键结果。
        我们在以下四个综合考试基准测试中,将InternLM与其他模型进行了比较:

MMLU:基于各种美国考试构建的多任务基准测试,涵盖了小学数学、物理、化学、计算机科学、美国历史、法律、经济、外交等多个学科。

AGIEval:由微软研究开发的基准测试,用于评估语言模型通过人类导向的考试的能力,包括19个任务集,派生自中国和美国的各种考试,例如中国的高考和律师资格考试,以及美国的SAT、LSAT、GRE和GMAT。在这19个任务集中,有9个基于中国的高考(Gaokao),我们将其单独列为一个重要的集合,称为AGIEval(GK)。

C-Eval:用于评估中文语言模型的综合基准测试,包含52个学科的近14,000道问题,涵盖数学、物理、化学、生物、历史、政治、计算机和其他学科,以及公务员、注册会计师、律师和医生的专业考试。
排行榜地址https:///static/leaderboard.html

GAOKAO-Bench:基于中国的高考的综合基准测试,包括高考的所有科目。它提供不同类型的问题,包括多项选择、填空和问答。为了简洁起见,我们将这个基准测试简称为高考。

2、InternLM-7B模型的简介

     InternLM ,即书生·浦语大模型,包含面向实用场景的70亿参数基础模型 (InternLM-7B)。模型具有以下特点:

  • 使用上万亿高质量预料,建立模型超强知识体系;
  • 通用工具调用能力,支持用户灵活自助搭建流程;

官网internlm/internlm-7b · Hugging Face

3、InternLM、InternLM-7B模型的性能评测

     我们使用开源评测工具 OpenCompass 从学科综合能力、语言能力、知识能力、推理能力、理解能力五大能力维度对InternLM开展全面评测,部分评测结果如下表所示,欢迎访问 OpenCompass 榜单 获取更多的评测结果。

数据集\模型InternLM-Chat-7BInternLM-7BLLaMA-7BBaichuan-7BChatGLM2-6BAlpaca-7BVicuna-7B
C-Eval(Val)53.253.424.242.750.928.931.2
MMLU50.851.035.2*41.546.039.747.3
AGIEval42.537.620.824.639.024.126.4
CommonSenseQA75.259.565.058.860.068.766.7
BUSTM74.350.648.551.355.048.862.5
CLUEWSC78.659.150.352.859.850.352.2
MATH6.47.12.83.06.62.22.8
GSM8K34.531.210.19.729.26.015.3
HumanEval14.010.414.09.29.29.211.0
RACE(High)76.357.446.9*28.166.340.754.0
  • 以上评测结果基于 OpenCompass 20230706 获得(部分数据标注*代表数据来自原始论文),具体测试细节可参见 OpenCompass 中提供的配置文件。
  • 评测数据会因 OpenCompass 的版本迭代而存在数值差异,请以 OpenCompass 最新版的评测结果为主。

4、InternLM-7B模型的局限性

        尽管在训练过程中我们非常注重模型的安全性,尽力促使模型输出符合伦理和法律要求的文本,但受限于模型大小以及概率生成范式,模型可能会产生各种不符合预期的输出,例如回复内容包含偏见、歧视等有害内容,请勿传播这些内容。由于传播不良信息导致的任何后果,本项目不承担责任。

InternLM-7B模型的安装

1、Model Zoo

当前通过 InternLM 训练的 InternLM 7B 和 InternLM 7B Chat 已经开源,我们提供两种格式的模型权重以供使用。除了使用 Transformers 格式加载模型之外,还可以通过 InternLM 加载以下格式的权重直接进行继续预训练或人类偏好对齐训练

模型InternLM 格式权重下载地址Transformers 格式权重下载地址
InternLM 7B​编辑🤗internlm/intern-7b
InternLM Chat 7B​编辑🤗internlm/intern-chat-7b
InternLM Chat 7B 8k​编辑🤗internlm/intern-chat-7b-8k

2、InternLM 7B下载地址

下载地址https:///internlm/internlm-7b/tree/main

InternLM模型的高性能部署

1、使用 LMDeploy 完成 InternLM 的一键部署。

首先安装 LMDeploy:

python3 -m pip install lmdeploy

快速的部署命令如下:

python3 -m lmdeploy.serve.turbomind.deploy InternLM-7B /path/to/internlm-7b/model hf

在导出模型后,你可以直接通过如下命令启动服务一个服务并和部署后的模型对话

python3 -m lmdeploy.serve.client {server_ip_addresss}:33337

完整部署教程GitHub - InternLM/lmdeploy: LMDeploy is a toolkit for compressing, deploying, and serving LLM

2、微调&训练

预训练与微调使用教程

请参考使用教程开始InternLM的安装、数据处理、预训练与微调。

转换为 Transformers 格式使用

通过 InternLM 进行训练的模型可以很轻松地转换为 HuggingFace Transformers 格式,方便与社区各种开源项目无缝对接。借助 tools/convert2hf.py 可以将训练保存的权重一键转换为 transformers 格式

python convert2hf.py --src_folder origin_ckpt/ --tgt_folder hf_ckpt/ --tokenizer tokenizes/tokenizer.model

转换之后可以通过以下的代码加载为 transformers

from transformers import AutoTokenizer, AutoModel
model = AutoModel.from_pretrained("hf_ckpt/", trust_remote_code=True).cuda()

3、训练系统

InternLM系统结构代码文件结构


InternLM系统结构本项目系统代码文件结构如下所示:

├── configs                                  # 配置模块,管理模型和训练相关参数
│   └── 7B_sft.py                            # 7B_sft.py 是系统 demo 的配置文件样例
├── internlm                                 # 系统代码的主目录
│   ├── apis                                 # 接口模块,包含一些关于推理等的接口函数
│   ├── core                                 # 核心模块,管理用于训练和推理的 parallel context 和训练调度引擎
│   │   ├── context                          # context 模块,主要负责初始化并行进程组,并管理 parallel context
│   │   │   ├── parallel_context.py
│   │   │   └── process_group_initializer.py
│   │   ├── engine.py                        # 负责管理模型的训练和评估过程
│   │   ├── no_pipeline_scheduler.py         # 并行训练的调度器
│   │   └── trainer.py                       # 负责管理训练引擎和调度器
│   ├── data                                 # 数据模块,负责管理数据集生成和处理
│   ├── initialize                           # 初始化模块,负责管理分布式环境启动和训练器初始化
│   ├── model                                # 模型模块,负责管理模型结构定义和实现
│   ├── solver                               # 负责管理 optimizer 和 lr_scheduler 等的实现
│   └── utils                                # 辅助模块,负责管理日志、存储、模型注册等
├── train.py                                 # 模型训练的主函数入口文件
├── requirements                             # 系统运行的依赖包列表
├── third_party                              # 系统所依赖的第三方模块,包括 apex 和 flash-attention 等
├── tools                                    # 一些脚本工具,用于原始数据集处理和转换,模型 checkpoint 转换等
└── version.txt                              # 系统版本号

训练性能

InternLM 深度整合了 Flash-Attention, Apex 等高性能模型算子,提高了训练效率。通过构建 Hybrid Zero 技术,实现计算和通信的高效重叠,大幅降低了训练过程中的跨节点通信流量。InternLM 支持 7B 模型从 8 卡扩展到 1024 卡,千卡规模下加速效率可高达 90%,训练吞吐超过 180TFLOPS,平均单卡每秒处理的 token 数量超过3600。下表为 InternLM 在不同配置下的扩展性测试数据:

GPU Number81632641282565121024
TGS40783939391939443928392038353625
TFLOPS193191188188187185186184

TGS 代表平均每GPU每秒可以处理的 Token 数量。更多的性能测试数据可参考训练性能文档进一步了解。

InternLM-7B模型的使用方法

1、通过以下的代码加载 InternLM 7B Chat 模型

from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-7b", trust_remote_code=True).cuda()
model = model.eval()
inputs = tokenizer(["来到美丽的大自然,我们发现"], return_tensors="pt")
for k,v in inputs.items():
gen_kwargs = {"max_length": 128, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.1}
output = model.generate(**inputs, **gen_kwargs)
print(output)

2、InternLM 7B Chat 模型的使用方法

(1)、通过以下的代码加载 InternLM 7B Chat 模型

from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-chat-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-chat-7b", trust_remote_code=True).cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "请提供三个管理时间的建议。", history=history)
print(response)

(2)、通过前端网页对话

可以通过以下代码启动一个前端的界面来与 InternLM Chat 7B 模型进行交互

pip install streamlit==1.24.0
pip install transformers==4.30.2
streamlit run web_demo.py

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多