当前位置:AIGC资讯 > AIGC > 正文

服务器部署llama3 并利用LLaMA-Factory实现微调

llama3的编译环境要求:

需要的软件,硬件资源:

python=3.11 pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.2

第一步下载需要的python版本

1.下载3.11.4python

wget https://www.python.org/ftp/python/3.10.0/Python-3.11.4.tgz https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz

2.使用tar命令解压

tar -xvf Python-3.11.4.tgz

3. 安装 准备编译环境,执行如下命令:

yum -y install make gcc epel-release zlib-devel openssl-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-devel tk-devel xz-devel cd Python-3.11.4 ./configure --prefix=/usr/local make sudo make install

4.添加软连接

ln -s /usr/local/tools/Python-3.7.12/bin/python3.7 /usr/bin/python3

可使用命令ls -l /usr/bin/查看软连接是否已创建成功

第二步创建虚拟环境

python3.11 -m venv envsllamav3

激活Python虚拟环境

source ~/envsllamav3/bin/activate

第三步安装依赖

安装cuda

输入 nvidia-smi 查看需要下载的cuda版

llama支持的最低cuda版本为11.6,因此需要更新cuda版本。

1.下载cuda驱动

官网地址:下载最新官方 NVIDIA 驱动

选择

llama3的编译环境要求:

需要的软件,硬件资源:

python=3.11 pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.2

第一步下载需要的python版本

1.下载3.11.4python

 

wget https://www.python.org/ftp/python/3.10.0/Python-3.11.4.tgz https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz

2.使用tar命令解压

 

tar -xvf Python-3.11.4.tgz

3. 安装 准备编译环境,执行如下命令:

 

yum -y install make gcc epel-release zlib-devel openssl-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-devel tk-devel xz-devel cd Python-3.11.4 ./configure --prefix=/usr/local make sudo make install

4.添加软连接

 

ln -s /usr/local/tools/Python-3.7.12/bin/python3.7 /usr/bin/python3

可使用命令ls -l /usr/bin/查看软连接是否已创建成功

第二步创建虚拟环境

 

python3.11 -m venv envsllamav3

激活Python虚拟环境

 

source ~/envsllamav3/bin/activate

第三步安装依赖

安装cuda

输入 nvidia-smi 查看需要下载的cuda版本

llama支持的最低cuda版本为11.6,因此需要更新cuda版本。

1.下载cuda驱动

官网地址:下载最新官方 NVIDIA 驱动

选择

查找相关驱动并下载

2.去官网下载对应版本

https://developer.nvidia.com/cuda-12-2-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=CentOS&target_version=7&target_type=runfile_local

选择型号后复制蓝色的命令执行

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run sudo sh cuda_12.2.0_535.54.03_linux.run

accept后

去掉勾选driver,install

安装完成后修改环境变量

vim ~/.bashrc

输入

export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后保存退出

:wq

最后

source ~/.bashrc

然后执行

nvcc --version

查看cuda版本显示

cuda下载完成

第四步下载微调框架LLaMA-Factory

LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory

下载LLaMA-Factory框架和相关依赖

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

这个依赖会下很久推荐使用清华镜像源下载

  再微调之前需要下载modescope 请不要下载1.15版本的会出下下载异常

pip install modelscope==1.17

  可视化微调

llamafactory-cli webui export USE_MODELSCOPE_HUB=1 //选择从modelscope中下载模型

  执行命令后如图:会出现登录的端口号7860

  第五步模型微调

  登录页面后显示:/root/liujingjing11/Meta-Llama-3.1-70B-Instruct

  具体参数说明:

参数 说明 参数 说明 Lang 语言选择(en英语 zh中文) Model name 微调的模型 Finetuning method 微调方法(full 全模型微调freeze冻结层微调 lora层冻结微调) checkpoint path 是否保存检查点 stage 训练阶段Supervised Fine-Tuning(监督微调), Reward Modeling(奖励建模)PPO(旨在提高训练效率并实现稳定性)DPO是一种优化算法,用于保护数据隐私。 Pre-Training(预训练) dataset 选择数据集(preview dataset可以预览数据集) learning rate 学习率一般而言越大 越容易收敛,但很难找到最优解;而学习率小则收敛的速度慢。根据数据集选择合适的学习率。1000条数据建议学习率设置为1e-4 epochs 一个 epoch 是一次完整的训练数据集,通过模型进行前向传播和反向传播的过程。 Maximum gradient norm 最大梯度范数用于对梯度进行裁剪,限制梯度的大小,以防止梯度爆炸(梯度过大)的问题。一般设置1-5范围,其中1通常用于对梯度进行相对较小的裁剪,3到5:用于对梯度进行中等程度的裁剪,适用于一般深度学习模型的训练。 Compute type FP16,BF16,FP32 V100是无法使用bf16精度的,只能使用fp16。 cutoff_len 用于控制输入文本的截断长度。当输入文本的长度超过 cutoff_len 时,模型会截取前 cutoff_len 个字符或标记 Batch size 一次训练的样本数 Gradient accumulation 就是将多次计算得到的梯度值进行累加,然后一次性进行参数更新。 Val size 验证集尺寸 LR scheduler 学习率调节器。动态调整学习率,从而找到最优解。常见的有cosine,linear

  配置完参数后选择结果输出路径,然后点击start即可。

  如果下载的模型经常报错文件找不到,推荐在魔塔社区手动下载好模型后,用本地模型训练。

  模型训练:

  损失函数:

  Q&A

  期间遇到很多版本匹配的问题

  1.其中因为centos系统中自带python2.7版本支持的依赖并不能支持python3.7以上的版本,导致以上配置中yum -y install make gcc epel-release zlib-devel openssl-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-devel tk-devel xz-devel 下载的依赖包默认下载了python2.7的依赖,从而python3.11中需要的包很多都不能导入。

  其中openssl包一直报没有相关模块,而openssl包主要和下载一些依赖有关系。

  报错:ModuleNotFoundError: No module named 'openssl'

  这时需要去下载最新的openssl-3.1.4包解压安装进centos系统中。步骤

  1.安装相关依赖

yum group install 'Development Tools' yum -y install zlib-devel zlib perl* yum -y install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl openssl-devel xz xz-devel libffi-devel libuuid-devel perl-core epel-release tk-devel ncurses-libs gdbm-devel libdbi-devel python-backports-lzm yum -y install

  2.安装openssl3.1.4,源代码可在https://www.openssl.org/source/选择

wget https://www.openssl.org/source/openssl-3.1.4.tar.gz tar -xzvf openssl-3.1.4.tar.gz cd opensl-3.1.4

3.编译、安装openssl3.1.4

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --shared zlib

这一步又开始报错,Compilation failed in require at /root/openssl-3.0.1/Configure line 23. BEGIN failed--compilation aborted at /root/openssl-3.0.1/Configure line 23.xian 定位问题也还是因为缺少依赖。下载依赖:

yum install perl-IPC-Cmd

安装

make && make install

安装openssl完成。

2.更换cuda版本时需要卸载原本的cuda11.4,再重新安装新的cuda12.2驱动。下载版本驱动的时候也需要一些依赖,而原本系统支持的cuda11.4的一些依赖不能支持cuda12.2驱动下载。需要更新相关依赖(yum install kernel-devel kernel-headers gcc dkms gcc-c++)Tips 如果系统中已有原本依赖则下载不了最新的依赖

下载最新的kernel-devel , kernel-headers, kernel-doc 依赖 并统一版本。

3.如果模型一直下载不成功,则先本地下载模型,再调优。

git lfs instal git clone https://www.modelscope.cn/FlagAlpha/Llama3-Chinese-8B-Instruct.gi

查找相关驱动并下载

2.去官网下载对应版本

https://developer.nvidia.com/cuda-12-2-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=CentOS&target_version=7&target_type=runfile_local

选择型号后复制蓝色的命令执行

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run sudo sh cuda_12.2.0_535.54.03_linux.run

accept后

去掉勾选driver,install

安装完成后修改环境变量

vim ~/.bashrc

输入

export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后保存退出

:wq

最后

source ~/.bashrc

然后执行

nvcc --version

查看cuda版本显示

cuda下载完成

第四步下载微调框架LLaMA-Factory

LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory

下载LLaMA-Factory框架和相关依赖

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

这个依赖会下很久推荐使用清华镜像源下载

  再微调之前需要下载modescope 请不要下载1.15版本的会出下下载异常

pip install modelscope==1.17

  可视化微调

llamafactory-cli webui export USE_MODELSCOPE_HUB=1 //选择从modelscope中下载模型

  执行命令后如图:会出现登录的端口号7860

  第五步模型微调

  登录页面后显示:/root/liujingjing11/Meta-Llama-3.1-70B-Instruct

  具体参数说明:

参数 说明 参数 说明 Lang 语言选择(en英语 zh中文) Model name 微调的模型 Finetuning method 微调方法(full 全模型微调freeze冻结层微调 lora层冻结微调) checkpoint path 是否保存检查点 stage 训练阶段Supervised Fine-Tuning(监督微调), Reward Modeling(奖励建模)PPO(旨在提高训练效率并实现稳定性)DPO是一种优化算法,用于保护数据隐私。 Pre-Training(预训练) dataset 选择数据集(preview dataset可以预览数据集) learning rate 学习率一般而言越大 越容易收敛,但很难找到最优解;而学习率小则收敛的速度慢。根据数据集选择合适的学习率。1000条数据建议学习率设置为1e-4 epochs 一个 epoch 是一次完整的训练数据集,通过模型进行前向传播和反向传播的过程。 Maximum gradient norm 最大梯度范数用于对梯度进行裁剪,限制梯度的大小,以防止梯度爆炸(梯度过大)的问题。一般设置1-5范围,其中1通常用于对梯度进行相对较小的裁剪,3到5:用于对梯度进行中等程度的裁剪,适用于一般深度学习模型的训练。 Compute type FP16,BF16,FP32 V100是无法使用bf16精度的,只能使用fp16。 cutoff_len 用于控制输入文本的截断长度。当输入文本的长度超过 cutoff_len 时,模型会截取前 cutoff_len 个字符或标记 Batch size 一次训练的样本数 Gradient accumulation 就是将多次计算得到的梯度值进行累加,然后一次性进行参数更新。 Val size 验证集尺寸 LR scheduler 学习率调节器。动态调整学习率,从而找到最优解。常见的有cosine,linear

  配置完参数后选择结果输出路径,然后点击start即可。

  如果下载的模型经常报错文件找不到,推荐在魔塔社区手动下载好模型后,用本地模型训练。

  模型训练:

  损失函数:

  Q&A

  期间遇到很多版本匹配的问题

  1.其中因为centos系统中自带python2.7版本支持的依赖并不能支持python3.7以上的版本,导致以上配置中yum -y install make gcc epel-release zlib-devel openssl-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-devel tk-devel xz-devel 下载的依赖包默认下载了python2.7的依赖,从而python3.11中需要的包很多都不能导入。

  其中openssl包一直报没有相关模块,而openssl包主要和下载一些依赖有关系。

  报错:ModuleNotFoundError: No module named 'openssl'

  这时需要去下载最新的openssl-3.1.4包解压安装进centos系统中。步骤

  1.安装相关依赖

 

yum group install 'Development Tools' yum -y install zlib-devel zlib perl* yum -y install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl openssl-devel xz xz-devel libffi-devel libuuid-devel perl-core epel-release tk-devel ncurses-libs gdbm-devel libdbi-devel python-backports-lzm yum -y install

  2.安装openssl3.1.4,源代码可在https://www.openssl.org/source/选择

 

wget https://www.openssl.org/source/openssl-3.1.4.tar.gz tar -xzvf openssl-3.1.4.tar.gz cd opensl-3.1.4

3.编译、安装openssl3.1.4

 

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --shared zlib

这一步又开始报错,Compilation failed in require at /root/openssl-3.0.1/Configure line 23. BEGIN failed--compilation aborted at /root/openssl-3.0.1/Configure line 23.xian 定位问题也还是因为缺少依赖。下载依赖:

 

yum install perl-IPC-Cmd

安装

 

make && make install

安装openssl完成。

2.更换cuda版本时需要卸载原本的cuda11.4,再重新安装新的cuda12.2驱动。下载版本驱动的时候也需要一些依赖,而原本系统支持的cuda11.4的一些依赖不能支持cuda12.2驱动下载。需要更新相关依赖(yum install kernel-devel kernel-headers gcc dkms gcc-c++)Tips 如果系统中已有原本依赖则下载不了最新的依赖

下载最新的kernel-devel , kernel-headers, kernel-doc 依赖 并统一版本。

3.如果模型一直下载不成功,则先本地下载模型,再调优。

 

git lfs instal git clone https://www.modelscope.cn/FlagAlpha/Llama3-Chinese-8B-Instruct.git

总结

更新时间 2024-08-31