当前位置: 首页 > article >正文

LLaMA-Factory全流程训练模型

 

🤗本文主要讲述在docker下使用LLaMA-Factory训练推理模型。

🫡拉取镜像

首先需要启动docker,然后在终端中输入:

docker run -tid --gpus all -p 8000:8000 --name LLM -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --privileged=true ubuntu:20.04
  • 这个命令启动了一个 Ubuntu 20.04 容器,使用所有可用的 GPU
  • 主机的 8000 端口映射到容器的 8000 端口
  • 容器命名为 LLM,以特权模式运行容器

进入容器 

docker exec -it LLM /bin/bash

 

🥰但现在还不行,我们只将GPU映射到了docker里,还没有安装驱动。

wget  https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda_12.6.2_560.35.03_linux.run

然后运行程序

sh cuda_12.6.2_560.35.03_linux.run

随后会生成一些指引,默认安装就行。

root@82c2f2b69781:/home# ls /usr/local/ | grep cuda
cuda
cuda-12.6
root@82c2f2b69781:/home# nvcc -V
bash: nvcc: command not found
  • 这说明系统的 PATH 环境变量没有包含 /usr/local/cuda-12.6/bin
编辑环境变量
vim ~/.bashrc    
加入下面两行:
export PATH=/usr/local/cuda-12.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
然后重新运行一下就生效了:
source ~/.bashrc

 验证成功 ~

root@82c2f2b69781:/home# echo $PATH
/usr/local/cuda-12.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  

🤗docker内安装python

docker拉取的Ubuntu20.04没有任何配置,比如wget等命令需要自己通过apt-get install 安装

Index of /ftp/python/3.10.6/ 这是python源码包的地址(3.10.6为例)

wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
tar -zxvf Python-3.10.6.tgz
cd Python-3.10.6
sudo ./configure      
# configure 脚本会检查系统环境,并生成 Makefile 文件,以便后续的 make 命令可以正确编译源代码

🤗最后一步:

sudo make
sudo make test
sudo make install

💥LLaMA-Factory

💫安装

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

如果使用昇腾NPU的话,先设置一下环境变量:

export ASCEND_HOME_PATH=/usr/local/Ascend/ascend-toolkit/latest

 💫下载模型

git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen2.5-1.5B-Instruct.git

 💫我们在 LLaMA-Factory/examples下创建 train.yaml 文件,这是微调训练模型的配置文件

### model
model_name_or_path: /home/Qwen/Qwen2___5-1___5B-Instruct
### method
stage: sft
do_train: true
finetuning_type: freeze
# lora_target: all

dataset: alpaca_zh_demo
template: qwen
cutoff_len: 10240
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: output
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 2
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

💫使用vim写好后,我们使用 LLaMA-Factory/data/ alpaca_zh_demo.json这个数据集

  •  instruction 部分描述了任务的具体指令。
  • input 部分通常包含任务所需的输入数据或信息。
  • output 部分是模型的输出。

 💫开始微调训练

llamafactory-cli train examples/train.yaml

🕛️🕧️🕐️🕜️🕑️🕝️🕒️🕞️🕓️ 

  • loss :模型在当前批次上的预测结果与实际标签之间的差异。

  • grad_norm:模型参数梯度的范数,反映梯度的大小,用于监控梯度爆炸或梯度消失的问题。

  • learning_rate:学习率是优化器在更新模型参数时使用的步长。

  • epoch:整个训练数据集被模型完整遍历的次数,一个 epoch 包含多个批次(batch)。

训练指标总结

***** train metrics *****
  epoch                    =        3.0
  total_flos               =  2906404GF
  train_loss               =     1.0846
  train_runtime            = 0:04:15.80
  train_samples_per_second =     10.555
  train_steps_per_second   =      5.277
  • epoch: 训练的总轮次(3.0 个 epoch)。

  • total_flos: 训练过程中总共计算的浮点运算次数(2906404 亿次浮点运算)。

  • train_loss: 训练过程中的平均损失值(1.0846)。

  • train_runtime: 训练总共花费的时间(4 分 15.80 秒)。

  • train_samples_per_second: 每秒处理的样本数(10.555 个样本/秒)。

  • train_steps_per_second: 每秒处理的批次数(5.277 个批次/秒)。

💫 训练结束 ~

  • 这是模型微调后产生的输出文件,包含了训练过程中生成的各种配置、权重、日志和结果 

💯这时我们可以加载这个训练后的模型权重来对话:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 我们的模型输出路径
model_name_or_path = "/home/LLaMA-Factory/output"
model = AutoModelForCausalLM.from_pretrained(model_name_or_path)
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)

device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)


prompt = "列出一个应该在野营应急包中的7件物品。"


inputs = tokenizer(prompt, return_tensors="pt").to(device)

with torch.no_grad():
    outputs = model.generate(inputs.input_ids, max_length=50)

response = tokenizer.decode(outputs[0], skip_special_tokens=True)

print(response)

💦输出:

💯评估 

Llamafactory 支持mmlu、cmmlu、ceval三种数据集验证。

llamafactory-cli eval --task mmlu --model_name_or_path /home/Qwen/Qwen2___5-1___5B-Instruct --template qwen  --batch_size 1 –n_shot 5

💯推理 

我们在LLaMA-Factory/examples 目录下新建一个 infer.yaml 文件进行推理,内容:

model_name_or_path: /home/Qwen/Qwen2___5-1___5B-Instruct
template: qwen    
do_sample: false                                                                                 

运行:

 llamafactory-cli chat infer.yaml


http://www.kler.cn/a/389789.html

相关文章:

  • 通过idea创建的springmvc工程需要的配置
  • 【蜂巢——方向,数学】
  • OpenVela——专为AIoT领域打造的开源操作系统
  • 基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)
  • Sentinel配置流控规则详解
  • 光伏储能电解水制氢仿真模型Matlab/Simulink
  • Flink输出算子
  • Tcp中的流量控制,拥塞控制,超时重传时间的选择,都附带相应例子说明
  • OBOO鸥柏:公司品牌部分户外广告一体机已布局文化传媒市场
  • Spring Boot集成Access DB实现数据导入和解析
  • Rust生成随机值实战应用
  • http的发展史
  • Spring Boot与工程认证:计算机课程管理的现代化
  • 【ET8框架进阶】HybridCLR打包丢失元方法问题MissingMethodException:生成LinkXml增加元方法
  • 车间管理|基于SprinBoot+vue工厂车间管理系统设计与实现(源码+数据库+文档)
  • Chromium 中chrome.contextMenus扩展接口定义c++
  • QT模态对话框和非模态对话框区别以及常用标准对话框
  • 【QT】Qt网络
  • 【CSS】什么是BFC?
  • 2.5_XXE(XML外部实体注入)
  • 杨辉三角-一维数组与二维数组解法
  • 图片搜索引擎,来快速实现一个高性能的本地图片搜索引擎
  • Ansys EMC Plus:以 Touchstone 格式计算和导出 S 参数
  • Web3推动社交媒体的去中心化转型:挑战与机遇
  • FFmpeg —— 通过AES-CTR方式对视频加密解密(详细介绍通过FFmpeg指令、代码方式进行加密解码,附源码)
  • Information Server 中共享开源服务中 kafka 的__consumer_offsets目录过大清理