非官方中文翻译 本页译自 MNE-Python 官方文档: 查看英文原文 ↗。 文档版权归 MNE Developers 所有(BSD-3-Clause)。

高级设置#

在 Jupyter Notebook 和 JupyterLab 中使用#

如果你喜欢使用 Jupyter notebook,还应更新 base conda 环境以包含 nb_conda_kernels 包;这样在从 Anaconda GUI 启动的 Jupyter Notebook 中使用 MNE-Python 会更方便:

$ conda install --name=base nb_conda_kernels

在 IPython 或 Jupyter notebook 中使用 MNE-Python 时,我们强烈建议使用 Qt 的 matplotlib 后端,以获得快速且正确的渲染。例如在 Linux 上,Qt 是唯一能正确进行 3D 渲染的 matplotlib 后端。在 macOS 上,除 Qt 之外的后端上某些 matplotlib 函数可能无法按预期工作。从终端启动 IPython 时可以启用 Qt:

$ ipython --matplotlib=qt

或者在 Jupyter Notebook 中,可以使用 “magic” 命令:

In [1]: %matplotlib qt

这样会为每个图创建独立的弹出窗口,其优点是 3D 图能保留丰富的交互功能(例如,你可以单击并拖动来旋转皮层表面激活图)。

如果你要创建静态 notebook,或者只是更喜欢 Jupyter 的内联绘图显示,MNE-Python 也可以配合标准的 “inline” magic 使用:

In [1]: %matplotlib inline

但会损失一些功能。例如,PyVista 场景仍会弹出单独的窗口,但一次只能有一个窗口,而且在非阻塞绘图调用中,场景内的交互会受到限制。

Windows

如果你在 Windows 上通过 IPython 或 Jupyter 使用 MNE-Python,可能还需要使用 IPython magic 命令 %gui qt(参见此处)。例如:

In [2]: %gui qt

如果你已按建议将 nb_conda_kernels 包安装到 base 环境,就应该能在 Anaconda Navigator GUI 中直接启动支持 MNE 的 notebook,而无需先显式切换到 mne 环境;在选择 notebook 内核时,请查找 Python [conda env:mne]。否则,请务必在启动 notebook 之前激活 mne 环境。

如果你使用其他 Python 环境并遇到困难,请在 MNE 论坛或 GitHub issues 页面反馈,以获得帮助。

也可以在不安装 Qt 的情况下,通过 notebook 3d 后端与 3D 图交互:

In [1]: import mne
In [2]: mne.viz.set_3d_backend("notebook")

notebook 3d 后端需要安装 PyVista 及其他相关包,请按照“通过 pip 或 conda 安装”中的说明操作。

在无图形界面的 Linux 服务器上安装#

首先,请按照标准安装说明操作。接下来,你可以选择安装 osmesa(离屏 MESA)VTK 变体,这样可以避免使用 Xvfb 启动虚拟显示(同时需要足够新的 MESA 才能正确渲染):

$ conda install -c conda-forge "vtk>=9.2=*osmesa*" "mesalib=21.2.5"

使用开发版#

有关如何一次性更新到 MNE-Python 最新开发版,请参见升级到开发版。如果你打算为 MNE-Python 做贡献,或者只是更喜欢用 git 而不是 pip 进行频繁更新,贡献指南中提供了从 git 克隆安装的说明。

选择 Qt 框架#

conda-forge 上的 MNE-Python 自带 PySide6。如果你想使用其他 Qt 绑定,可以改用 pip 安装 MNE-Python:

$ pip install "mne[full]"          # uses PySide6
$ pip install "mne[full-pyside6]"  # same as above
$ pip install "mne[full-pyqt6]"    # uses PyQt6
$ pip install "mne[full-no-qt]"    # don't install any Qt binding

修复 Linux 上的程序坞图标#

在较新版本的 Ubuntu(例如 24.04)上,应用程序必须提供与之关联的 .desktop 文件,否则将使用类似下面的通用图标:

Default Linux dock icon

要解决此问题,你可以为 MNE-Python 创建一个 .desktop 文件。下面是一个示例文件,在修正其中 MNE-Python 图标的路径后,可将其保存为 ~/.local/share/applications/mne-python.desktop;如有需要,可以在此下载该图标:

[Desktop Entry]
Type=Application
版本=1.5
Name=MNE-Python
StartupWMClass=MNE-Python
Icon=/path/to/mne-python/mne/icons/mne_default_icon.png
SingleMainWindow=true
NoDisplay=true

这样图标就应该能在程序坞中正确显示:

MNE-Python dock icon

使用 CUDA 进行 GPU 加速#

MNE-Python 可以利用 NVIDIA CUDA GPU 处理,将某些操作(例如 FIR 滤波)的速度提高约一个数量级。要使用 CUDA,请先确保你的操作系统运行的是 NVIDIA 专有驱动,然后执行:

$ conda install cupy
$ MNE_USE_CUDA=true python -c "import mne; mne.cuda.init_cuda(verbose=True)"
Enabling CUDA with 1.55 GB available memory

如果你看到报告 GPU 可用内存的消息,说明 CuPy 工作正常。要在 MNE 中永久启用 CUDA,可以执行:

>>> mne.utils.set_config('MNE_USE_CUDA', 'true')

然后,你可以运行相关测试来检验 MNE 的 CUDA 支持:

$ pytest mne/tests/test_filter.py -k cuda

如果测试通过,那么 CUDA 应该可以在 MNE 中正常工作。在声明允许传入 n_jobs='cuda' 的方法中可以使用 CUDA,例如 mne.io.Raw.filter() 和 mne.io.Raw.resample(),它们应该比基于 CPU 的多线程(如 n_jobs=8)运行得更快。

使用 MESA 进行离屏渲染#

在远程 Linux 系统上,也许可以使用 MESA 软件渲染(如 llvmpipe 或 swr)进行 3D 可视化(需要一些调整)。例如,在 CentOS 7.5 上,你或许可以在运行 spyder 或 python 之前设置环境变量,强制 MESA 使用现代 OpenGL:

$ export MESA_GL_VERSION_OVERRIDE=3.3

另外,不同的软件渲染后端性能可能各不相同,例如使用 llvmpipe 后端可能比 swr 表现更好。在较新的 MESA(21+)中,启用 MSAA 时渲染可能出现错误,因此可以考虑设置:

$ export MNE_3D_OPTION_MULTI_SAMPLES=1

MESA 在处理全屏抗锯齿时也可能出现问题,你可以通过以下方式禁用它:

$ export MNE_3D_OPTION_ANTIALIAS=false

或者在某个 Python 会话中执行 mne.viz.set_3d_options(antialias=False)。

Linux 上的某些硬件加速显卡(例如部分 Intel 显卡)对 OpenGL 的实现不够完善,在这种情况下,可以改用类似下面的方式强制使用软件渲染:

$ export LIBGL_ALWAYS_SOFTWARE=true

另一个可能出现的问题是,在某些操作系统(例如 CentOS)中,MESA 软件本身可能已经过时,这会导致某些 3D 图渲染不完整。这个 GitHub 评论中描述了一种解决方案,其核心是参照这些说明的变体在本地构建较新的版本(例如 18.3.6)。如果你使用的是 CentOS 7 或更新版本,也可以尝试我们制作的一些预编译二进制文件。下载文件后,请解压它们,并使用以下命令将其添加到相应的库路径:

$ tar xzvf mesa_18.3.6_centos_lib.tgz
$ export LIBGL_DRIVERS_PATH="${PWD}/lib"
$ export LD_LIBRARY_PATH="${PWD}/lib"

要检查一切是否正常,请输入以下命令:

$ glxinfo | grep "OpenGL core profile version"

它应该输出:

OpenGL core profile version string: 3.3 (Core Profile) Mesa 18.3.6

另一种检查方式是输入:

$ mne sys_info

它应该会显示正确的 MESA 版本:

...
pyvista:       0.27.4 {pyvistaqt=0.2.0, OpenGL 3.3 (Core Profile) Mesa 18.3.6 via llvmpipe (LLVM 3.4, 256 bits)}
...

3D 绘图故障排查#

在 macOS 上升级后出现 3D 绘图问题#

从 0.19 或更低版本升级 MNE-Python 时,部分 macOS 用户可能会遇到某些 3D 绘图依赖版本冲突的问题。如果你使用 pyvista 3D 后端绘图,发现可以单击拖动来旋转大脑,却无法调整任何设置滑块,那么很可能是 VTK 和/或 QT 的版本不兼容。以下这组命令应该可以解决:

$ conda uninstall vtk
$ pip uninstall -y pyvista
$ conda install vtk
$ pip install --no-cache pyvista

如果你是使用 pip 而不是 conda 安装的 VTK,请将第一行替换为 pip uninstall -y vtk。

在 Linux 上出现 3D 绘图问题#

如果你在 Linux 上遇到 3D 绘图问题,一种可能是你的图形环境使用了 Wayland。要检查,可以执行:

$ echo $XDG_SESSION_TYPE
wayland

如果是这样,你需要让 Qt 使用 X11 而不是 Wayland。可以在终端会话中设置 export QT_QPA_PLATFORM=xcb。若要使其在你的登录会话中永久生效,可以将其写入 ~/.profile 等文件。