1 引言
DCLM-7B是由苹果公司联合研究团队开发的一个开源AI语言模型,它基于PyTorch和OpenLM框架开发,采用decoder-only架构,上下文长度为2048,在53个自然语言理解任务上展现了出色的性能,在MMLU基准测试中的5-shot准确率达到了63.7%,显示了其强大的语言理解能力。此外,DCLM-7B的训练效率显著,使用的计算量比其他同等规模的模型要少40%。
2 环境准备
2.1 安装Ascend CANN Toolkit和Kernels
安装方法请参考安装教程或使用以下命令。
# 请替换URL为CANN版本和设备型号对应的URL
# 安装CANN Toolkit
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run
bash Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run --install
# 安装CANN Kernels
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run
bash Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run --install
# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
2.2 安装openMind Hub Client以及openMind Library
● 安装openMind Hub Client
pip install openmind_hub
● 安装openMind Library,并安装PyTorch框架及其依赖。
pip install openmind[pt]
更详细的安装信息请参考魔乐社区的环境安装章节。
3 准备模型权重,数据集和脚本
本次指南使用的模型权重,数据集和脚本由社区开发者在魔乐社区贡献:
类别 | 链接 |
权重 | DCLM-7B |
数据集 | alpaca_zh_51k |
推理脚本 | inference.py |
数据集格式转换脚本 | alpaca_converter.py |
微调脚本 | finetune.sh |
3.1 模型下载及依赖安装
通过Git从魔乐社区下载模型的repo:
# 首先保证已安装git-lfs(https://git-lfs.com)
git lfs install
git clone https://modelers.cn/AI-Research/DCLM-7B.git
# 环境依赖 python>=3.9
pip install -r DCLM-7B/examples/requirements.txt
4 模型推理
用户可以使用openMind Library进行模型推理,具体如下:
inference.py推理脚本内容:
from open_lm.hf import *
from openmind import AutoTokenizer, AutoModelForCausalLM
from openmind_hub import snapshot_download
# 若模型已下载,可替换成模型本地路径
model_dir = snapshot_download("AI-Research/DCLM-7B")
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map='npu:0')
inputs = tokenizer(["Machine learning is"], return_tensors="pt").to(model.device)
gen_kwargs = {"max_new_tokens": 50, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.1}
output = model.generate(inputs['input_ids'], **gen_kwargs)
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
print(output)
执行推理脚本:
cd DCLM-7B/examples/
python inference.py
推理结果如下:
5 模型微调
5.1 准备数据集
大语言模型微调通常使用自定义数据集进行微调。这里展示可直接运行的demo,当前仅支持如下数据集格式:
{
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
},
{
"role": "assistant",
"content": "The capital of France is Paris."
}
]
}
本指南采用社区开发者在魔乐社区贡献的alpaca_zh_51k数据集,使用Git将数据集下载至本地:
git lfs install
git clone https://modelers.cn/AI-Research/alpaca_zh_51k.git
将数据集文件 alpaca_data_51k.json 和格式转换脚本 alpaca_converter.py 放于同一路径下,运行格式转换脚本处理数据集:
python alpaca_converter.py
生成的 alpaca_converter.json 即为处理后的数据集文件。
5.2 微调
微调脚本参finetune.sh,使用以下命令进行微调:
bash finetune.sh
具体微调参数可在脚本文件finetune.sh中修改。
MODEL="AI-Research/DCLM-7B" # 模型权重,支持本地加载,可修改为本地权重路径
DATA="alpaca_converter.json" # 仅支持本地加载,填写数据集文件的本地路径
DS_CONFIG_PATH="ds_config_zero2.json" # deepspeed配置文件
USE_LORA=False # 是否启用LoRA
Q_LORA=False # 是否启用QLoRA
save_log=DCLM-7B.log # 日志保存路径
5.3 微调可视化
训练Loss可视化:
5.4 微调后推理
对微调结束后的模型重新配置微调脚本,执行推理命令:
python inference.py
微调后推理结果:
6 结语
9月21日,"openMind应用使能开发套件,加速AI社区生态汇聚"的分论坛在华为全联接大会2024举办。通过专家们的分享,得以了解魔乐社区,也了解到openMind应用使能套件在其中发挥的技术能力和未来发展。
通过本次微调的实践,更能体会到openMind套件的魅力。希望朋友们也一起试试,分享经验,一起交流。
openMind,一款应用使能开发套件,为各大模型社区提供支持,提供海量模型/数据托管能力、在线推理体验服务,同时具备模型训练、微调、评估、推理等全流程开发能力。开发者通过简单的API接口即可实现微调、推理等任务,极大缩短开发周期,助力AI技术的创新发展。目前,openMind已支持魔乐等AI生态社区。
相关链接:
[1] openMind Library介绍:https://modelers.cn/docs/zh/openmind-library/overview.html
[2] openMind Hub Client介绍:https://modelers.cn/docs/zh/openmind-hub-client/overview.html
[3] 一文教你10分钟体验魔乐社区:https://modelers.cn/docs/zh/community/quick_start.html