自己的研究方向是心脏AI相关(心脏MRI+深度学习这样子),最近在学习医学图像分割——自动心脏诊断挑战赛(ACDC)的代码:
GitHub - baumgach/acdc_segmenter: Public code for our submission to the 2017 ACDC Cardiac Segmentation challenge
这个项目的运行环境要求:python3.5、Tensorflow 1.12、cuda9.0,最后决定用学校的服务器来跑,学校的服务器配置是8张2080ti显卡。
Linux查看Nvidia显卡信息及显存的使用情况,可以使用Nvidia自带的一个命令行工具:
nvidia-smi
如果要周期性的输出显卡的使用情况,可以用watch指令实现:
watch -n 1 nvidia-smi
至于服务器的远程控制,在尝试WinSCP、XShell、FinalShell三个终端工具后,最终确定使用FinalShell,上传下载文件方便,还可以直接运行服务器终端,确实很好用。
离线激活FinalShell专业版参考下面这位大佬的博客:
1.这里要感谢大佬的博客:
anaconda python 版本对应关系_Wanderer001的博客-CSDN博客_anaconda3对应的python版本
最终在下面的清华镜像源中选择了 Anaconda3-4.2.0-Linux-x86_64.sh :
Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
2.下载完成后,用FinalShell上传到服务器:
3.使用bash命令进行安装,bash 安装包名:
bash Anaconda3-4.2.0-Linux-x86_64.sh
4.接着按照提示输入ENTER。到了环境变量配置选项这一步,记得输入yes:
5.在控制端输入conda,如果显示“conda:command not found”,则表示没配置环境变量(或是配置了环境变量并没有生效)。
网上有很多相关的配置教程,不过好像在上一步的时候输入过yes,只需要断开服务器主机,重新连接就好了。
此时输入conda -V,会正常显示版本号:
6.创建一个pyhon版本为3.5的虚拟环境。
conda create -n tfgpu python=3.5
注意:tfgpu是自己起的“个人环境名称”(your_env_name )。选好自己想要8 的python版本,之后在这个环境里进行tensorflow-gpu版的安装。
7.激活这个环境,就能看到环境由 base 切换到了 your_env_name。
conda activate your_env_name
这里我在激活的时候,系统提示我要使用source而不是conda,我也不知道为什么。
source activate tfgpu
退出环境的代码如下:
conda deactivate
Conda常用命令:
(1)查看已有环境
conda env list(2)查看已安装的包
conda list(3)更改镜像源
conda config --add channels 源地址
conda config --set show_channel_urls yes(4)删除环境
conda remove -n your_env_name --all
1.环境激活完以后,就是安装tensorflow-gpu 1.12了,可以使用以下指令:
pip install tensorflow-gpu==1.12.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
2.此时我的pip版本显示是8.9.1的,执行上面的指令时一直报错,说pip等级太低,后来根据提示升级了一下pip,就一直在报下面的错:
折腾了好久,终于通过下面大佬的帖子找到了解决方案:
pip指令出现SyntaxError: invalid syntax的两种原因及解决方法,完美解决!_御名方守矢-的博客-CSDN博客
不过帖子里获取get-pip.py的命令应该改为:
wget https://bootstrap.pypa.io/pip/3.5/get-pip.py
3.然后就能正常安装了:
安装过程中遇到了如下报错:
根据错误提示,分别重新安装了以上两个版本要求的包:(要先装futures才能装enum34)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "futures>=2.2.0"
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "enum34>=1.0.4"
4.CUDA9.0的下载地址:CUDA Toolkit 9.0 Downloads | NVIDIA Developer。
下载后是cuda_9.0.176_384.81_linux.run,然后使用sh cuda_9.0.176_384.81_linux.run命令进行安装。
sh cuda_9.0.176_384.81_linux.run
注意:默认安装路径是/usr/local/cuda-9.0,当然也可以自定义,安装到自己文件夹下面去,之后在.bashrc中配置好就行。
5.cuDNN的下载地址:cuDNN Archive | NVIDIA Developer。
下载以后得到cudnn-9.0-linux-x64-v7.5.0.56.tgz,解压:
将 /cudnn-9.0-linux-x64-v7.5.0.56/cuda/include/cudnn.h 上传到服务器的 /home/wang4/cuda-9.0/include 位置。
将 /cudnn-9.0-linux-x64-v7.5.0.56/cuda/lib64/libcudnn* 上传到服务器的 /home/wang4/cuda-9.0/lib64 位置。
检查是否安装成功:
cat /home/wang4/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果返回以下结果,则表示运行成功:
6.输入下面的指令配置.bashrc文件。
vi ~/.bashrc
然后按insert键,在最下方输入代码 :
export LD_LIBRARY_PATH=/home/wang4/cuda-9.0/lib64:$LD_LIBRARY_PATH
export PATH=/home/wang4/cuda-9.0/bin/:$PATH
然后按ESC键,再输入:wq!进行保存退出,
:wq!
输入source ~/.bashrc激活环境配置文件:
source ~/.bashrc
输入nvcc -V查看当前cuda版本,如果显示9.0,恭喜你,环境变量配置成功啦!
7.测试:
进入python,输入import tensorflow,再输入tensorflow.__version__,不报错即说明使用成功。
python
>>> import tensorflow
>>> tensorflow.__version__
1.由于训练时间很长,不可能一直开着本机电脑与学校的服务器保持连接,所以可以使用tmux来管理会话,这里感谢大佬的博客:
非root用户服务器安装tmux_不会概率的Bayes的博客-CSDN博客_服务器安装tmux
tmux的使用方法,参考下面这位大佬的博客和矩池云的官方帖:
TMUX使用教程_阿 mark的博客-CSDN博客_tmux使用教程
Tmux 使用教程 | 矩池云支持中心 (matpool.com)
以下是 Tmux 的最简操作流程:
- 新建会话tmux new -s [my_session]。
- 在 Tmux 窗口运行所需的程序。
- 按下快捷键Ctrl+b d将会话分离。
- 下次使用时,重新连接到会话tmux attach-session -t [my_session]。
2.安装项目运行所需的依赖库:
cd acdc_segmenter-master
pip install -r requirements.txt
3.修改config目录下的system.py:
project_root = '/home/wang4/acdc_segmenter-master'
#修改为你的项目代码目录
data_root = '/home/wang4/DataSet/ACDC_challenge_20170617/training'
#修改为你的项目训练集目录
test_data_root = '/home/wang4/DataSet/ACDC_challenge_20170617/testing'
#修改为你的项目测试集目录
local_hostnames = ['wang4']
#修改为你的运行平台的hostname
4. 在train.py文件下选择你需要运行的网络结构:
# from experiments import FCN8_bn_wxent as exp_config
# from experiments import unet2D_bn_modified_dice as exp_config
from experiments import unet2D_bn_modified_wxent as exp_config
# from experiments import unet2D_bn_modified_xent as exp_config
# from experiments import unet2D_bn_wxent as exp_config
# from experiments import unet3D_bn_modified_wxent as exp_config
# from experiments import unet2D_bn_wxentropy_bs5 as exp_config
在acdc_segmenter-master/experiments目录下打开你选择的网络所对应的参数设置文件。
以unet2D_bn_modified_wxent.py为例,建议修改learning_rate、max_epochs。learning_rate默认值为0.01,过大,会导致网络震荡;max_epochs默认值为20000,不修改后面可能需要手动中断训练;batch_size默认值为10,过大会导致在训练过程中遇到内存不够程序终止的情况,可以根据自己显存的情况来进行修改。
5.通过tmux在会话下输入:
python train.py
确认运行没有问题后,断开与服务器的连接,程序也能正常运行。
在训练完成之前的时间里,便可以学习源代码、数据集简介、数据预处理acdc_data.py的代码解析……
6.运行结果会保存在项目文件夹下的acdc_logdir文件夹下。
7.在训练过程中,可以通过tensorboard实时观察网络的训练情况。
在“FinalShell->连接管理器->SSH连接->隧道”中按下图进行隧道添加,直接将侦听端口和目标端口都设置成6006(tensorboard的访问地址)即可。
在服务器端运行:
tensorboard --logdir=acdc_logdir/[模型文件夹名]
本机浏览器访问127.0.0.1:6006,然后就可以开始愉快的看tensorboard的内容啦!
8.在训练期间或之后的任何时候,都可以通过键入以下内容来评估模型:
python evaluate_patients.py acdc_logdir/[model]
这里的[model]要改为自己的模型保存文件夹名,最终的分割结果保存在[model]/predications下。