1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
|
.. include:: ../links.inc
.. _advanced_setup:
Advanced setup
==============
Working with Jupyter Notebooks and JupyterLab
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you like using Jupyter notebooks, you should also update the "base"
conda environment to include the ``nb_conda_kernels`` package; this will
make it easier to use MNE-Python in Jupyter Notebooks launched from the
Anaconda GUI:
.. code-block:: console
$ conda install --name=base nb_conda_kernels
When using MNE-Python within IPython or a Jupyter notebook, we strongly
recommend using the Qt matplotlib backend for fast and correct rendering. On
Linux, for example, Qt is the only matplotlib backend for which 3D rendering
will work correctly. On macOS, certain matplotlib functions might not work as
expected on backends other than Qt. Enabling Qt can be accomplished when
starting IPython from a terminal:
.. code-block:: console
$ ipython --matplotlib=qt
or in a Jupyter Notebook, you can use the "magic" command:
.. code-block:: ipython
In [1]: %matplotlib qt
This will create separate pop-up windows for each figure, and has the advantage
that the 3D plots will retain rich interactivity (so, for example, you can
click-and-drag to rotate cortical surface activation maps).
If you are creating a static notebook or simply prefer Jupyter's inline plot
display, MNE-Python will work with the standard "inline" magic:
.. code-block:: ipython
In [1]: %matplotlib inline
but some functionality will be lost. For example, PyVista scenes will still
pop-up a separate window, but only one window at a time is possible, and
interactivity within the scene is limited in non-blocking plot calls.
.. admonition:: |windows| Windows
:class: note
If you are using MNE-Python on Windows through IPython or Jupyter, you might
also have to use the IPython magic command ``%gui qt`` (see `here
<https://github.com/ipython/ipython/issues/10384>`_). For example:
.. code-block:: ipython
In [2]: %gui qt
If you installed the ``nb_conda_kernels`` package into your ``base``
environment (as recommended), you should be able to launch ``mne``-capable
notebooks from within the Anaconda Navigator GUI without having to explicitly
switch to the ``mne`` environment first; look for ``Python [conda env:mne]``
when choosing which notebook kernel to use. Otherwise, be sure to activate the
``mne`` environment before launching the notebook.
If you use another Python setup and you encounter some difficulties please
report them on the `MNE Forum`_ or on the `GitHub issues page`_ to get
assistance.
It is also possible to interact with the 3D plots without installing Qt by using
the notebook 3d backend:
.. code-block:: ipython
In [1]: import mne
In [2]: mne.viz.set_3d_backend("notebook")
The notebook 3d backend requires PyVista to be installed along with other packages,
please follow :ref:`standard-instructions`.
Installing to a headless Linux server
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
First, follow the standard installation instructions. Next, you can choose
to install the ``osmesa`` (off-screen MESA) VTK variant, which avoids the need
to use Xvfb to start a virtual display (and have a sufficiently updated
MESA to render properly):
.. code-block:: console
$ conda install -c conda-forge "vtk>=9.2=*osmesa*"
Using the development version
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
See :ref:`installing_main` for how to do a one-time update to the latest
development version of MNE-Python. If you plan to contribute to MNE-Python, or
just prefer to use git rather than pip to make frequent updates, there are
instructions for installing from a ``git clone`` in the :ref:`contributing`.
.. _other-py-distros:
Other Python distributions
^^^^^^^^^^^^^^^^^^^^^^^^^^
While the `Anaconda`_ Python distribution provides many conveniences, other
distributions of Python should also work with MNE-Python. In particular,
`Miniconda`_ is a lightweight alternative to Anaconda that is fully compatible;
like Anaconda, Miniconda includes the ``conda`` command line tool for
installing new packages and managing environments; unlike Anaconda, Miniconda
starts off with a minimal set of around 30 packages instead of Anaconda's
hundreds. See the `installation instructions for Miniconda`_ for more info.
A similar alternative is `MiniForge`_, which uses the ``conda-forge`` channel
as the default source for package installation (saving you the trouble of
typing ``--channel=conda-forge`` with each ``conda install`` command).
.. warning::
If you have the ``PYTHONPATH`` or ``PYTHONHOME`` environment variables set,
you may run into difficulty using Anaconda. See the
`Anaconda troubleshooting guide`_ for more information. Note that it is
easy to switch between ``conda``-managed Python installations and the
system Python installation using the ``conda activate`` and ``conda
deactivate`` commands, so you may find that after adopting Anaconda it is
possible (indeed, preferable) to leave ``PYTHONPATH`` and ``PYTHONHOME``
permanently unset.
It is also possible to use a system-level installation of Python (version
|min_python_version| or higher) and use ``pip`` to install MNE-Python and its
dependencies, using the provided `requirements file`_:
.. code-block:: console
$ curl --remote-name https://raw.githubusercontent.com/mne-tools/mne-python/main/requirements.txt
$ pip install --user -r requirements.txt
Other configurations will probably also work, but we may be unable to offer
support if you encounter difficulties related to your particular Python
installation choices.
.. _CUDA:
GPU acceleration with CUDA
^^^^^^^^^^^^^^^^^^^^^^^^^^
MNE-Python can utilize `NVIDIA CUDA GPU processing`_ to speed up some
operations (e.g. FIR filtering) by roughly an order of magnitude. To use CUDA,
first ensure that you are running the `NVIDIA proprietary drivers`_ on your
operating system, and then do:
.. code-block:: console
$ 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
If you receive a message reporting the GPU's available memory, CuPy_
is working properly. To permanently enable CUDA in MNE, you can do::
>>> mne.utils.set_config('MNE_USE_CUDA', 'true') # doctest: +SKIP
You can then test MNE CUDA support by running the associated test:
.. code-block:: console
$ pytest mne/tests/test_filter.py -k cuda
If the tests pass, then CUDA should work in MNE. You can use CUDA in methods
that state that they allow passing ``n_jobs='cuda'``, such as
:meth:`mne.io.Raw.filter` and :meth:`mne.io.Raw.resample`,
and they should run faster than the CPU-based multithreading such as
``n_jobs=8``.
Off-screen rendering with MESA
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On remote Linux systems, it might be possible to use MESA software rendering
(such as ``llvmpipe`` or ``swr``) for 3D visualization (with some tweaks).
For example, on CentOS 7.5 you might be able to use an environment variable
to force MESA to use modern OpenGL by using this before executing
``spyder`` or ``python``:
.. code-block:: console
$ export MESA_GL_VERSION_OVERRIDE=3.3
Also, it's possible that different software rending backends might perform
better than others, such as using the ``llvmpipe`` backend rather than ``swr``.
In newer MESA (21+), rendering can be incorrect when using MSAA, so consider
setting:
.. code-block:: console
$ export MNE_3D_OPTION_MULTI_SAMPLES=1
MESA also can have trouble with full-screen antialiasing, which you can
disable with:
.. code-block:: console
$ export MNE_3D_OPTION_ANTIALIAS=false
or by doing
:func:`mne.viz.set_3d_options(antialias=False) <mne.viz.set_3d_options>` within
a given Python session.
Another issue that may come up is that the MESA software itself may be out of date
in certain operating systems, for example CentOS. This may lead to incomplete
rendering of some 3D plots. A solution is described in this `Github comment <https://github.com/mne-tools/mne-python/issues/7977#issuecomment-729921035>`_.
It boils down to building a newer version (e.g., 18.3.6)
locally following a variant of `these instructions <https://xorg-team.pages.debian.net/xorg/howto/build-mesa.html#_preparing_mesa_sources>`_.
If you have CentOS 7 or newer, you can also try some `prebuilt binaries <https://osf.io/sp9qg/download>`_ we made.
After downloading the files, untar them and add them to the appropriate library paths
using the following commands:
.. code-block:: console
$ tar xzvf mesa_18.3.6_centos_lib.tgz
$ export LIBGL_DRIVERS_PATH="${PWD}/lib"
$ export LD_LIBRARY_PATH="${PWD}/lib"
To check that everything went well, type the following:
.. code-block:: console
$ glxinfo | grep "OpenGL core profile version"
which should give::
OpenGL core profile version string: 3.3 (Core Profile) Mesa 18.3.6
Another way to check is to type:
.. code-block:: console
$ mne sys_info
and it should show the right version of 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)}
...
.. _troubleshoot_3d:
Troubleshooting 3D plots
^^^^^^^^^^^^^^^^^^^^^^^^
3D plotting trouble after upgrade on macOS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When upgrading MNE-Python from version 0.19 or lower, some macOS users may end
up with
conflicting versions of some of the 3D plotting dependencies. If you plot using
the pyvista 3D backend and find that you can click-drag to rotate the brain,
but cannot adjust any of the settings sliders, it is likely that your versions
of VTK and/or QT are incompatible. This series of commands should fix it:
.. code-block:: console
$ conda uninstall vtk
$ pip uninstall -y pyvista
$ conda install vtk
$ pip install --no-cache pyvista
If you installed VTK using ``pip`` rather than ``conda``, substitute the first
line for ``pip uninstall -y vtk``.
.. LINKS
.. _environment file: https://raw.githubusercontent.com/mne-tools/mne-python/main/environment.yml
.. _`pyvista`: https://docs.pyvista.org/
.. _`X server`: https://en.wikipedia.org/wiki/X_Window_System
.. _`xvfb`: https://en.wikipedia.org/wiki/Xvfb
|