Anaconda

  • Anaconda - кроссплатформенный дистрибутив Python, включающий большое количество дополнительных модулей. Также содержит реализацию языка R. Имеет несколько версий, как коммерческие, так и Open Source. Предлагается для замены Python, идущего в составе операционной системы SUSE Linux Enterprise Server, поскольку официальные репозитории SLES не содержат многие востребованные модули, доступные с помощью Anaconda (например, python-matplotlib, mpi4py).
  • https://anaconda.com - сайт разработчиков Anaconda, официальные дистрибутивы и инструкции.
  • https://docs.anaconda.com/anaconda/packages/pkg-docs - полный список доступных официальных пакетов от разработчиков Anaconda. Если нужный вам пакет у нас не установлен, обратитесь к администрации комплекса.
  • http://anaconda.org - Anaconda Cloud, хостинг сторонних пакетов для Anaconda.
  • Пользователи комплекса могут самостоятельно установить Anaconda в свою домашнюю директорию. Но в составе дистрибутива идут далеко не все пакеты, предполагается, что остальные будут скачиваться через интернет, а доступ в интернет с комплекса по умолчанию запрещён. Поэтому ниже описано использование централизованно установленной Anaconda, поддерживаемой администраторами комплекса. Её пользователи не могут самостоятельно устанавливать или обновлять пакеты, даже в созданных для них окружениях (см ниже).
  • Рекомендуемая версия: Anaconda3 2020.11 с последующими обновлениями (по состоянию на сентябрь 2023г. это версия 2023.09). Для её использования необходимо предварительно настроить переменные окружения, выполнив команду:
    source /opt/shared/anaconda/anaconda3-2020/bin/activate
    • Лучше выполнять эту команду из скрипта для qsub, это позволит разным задачам иметь разные значения переменных окружения.
    • При написании скриптов на Python учитывайте, что для использования Anaconda интерпретатором должен указываться не системный '/usr/bin/python', а '/opt/shared/anaconda/anaconda3-2020/bin/python'
  • Также сохранены более ранние версии: Anaconda2 на Python 2.7 и Anaconda3 на Python 3.5. Для них настройка переменных окружения выполняется следующим образом:
    • для Anaconda2:
      export PATH=/opt/shared/anaconda/anaconda2/bin:$PATH
    • для Anaconda3:
      export PATH=/opt/shared/anaconda/anaconda3/bin:$PATH
  • Anaconda позволяет иметь несколько независимых конфигураций установленных пакетов, называемых 'Environment' ('окружение'). У нас они используются для установки определённого ПО для конкретного пользователя.
  • Для использования окружения с именем 'test_env' необходимо после предварительной настройки переменных окружения дополнительно выполнить команду следующего вида:
    source activate test_env

    После выполнения этой команды изменится приглашение к вводу команд, оно будет отображать название текущего окружения:

    (test_env) clu:~ #
  • Для выхода из окружения нужно выполнить:
    source deactivate
  • mpi4py - пакет для использования стандарта MPI из программ на языке Python.
  • mpi4py из состава Anaconda использует реализацию MPI, также идущую в составе Anaconda - MPICH.
  • При работе с Anaconda реализация MPI, выбранная утилитой 'mpi-selector', не используется. Чтобы отключить настройку переменных окружения для неё, выполните на интерфейсном сервере:
    mpi-selector --unset

    Затем разорвите SSH-соединение с интерфейсным сервером и подключитесь заново.

  • Ниже приведён пример работы с mpi4py.


  • Создайте файл 'submit.sh' такого вида:
    #!/bin/bash
    
    #PBS -l select=3:ncpus=2:mpiprocs=2:mem=1gb,place=scatter
    #PBS -l walltime=0:01:00
    
    cd $PBS_O_WORKDIR
    
    source /opt/shared/anaconda/anaconda3-2020/bin/activate
    
    echo -n 'mpiexec = '
    which mpiexec
    echo
    
    MPI_NP=$(wc -l $PBS_NODEFILE | awk '{ print $1 }')
    
    mpiexec -hostfile $PBS_NODEFILE -np $MPI_NP $PBS_O_WORKDIR/mpitest.py
  • Создайте файл 'mpitest.py', в котором в качестве интерпретатора Python укажите реализацию из состава Anacoda:
    #!/opt/shared/anaconda/anaconda3-2020/bin/python
    
    from mpi4py import MPI as mpi
    import socket
    
    comm_world = mpi.COMM_WORLD
    r = comm_world.Get_rank()
    s = comm_world.Get_size()
    
    str='mpi proc '+str(r)+' of '+str(s)+' run on '+socket.gethostname()
    print(str)
  • Разрешите исполнение этого файла:
    chmod u+x mpitest.py
  • Поставьте задачу в очередь:
    qsub submit.sh
  • После завершения задачи в лог-файле с потоком стандартного вывода будет примерно следующее:
    mpiexec = /opt/shared/anaconda/anaconda3-2020/bin/mpiexec
    
    mpi proc 1 of 6 run on cn243
    mpi proc 0 of 6 run on cn243
    mpi proc 3 of 6 run on cn204
    mpi proc 5 of 6 run on cn205
    mpi proc 2 of 6 run on cn204
    mpi proc 4 of 6 run on cn205