Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

旧版本Dockers部署实践 #145

Closed
thredreams opened this issue Sep 21, 2022 · 4 comments
Closed

旧版本Dockers部署实践 #145

thredreams opened this issue Sep 21, 2022 · 4 comments
Labels
enhancement New feature or request

Comments

@thredreams
Copy link

thredreams commented Sep 21, 2022

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. Docker 环境下缓存工具版本错误 #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 thredreams added the enhancement New feature or request label Sep 21, 2022
@zxlzr
Copy link
Contributor

zxlzr commented Sep 21, 2022

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

@thredreams
Copy link
Author

用户名就好,谢谢!

@zxlzr zxlzr pinned this issue Sep 27, 2022
@xxupiano xxupiano unpinned this issue Sep 28, 2022
@xxupiano xxupiano pinned this issue Sep 28, 2022
@zxlzr zxlzr closed this as completed Oct 27, 2022
@dptong
Copy link

dptong commented Nov 23, 2022

求问,re模型训练的时候报错can't allocate memory: you tried to allocate 402653184 bytes,但是查看机器内存还有接近1G可用,事为啥呢

@tlk1997
Copy link
Collaborator

tlk1997 commented Nov 23, 2022

你这是在用cpu跑模型吧,如果是的话,可以降低batch size来减少内存使用,还有这个只是模型需要的内存量,其他线程也需要内存分配,所以你这接近1G不够,最好还是单独提一个issue,该为实践分享,在这提问可能会打扰到原分享者

求问,re模型训练的时候报错can't allocate memory: you tried to allocate 402653184 bytes,但是查看机器内存还有接近1G可用,事为啥呢

@GoooDte GoooDte changed the title Dockers部署实践 旧版本Dockers部署实践 Aug 5, 2023
@GoooDte GoooDte unpinned this issue Aug 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants