DeepKE icon indicating copy to clipboard operation
DeepKE copied to clipboard

Dockers部署实践

Open thredreams opened this issue 1 year ago • 2 comments

Describe the feature

在Docker上部署的时候遇到了很多文档与issues中没有的问题,所以我决定试着使用Docker部署以一下,然后把遇到的问题与 解决方案分享出来,给大家参考一下

Environment :

  • OS: win10.docker v20.10.17
  • Python Version 3.8

从“Quick Start”开始

下载并构建镜像

git clone之后进入docker文件夹,(或许这里可以直接单独下载DeepKE/docker/DockerFile文件) 过程中可能error: RPC failed; curl 56 GnuTLS recv error (-9),我觉得是网络问题,如果多次尝试还是不行,参考链接

docker build .

构建过程中可能会报错failed to create LLB definition: 403 Forbidden这个大概率是dockers引擎中的buildkit的bug,需要去docker的设置里关闭这个功能。参考链接 image

运行并链接容器

成功构建镜像之后,返回一个镜像ID,

docker run -it XXXXX

运行容器并连接到一个新的终端。

安装DeepKE

按照“Quick Start”的内容继续执行,因为在构建镜像的时候,已经创建了deepke的虚拟环境。所以直接激活环境

conda activate deepke

执行完命令行开头的base变成deepke,表示成功切换环境,然后 可以选择pip或者源码构建,我是源码构建,因为在docker里使用pip还要重新配置pip的镜像源。 依次执行

python setup.py instal
python setup.py develop

在这个过程中会遇到几个依赖问题

  1. #144 这个issue里提到的,在Docker环境下,python setup.py install过程中失败,提示是 cachetools 5.2.0 is installed but cachetools<5.0,>=2.0.0 is required by {'google-auth'}。解决方法是回退cachetools到5.0.0以前的最新版本4.2.4
pip install cachetools==4.2.4

不建议手动升级google-auth,会破坏tensorboard2.4.1的依赖。参考链接

  1. google.protobuf库的问题 ,解决方法是重装googleprotobuf库,其中protobuf可能需要安装指定版本的库。参考链接1 参考链接2 Snipaste_2022-09-20_16-23-42 NO 【rptpbuf

  2. ipdb 和tensorboardX,有可能会报错缺少这两个库。

pip list                 #检查一下库文件有无缺失
pip install ipdb
pip install tensorboardX

开始训练

下载解压数据集,开始训练

cd ~/DeepKE/example/re/standard
wget 120.27.214.45/Data/re/standard/data.tar.gz
tar -xzvf data.tar.gz
python run.py

在开始训练之前建议好好的看一下你所选择的示例库中的conf文件夹(Quick Start举的例子对应的配置文件夹是~/DeepKE/example/re/standard/conf)下的各个配置文件中的内容,例如,config.yaml中有默认的模型、train.yaml中有是否使用gpu,epoch数量和batch_size等等影响训练速度的因素,以及是否输出绘图,使用什么绘图库等等,predict.yaml中必须指定训练好的模型所处位置

在这一个阶段主要有三个问题,一个是wandb会跳出一个登录提示(1注册登录、2 登录、3 跳过),建议注册一个账号并登录,因为是在docker中部署这个项目,项目中的绘图库matplot默认是直接输出到可视化的窗口的,所以你在终端是看不到可视化的过程的,如果这里选择了跳过,就看不到很多内容了。使用wandb的好处是自动上传训练过程数据,可以登录网站在线查看图片

第二个是Getting error RuntimeError: unexpected EOF, expected 5253807 more bytes. The file might be corrupted报错,这个大概率是网速和磁盘内存问题,第一次运行的时候是要下载一些模型基础数据的,如果挂着代理,建议把代理关闭掉。 如果仍然不行,可能就是之前下载的文件损坏了,建议修改对应模型的代码要求其重新下载,例如Quick Start举例的re算法使用的就是LM模型,修改~/DeepKE/src/deepke/relation_extraction/standard/models/LM.py处的代码,添加一个可选参数force_down,注意这个版本的系统镜像没有文本编辑工具,需要自己使用apt安装nano或者vim之类的文本编辑器,而且,这样每次训练或者预测的时候都会重新下载一次。所以记得及时改回来。 image 参考链接 第三个问题比较麻烦,就是模型训练的时间,我是核显轻薄本,所以是使用cpu跑的模型,再加上docker容器内的性能消耗,一共训练了8个半小时才跑出来。epoch数量是默认的50,其他相关的参数也没调,都是默认值。 实际上,这一步是可以跳过的,因为项目实体抽取和关系抽取任务提供了训练好的模型,但这个我还没用,所以也不是很清楚。

预测

在模型训练完之后,终端会输出一个最优的模型,告诉你他的保存位置(每个epoch对应的模型都保存在了checkpoints下),把这个位置复制粘贴到之前提到的predict.yaml文件中才能顺利运行预测代码,所以这里要么安装文本编辑器,要么覆盖重写这个配置文件,文件内容很简单,就一行,(注意是LM的小写,而不是im或者1m)。

fp: 'xxx/checkpoints/2022-09-20_15-48-29/lm_epoch3.pth'

修改完就可以开始体验了

python predict.py

注意,中间会提示你是否使用范例,如果你对相关概念不熟悉,建议使用范例,因为不使用范例的话,会要求你指定文本中的头实体,尾实体以及各自对应的类别

Additional context

  • 本来我昨天已经写好大多数内容了,就等着模型训练完成了,结果没想到跑了一夜,起来的时候休眠了,迷迷糊糊就把页面关了,敲了半天的东西就没了。

thredreams avatar Sep 21 '22 06:09 thredreams

非常感谢您发布的教程,我们打算把您的教程合并到中文的readme中,并在首页把您加入贡献者名单(请您提供一下需要列github用户名还是真实姓名),您可以对教程直接提交个pr。

zxlzr avatar Sep 21 '22 06:09 zxlzr

用户名就好,谢谢!

thredreams avatar Sep 21 '22 06:09 thredreams