Skip to content

最佳实践

以下内容主要介绍通过容器实例、模型部署和分布式训练三种方式对LLaMA大语言模型进行调优、训练和部署。

一、容器实例

1.资源准备

创建容器实例,其中关键参数配置如下: 实例规格选择:1GB显存的A800(A800-80G*1 镜像选择:官方镜像pytorch:2.1.1-cuda12.1-cudnn8-ssh(镜像地址: registry.nervhub.nervstack.io/pytorch/pytorch:2.1.1-cuda12.1-cudnn8-runtime

挂载代码和数据集

名称下载方式
数据集https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama_factory/data.zip
代码git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
模型文件https://www.modelscope.cn/models/FlagAlpha/Llama3-Chinese-8B-Instruct/files
预览

2.准备环境

实例创建后,待实例变为运行中,点击“进入实例”:

预览

1.进入实例,开始准备所需环境:

shell
pip uninstall -y vllm
pip install llamafactory[metrics]==0.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.检查是否安装成功

运行如下命令,如果显示llamafactory-cli的版本,则表示安装成功 llamafactory-cli version

预览

3.将下载的代码和数据集上传到对象存储或直接进入实例后下载

3.模型微调

3.1 启动webui

shell
cd /mnt/workspace/LLaMA-Factory
mv data rawdata && unzip ../dataset/data.zip -d data
export USE_MODELSCOPE_HUB=1 && \
llamafactory-cli webui

单击返回的URL地址http://0.0.0.0:7860 ,进入Web UI界面。

3.2 配置模型参数

预览
预览
区域参数建议取值说明
语言zh
模型名称LLaMA3-8B-Chat
微调方法lora使用LoRA轻量化微调方法能在很大程度上节约显存。
数据集train选择数据集后,可以单击预览数据集查看数据集详情。
学习率1e-4有利于模型拟合。
计算类型bf16如果显卡为V100,建议计算类型选择fp16;如果为A10,建议选择bf16。
梯度累计2有利于模型拟合。
模型路径本地模型路径若上传了模型文件,建议指定本地路径
LoRA+学习率比例16相比LoRA,LoRA+续写效果更好。
LoRA作用模块allall表示将LoRA层挂载到模型的所有线性层上,提高拟合效果。

3.3 启动微调

1.将输出目录修改为train_llama3,训练后的LoRA权重将会保存在此目录中。 2.单击预览命令,可展示所有已配置的参数。如果您希望通过代码进行微调,可以复制这段命令,在命令行运行。

3.单击开始,启动模型微调。 启动微调后需要等待大约20分钟,待模型下载完毕后,可在界面观察到训练进度和损失曲线。当显示训练完毕时,代表模型微调成功。

预览

3.4 模型评估

预览

1.模型微调完成后,单击页面顶部的刷新适配器,然后单击适配器路径,选择下拉列表中的train_llama3,在模型启动时即可加载微调结果。

2.在Evaluate&Predict页签中,数据集选择eval(验证集)评估模型,并将输出目录修改为eval_llama3,模型评估结果将会保存在该目录中。

3.单击开始,启动模型评估。

模型评估大约需要5分钟,评估完成后会在界面上显示验证集的分数。其中,ROUGE分数衡量了模型输出答案(predict)和验证集中的标准答案(label)的相似度,ROUGE分数越高代表模型学习得越好。

预览

3.5 导出模型

设置检查点路径,选择导出目录,导出完成将模型拷贝到oss,用于模型部署

预览

3.6 保存镜像

1.操作栏点击制作镜像,方便后续部署模型

预览
预览

2.镜像保存成功后进入自定义镜像,修改镜像使用模块并保存

预览
预览

二、模型部署

2.1开始部署

部署模型服务,其中关键参数配置如下:

部署方式:镜像部署AI-WEB应用

web端口号、端口号:7860

实例规格选择:1GB显存的A800(A800-80G*1)

镜像选择:自定义镜像,使用容器实例保存的镜像(llama3)

代码上传

预览

执行命令

shell
cd /code/LLaMA-Factory
export USE_MODELSCOPE_HUB=1 && \
llamafactory-cli webui

2.2打开webUI

待模型服务进入运行中状态,点击“调用信息”

预览

复制web地址到浏览器打开: https://model-web-xxx.com

选择模型名称,输入模型路径加载模型,开始聊天

预览

三、分布式训练

3.1 开始新建

实例规格选择:1GB显存的A800(A800-80G*1) 镜像选择:自定义镜像,使用容器实例保存的镜像(llama3) 代码上传:挂载模型和代码等文件

预览

执行命令

shell
cd /code/LLaMA-Factory
export USE_MODELSCOPE_HUB=1 && llamafactory-cli train \
    --stage sft \
    --do_train True \
    --model_name_or_path /code/LLM-Research/Meta-Llama-3-8B-Instruct/ \
    --preprocessing_num_workers 16 \
    --finetuning_type lora \
    --quantization_method bitsandbytes \
    --template llama3 \
    --flash_attn auto \
    --dataset_dir data \
    --dataset train \
    --cutoff_len 1024 \
    --learning_rate 5e-05 \
    --num_train_epochs 3.0 \
    --max_samples 100000 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --max_grad_norm 1.0 \
    --logging_steps 5 \
    --save_steps 100 \
    --warmup_steps 0 \
    --optim adamw_torch \
    --packing False \
    --report_to none \
    --output_dir saves/output/train2 \
    --bf16 True \
    --plot_loss True \
    --ddp_timeout 180000000 \
    --include_num_input_tokens_seen True \
    --lora_rank 8 \
    --lora_alpha 16 \
    --lora_dropout 0 \
    --lora_target all

3.2 查看输出

执行完成后,在对象存储查看输出结果

预览