task1 中文预训练模型泛化能力天池赛

目录

 

1 目的

2 背景

2.1 个人配置

2.2 赛题要求

2.3 本机跑通Baseline

pytorch配置

3 准备环节

4 模型训练过程

5 Docker提交

5.1 Docker安装

5.2 本机Docker推送

 


​​​​​​​

1 目的

  根据Datawhale大佬们提供的baseline训练模型,并通过docker的方式提交到天池比赛,真的太不容易了。

2 背景

2.1 个人配置

  • 操作系统:mac

2.2 赛题要求

  Tips:之后将基于该baseline教程,详细叙述我的配置历程。

2.3 本机跑通Baseline

pytorch配置

  • 关于windows版的Anaconda+Pytorch+Pycharm+Cuda配置可以看我之前总结的博客:地址
  • 关于CuDNN的配置可以看我另一篇总结:地址

  踩了许多坑的总结~

3 准备环节

  git clone模型文件到本机,项目命名为tianchi-multi-task-nlp,运行环境为pytorch虚拟环境,编译器为Pycharm。

添加transformers和sklearn

  pytorch虚拟环境中并没有这两项,我们需要使用pip安装一下。不过要注意一点,我们需要将这两个包安装到pytorch虚拟环境下,而不是直接在cmd中全局安装。
  打开Anaconda->powershell prompt,我们通过powershell prompt进入pytorch虚拟环境。

conda activate <pytorch环境名称(自己命名)> #激活虚拟环境
  • 1
pip install transformers #安装transformers
pip install sklearn      #安装sklearn
  • 1
  • 2

  安装结果如图:
task1 中文预训练模型泛化能力天池赛

数据文件及bert配置

  下载中文预训练BERT模型bert-base-chinese,地址:https://huggingface.co/bert-base-chinese/tree/main
task1 中文预训练模型泛化能力天池赛
  只需下载config.jsonvocab.txtpytorch_model.bin,把这三个文件放进tianchi-multi-task-nlp/bert_pretrain_model文件夹下。

task1 中文预训练模型泛化能力天池赛
  下载比赛数据集,把三个数据集分别放进tianchi-multi-task-nlp/tianchi_datasets/数据集名字/下面:

  文件目录样例:

tianchi-multi-task-nlp/tianchi_datasets/OCNLI/total.csv
tianchi-multi-task-nlp/tianchi_datasets/OCNLI/test.csv

  分别建立文件夹并重命名数据集即可~

4 模型训练过程

数据准备

  分开训练集和验证集,默认验证集是各3000条数据,参数可以自己修改。

运行generate_data.py文件

  这里windows10系统可能会遇到一个问题:
task1 中文预训练模型泛化能力天池赛
  可能是编码问题,解决方法就是在定位处添加:

,encoding='utf-8'
  • 1

并且在所有.csv后缀(数据集文件)的后面都要添加该参数。
task1 中文预训练模型泛化能力天池赛

训练

更改batch_size适配主机

  运行train.py文件来训练模型。初始设定:

train(epochs=20,batchSize=16, device='cuda:0', lr=0.0001, use_dtp=True, pretrained_model=pretrained_model, tokenizer_model=tokenizer_model, weighted_loss=True)
  • 1

这里主要关注batchSizeepochs,因为bert很吃显存,所以我们要根据本机的配置对应调整模型参数。我的显卡是RTX3070 显存8G,结果遇到了问题:
task1 中文预训练模型泛化能力天池赛
  经过查阅,我发现Stack Overflow上有一个问题比较有参考意义,结合目前情况,我选择只调小batchSize

batchSize=8
  • 1

结果一觉醒来,跑通模型~
  此外,会保存验证集上平均f1分数最高的模型到./saved_best.pt
task1 中文预训练模型泛化能力天池赛

生成结果

  用训练好的模型./saved_best.pt生成结果:

运行inference.py文件

打包预测结果

  直接运行:

zip -r ./result.zip ./*.json
  • 1

会遇到‘zip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件的报错。这是由于windows系统下并没有zip命令(Linux)。不过我们可以下载GnuWin32exe文件,默认安装即可。注意,要记住安装路径,方便我们添加环境变量。
task1 中文预训练模型泛化能力天池赛
  右键此电脑->属性->高级系统设置->环境变量,在系统变量中的Path添加GnuWin32\bin路径。
task1 中文预训练模型泛化能力天池赛
重启电脑,即可使用zip命令。
task1 中文预训练模型泛化能力天池赛

  到此,在本机训练baseline的过程完毕。

5 Docker提交

  再次强调,win10专业版和家庭版在安装Docker过程中区别很大,我的主机为win10专业版。此外,docker的命令行操作均在windows powershell运行,必要时以管理员身份运行。

5.1 Docker安装

  直接去官网安装windows桌面版即可。在第一次运行Docker时,Hyper-V始终加载失败,我发现是由于我新配的主机未开虚拟化(到任务管理器的性能页面即可查询)由于本机是华硕主板,我需要在开机时按F2进入BIOS界面打开虚拟化。再次进入Docker之后,没有再遇到该问题。
  第一次运行Docker,在测试hello-world镜像时候,windows powershell报错unable to find image。意思是Docker在本地没有找到hello-world镜像,也没有从docker仓库中拉取镜像。由于Docker服务器在国外(需要*),因此我们在国内无法正常拉取镜像,所以需要我们为Docker设置国内阿里云的镜像加速器。

{ 
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] 
}
  • 1
  • 2
  • 3

task1 中文预训练模型泛化能力天池赛
重启后即可正常拉取hello-world镜像。

5.2 本机Docker推送

  给出我使用的参考教程,仔细研读,会有收获。我也会给出我自己走通的路~

  :涉及到一些个人仓库id的截图暂时不便放出,请谅解。可参考 基本盘:Docker推送到阿里云教程内的运行结果图。

走通的路

  进入云端镜像仓库创建自己的镜像仓库和命名空间,进入自己创建的仓库,找到操作指南,里面有你想要的~
  现在开始准备提交的文件夹(submission):
task1 中文预训练模型泛化能力天池赛
这里注意要把打包好的result.zip放到submission内,不然你可能会浪费一次比赛提交机会。这是由于比赛要求:
task1 中文预训练模型泛化能力天池赛
  之后在windows powershell中进入(cd)到submission文件夹内,进行如下操作:\

  1. 登录
docker login --username=用户名 registry.cn-shenzhen.aliyuncs.com
  • 1

注意:用户名在自创仓库的详情页下方的操作指南里有说明。

  1. 构建镜像
docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
  • 1

注意registry.~~~用自己仓库地址替换(到自创仓库的详情页查询)。地址后面的1.0为自己指定的版本号,用于区分每次build的镜像。最后的.是构建镜像的路径,不可以省掉

  1. 推送镜像到仓库
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0

docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
  • 1
  • 2
  • 3

注意ImageIdDocker桌面->左侧Images栏->镜像名列表-> <registry.~~~:1.0> -> IMAGE ID中;registry.~~~用自己仓库地址替换(到自创仓库的详情页查询),与上面的操作一致。
  至此,Docker推送完成,接下来可以提交了。

 

上一篇:K8S集群搭建


下一篇:阿里云短信使用步骤及代码模板