Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记

本博客记录的是Datawhale组织的竞赛组队学习NLP赛事,因为我一直很想打比赛但又不知道怎么入门,所以非常开心能有这样的机会完整体验一遍比赛流程。

比赛的详细内容以及开源的baseline资料如下:
比赛地址:https://tianchi.aliyun.com/s/3bd272d942f97725286a8e44f40f3f74
开源内容:https://github.com/finlay-liu/tianchi-multi-task-nlp 4

环境配置

以下是我的环境配置:

  • win10 专业版(因为家庭版安装docker太麻烦了 于是我升级成了专业版)
  • python 3.8
  • pytorch 1.7.1
  • transformers包
  • sklearn包

Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第1张图片

文件配置

  • 主要根据baseline的教程步骤下载好bert(网址)配置好文件:config.json、vocab.txt、pytorch_model.bin
  • 以及数据集,其中网上下好的数据集名字需要自己手动改成对应的名字并放在相应的文件夹下。文件目录样例:

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

跑通baseline

将上面的文件都配置好以后开始按照教程步骤训练:

  • 分开训练集和验证集,默认验证集是各3000条数据,参数可以自己修改:
python ./generate_data.py

但在这个地方会出现报错:
Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第2张图片
解决办法就是在错误定位的位置加上:,encoding='utf-8'即可

  • 训练模型,会保存验证集上平均f1分数最高的模型到 ./saved_best.pt
python ./train.py

但是这个直接运行,会在训练到60000th的时候报错:
Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第3张图片

解决办法是在data_generator.py文件的这个部分加上3个elif语句,即下面3个红框即可运行:
Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第4张图片如果还出现cuda out of mamory等问题,可以尝试通过调小batch_size等方法解决。

  • 然后用训练好的模型 ./saved_best.pt 生成结果:
python ./inference.py
  • 再打包预测结果
zip -r ./result.zip ./*.json

到这里整个baseline就运行结束了,下面先将这个result.zip放到submmission文件夹下,为下面的docker提交做准备:除了result外其他文件是已有的可以先不管。
Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第5张图片


下面来看docker是什么以及如何用docker提交:

什么是Docker

先扫盲一下“镜像”、“容器”、“仓库”的概念:

镜像(image):Docker 镜像就是一个只读的模板,镜像可以用来创建 Docker 容器。Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。

容器(Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux 环境,Docker 利用容器来运行应用。

仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。

什么是Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上。Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是Docker提出的"Build once,Run anywhere"

安装Docker

Docker在win10下的安装需要是专业版的,家庭版的需要升级到专业版或者用某些方法绕过检测,具体可以参考下面的资料。我是通过某宝买的专业版密钥升级之后安装的。

参考资料:

  • win10 家庭版安装 docker(Docker Desktop)
  • Win10家庭版安装Docker for windows遇坑总结
  • win10家庭版安装docker
  • Win10中docker的安装与使用
  • windows下安装docker详细步骤
  • win10中docker的安装与使用(docker for windows)

Docker的基本使用

创建云端镜像仓库

  • 安装完docker以后,利用阿里云容器镜像服务免费开通镜像托管,并进入镜像仓库创建自己的命名空间
    Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第6张图片
  • 切换标签页到命名空间,创建地址唯一的命名空间
    Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第7张图片
  • 然后切换到“镜像仓库”填写信息,本次比赛官方建议的是地域写深圳,其他的按照自己需求填写:
    Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第8张图片
  • 点击下一步,选择代码源为本地仓库,完成创建。
    Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第9张图片
  • 点击管理就能看到本次仓库的信息以及操作指南,其中常用的就是那个公网网址。
    Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第10张图片

docker提交步骤

  • 完成上述步骤以后,进入cmd,先将路径切换到 本次项目的submission文件夹下,然后使用本地Dockefile进行构建,使用创建仓库的【公网地址】
# 如 docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
  • 成功后 再通过docker images查看一下自己的 image id
    在这里插入图片描述
  • 然后将镜像提交到云端
# ed0c4b0e545f 为镜像id,上面构建过程最后一行
sudo docker tag ed0c4b0e545f 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
  • 最后进入比赛提交页面填写镜像路径和版本号,其中需要注意的是版本号前面的冒号是英文格式,否则会出现错误。

Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第11张图片

  • 提交完毕后稍微等一下就可以去排行榜查看自己的排名信息了:

Datawhale组队学习 | NLP文本分类比赛全流程体验+Docker学习笔记_第12张图片

  • 之后就可以欢快地区datawhale小程序里面打卡啦。

写在最后:因为之前从来没有接触过docker,所以不论在安装还是使用的时候都很心累,而且同样的baseline在不太的电脑上也会出各种不同的错误。但是组队学习的好处就是开源互帮互助,大家都超级热心,这种氛围让我觉得学习真的是件很快乐的事情。ok,到此终于能打卡完task01,希望后面的task02也能按时完成!

你可能感兴趣的:(算法比赛)