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

推理结果如下:

DCLM-7B PyTorch模型微调入门实战_docs

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可视化:

DCLM-7B PyTorch模型微调入门实战_docs_02

5.4 微调后推理

对微调结束后的模型重新配置微调脚本,执行推理命令:

python inference.py

微调后推理结果:

DCLM-7B PyTorch模型微调入门实战_docs_03

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