从0到 1基于 Firefly 部署chatglm3-6b模型

本人是 java 架构转大模型开发,基于某云GPU 机器从 0 到 1 生产部署全流程,记录下这个过程,部署整个耗时大约 2 小时

机器规格:15元/h 收费 + 0.8元/g 下载

规格

GPU加速型 | 8vCPUs | 64GiB | p2s.2xlarge.8

GPU显卡: 1 * NVIDIA V100-PCIe-32G / 1 * 32G

系统

镜像

Ubuntu 18.04 server 64bit for GPU

网络

100M 带宽(很多数据下载,按需收费 0.8/g)

安装步骤:

#基础安装 
sudo apt update 
#下载 cuda
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

sudo sh cuda_11.8.0_520.61.05_linux.run
#下载 conda 并安装
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh
sh Miniconda3-py39_4.12.0-Linux-x86_64.sh
source ~/.bashrc
配置 pip国内镜像源

1.输入以下命令创建或编辑pip的配置文件:

sudo nano ~/.pip/pip.conf
如果提示没有该目录,则需要手动创建:mkdir -p ~/.pip/


2.在打开的文本编辑器中添加以下内容作为配置信息:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com

按Ctrl + X保存并关闭文件。

现在就已经成功将pip的镜像源配置为阿里云的镜像站点了。

3.若想测试新的镜像源是否生效,可以运行以下命令安装一个包进行测试:

pip install requests

等待安装完成后,说明pip已经正确地从国内镜像源获取到所需的包。

#配置 conda 国内镜像源

1.打开终端(Terminal)并输入以下命令进行编辑 .condarc 文件:

nano ~/.condarc

2.如果没有该文件则会创建新的文件。将以下内容复制到文件中保存:

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
show_channel_urls: true
按Ctrl + X组合键,然后按Y键确认保存更改。最后按Enter键关闭文件。

3.现在已经成功配置了国内镜像源。重新运行conda命令应该能够从清华大学镜像站获取所需的包或库。
#conda 切换新环境(自行百度了解 conda 多环境管理)
本次系统采用:创建虚拟环境:conda create -n py310 python=3.10.13 



#创建虚拟环境
conda create -n your_env_name python=X.X(3.6、3.7等)
 
#激活虚拟环境
source activate your_env_name(虚拟环境名称)
conda activate your_env_name

#退出虚拟环境
source deactivate your_env_name(虚拟环境名称)
 
#删除虚拟环境
conda remove -n your_env_name(虚拟环境名称) --all
 
#查看安装了哪些包
conda list
 
#安装包
conda install package_name(包名)
conda install scrapy==1.3 # 安装指定版本的包
conda install -n 环境名 包名 # 在conda指定的某个环境中安装包
 
#查看当前存在哪些虚拟环境
conda env list 
#或 
conda info -e
#或
conda info --envs
 
#检查更新当前conda
conda update conda
 
#更新anaconda
conda update anaconda
 
#更新所有库
conda update --all
 
#更新python
conda update python

切换新环境后的pip更新:

python -m pip install --upgrade pip
#升级 python 的话重新弄一个新环境(如果 python 版本错了需要重新装)
conda 重新创建一个新环境

安装 git 并下载项目:

apt-get update -y
apt-get upgrade -y

sudo apt install git
git --version

mkdir code
mkdir model
mkdir dataset
mkdir data
cd code
git clone https://github.com/yangjianxin1/Firefly.git

 安装依赖:

进入项目目录,安装相应的python项目包:

cd ./Firefly
pip install -r requirements.txt

如果安装有几个失败,重新打开下面注释安装
// 需要额外注意的点,下面的包务必使用源码安装,以避免不必要的麻烦,且torch版本不要选择2.0,默认使用1.3版本。
// pip install git+https://github.com/huggingface/peft.git
// pip install git+https://github.com/huggingface/accelerate.git
// pip install git+https://github.com/huggingface/transformers.git
// pip install git+https://github.com/TimDettmers/bitsandbytes.git

最后一个失败(如果下载很慢,可以用下面的本地下载好的上传):
pip install https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.2/flash_attn-2.3.2%2Bcu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
#unzip flash_attn-2.3.2%2Bcu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl.zip

上述本地下载后上传或者直接下载安装
pip install flash_attn-2.3.2%2Bcu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

pip install flash_attn

下载模型:

#每次进入 conda 新环境中,都需要重新拉取
pip install -U huggingface_hub  #user权限下载
export HF_ENDPOINT=https://hf-mirror.com #指定endpoint的镜像源,由于就用一次,就不用写到~/.bashrc里。

huggingface-cli download --resume-download THUDM/chatglm3-6b --local-dir /root/model

下载数据集: 

#每次进入 conda 新环境中,都需要重新拉取
pip install -U huggingface_hub  #user权限下载
export HF_ENDPOINT=https://hf-mirror.com #指定endpoint的镜像源,由于就用一次,就不用写到~/.bashrc里。

huggingface-cli download --resume-download --repo-type dataset  数据集的名称

git拉取项目配置修改: 

修改train_args/sft/qlora对应的模型参数配置
主要修改:
"output_dir": "/root/data/firefly-chatglm3-6b-sft-qlora", // 模型qlora 后的文件地址
"model_name_or_path": "/root/model",            // 模型地址


其他训练参数说明如下:

output_dir:训练输出目录,存储checkpoint、tokenizer、tensorboard等
model_name_or_path:预训练模型的本地目录,或者在huggingface上的模型名称。
train_file:训练数据集路径。可以使用data/dummy_data.jsonl进行debug,或者指定为本地的训练文件。
num_train_epochs:训练的轮次。如果数据量足够大,一般建议只训一个epoch。
per_device_train_batch_size:每张显卡的batch size。
gradient_accumulation_steps:梯度累计步数。global batch=num_gpus * per_device_train_batch_size * gradient_accumulation_steps。
gradient_checkpointing:如果显存捉襟见肘,可以开启。以时间换空间,模型不缓存激活状态,会进行两次forward计算,以节省显存,我们默认开启。
learning_rate:学习率。全量参数微调的时候,建议小一些,1e-5或5e-6。qlora训练时,根据模型大小的不同,建议设置为2e-4或1e-4。
max_seq_length:训练时的最大长度。按照自己的设备进行设置,越长需要占用越多显存。
logging_steps:每隔多少步打印一次train loss,结果会打印到日志中,也会保存在tensorboard中。
save_steps:每隔多少步保存一次模型。
save_total_limit:output_dir目录中最多保存多少个checkpoint,超出则会将最旧的删除。
lr_scheduler_type:学习率变化策略。
warmup_steps:warm up步数。学习率经过多少步,增长到指定的数值。
optim:优化器。如果是全量参数微调,建议使用adamw_hf。如果是qlora微调,建议使用paged_adamw_32bit。
seed:随机种子,用于复现实验结果。
fp16:使用使用fp16混合精度。V100建议开启。
bf16:使用使用fp16混合精度。A100建议开启。
lora_rank:qlora矩阵的秩。一般设置为8、16、32、64等,在qlora论文中作者设为64。越大则参与训练的参数量越大,一般来说效果会更好,但需要更多显存,。
lora_alpha: qlora中的缩放参数。一般设为16、32即可。
lora_dropout: lora权重的dropout rate。

#启动项目

#启动项目
修改 chat.py文件中模型地址,指定到上面下载的模型地址路径
python /root/code/Firefly/script/chat/chat.py

参考:微调百川Baichuan-13B保姆式教程,手把手教你训练百亿大模型 - 知乎

Ubuntu 安装 conda_ubuntu安装conda-CSDN博客

huggingface 下载模型文件_huggingface下载模型-CSDN博客

CUDA Toolkit 11.8 Downloads | NVIDIA Developer中文大语言模型 Llama-2 7B(或13B) 本地化部署 (国内云服务器、GPU单卡16GB、中文模型、WEB页面TextUI、简单入门)_atom llama2-chinese 搭建-CSDN博客

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值