引言
浪潮信息发布源2.0基础大模型,参数量包括1026亿、518亿、21亿三个大模型,从源2.0的论文上可以看到,源2.0不仅在数理逻辑、数学计算、代码生成能力上,再次超强进化,还在算法、数据、算力方面,提出了三项创新。
算法方面,源2.0提出并采用了一种新型的注意力算法结构LFA(局部注意力过滤增强机制,Localized Filtering-based Attention),对于自然语言的关联语义理解更准确。
数据方面,源2.0使用中英文书籍、百科、论文等高质量中英文资料,降低了互联网语料内容占比,增加了高质量的专业数据集和逻辑推理数据集。
算力方面,源2.0采用了非均匀流水并行和优化器参数并行的分布式训练方法,显著降低了大模型对芯片间P2P带宽的需求。
GitHub开源地址:
https://github.com/IEIT-Yuan/Yuan-2.0
ModelScope模型开源地址:
https://modelscope.cn/models/YuanLLM/Yuan2-2B-Janus
ModelScope创空间体验地址:https://modelscope.cn/studios/YuanLLM/yuan/summary
小模型有大能量
在魔搭创空间,CPU就可以运行host Yuan2-2B-Janus-Chat模型。
Yuan2-2B-Janus-Chat模型虽然尺寸小,但是已经具备比较好的文学创作能力:
常识问答能力:
数学计算能力:
代码能力:
模型推理
在ModelScope社区的免费算力上可以实现Yuan2-2B-Janus-hf模型的推理
模型链接:
Yuan2-2B-Janus-hf:
https://modelscope.cn/models/YuanLLM/Yuan2-2B-Janus-hf/summary
推理代码:
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]))
显存占用:
模型微调
使用SWIFT对 Yuan2-2B-Janus-Chat 进行微调, 解决分类问题。
我们使用的数据集hc3-zh包含了给定问题的人类-ChatGPT回答文本对, 通过这个数据集,可以训练一个区分对应回答是来自人类还是ChatGPT的分类模型。
代码开源地址:
https://github.com/modelscope/swift
微调脚本:
# 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 \
自定义数据集的格式可以参考:
https://github.com/modelscope/swift/blob/main/docs/source/LLM/自定义与拓展.md#注册数据集的方式
微调后推理脚本: (这里的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
点击直达模型体验