导读
1月17日,上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书生·浦语2.0(InternLM2),模型开源可商用,魔搭社区作为首发平台,支持大家第一时间下载体验。
InternLM2 的核心理念在于回归语言建模的本质,致力于通过提高语料质量及信息密度,实现模型基座语言建模能力获得质的提升,进而在数理、代码、对话、创作等各方面都取得长足进步,综合性能达到同量级开源模型的领先水平。
InternLM2是在2.6万亿token的高质量语料上训练得到的。沿袭第一代书生·浦语(InternLM)的设定,InternLM2包含7B及20B两种参数规格及基座、对话等版本,满足不同复杂应用场景需求,分别是:
-
Internlm2-base: 高质量和具有很强可塑性的模型基座,是模型进行深度领域适配的高质量起点;
-
Internlm2: 在internlm2-base基础上,在多个能力方向进行了强化,在评测中成绩优异,同时保持了很好的通用语言能力,是我们推荐的在大部分应用中考虑选用的优秀基座;
-
Internlm2-sft:在Base基础上,进行有监督的人类对齐训练;
-
Internlm2-chat:在internlm2-sft基础上,经过RLHF,面向对话交互进行了优化,具有很好的指令遵循、共情聊天和调用工具等的能力。
InternLM2 的基础模型具备以下的技术特点:
-
有效支持20万字超长上下文:模型在20万字长输入中几乎完美地实现长文“大海捞针”,而且在 LongBench 和 L-Eval 等长文任务中的表现也达到开源模型中的领先水平。
添加图片注释,不超过 140 字(可选)
InternLM2准确总结“联合国2023年10月2日召开的联合国贸易和发展会议会议记录”
-
综合性能全面提升:各能力维度相比上一代模型全面进步,在推理、数学、代码等方面的能力提升显著。
添加图片注释,不超过 140 字(可选)
InternLM2设计的课程大纲精准遵循用户要求(比如格式、数量、内容等)
添加图片注释,不超过 140 字(可选)
InternLM2能够在对话中与用户“共情”
添加图片注释,不超过 140 字(可选)
InternLM2在100以内的简单数学运算上能够做到接近100%的准确率
添加图片注释,不超过 140 字(可选)
InternLM2能够完成积分求解等高等数学题目
魔搭社区围绕InternLM2推出了一站式最佳实践教程,提前跑通模型的部署、推理和微调流程,供各开发者们参考。
模型链接和下载
书⽣·浦语2.0(InternLM2)系列模型现已在魔搭ModelScope社区开源,包括:
书生·浦语2-7B:www.modelscope.cn/models/Shan…
书生·浦语2-对话-7B:www.modelscope.cn/models/Shan…
书生·浦语2-基座-7B:www.modelscope.cn/models/Shan…
书生·浦语2-对话-7B-SFT:www.modelscope.cn/models/Shan…
书生·浦语2-基座-20B:www.modelscope.cn/models/Shan…
书生·浦语2-20B:www.modelscope.cn/models/Shan…
书生·浦语2-对话-20B:www.modelscope.cn/models/Shan…
书生·浦语2-对话-20B-SFT:www.modelscope.cn/models/Shan…
社区支持直接下载模型的repo:
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm2-7b')
模型推理
推理代码:
以internlm2-chat-7b为例,模型推理代码:
from modelscope import snapshot_download, AutoTokenizer, AutoModelForCausalLM
import torch
model_dir = snapshot_download("Shanghai_AI_Laboratory/internlm2-chat-7b")
tokenizer = AutoTokenizer.from_pretrained(model_dir, device_map="auto", trust_remote_code=True)
# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and might cause OOM Error.
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, torch_dtype=torch.float16)
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
# Hello! How can I help you today?
response, history = model.chat(tokenizer, "请给我3个时间管理的建议", history=history)
print(response)
模型流式推理代码:
from modelscope import snapshot_download, AutoTokenizer, AutoModelForCausalLM
import torch
model_dir = snapshot_download("Shanghai_AI_Laboratory/internlm2-chat-7b")
tokenizer = AutoTokenizer.from_pretrained(model_dir, device_map="auto", trust_remote_code=True)
# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and might cause OOM Error.
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, torch_dtype=torch.float16)
model = model.eval()
length = 0
for response, history in model.stream_chat(tokenizer, "你好", history=[]):
print(response[length:], flush=True, end="")
length = len(response)
资源消耗:
添加图片注释,不超过 140 字(可选)
模型微调和微调后推理
微调代码开源地址:
我们使用dureader-robust-zh数据集进行微调,对应的任务是根据上下文和答案来生成对应的问题.
环境准备:
# 安装ms-swift
git clone https://github.com/modelscope/swift.git
cd swift
pip install -e .[llm]
微调脚本:
# Experimental environment: A10
# 22GB GPU memory
CUDA_VISIBLE_DEVICES=0 \
swift sft \
--model_type internlm2-7b-sft-chat \
--model_revision master \
--sft_type lora \
--tuner_backend swift \
--template_type AUTO \
--dtype AUTO \
--output_dir output \
--ddp_backend nccl \
--dataset dureader-robust-zh \
--train_dataset_sample 20000 \
--num_train_epochs 1 \
--max_length 2048 \
--system 'You are a helpful assistant.' \
--check_dataset_strategy warning \
--lora_rank 8 \
--lora_alpha 32 \
--lora_dropout_p 0.05 \
--lora_target_modules DEFAULT \
--gradient_checkpointing true \
--batch_size 1 \
--weight_decay 0.01 \
--learning_rate 1e-4 \
--gradient_accumulation_steps 16 \
--max_grad_norm 0.5 \
--warmup_ratio 0.03 \
--eval_steps 100 \
--save_steps 100 \
--save_total_limit 2 \
--logging_steps 10 \
--neftune_noise_alpha 5 \
--use_flash_attn false \
训练过程也支持本地数据集,需要指定如下参数:
--custom_train_dataset_path xxx.jsonl \
--custom_val_dataset_path yyy.jsonl \
自定义数据集的格式可以参考:
微调后推理脚本: (这里的ckpt_dir需要修改为训练生成的checkpoint文件夹)
# Experimental environment: A10
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--ckpt_dir "output/internlm2-7b-sft-chat/vx_xxx/checkpoint-xxx" \
--load_dataset_config true \
--max_length 2048 \
--max_new_tokens 2048 \
--temperature 0.5 \
--top_p 0.7 \
--repetition_penalty 1. \
--stream false \
--do_sample true \
--merge_lora_and_save false \
训练loss可视化:
添加图片注释,不超过 140 字(可选)
微调后生成样例:
[PROMPT] <s> [UNUSED_TOKEN_146]system
You are a helpful assistant.[UNUSED_TOKEN_145]
[UNUSED_TOKEN_146]user
Task: Question Generation
Context: 我个人感觉是吕颂贤版,剧情和原著差别不大,虽然TVB演员颜值和风光没有大陆的好。但是香港特区人口和地域的限制,只能注重在演员的演技方面发挥很出色,楼主看过大陆排《笑傲江湖》吧!在台词上表现的很生硬没有香港的注重神色配台词,比如杜燕歌把吕颂贤表情和性格几乎和原著差别不大。武打几乎沿用徐克和程小东动作的风格很注重实际技巧,没有大陆版的在武打场面依靠电脑特效表现的太夸张了。李亚鹏版的武打动作和导演还是香港的元彬,大陆毕竟还是在武侠剧起步的比较晚,主要是还是靠明星大腕压阵而香港却是恰恰相反。
Answer: 吕颂贤版
Question:[UNUSED_TOKEN_145]
[UNUSED_TOKEN_146]assistant
[OUTPUT]笑傲江湖哪个版本最好看[UNUSED_TOKEN_145]
[LABELS]笑傲江湖哪个版本好看
--------------------------------------------------
[PROMPT] <s> [UNUSED_TOKEN_146]system
You are a helpful assistant.[UNUSED_TOKEN_145]
[UNUSED_TOKEN_146]user
Task: Question Generation
Context: 防水作为目前高端手机的标配,特别是苹果也支持防水之后,国产大多数高端旗舰手机都已经支持防水。虽然我们真的不会故意把手机放入水中,但是有了防水之后,用户心里会多一重安全感。那么近日最为火热的小米6防水吗?小米6的防水级别又是多少呢? 小编查询了很多资料发现,小米6确实是防水的,但是为了保持低调,同时为了不被别人说防水等级不够,很多资料都没有标注小米是否防水。根据评测资料显示,小米6是支持IP68级的防水,是绝对能够满足日常生活中的防水需求的。
Answer: IP68级
Question:[UNUSED_TOKEN_145]
[UNUSED_TOKEN_146]assistant
[OUTPUT]小米6防水级别[UNUSED_TOKEN_145]
[LABELS]小米6防水等级
点击直达书生·浦语2.0开源模型列表