在服务器里利用anaconda科学利用GPU以及管理代码
最近在配置服务器GPU的时候遇到了很多坑,大多都是tensorflow环境和Cuda版本以及keras的兼容性问题。恰好从一位大佬那里得知一种船新的使用方法,使用简便且方便管理,以此记录一下。感谢两位不愿意透露姓名的大佬的理论依据以及技术支持!
一 使用conda产生虚拟环境
1 首先在服务器里下载安装anacodna
这个网上教程比比皆是,就不多做赘述了
2 .创建python虚拟环境
使用
conda create -n your_env_name python=X.X(2.7、3.6)
命令创建python版本为X.X、名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。
如:
conda create -n poppy_leo_tf python==3.6
3 使用激活(或切换不同python版本)的虚拟环境
打开命令行输入python --version可以检查当前python的版本。
使用如下命令即可 激活你的虚拟环境(即将python的版本改变)。
Linux: source activate your_env_name(虚拟环境名称)
Windows: activate your_env_name(虚拟环境名称)
source activate poppy_leo_tf
可以看到本地的环境已由base切换成了我们创建的虚拟环境 poppy_leo_tf,python的版本也从默认的3.7变成3.6了
4 对虚拟环境中安装额外的包
在你的虚拟环境中使用命令
conda install your_package
即可安装package到your_env_name中
使用conda安装,会自动帮你安装相关的从属包以及cudnn的对应版本(血泪教训,cudnn版本和tf不兼容害得我跑了半个月的cpu),总之这个就是很好用,没问题啊。
如
conda install tensorflow-gpu==1.12.0
在虚拟环境中打开python,导入TensorFlow,没有问题
其他包的安装和这个同理
5 关闭虚拟环境(即从当前环境退出返回使用PATH环境中的默认python版本)
使用如下命令即可。
Linux: source deactivate
Windows: deactivate
6 删除虚拟环境。
使用命令conda remove -n your_env_name(虚拟环境名称) --all
, 即可删除。
7 删除环境中的某个包
使用命令conda remove --name your_env_name package_name
即可。
二 使用pycharm连接服务器中的虚拟环境
环境装好后,到了我们最喜欢的跑代码环节了,但是每次都通过 Xftp软件上传下载修改再上传等等操作来管理代码实在是麻烦,不仅效率低下而且还不方便代码的版本管理。后面经高人指点发现pycharm可以直接连接服务器的python环境,属实给力。
1 下载pycharm专业版
话不多说,先抛链接。
pycharm专业版链接
下载后用校园企业邮箱注册可免费使用
注册链接:https://account.jetbrains.com/login
申请链接:https://www.jetbrains.com/zh/student/
安装pycharm,登录的时候使用注册好的账户即可使用pycharm专业版
2 Pycharm设置内容:
1、File->Settings:弹出Settings窗口,选择Add项,进行新建SSH Interpreter
2、点击“SSH Interpreter”栏,填写Host框和Username框信息,单击“Next”按钮
3、正确填写密码,单击“Next”按钮
4、在Interpreter框,选择之前用conda创建虚拟环境的Python虚拟环境,最后点击"Finish"按钮,完成设置。
选中之后apply,当前pycharm的project下的文件默认会自动上传到服务器的文件夹下,具体文件夹可在上图Sync folders里设置。
跑一个demo
直接在本地的pycharm运行程序,进程在服务器上运行,看到那个显卡被占满,舒服了。
注:conda 镜像源安装不了某些包
在安装keras_bert的时候,可能是conda的清华源镜像更新的比较慢,找不到我要的包。同时把pip的清华源链接直接抛给conda,会出现识别不了的错误。这个问题可以通过在pycharm的设置更改,添加清华大学的pip源:https://pypi.tuna.tsinghua.edu.cn/simple/
三 使用screen进行任务管理
当数据量较大,运行时间较长时,直接跑命令,窗口或许异常终止,服务器的进程也会直接中断,不得不重新跑。
screen就很给力的解决了这个问题。
先来说说什么是screen。Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
screen的参数
-A 将所有的视窗都调整为目前终端机的大小
-d 将指定的screen作业离线
-h 指定视窗的缓冲区行数
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业
-r 恢复离线的screen作业
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业
-s 指定建立新视窗时,所要执行的shell
-S 指定screen作业的名称
-v 显示版本信息
-x 恢复之前离线的screen作业
-ls或-list 显示目前所有的screen作业
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业
例如:在一个终端里打开jupyter notebook后,如果要执行其他命令需重新打开一个终端
但用screen可以简化此操作,且任务不会随着与服务器的断开而终止
新建一个一个作业
screen -S notebook
从外观上来看,就像重新打开了一个终端
打开服务器的 jupyter notebook
jupyter notebook --allow-root
退出screen的作业时,有两种方式:
Crtl + a +d 保存进程并退出作业(程序在screen中继续运行,screen -ls 可查看)
exit 退出作业和进程(程序终止,screen -ls 不可查看)
使用第一种方式退出screen,进程仍在保存,方便继续作业