DeepSeek简介
DeepSeek 是一个基于 Transformer 架构的大型语言模型(LLM),由深度求索(DeepSeek)公司开发。它能够处理自然语言理解、生成、翻译、问答等多种任务。DeepSeek-R1 在后训练阶段大规模使用了强化学习技术,在仅有极少标注数据的情况下,极大提升了模型推理能力。在数学、代码、自然语言推理等任务上,性能比肩 OpenAI o1 正式版。
DeepSeek公司在开源 DeepSeek-R1-Zero 和 DeepSeek-R1 两个参数量超过660B 模型的同时,通过 DeepSeek-R1 的输出,蒸馏了 6 个小模型开源给社区,其中32B和70B模型在多项能力上实现了对标 OpenAI o1-mini 的效果。
模型微调简介
大语言模型微调技术通过调整预训练模型参数,使其适应特定任务需求。其核心价值在于让通用的人工智能工具变得更“专业”和“实用”,就像把一个会做各种菜的厨师培训成专精川菜的大厨。它能让企业用较低成本获得适合自身需求的AI能力,例如:
1.降低成本:无需从头训练昂贵的大模型,只需在现有通用模型基础上“补充学习”企业内部的业务知识、行业术语,就能快速打造专属AI助手,成本大幅降低。
2.精准解决问题:通用AI可能懂诗词绘画,但不懂医疗诊断或法律合同。通过微调,AI能深度掌握特定领域的专业知识,例如快速分析病历、自动生成符合行业规范的报告。
3.保护数据隐私:企业可将内部数据安全地用于微调,既让AI掌握核心业务知识,又避免敏感数据直接暴露在公共模型中。
4.推动普惠应用:中小型企业也能通过这项技术享受AI红利,例如教育机构定制学习辅导AI,工厂打造设备维护专家系统,真正让AI进入百行千业。
在下文中,我们将采用两个具体实践案例来说明模型微调的实际效果:
1.基于天翼云文档数据的微调。利用企业自身的文档数据构建微调数据集,仅使用单台多GPU卡的云主机即可完成模型微调训练。经过微调后的模型能够在企业内部知识领域提供准确的回答。
2.基于医学计算数据的微调。利用医学领域的专业知识数据构建微调数据集,仅使用单台多GPU卡的云主机即可完成模型微调训练。经过微调后的模型能够在识别与分析病例时取得更高的计算准确度。
快速微调DeepSeek
LLaMA-Factory是一个开源项目,旨在为用户提供简便的方式来训练和部署大型语言模型(LLM)。这里,我们以蒸馏小模型DeepSeek-R1-Distill-Qwen-7B模型为例,讲解如何在天翼云使用LLaMA-Factory运行与微调 DeepSeek模型,读者可以根据自己实际需求选择模型和云主机配置。
步骤一:创建GPU云主机
1.进入创建云主机页面。
a.点击天翼云门户首页的“控制中心”,输入登录的用户名和密码,进入控制中心页面。
b.单击“服务列表>弹性云主机”,进入主机列表页。
c.单击“创建云主机”,进入弹性云主机创建页。
2.进行基础配置
a.根据业务需求配置“计费模式”、“地域”、“企业项目”、“虚拟私有云”、“实例名称”、“主机名称”等。
b.选择规格。此处选择"CPU架构"为"X86"、"分类"为"GPU型"、"规格族"为"GPU计算加速型pi7"、"规格"为"pi7.4xlarge.4"。
注意本案例仅做微调流程演示,选择的机型规格仅支持7B模型的少量数据微调,如果您的数据量较大,请选择显存更高的机型规格。
c.选择镜像。“镜像类型”选择“镜像市场”,在云镜像市场中选择预置了DeepSeek-R1-Distill-Qwen-7B模型的DeepSeek-LlamaFactory-Ubuntu22.04镜像。
3.网络及高级配置
设置网络,包括"网卡"、"安全组",同时配备 "弹性IP" 用于下载和访问模型;设置高级配置,包括"登录方式"、"云主机组"、"用户数据"。注意安全组需要放行22端口(用于ssh)和7860端口(用于访问web页面)。
4.确认并支付
步骤二:微调DeepSeek模型
1.启动LLaMA-Factory服务
在完成云主机开通后,即可通过ssh连接到到云主机命令行。模型及LLaMA-Factory服务均已放置在/root目录下,且已完成配套环境安装,可直接运行。
# 进入目录
cd /root/LLaMA-Factory
# 启动webui服务 (也可通过nohup放到后台启动)
llamafactory-cli webui
在成功启动LLaMA-Factory服务后,您将可以通过 http://{公网ip地址}:7860/ 访问到相关页面。
# 访问服务
http://{公网ip地址}:7860/
2.配置基础大模型和微调方法
在成功进入LLaMA-Factory页面后,您首先需要按照如图的内容进行页面语言,模型名称和模型路径的设置。注意模型预置在/root/DeepSeek-R1-Distill-Qwen-7B目录下。
3.配置微调数据集
在Train页面内,您需要配置用于微调训练的数据集。镜像内预置了alpaca格式的天翼云示例数据,您也可参考示例数据修改/root/LLaMA-Factory/data/目录下的alpaca_zh_ctyun.json(微调数据集)和dataset_info.json(数据集信息)两个文件,改用您自己的私有数据。
镜像内置两份数据集,单条内容示例如下:
data/alpaca_zh_ctyun.json(天翼云文档数据集)
{
"instruction": "天翼云的通用型弹性云主机有哪些规格?",
"input": "",
"output": "<think>用户询问通用型云主机规格,首先需要明确通用型的定位是平衡计算和内存资源。根据产品文档,通用型以s7系列为代表,应当列举不同后缀规格及其配置差异,最后补充适用场景说明。</think>\n通用型弹性云主机有多个规格,例如s7.small、s7.medium、s7.large、s7.xlarge等,每种规格提供不同的vCPU和内存配置,适合多种业务场景。"
}
data/alpaca_en_medcalc_bench_max2k.json(医学计算数据集MedCalc-Bench)
{
"instruction": "A 16-year-old female adolescent was referred to our hospital with severe hypertension (systolic pressure 178 mmHg), which was first detected 7 months prior to presentation during a routine annual physical ...",
"input": "What is the patient's Creatinine Clearance using the Cockroft-Gault Equation in terms of mL/min? You should use the patient's adjusted body weight in kg instead of the patient's actual body weight if the patient is ...",
"output": "<think>The formula for computing Cockcroft-Gault is given by CrCl = ((140 - age) * adjusted weight * (gender_coefficient)) / (serum creatinine * 72), where the gender_coefficient is 1 if male, and 0.85 if female..."
}
4.配置相关训练参数
在Train页面内,还有大量可修改的微调训练参数。如果您对他们还不够了解,可暂时不进行修改。其中,训练轮数与样本量级关联性较大,如果您的微调数据量很少,则可能需要设置较大的训练轮数,才能有效果。
5.启动微调训练
点击最下方的开始按钮,即可基于上面选择的基础模型和微调数据集,启动模型微调训练。页面下方会显示实时的训练进度,训练日志和loss变化情况。
如果您的训练样本较多,单张A10显卡的24G显存很容易因为无法承载,而导致报错"CUDA out of memory"。此时,您需要将云主机变配到显存更大的机型规格,并开启DeepSpeed stage3进行模型参数分片,如下图所示。
同时,您还需要修改默认DeepSpeed配置中的部分参数,以保证训练正常进行。修改/root/LLaMA-Factory/cache/ds_z3_config.json中的如下内容:
"zero_optimization": {
"stage": 3,
"overlap_comm": true,
"contiguous_gradients": true,
"sub_group_size": 1e9,
"reduce_bucket_size": "auto",
"stage3_prefetch_bucket_size": "auto",
"stage3_param_persistence_threshold": "auto",
"stage3_max_live_parameters": 1e4, //降低该参数以减少显存占用
"stage3_max_reuse_distance": 1e4, //降低该参数以减少显存占用
"stage3_gather_16bit_weights_on_model_save": true
}
步骤三:测试模型微调效果
LLaMA-Factory框架提供了模型推理的能力,可直接进入Chat页面加载模型进行对话。
1.测试基础大模型效果
保持模型名称和模型路径不变,不设置检查点路径,在Chat页面直接点击加载模型,即可测试基础大模型的效果。
本案例使用prompt="天翼云弹性云主机包含哪些规格"进行测试。
基础DeepSeek-R1-Distill-Qwen-7B大模型给出了通用但是错误的回答。
2.测试微调大模型的效果
本案例采用了lora的微调方法,因此需将检查点路径设置为步骤二中完成训练的lora小模型。
本案例使用prompt="天翼云弹性云主机包含哪些规格"进行测试。
微调后的大模型能够给出符合微调数据集的回答。
从纯净版ubuntu系统构建微调环境
除了使用预装镜像外, 您也可以从任意ubuntu云主机开始, 按以下步骤搭建出LLaMA-Factory微调环境, 并下载任意您需要的模型。
步骤一:安装Nvidia显卡驱动与CUDA库
# 安装nvidia显卡驱动(如已选择带驱动镜像,则忽略)
apt update
apt install ubuntu-drivers-common alsa-utils
# 查看推荐的驱动版本
ubuntu-drivers devices
# 安装推荐版本
apt install nvidia-driver-550
# 重启一次云主机
reboot
# 安装cuda-12.2
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
# 注意取消对nvidia driver的安装
sh cuda_12.2.0_535.54.03_linux.run
# 安装完成后在~/.bashrc中写入环境变量
# 添加CUDA可执行文件路径
export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}
# 添加CUDA库文件路径
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 使环境变量生效
source ~/.bashrc
步骤二:安装git与下载模型
# 安装git和lfs
apt update
apt install git
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
apt install git-lfs
git lfs install
# 下载模型
# 国内用modelscope源速度最快
git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git
# 清理掉不用的.git目录下lfs大文件版本数据(能节省一半存储空间)
git lfs prune -f
步骤三:安装LLaMA-Factory及相关训练环境
# 安装miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 下载完成后手动安装
sh Miniconda3-[版本号]-Linux-x86_64.sh
# 使环境变量生效
source ~/.bashrc
# 安装LLaMA-Factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]" -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install deepspeed -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flash-attn --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple
返回DeepSeek专区导航。