浪潮信息开源 源2.0 基础大模型,魔搭ModelScope社区最佳实践教程来啦!

85 阅读5分钟

引言

浪潮信息发布源2.0基础大模型,参数量包括1026亿、518亿、21亿三个大模型,从源2.0的论文上可以看到,源2.0不仅在数理逻辑、数学计算、代码生成能力上,再次超强进化,还在算法、数据、算力方面,提出了三项创新。

添加图片注释,不超过 140 字(可选)

算法方面,源2.0提出并采用了一种新型的注意力算法结构LFA(局部注意力过滤增强机制,Localized Filtering-based Attention),对于自然语言的关联语义理解更准确。

数据方面,源2.0使用中英文书籍、百科、论文等高质量中英文资料,降低了互联网语料内容占比,增加了高质量的专业数据集和逻辑推理数据集。

算力方面,源2.0采用了非均匀流水并行和优化器参数并行的分布式训练方法,显著降低了大模型对芯片间P2P带宽的需求。

GitHub开源地址:

github.com/IEIT-Yuan/Y…

ModelScope模型开源地址:

modelscope.cn/models/Yuan…

ModelScope创空间体验地址:modelscope.cn/studios/Yua…

小模型有大能量

在魔搭创空间,CPU就可以运行host Yuan2-2B-Janus-Chat模型。

Yuan2-2B-Janus-Chat模型虽然尺寸小,但是已经具备比较好的文学创作能力:

添加图片注释,不超过 140 字(可选)

常识问答能力:

添加图片注释,不超过 140 字(可选)

数学计算能力:

添加图片注释,不超过 140 字(可选)

代码能力:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

模型推理

在ModelScope社区的免费算力上可以实现Yuan2-2B-Janus-hf模型的推理

模型链接:

Yuan2-2B-Janus-hf:

modelscope.cn/models/Yuan…

推理代码:

import torch
import os
from modelscope import AutoModelForCausalLM, AutoTokenizer

print("Creat tokenizer...")
tokenizer = AutoTokenizer.from_pretrained('YuanLLM/Yuan2-2B-Janus-hf', add_eos_token=False, add_bos_token=False, eos_token='<eod>')
tokenizer.add_tokens(['<sep>', '<pad>', '<mask>', '<predict>', '<FIM_SUFFIX>', '<FIM_PREFIX>', '<FIM_MIDDLE>','<commit_before>','<commit_msg>','<commit_after>','<jupyter_start>','<jupyter_text>','<jupyter_code>','<jupyter_output>','<empty_output>'], special_tokens=True)

print("Creat model...")
model = AutoModelForCausalLM.from_pretrained('YuanLLM/Yuan2-2B-Janus-hf', device_map='auto', torch_dtype=torch.bfloat16, trust_remote_code=True)

inputs = tokenizer("请问目前最先进的机器学习算法有哪些?", return_tensors="pt")["input_ids"].to("cuda:0")
outputs = model.generate(inputs,do_sample=False,max_length=100)
print(tokenizer.decode(outputs[0]))

显存占用:

添加图片注释,不超过 140 字(可选)

模型微调

使用SWIFT对 Yuan2-2B-Janus-Chat 进行微调, 解决分类问题。

我们使用的数据集hc3-zh包含了给定问题的人类-ChatGPT回答文本对, 通过这个数据集,可以训练一个区分对应回答是来自人类还是ChatGPT的分类模型。

代码开源地址:

github.com/modelscope/…

微调脚本:

# Experimental environment: A10
# 7GB GPU memory
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model_type yuan2-janus-2b-instruct \
    --sft_type lora \
    --template_type AUTO \
    --dataset hc3-zh \
    --train_dataset_sample 20000 \
    --eval_steps 100 \
    --output_dir output \
    --num_train_epochs 1 \
    --max_length 2048 \
    --learning_rate 1e-4 \
    --use_flash_attn false \
    --save_only_model true \
    --lora_target_modules ALL \

训练过程也支持本地数据集,需要指定如下参数:

--custom_train_dataset_path xxx.jsonl \
--custom_val_dataset_path yyy.jsonl \

自定义数据集的格式可以参考:

github.com/modelscope/…

微调后推理脚本: (这里的ckpt_dir需要修改为训练生成的checkpoint文件夹)

# Experimental environment: A10
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --ckpt_dir "output/yuan2-2b-janus-instruct/vx_xxx/checkpoint-xxx" \
    --load_dataset_config true \
    --max_length 2048 \
    --use_flash_attn false \
    --max_new_tokens 2048 \
    --do_sample false \
    --merge_lora_and_save false \

微调后生成样例:

[PROMPT]Classification Task: Are the following responses from a human or from ChatGPT?
Question: 健身房器械训练一小时消耗多少卡路里?
Answer: 健身房器械训练一小时消耗的卡路里数量可能因人而异。这取决于许多因素,包括您的体重、强度、持续时间以及健身房器械本身。

一般来说,使用健身房器械训练时,您可以期望每小时消耗约 400-600 卡路里。但是,如果您的训练强度很高或者体重很大,那么您可能会消耗更多的卡路里。反之,如果您的训练强度较低或者体重较小,您可能会消耗较少的卡路里。

要准确地了解您在使用健身房器械训练时消耗的卡路里数量,最好是使用专业运动手表或追踪器来测量您的消耗量。这些设备通常可以准确地测量您的心率、持续时间以及其他因素,并使用这些信息来估算您的卡路里消耗量。
Category: Human, ChatGPT
Output:<sep>[OUTPUT]ChatGPT<eod>

[LABELS]ChatGPT
--------------------------------------------------
[PROMPT]Classification Task: Are the following responses from a human or from ChatGPT?
Question: 我有一个计算机相关的问题,请用中文回答,什么是 5.25英寸软盘
Answer: 5.25英寸软盘是便携式软盘,它被封装在一个硬质塑料壳内,塑料壳上有防尘、防接角的金属保护罩,盘体无裸露,当将此盘放入磁盘驱动器时,计算机会自动移开金属罩而读取此盘中的数据。
软盘有八寸、五又四分一寸、三寸半之分,8英寸的软盘虽然从技术原理上已经很接近现代软盘,但缺陷就是体积过大,携带很不方便,于是5.25英寸的软盘诞生了。
但是之后体积更小、容量更大的光盘的出现,宣告了软盘时代的终结。当然,现在光盘也正在被U盘(USB disk)等更现代化的存储器淘汰。
Category: Human, ChatGPT
Output:<sep>[OUTPUT]Human<eod>

[LABELS]Human

点击直达模型体验

Yuan2-2B-Janus-demo · 创空间 (modelscope.cn)