抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

对象

GNN4EEG

官方搭建过程

  1. Install Anaconda with Python >= 3.5
  2. Clone the repository
1
git clone https://github.com/Miracle-2001/GNN4EEG.git
  1. Install requirements and step into the src folder
1
2
3
cd GNN4EEG
cd src
pip install -r requirements.txt

如果在 Windows 上按照以上过程,恭喜你,十有八九会卡在pip install -r requirements.txt这一步。

可能会出现的错误包括但不限于:

  1. eeg-positions安装失败
  2. mkl-fft==1.3.1安装失败
  3. pyg-lib找不到对应版本
  4. torch-cluster等工具链找不到对应版本

配置全过程

eeg-positions 与 mkl-fft 安装失败

报错信息:

1
ERROR: Package 'eeg-positions' requires a different Python: 3.6.15 not in '>=3.7'

挺好懂的,版本过低嘛。

实际通过.ipynb 文件源码能发现作者用的压根不是 3.5,而是3.10

但当时的我还没发现(后面用 git diff 才发现的…), 尝试 3.7, 3.8, 3.9 等多个版本后发现Python3.9能够正常安装上这两个包。

pyg-lib找不到对应版本

报错信息:

1
2
3
ERROR: Ignored the following versions that require a different python version: 2.5.2 Requires-Python !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<3.9dev,>=2.7
ERROR: Could not find a version that satisfies the requirement pyg-lib==0.2.0+pt113cu116 (from versions: none)
ERROR: No matching distribution found for pyg-lib==0.2.0+pt113cu116

其他人也都大部分卡在这个地方过不去。它说没有找到对应的版本,那我们就去Pypi上看看到底有哪些版本。

pyg-lib

官网上面说可以用这个命令安装:

1
pip install pyg-lib -f https://data.pyg.org/whl/torch-${TORCH}+${CUDA}.html

哦?后面的那个网址可能就是安装源了吧,对应 torch1.13.0 和 cu116 进去看看,能不能手动下载下来呢?

网址

不是这啥啊,怎么全是 linux 呢?

回去再看看官网

呃呃,幽默 windows。

咋整吧,上 Linux 咯。

WSL 安装过程

Linux 我们又不用它图形化界面,能让我输指令就行了,所以装个 wsl 吧。

添加功能

在开始菜单搜索启用或关闭Windows功能,把Hyper-V, Windows虚拟机监控程序平台, 适用于Linux的Windows子系统给勾上。

家庭版不能勾哦,整个专业版 Windows 吧。

虚拟化内核

接着检查一下 cpu 虚拟化开了没,没开的要在 BIOS 上开开。

安装 ubuntu

直接 cmd 输入安装就可以啦。

1
wsl --install

请保证你的 C 盘有至少 20G 空闲空间。

结果安装失败了。

1
Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.

不是,我不是已经开了吗?又在网上找教程。

教程

最后在 cmd 又输入了bcdedit /set hypervisorlaunchtype auto成功启动 ubuntu 并且设置密码。

以上每一输入一次指令后都建议重启一下哦。

迁移 ubuntu

由于后续还要下很多东西,wsl 默认安装到 C 盘上了。为了避免红盘,应该将我们得 linux 迁移到别的盘里。

按照这个教程走就没什么问题,这里就不赘述了。

教程

(记得 export 的时候别忘了带后缀名.tar,以及提前建好文件夹放进去)

完善 ubuntu

上线后照例更新一下 apt 包管理器。

1
sudo apt update && apt upgrade

这里要再装一个g++,不然后面的torch工具链无法 setup。

1
sudo apt install g++

这边为了看能不能调用 cuda 我还装了个 cudatoolkit。(不知道有没有影响,但我确实这么做了)

1
sudo apt install cudatoolkit

为了避免环境污染(保护地球环境),这里装个 miniconda 用来建 conda 环境。

去清华源下个最新版: https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/

在我们的 ubuntu 里下方便点。

1
2
3
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc

安装一路 yes 过去,最后那步是为了激活我们安装的 conda。

创建环境

找个目录git clone https://github.com/Miracle-2001/GNN4EEG.git一下仓库。

然后就是创建 conda 环境。

1
2
conda create -n gnn4eeg python==3.9
conda activate gnn4eeg

ok 了,接下来回到最开始的目标,手动安装一下该死的pyg-lib

安装完成后记得在 requirements.txt 把它给删了。

1
pip install pyg-lib -f https://data.pyg.org/whl/torch-2.0.1+cu121.html

(至于这里为什么不是 torch1.13 和 cu116 原因如下)

torch-cluster 等工具链

这里感觉可能 torch 版本跟 cuda 对不上(cuda 是 12.1),由于作者用的是 torch1 的末尾版本,所以感觉上 torch2 应该没问题。

这里看 Pypi 官网上面的安装说明。

1
2
pip install torch torchvision torchaudio
pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.0.0+cu121.html

如果以上都完成了的话再安装一遍 requirements.txt。

1
pip install -r requirements.txt

运行

这里先建一个test.py看看。

1
2
3
import torch
import pyg_lib
print(torch.cuda.is_available())

如果能运行出True就大功告成了。

如果最后末尾是这种类似错误那就是 cuda 和 torch 版本对不上,去查一下文档玩版本消消乐吧。

1
OSError: libtorch_cuda_cpp.so: cannot open shared object file: No such file or directory

成功了那就去运行一下样例文件example_dgcnn_cross2.py吧。

前面 import 都能通过的话就看到胜利曙光了。

sklearn 版本错误

requirements.txt 里面 sklearn 指定版本是 0.0.0?有点怪,把它pip uninstall sklearn后再安装一下pip install sklearn

版本依赖已经不管啦

hdf5 导入出错

运行到 loader 那就报错了。

1
2
...
__init__() missing 1 required positional argument: 'version'

检查了一下是 hdf5 的问题,反正都是读入 matlab 文件,你不行我换一个库呗。

ge/protocols.py里面的 135 行data = hdf5.loadmat(data_path)['de_lds']改成用scipy.io来导入 mat 文件。

1
2
3
import scipy.io as scio
...
data = scio.loadmat(data_path)['de_lds']

找不到设备

这些能够一直跑到训练模型了,但是又报错了。

1
RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1. Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

看看我有哪些 gpu 以及编号。

1
nvidia-smi

确实检测到了 gpu,但为啥不学习呢?

example_dgcnn_cross2.py第 31 行。

1
device=torch.device('cuda:3')

我哪有 4 路交火的 gpu?把 3 改成 0 就可以了。

成功!

最后看到这个结果的时候感动得要哭出来了快。

目前跑一个 epoch 要 10 秒左右,跑一轮设置为 100 个 epoch,再加上 27 行的K=10,应该是要跑 1000 次,大概快三个小时的样子。

不过这个模型大概 epoch 在 30 到 50 次左右就差不多收敛了,可以看看设置个早停优化一下。

源码到时候再研究一下吧。

下面是配置好的 fork 仓库。

链接

评论