对象
官方搭建过程
- Install Anaconda with Python >= 3.5
- Clone the repository
1 | git clone https://github.com/Miracle-2001/GNN4EEG.git |
- Install requirements and step into the
src
folder
1 | cd GNN4EEG |
如果在 Windows 上按照以上过程,恭喜你,十有八九会卡在pip install -r requirements.txt
这一步。
可能会出现的错误包括但不限于:
eeg-positions
安装失败mkl-fft==1.3.1
安装失败pyg-lib
找不到对应版本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 | 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 |
其他人也都大部分卡在这个地方过不去。它说没有找到对应的版本,那我们就去Pypi
上看看到底有哪些版本。
官网上面说可以用这个命令安装:
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 | wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh |
安装一路 yes 过去,最后那步是为了激活我们安装的 conda。
创建环境
找个目录git clone https://github.com/Miracle-2001/GNN4EEG.git
一下仓库。
然后就是创建 conda 环境。
1 | conda create -n gnn4eeg python==3.9 |
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 | pip install torch torchvision torchaudio |
如果以上都完成了的话再安装一遍 requirements.txt。
1 | pip install -r requirements.txt |
运行
这里先建一个test.py
看看。
1 | import torch |
如果能运行出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 | ... |
检查了一下是 hdf5 的问题,反正都是读入 matlab 文件,你不行我换一个库呗。
在ge/protocols.py
里面的 135 行data = hdf5.loadmat(data_path)['de_lds']
改成用scipy.io
来导入 mat 文件。
1 | import scipy.io as scio |
找不到设备
这些能够一直跑到训练模型了,但是又报错了。
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 仓库。