老杨说话的地方
  • 首页
  • 关于老杨
  • 博客时间
  • 文章分类
    • 人生感悟
    • 信息技术
    • 往事随风
    • 情感随笔
    • 文学创作
    • 生活记录
    • 评论杂谈
    • 人工智能
  • 留言本
我是老杨
张驰有度 宠辱不惊
  1. 首页
  2. 人工智能
  3. 正文

在本地服务器上训练Dolly模型

2023年03月30日 5440点热度 1人点赞 14条评论

Dolly是一个基于GPT-J的微调模型,使用了GPT-J-6B作为预训练模型。

Github上公开的源代码是notebook代码,需要做一些修改才能在本地的服务器上运行。

环境配置

可以使用conda来管理自己的虚拟环境。如果没有conda,可以根据这篇文章来进行安装。

创建环境:

conda create --name dolly

训练过程中,需要用到gcc编译ninja,gcc版本要求至少5以上,否则会报错。

!! WARNING !!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++ 4.8.5) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 5.0 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.

See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 5 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                              !! WARNING !!

  warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Emitting ninja build file /home/haida_yangyongquan/.cache/torch_extensions/py39_cu117/utils/build.ninja...
Building extension module utils...
Allowing ninja to set a default number of workers... (overridable by setting the environment variable MAX_JOBS=N)
[1/2] c++ -MMD -MF flatten_unflatten.o.d -DTORCH_EXTENSION_NAME=utils -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE=\"_gcc\" -DPYBIND11_STDLIB=\"_libstdcpp\" -DPYBIND11_BUILD_ABI=\"_cxxabi1011\" -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include/torch/csrc/api/include -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include/TH -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include/THC -isystem /home/haida_yangyongquan/.pyenv/versions/3.9.7/include/python3.9 -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -std=c++14 -c /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/deepspeed/ops/csrc/utils/flatten_unflatten.cpp -o flatten_unflatten.o 
FAILED: flatten_unflatten.o 
c++ -MMD -MF flatten_unflatten.o.d -DTORCH_EXTENSION_NAME=utils -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE=\"_gcc\" -DPYBIND11_STDLIB=\"_libstdcpp\" -DPYBIND11_BUILD_ABI=\"_cxxabi1011\" -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include/torch/csrc/api/include -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include/TH -isystem /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/include/THC -isystem /home/haida_yangyongquan/.pyenv/versions/3.9.7/include/python3.9 -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -std=c++14 -c /home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/deepspeed/ops/csrc/utils/flatten_unflatten.cpp -o flatten_unflatten.o 
c++: error: unrecognized command line option ‘-std=c++14’
ninja: build stopped: subcommand failed.
2023-03-28 23:58:27 ERROR [__main__] main failed
Traceback (most recent call last):
  File "/home/haida_yangyongquan/dolly/dolly-master/.venv/lib/python3.9/site-packages/torch/utils/cpp_extension.py", line 1900, in _run_ninja_build
    subprocess.run(
  File "/home/haida_yangyongquan/.pyenv/versions/3.9.7/lib/python3.9/subprocess.py", line 528, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

安装依赖

从github上下载源代码并上传到服务器,如果可以远程clone,可以直接clone。

进入虚拟环境后,安装依赖。

conda activate dolly
cd dolly
pip install -r requirements_dev.txt
./run_pytest.sh

测试通过后,就可以进行下一步了。

训练

源代码中train_dolly.py没有用,因为是一个notebook脚本,核心目的是调用deepspeed进行训练。因此,直接在dolly根目录执行:

deepspeed --num_gpus 8  --module training.trainer --deepspeed //cdn.yangyq.net/home/yourhomedir/dolly/config/ds_z3_bf16_config.json  --epochs 1 --local-output-dir /home/yourhomedir/dolly/output/  --dbfs-output-dir /home/yourhomedir/dolly/dbfs/ --per-device-train-batch-size 1 --per-device-eval-batch-size 1 --lr 1e-5

其中--num_gpus指的是显卡数量,--module training.trainer表示要训练training文件夹下的trainer.py文件, --deepspeed /home/yourhomedir/dolly/config/ds_z3_bf16_config.json是指定配置文件,--local-output-dir是模型输出目录, 其他参数不再赘述。

记得把yourhomedir改为自己的用户名。

当然也可以写一个sh文件来执行,

module load CUDA/cuda-11.7
export CUDA_VISIBLE_DEVICES=0,1,2,3
deepspeed  --module training.trainer --deepspeed //cdn.yangyq.net/home/yourhomedir/dolly/config/ds_z3_bf16_config.json  --epochs 1 --local-output-dir /home/yourhomedir/dolly/output/  --dbfs-output-dir /home/yourhomedir/dolly/dbfs/ --per-device-train-batch-size 1 --per-device-eval-batch-size 1 --lr 1e-5

注意,export设置了显卡的索引号以后,--num_gpus这个参数可以省略。这里用到了4块显卡。

给它执行权限。

chmod +x train.sh

然后后台执行:

nohup ./train.sh &

如果要查看执行情况:

tailf nohup.out

一些坑

Torch用的Cuda一般是11.7版本,如果不是,需要安装。同时,在执行命令前,使用module load CUDA/cuda-11.7设置自己的环境变量。

你可以使用下面的代码查看自己的Torch用的cuda版本:

python
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())
torch.version.cuda

某些GPU不支持BF16数据精度,需要使用FP16。

需要修改代码dolly/training/trainer.py ,将182行和183行改为:

fp16=True,
bf16=False,

第250行,改为:

@click.option("--bf16", type=bool, default=False, help="Whether to use bf16 (preferred on A100's).")

如果显卡的显存不够(通常来说至少需要单卡32G),则需要使用主存来优化,修改dolly/config/ds_z3_bf16_config.json文件,在"zero_optimization",加入

"offload_optimizer": {
  "device": "cpu",
  "pin_memory": true
},
标签: conda dolly gpt
最后更新:2023年03月30日

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

点赞
订阅评论
提醒
guest

guest

14 评论
内联反馈
查看所有评论
兔宝宝游戏网
兔宝宝游戏网
游客
2023年11月10日 下午8:13

大佬的教程好详细啊

0
回复
mmyin
mmyin
游客
2023年5月19日 下午4:41

老师你好,第一张图中gcc问题,我使用gcc -v查看是8.3,但是运行时候还是会出现如第一张图的错误,请问如何处理啊?

0
回复
老杨
老杨
作者
回复给  mmyin
2023年5月19日 下午7:15

@mmyin 是一模一样的错误吗?错误代码贴出来看看。

0
回复
啊啊啊
啊啊啊
游客
2023年4月27日 下午1:26

老师出视频吗

0
回复
老杨
老杨
作者
回复给  啊啊啊
2023年6月12日 上午11:39

@啊啊啊 没考虑过出视频。

0
回复
deemo
deemo
游客
2023年4月17日 下午2:19

老师,我运行这个60亿的模型,使用了offload,但是节点的内存满了,以致于训练中止。

0
回复
老杨
老杨
作者
回复给  deemo
2023年4月17日 下午3:44

@deemo 是最后保存模型的时候终止的吗?还是训练过程中终止了?

0
回复
deemo
deemo
游客
回复给  老杨
2023年4月17日 下午3:56

@老杨 训练过程中终止的,在卸载参数时,内存炸了

0
回复
老杨
老杨
作者
回复给  deemo
2023年4月17日 下午3:58

@deemo 如果是使用了cpu的offload,那么gpu卡数越好,应该越不容易崩溃,因为占用内存会少一些。

减少gpu卡数,减少batch size会有所帮助。

0
回复
deemo
deemo
游客
回复给  老杨
2023年4月17日 下午4:25

@老杨 好的谢谢老师

0
回复
deemo
deemo
游客
2023年3月31日 上午10:24

老师,为什么我安装了依赖项 测试不通过呢

0
回复
老杨
老杨
作者
回复给  deemo
2023年3月31日 上午10:26

@deemo 报什么错?

0
回复
deemo
deemo
游客
回复给  老杨
2023年4月1日 上午8:51

@老杨 python 3.7的好像不行 升到3.8测试成功了

0
回复
老杨
老杨
作者
回复给  deemo
2023年4月1日 下午8:37

@deemo 好的。

0
回复

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

搜索
最新 热点 随机
最新 热点 随机
中国是不是体育强国? 成功的必备因素 关于华为 别再侮辱我的智商 春秋航空让人长见识 第二青春计划失败 第二青春计划 模型训练错误RuntimeError: expected scalar type Half but found Float 加载onnx模型进行推理 PyTorch模型转onnx格式
你是做什么的 一句话经典 醉酒 Ubuntu下Firefox Flash插件中文乱码解决 美国式烧烤(近照NP) 哑国 为多用户安装Anaconda及其使用方法 女朋友 晴迷星途13优点 自恋
最新评论
  • 关于华为上的老杨确实,苹果手机系统还是有优势的。
  • 关于华为上的乱云AKAY自从换了苹果手机后,对手机再没以前那样热爱研究了,主要是系统省心。
  • 第二青春计划失败上的老杨第二都失败了,第三就算了吧。
  • 春秋航空让人长见识上的老杨应该提供一点水,至少给不想买水的人一个选择的空间。
  • 别再侮辱我的智商上的老杨那个很好,很值得。
  • 关于华为上的老杨Next系统基本没广告。大部分广告都可以关掉吧,我记得我写过一个文章,…
  • 第二青春计划失败上的xqiushi开始第三青春计划吧。
  • 春秋航空让人长见识上的xqiushi那个桌板能放下小米多看电子书,还是不错的。 这个矿泉水市面上没有,特供…
  • 别再侮辱我的智商上的xqiushi只投了那100亿的项目。
  • 关于华为上的xqiushi今年我爸的手机也换成华为,家庭里手机基本都是华为。最不满意的一点就是广…

Google java jsp linux QQ wordpress 中国 习惯 人生 公司 决定 博士 博客 同学 国家 大学 学习 实验室 家 小说 工作 开始 思考 情感 手机 技术 推荐 插件 数据库 文件 晴迷星途 朋友 生活 电影 相声 程序 笔记 网站 网络 置顶 美国 评论 软件 音乐 项目

关注公众号

COPYRIGHT © 2020 老杨说话的地方. ALL RIGHTS RESERVED.

THEME KRATOS YANG Modified BY 老杨

鲁ICP备17014997号-4

鲁公网安备 37021302000754号