CPT code: https://github.com/fastnlp/CPT
CPT paper: https://arxiv.org/pdf/2109.05729.pdf

数据预处理

  • https://zhuanlan.zhihu.com/p/388830967 megatron-lm中的preprocess_data.py的详解, json格式中, 最重要的key, 即text有值即可

  • 用下面的命令, 准备训练数据集

    jsonfile="/Users/phoenixbai/workspace/github/CPT/tmp/eight.files3.json"
    vocabfile="/Users/phoenixbai/workspace/github/CPT/finetune/generation/output/adgen/2/vocab.txt"
    prefix="test"python ../pretrain/tools/preprocess_data.py \--input $jsonfile \--output-prefix $prefix \--vocab $vocabfile \--dataset-impl mmap \--tokenizer-type BertWordPieceCase
    

环境配置

  • 需要一台带有gpu卡的机器, gpu驱动升级的方法, 在另一篇文章中再写.

  • 如何从已trained好的cpt-base接着做pretrain, 需要稍改下代码 : https://github.com/fastnlp/CPT/issues/30,

    # model_path = 'roberta_zh'
    model_name = "fnlp/cpt-base"
    # self.language_model = HFBartModel(config, encoder_config)
    #self.language_model = HFBartModel(config)
    #encoder_state = torch.load(model_path + '/pytorch_model.bin', map_location='cpu')
    #self.language_model.model.encoder.load_state_dict(encoder_state)
    self.language_model = HFBartModel.from_pretrained(model_path)
    
  • apex 指的是nvidia的apex https://github.com/NVIDIA/apex/blob/master/README.md, 安装时, 需要安装支持cuda的能力, 若报错如amp_C module not found 或者shared_mutex:: error: taking address of temporary [-fpermissive], 就升级到gcc-8.5, 应该就好了:

    git clone https://github.com/NVIDIA/apex
    cd apex
    pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
    
  • 若import amp_C 时, 报ImportError: libc10.so: cannot open shared object file: No such file or directory, 则将anaconda3/下面找到libc10.so, 然后加到LD_LIBRARY_PATH下面即可, 如 lib/python3.7/site-packages/torch/lib/libc10.so

  • 需要安装的python库, 及相关注意事项:

    • 根据cuda版本, 如, 我的cuda用的是11.3版本, 所以下载对应的torch来安装: pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
    • transformers==4.4.1
    • 进到pretrain下面, 然后pip install -r requirements.txt
    • pip install jieba_fast
    • packaging会报minor version没有之类的, 那就卸载当前版本, 再装个>=20.0的即可, 默认就是最新版本
    • deepspeed需要装
  • gcc-8.5的安装方式: (用gcc-6.1编译时cuda代码时, 会报 shared_mutex:: error: taking address of temporary [-fpermissive], 所以需要升级为8.5)

    • 直接用gcc自带的./contrib/download_prerequisites来下载自动安装即可, 不行, 再看这个: How to install GCC piece by piece with GMP, MPFR, MPC, ELF (http://stackoverflow.com/questions/9450394/how-to-install-gcc-piece-by-piece-with-gmp-mpfr-mpc-elf-without-shared-libra)
    • 安装方法:
      https://ftp.gnu.org/gnu/gcc/ (下载地址)
      tar xzf gcc-8.5.0.tar.gz
      cd gcc-8.5.0
      ./contrib/download_prerequisites  #若失败, 则改下脚本中的ftp为http即可
      cd ..
      mkdir objdir
      cd objdir
      $PWD/../gcc-8.5.0/configure --prefix=$HOME/app/gcc-8.5.0 --enable-languages=c,c++,fortran,go --disable-multilib     //with 64bit support only
      make -j20
      make -j20 install
      
  • .bash_profile中添加变量

    GCC_HOME=/home/phoenixbai/workspace/gcc-8.5
    export LD_LIBRARY_PATH=$GCC_HOME/lib:$LD_LIBRARY_PATH
    export PATH=$GCC_HOME/bin:$PATH
    
  • 若需要下载cpt-base的已训练好的模型, 则到: https://huggingface.co/fnlp/cpt-base

    • sha256sum pytorch_model.bin 验证文件是否一致, 直接下载的是个zip, 需要直接重命名为pytorch_model.bin即可.

训练时遇到的问题

  • 若train时报如下错, 是因为之前训练出的checkpoint中的相关参数, 与这一次的不匹配, 程序可能去load之前的checkpoint了, 所以, 你就把之前的那个checkpoint删了就好了

File “/gruntdata/phoenixbai/CPT/pretrain/megatron/learning_rates.py”, line 133, in _check_and_set
f’AnnealingLR: class input value {cls_value} and checkpoint’
AssertionError: AnnealingLR: class input value 5120.0 and checkpointvalue 1280.0 for warmup iterations do not match

  • batch_size=512太大时, 也容易CUDA OOM, 所以要小点
  • iteration是指每个batch_size跑一次, 所以若有2000万条记录, 要2000万/256 个iterations才是一个epoch.
  • 当程序跑起来后, 我用nohup sh pretrain_run.sh & 来跑任务, 但发现当session断开时, 会报如下错, 基于 https://github.com/pytorch/pytorch/issues/67538的讨论, 应该用tmux里来跑, 就能解决了. nohup may terminate pytorch program when close the terminal, but tmux really worked.

WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 9645 closing signal SIGHUP
WARNING:torch.distributed.elastic.multiprocessing.api:Sending process 9646 closing signal SIGHUP
Traceback (most recent call last):

packages/torch/distributed/elastic/multiprocessing/api.py", line 60, in _terminate_process_handler
raise SignalException(f"Process {os.getpid()} got signal: {sigval}", sigval=sigval)
torch.distributed.elastic.multiprocessing.api.SignalException: Process 9564 got signal: 1

效果

  • 将checkpoint转换成pytorch_model.bin:

    python pretrain/tools/convert_ckpt.py pretrain/checkpoints/cpt-base/last/mp_rank_00_000/  model/cpt-base-zhijian/
    
  • 用下面的脚本, 可以简单验证一下效果, 若需要在gpu上做预测, 参考: https://discuss.huggingface.co/t/is-transformers-using-gpu-by-default/8500

    import sys
    sys.path.extend(['/home/phoenixbai/workspace/CPT/finetune'])
    from modeling_cpt import CPTForConditionalGeneration
    from transformers import BertTokenizerMODEL_NAME = "/home/phoenixbai/workspace/CPT/model/cpt-base-test/"
    tokenizer = BertTokenizer.from_pretrained(MODEL_NAME)
    model = CPTForConditionalGeneration.from_pretrained(MODEL_NAME)# 填充式的生成
    input_ids = tokenizer.encode("你好, 菜鸟[MASK], 你有两个天猫[MASK]到了", return_tensors='pt')
    pred_ids = model.generate(input_ids, num_beams=4, max_length=20)
    print(tokenizer.convert_ids_to_tokens(pred_ids[0]))#输出结果: ['[SEP]', '[CLS]', '你', '好', ',', '菜', '鸟', '驿', '站', ',', '你', '有', '两', '个', '天', '猫', '快', '递', '到', '[SEP]']# 整句重新生成
    input_ids = tokenizer.encode("你好, 菜鸟, 你有两个天猫到了", return_tensors='pt')
    pred_ids = model.generate(input_ids, num_beams=4, max_length=20)
    print(tokenizer.convert_ids_to_tokens(pred_ids[0]))#输出结果:  ['[SEP]', '[CLS]', '你', '好', '啊', '菜', '鸟', '直', '送', '你', '有', '两', '个', '天', '猫', '到', '了', '了', '你', '[SEP]']

Thanks

深度学习模型CPT的环境配置经验相关推荐

  1. 用Windows电脑训练深度学习模型?超详细配置教程来了

    选自towardsdatascience 作者:Ahinand 机器之心编译 编辑:Panda 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可 ...

  2. tensorflow linux多卡训练_用Windows电脑训练深度学习模型?超详细配置教程来了

    公众号关注 "DL-CVer" 设为 "星标",DLCV消息即可送达! 转自 机器之心 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Window ...

  3. windows python 访问mtp存储空间_用Windows电脑训练深度学习模型?超详细配置教程来了...

    虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多机器学习初学者更为熟悉的系统.要在 Windows 上开发模型,首先当然是配置开发环境. ...

  4. windows所有版本列表_用Windows电脑训练深度学习模型?超详细配置教程来了

    选自towardsdatascience 作者:Ahinand 机器之心编译 编辑:Panda 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可 ...

  5. tensorflow linux多卡训练_用 Windows 电脑训练深度学习模型?超详细配置教程来了...

    点击上方 蓝色小字 ,关注 并 星标 ,更多干货,第一时间送达 转载自公众号:AI有道 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多 ...

  6. 深度学习论文 代码复现 环境配置操作

    ***深度学习论文代码复现 前置工作 安装Ubuntu18.04 安装Nvidia显卡驱动 安装anaconda 安装CUDA与cuDNN 通过软链接的修改实现多版本CUDA间的切换 将~/.bash ...

  7. 2.1 深度学习常用软件包和环境配置

    常用软件包: Theano Pylearn2 scikit-neuralnetwork Caffe Deeplearning4j Torch http://deeplearning.net/softw ...

  8. 真传x深度学习第一课:环境配置搭建

    真传x课程的配置笔记,基本参考高老师的01_实验docx, 机器ubuntu16.04, 默认python2.7 之前常用的python版本也是2.7 01 修改默认python为python3 参考 ...

  9. 深度学习模型建立的整体流程和框架

    深度学习模型建立的整体流程和框架 框架图如下,纵向是建立模型的主要流程,是一个简化且宏观的概念,横向是针对具体模块的延展. 数据处理 数据处理一般涉及到一下五个环节: 读入数据 划分数据集 生成批次数 ...

最新文章

  1. 独家 | 使用机器学习预测房价(附链接)
  2. 【基础算法复习】01背包问题(一)
  3. 让ABAP开发者更加轻松的若干快捷键
  4. pt-table-checksum与pt-table-sync使用实践
  5. xshell执行结果到文本_xshell拷贝文件到本地
  6. ci 地址去掉index.php,CI框架如何删除地址栏的 index.php
  7. HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
  8. 高效的序列化/反序列化数据方式 Protobuf
  9. C++工程师面试题大全
  10. A Simple RESTful API Service With Node.js And Koa2
  11. 数据结构期末考题总结(附答案)
  12. ESP8266 教程2 — 烧录AT固件
  13. 网络安全:ARP和IP协议
  14. 关于FeedSky话题广告
  15. mame 游戏铁钩船长/拳皇97 支持多手柄,电视遥控器~~
  16. html做一个条码扫描页面,vue h5页面如何实现扫一扫功能,扫条形码获取编码
  17. 计算机基础及photoshop应用试题,计算机基础及Photoshop应用选择题(计算机一级B考试卷).doc...
  18. 20 个关于程序员的笑话,看懂了,你就不会笑了,也不会羡慕他们工资高了!...
  19. CCSP201902纸牌计数——解题报告
  20. 线性代数 为什么齐次线性方程有非零解的充要条件是系数行列式不等于零?

热门文章

  1. 模拟摄像头CCD板机揭秘
  2. 金融界神曲“金融科技”:度小满、中国平安等大神如何唱?
  3. win 10系统电脑键盘突然失灵
  4. TCC(TinyC)编译器汉化(中文编译器、汉语编程)之一:主文件汉化
  5. AutoCAD 的托管程序集
  6. 64位W7系统安装内存8G,但是系统只显示3.2G,是怎么回事?
  7. 80年代的年画,画面朝气蓬勃,催人奋进,正能量满满,展望新时代
  8. 微信点餐系统—买家订单(二 Service层,重难点)
  9. 计算机一些专业术语,计算机专业术语大全
  10. 计算机专业文科生录取分数线,文科生适合报考的5所学校,录取分数线不高,但就业前景很好...