graph convenet tsp项目搭建及简单复现
1.按照源项目搭建环境
环境说明
源项目由 Chaitanya K. Joshi 等人在github上开源发布 https://github.com/chaitjo/graph-convnet-tsp 本次对该项目的复现是在WSL2 ubuntu-18.04上进行的,基本环境要求如下:
- CUDA:cuda9.0
- python:3.6.7
- pytorch:0.4.1
环境搭建步骤
-
将开源项目克隆到本地
git clone https://github.com/chaitjo/graph-convnet-tsp.git
-
创建虚拟环境,命名为 GCN-TSP
conda create -n GCN-TSP python=3.6.7
-
安装CUDA 9.0
-
查看gcc版本,安装cuda9.0要求的gcc-5与g+±5
gcc --version
,g++ -version
先更换源链接为ubuntu16.04的软件源
sudo vim /etc/apt/sources.list
在sources.list下添加ubuntu16.04的软件源
deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
添加后,按住esc+shift+:,输入wq!保存并退出,更新源:
sudo apt-get update
查看能够安装的gcc版本
apt-cache policy gcc-5
安装gcc-5,g+±5
sudo apt install gcc-5
,sudo apt install g++-5
将下载好的版本设置为默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 40
查看版本
gcc --version
,g++ --version
显示为目标版本号即为成功
-
CUDA 9.0 下载安装
官网下载链接 https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux
选择 Linux → \rightarrow → ×86_64 → \rightarrow → Ubuntu → \rightarrow → 16.04 → \rightarrow → 并下载
安装相关依赖
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
转到安装包目录下,进行安装
cd /home/zpy sudo sh cuda_9.0.176_384.81_linux.run
安装选项如下
#直接按q退出协议说明 accept/decline/quit: accept You are attempting to install on an unsupported configuration. Do you wish to continue? y Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? n Install the CUDA 9.0 Toolkit? y Enter Toolkit Location 默认则直接回车 Do you want to install a symbolic link at /usr/local/cuda? #如果安装了多个版本cuda,如果目前想转换到当前cuda,则y否则n Install the CUDA 9.0 Samples? y Enter CUDA Samples Location 默认则直接回车
修改cuda的环境变量,然后更新
vim ~/.bashrc #末尾添加: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 export PATH=$PATH:/usr/local/cuda/bin export CUDA_HOME=$CUDA_HOME:/usr/local/cuda export PATH=$PATH:/home/zpy/anaconda3/bin export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} #保存退出 #更新:source ~/.bashrc
切换CUDA版本
#查看已安装的cuda版本 cd /usr/local/ ls #查看当前使用的cuda版本 stat cuda #选择切换使用的cuda版本 sudo rm -rf cuda sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda #并且更改export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}中对应的版本
-
-
安装pytorch 0.4.1
conda install pytorch=0.4.1 cuda90 -c pytorch
-
安装其他依赖包
pip install numpy==1.15.4 scipy==1.1.0 matplotlib==3.0.2 seaborn==0.9.0 pandas==0.24.2 networkx==2.2 scikit-learn==0.20.2 tensorflow-gpu==1.12.0 tensorboard==1.12.0 Cython
注 原作者用conda命令下载安装依赖项,但版本不兼容,推荐使用pip安装
pip3 install tensorboardx==1.5 fastprogress==0.1.18
conda install -c conda-forge jupyterlab
-
安装concorde
concorde要求的python版本要求为>=3.7,因此搭建并使用concorde生成实例不能在模型的环境中,需要创建新的环境。
conda create -n concorde python=3.9
搭建和使用concorde时需要转到在concorde环境下:
conda activate concorde
将concord包克隆到data文件夹下:
git clone https://github.com/jvkersch/pyconcorde
cd /home/zpy/GCN_TSP/graph-convnet-tsp/data/pyconcorde
使用如下命令安装
pip install -e .
用concorde创建实例数据,转到data文件夹并生成实例
如果在其他python文件中使用concorde,引用格式为
from pyconcorde.concorde.tsp import TSPsolver # 与在pyconcorde目录下使用 from concorde.tsp import TSPsolver # 区分开
-
jupyter说明
主文件main.ipynb使用的是jupyter文件格式,即使通过shift+ctrl+P选择解释器也会无法导入相关的包,解决方式如下:
-
查看jupyter可用kernel:
jupyter kernelspec list
显示为:
Available kernels: python3 /home/zpy/anaconda3/envs/GCN-TSP/share/jupyter/kernels/python3
-
添加kernel路径
打开路径
/home/zpy/anaconda3/envs/GCN-TSP/share/jupyter/kernels/python3
复制python3文件夹并重命名为解释器环境名称 GCN-TSP
进入GCN-TSP并打开kernel.json文件
- 将
"/home/zpy/anaconda3/python.exe"
改为 虚拟环境解释器路径"/home/zpy/anaconda3/envs/GCN-TSP/bin/python"
- 将
-
测试,问题解决
-
-
安装cuDNN
下载链接:https://developer.nvidia.com/rdp/cudnn-archive
移动到下载目录
cd \home\zpy tar -xzvf cudnn-9.0-linux-x64-v7.6.5.32.tgz
将相关文件拷贝到指定目录并授权
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64 sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h sudo chmod a+r /usr/local/cuda-9.0/lib64/libcudnn*
查看cuDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
2.项目的简单复现
用1000个具有30个节点的TSP实例训练并验证模型,在200个实例上测试模型。
生成数据实例
-
生成1000个节点数目为30的tsp实例
conda activate concorde cd /home/zpy/GCN_TSP/graph-convnet-tsp/data python generate_tsp_concorde.py --num_samples 1000 --num_nodes 30
-
划分训练集和验证集
python split_train_val.py --num_nodes 30 --val_size 200
-
生成测试集
python generate_tsp_concorde.py --num_samples 200 --num_nodes 30 --filename tsp30_test_concorde.txt
训练并测试实例
直接在 main.ipynb
主程序文件里面运行即可
- 部分结果如图:
-
并且可比较三种搜索方法的时间:
G time: 0.3797297477722168s BS time: 8.47810435295105s BS* time: 13.203379392623901s
目前只是进行了简要尝试,日后有其他测试持续更新。
参考文章:
An Efficient Graph Convolutional Network Technique for the Travelling Salesman Problem.https://doi.org/10.48550/arXiv.1906.01227
Ubuntu20.4安装CUDA9.0,多版本CUDA切换.http://t.csdnimg.cn/ZwgjE