首先介绍实验背景,需要在远程服务器上搭建tensorflow1.0版本环境并训练一个实体识别模型
xshell
首先,看看本地服务器是否有需要的镜像
docker images
可以看到我所用的服务器有我所需要的tensorflow1.0版本镜像
如果本地没有所需镜像可以输入
docker search tensorflow
或
docker search tensorflow1.12
可以在docker hub 公共仓库中找到相关镜像
接着
docker pull 镜像名
就可以将镜像拉到本地了
然后就可以依赖本地已有的或者刚pull下来的镜像启动容器了
docker run -it --name xxx -v /data1/home/test/bert-bilstm-crf-ner-master-new:/work votiethuy/tensorflow1.12-gpu-base:latest bash
其中
1、xxx是给这个容器起一个名字
2、/data1/home/test/bert-bilstm-crf-ner-master-new是我上传到服务器的全部代码(代码本地路径)
3、/work votiethuy/tensorflow1.12-gpu-base:latest是在votiethuy/tensorflow1.12-gpu-base这个镜像下的work文件路径(代码容器路径),latest是镜像的tag(版本号,一般是几点几)
这样其实是做了一个映射,当容器启动后在work文件夹内就会有我保存在服务器中的代码,而且当服务器中的代码改变时,容器中的代码会同步变化
这里遇到了一个问题就是bert-bilstm-crf-ner-master-new这个文件夹名一开始是有大写字母的,导致每次启容器都失败,后来我全改成小写才成功
当出现上图时就意味着启动容器成功
接着进入到work文件夹中找到代码直接python3 run.py就开始训练了
本地代码更新
如果要进行调参或者该模型时在服务器终端直接看代码会很费劲,本机的pycharm或者vscode这些专业的IDE就会方便很多,这就需要将本地的IDE与服务器进行连接,以pycharm为例
在马赛克的位置输入服务器地址,接着进入Mappings
local path不用填,这是你本机的代码路径
需要填写的是deployment path 这是之前传到服务器的代码地址,填写相应地址即可连接
(这里需要注意的一点是connection中的root path和deployment path两个路径加起来才是整个服务器的路径,如果都填很容易出错,我的建议是root path不写,将绝对路径填入deployment path就完事了)
等到在本地修改完代码,只需要单击右键upload即可完成服务器和容器中的代码更新
结束~