Anaconda

  • 'Anaconda is a free, easy-to-install package manager, environment manager, Python distribution, and collection of over 720 open source packages with free community support.'
  • Anaconda - бесплатный кроссплатформенный дистрибутив Python, включающий большое количество дополнительных модулей. Также содержит реализацию языка R. Предназначен для замены Python, идущего в составе операционной системы SUSE Linux Enterprise Server, поскольку официальные репозитории SLES не содержат многие востребованные модули, доступные с помощью Anaconda (например, python-matplotlib, mpi4py).
  • У нас установлены две версии: Anaconda2, содержащая Python 2.7 и его модули, и Anaconda3, содержащая Python 3.5.
  • Для использования Anaconda2 необходимо предварительно настроить переменные окружения:
    module load anaconda/anaconda2

    или

    export PATH=/opt/shared/anaconda/anaconda2/bin:$PATH
  • И аналогично для Anaconda3:
    module load anaconda/anaconda3

    или

    export PATH=/opt/shared/anaconda/anaconda3/bin:$PATH
  • При написании скриптов на Python учитывайте, что для использования Anaconda интерпретатором должен указываться не системный '/usr/bin/python', а '/opt/shared/anaconda/anaconda2/bin/python' или '/opt/shared/anaconda/anaconda3/bin/python'
  • Кроме разделения в соответствии с ветками Python (2.x и 3.x), Anaconda также позволяет иметь несколько независимых конфигураций установленных пакетов, называемых 'Environment' ('окружение').
  • Это используется, например, для случаев, когда нужно использовать более старую или более новую версию какого-нибудь пакета, чем идёт в текущем наборе. Также мы используем эту возможность при установке 'неофициальных' пакетов, созданных сообществом.
  • Для использования окружения с именем 'test_env' необходимо после предварительной настройки переменных окружения (например, выполнением 'module load anaconda/anaconda3') дополнительно выполнить команду следующего вида:
    source activate test_env

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

    (test_env) clu:~ #
  • Для выхода из окружения нужно выполнить:
    source deactivate
  • Пакет для использования стандарта 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 /etc/profile.d/modules.sh
    module load anaconda/anaconda2
    
    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/anaconda2/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
  • Поставьте задачу в очередь:
    qsub submit.sh
  • После завершения задачи в лог-файле с потоком стандартного вывода будет примерно следующее:
    mpiexec = /opt/shared/anaconda/anaconda2/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