УНИТе

Портал > Документация > Компилиране, инсталиране и използване на оптимизирана версия на mpi4py за Python под CentOS 7

Компилиране, инсталиране и използване на оптимизирана версия на mpi4py за Python под CentOS 7 и 8

Съдържание:

  1. Предварителна информация
  2. Изтегляне на изходния код и компилирането му с Intel Compilers
  3. Проверка дали модула mpi4py се зарежда успешно от Python

 

1. Предварителна информация

Mpi4py е модул (библиотека) за Python 2.x и 3.x, позволяващ използването на MPI паралелизъм в Python. Целта на този документ е да покаже как да бъде изграден този модул алтернативно (алтернативно на този, наличен в пакетните хранилища на CentOS 7 и 8), с цел постигане на висока производителност, чрез използване на компилаторите от пакета Intel Compilers.

Документът обхваща системната версия на Python (за CentOS 7 това е 2.7, докато в CentOS 8 това е 3.6) и версии на Python 3.x за CentOS 7, предоставяни от пакетното хранилище SCLo. Добавена е и поддръжка за Python 3.8, компилиран и инсталиран съгласно документа "Компилиране, инсталиране и използване на Python 3.8 под CentOS 8".

 

2. Изтегляне на изходния код и компилирането му с MPI компилаторите от Intel Compilers

Преди да започнете процеса на компилация, убедете се, че mpiicc сочи към MPI версията на icc компилатора от пакета с Intel Compilers.

Програмният код на mpi4py може да бъде изтеглен от следния адрес (архива с кода е най-долу на страницата, а файла е с разширение "tar.gz"):

https://pypi.org/project/mpi4py/#files

Създайте директория за разпакетиране и компилиране на кода, изтеглетете в нея последната версия на архива, разпакетирайте го и влезте в създадената след разпакетирането поддиректория с името на пакета и версията на пакета:

$ mkdir ~/build
$ cd ~/build
$ wget https://files.pythonhosted.org/packages/ec/8f/bbd8de5ba566dd77e408d8136e2bab7fdf2b97ce06cab830ba8b50a2f588/mpi4py-3.0.3.tar.gz
$ tar xvf mpi4py-3.0.3.tar.gz
$ cd mpi4py-3.0.3

Там стартирайте процеса на компилиране и инсталиране на кода в зависимост от версията на Python и дистрибуцията:

  • python 2.7 (системен за CentOS 7):

    $ sudo yum install python-devel
    $ mkdir -p /usr/unite/python-2.7.5-mpi4py-3.0.3-icc/lib64/python2.7/site-packages
    $ PYTHONPATH=/usr/unite/python-2.7.5-mpi4py-3.0.3-icc/lib64/python2.7/site-packages CC=mpiicc python setup.py install --prefix="/usr/unite/python-2.7.5-mpi4py-3.0.3-icc"
  • python 2.7 (възможен за добавяне в CentOS 8):

    $ sudo dnf install python2-devel
    $ mkdir -p /usr/unite/python-2.7.15-gcc-c8-mpi4py-3.0.3-icc/lib/python2.7/site-packages
    $ PYTHONPATH=/usr/unite/python-2.7.15-gcc-c8-mpi4py-3.0.3-icc/lib/python2.7/site-packages CC=mpicc python2 setup.py install --prefix=/usr/unite/python-2.7.15-gcc-c8-mpi4py-3.0.3-icc
  • rh-python 3.4 (инсталиран от пакетните хранилища на SCLo за CentOS 7):

    $ scl enable rh-python34 bash
    $ mkdir -p /usr/unite/rh-python34-mpi4py-3.0.3-icc/lib64/python3.4/site-packages
    $ PYTHONPATH=/usr/unite/rh-python34-mpi4py-3.0.3-icc/lib64/python3.4/site-packages CC=mpiicc python setup.py install --prefix="/usr/unite/bin/rh-python34-mpi4py-3.0.3-icc"
  • rh-python 3.5 (инсталиран от пакетните хранилища на SCLo за CentOS 7):

    $ scl enable rh-python35 bash
    $ mkdir -p /usr/unite/rh-python35-mpi4py-3.0.3-icc/lib64/python3.5/site-packages
    $ PYTHONPATH=/usr/unite/rh-python35-mpi4py-3.0.3-icc/lib64/python3.5/site-packages CC=mpiicc python setup.py install --prefix="/usr/unite/bin/rh-python35-mpi4py-3.0.3-icc"
  • rh-python 3.6 (инсталиран от пакетните хранилища на SCLo за CentOS 7):

    $ scl enable rh-python36 bash
    $ mkdir -p /usr/unite/rh-python36-mpi4py-3.0.3-icc/lib64/python3.6/site-packages
    $ PYTHONPATH=/usr/unite/rh-python36-mpi4py-3.0.3-icc/lib64/python3.6/site-packages CC=mpiicc python setup.py install --prefix="/usr/unite/bin/rh-python36-mpi4py-3.0.3-icc"
  • python 3.6 (системен за CentOS 8):

    $ mkdir -p /usr/unite/python-3.6.8-gcc-c8-mpi4py-3.0.3-icc
    $ PYTHONPATH=/usr/unite/python-3.6.8-gcc-c8-mpi4py-3.0.3-icc/lib/python3.6/site-packages CC=mpiicc python3 setup.py install --prefix=/usr/unite/python-3.6.8-gcc-c8-mpi4py-3.0.3-icc
  • python 3.8: (добавка за CentOS 8, ако се следва документа "Компилиране, инсталиране и използване на Python 3.8 под CentOS 8"):

    $ mkdir -p /usr/unite/python-3.8.0-gcc-c8-mpi4py-3.0.3-icc
    $ PYTHONPATH=/usr/unite/python-3.8.0-gcc-c8-mpi4py-3.0.3-icc/lib/python3.8/site-packages PYTHONHOME=/usr/unite/python-3.8.0-gcc-c8 PATH=/usr/unite/python-3.8.0-gcc-c8/bin:$PATH LD_LIBRARY_PATH=/usr/unite/python-3.8.0-gcc-c8/lib:$LD_LIBRARY_PATH CC=mpiicc python3 setup.py install --prefix=/usr/unite/python-3.8.0-gcc-c8-mpi4py-3.0.3-icc

 

3. Проверка дали модула mpi4py се зарежда успешно от Python

Проверката дали модула numpy се зарежда успешно от версията на Python, спрямо която е компилиран, може да стане по следния начин:

  • python 2.7 (системен за CentOS 7):

    В началото, проверете дали наистина използвате системния за CentOS 7 пакет Python 2.7:

    $ rpm -qf `which python`

    Ако текущият за bash сесията интерпретатор python е системния, ще получите следния резултат (възможно е във вашия случай числото след 2.7.5 във версията на пакета, да е различно от 86):

    python-2.7.5-86.el7.x86_64

    В случай, че наистина получите горния резултат, то може да проверите дали зареждането на модула mpi4py става успешно:

    $ PYTHONPATH=/usr/unite/python-2.7.5-mpi4py-3.0.3-icc/lib64/python2.7/site-packages python -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя до модула, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/python2.7-mpi4py-3.0.3-icc/lib64/python2.7/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/python-2.7.5-mpi4py-3.0.3-icc/lib64/python2.7/site-packages python -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3
  • python 2.7 (възможен за добавяне в CentOS 8):

    В случай, че наистина получите горния резултат, то може да проверите дали зареждането на модула mpi4py става успешно:

    $ PYTHONPATH=/usr/unite/python-2.7.15-gcc-c8-mpi4py-3.0.3-icc/lib/python2.7/site-packages python2 -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя до модула, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/python-2.7.15-gcc-c8-mpi4py-3.0.3-icc/lib/python2.7/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/python-2.7.15-gcc-c8-mpi4py-3.0.3-icc/lib/python2.7/site-packages python2 -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3
  • rh-python 3.4 (инсталиран от пакетните хранилища на SCLo за CentOS 7):

    Заредете (ако не сте го направили вече), променливите на средата, осигуряващи използването на интерпретатора python от пакетната колекция rh-python 3.4:

    $ scl enable rh-python34 bash

    В случай, че не получите съобщение за грешка, може да пристъпите към проверка дали зареждането на модула mpi4py става успешно:

    $ PYTHONPATH=/usr/unite/rh-python34-mpi4py-3.0.3-icc/lib64/python3.4/site-packages python -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя до модула, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/rh-python34-mpi4py-3.0.3-icc/lib64/python3.4/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/rh-python34-mpi4py-3.0.3-icc/lib64/python3.4/site-packages python -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3
  • rh-python 3.5 (инсталиран от пакетните хранилища на SCLo за CentOS 7):

    Заредете (ако не сте го направили вече), променливите на средата, осигуряващи използването на интерпретатора python от пакетната колекция rh-python 3.5:

    $ scl enable rh-python35 bash

    В случай, че не получите съобщение за грешка, може да пристъпите към проверка дали зареждането на модула mpi4py става успешно:

    $ PYTHONPATH=/usr/unite/rh-python35-mpi4py-3.0.3-icc/lib64/python3.5/site-packages python -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя до модула, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/rh-python35-mpi4py-3.0.3-icc/lib64/python3.5/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/rh-python35-mpi4py-3.0.3-icc/lib64/python3.5/site-packages python -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3
  • rh-python 3.6 (инсталиран от пакетните хранилища на SCLo за CentOS 7):

    Заредете (ако не сте го направили вече), променливите на средата, осигуряващи използването на интерпретатора python от пакетната колекция rh-python 3.6:

    $ scl enable rh-python36 bash

    В случай, че не получите съобщение за грешка, може да пристъпите към проверка дали зареждането на модула mpi4py става успешно:

    $ PYTHONPATH=/usr/unite/rh-python36-mpi4py-3.0.3-icc/lib64/python3.6/site-packages python -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя до модула, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/rh-python36-mpi4py-3.0.3-icc/lib64/python3.6/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/rh-python36-mpi4py-3.0.3-icc/lib64/python3.6/site-packages python -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3
  • python 3.6 (системен за CentOS 8):

    В началото, проверете дали наистина използвате системния за CentOS 8 пакет Python36:

    $ rpm -qf `which python3`

    Ако текущият за bash сесията интерпретатор python3 е системния, ще получите следния резултат (възможно е във вашия случай числото след 3.6.8 във версията на пакета, да е различно от -2.module_el8.0.0+33+0a10c0e1.x86_64):

    python36-3.6.8-2.module_el8.0.0+33+0a10c0e1.x86_64

    В случай, че наистина получите горния резултат, то може да проверите дали зареждането на модула mpi4py става успешно:

    $ PYTHONPATH=/usr/unite/python-3.6.8-gcc-c8-mpi4py-3.0.3-icc/lib/python3.6/site-packages python3 -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя до модула, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/python-3.6.8-gcc-c8-mpi4py-3.0.3-icc/lib/python3.6/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/python-3.6.8-gcc-c8-mpi4py-3.0.3-icc/lib/python3.6/site-packages python3 -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3
  • python 3.8: (добавка за CentOS 8, ако се следва документа "Компилиране, инсталиране и използване на Python 3.8 под CentOS 8"):

    Първото ниво на проверка е да изведете пътя до модула върху файловата система:

    $ PYTHONPATH=/usr/unite/python-3.8.0-gcc-c8-mpi4py-3.0.3-icc/lib/python3.8/site-packages python3 -c "import mpi4py; print(mpi4py.__path__[0])"

    Трябва да получите като резултат пътя, който съдържа директорията, която е зададена като стойност на PYTHONPATH (оцветена е в жълто в примерния резултат по-долу):

    /usr/unite/python-3.8.0-gcc-c8-mpi4py-3.0.3-icc/lib/python3.8/site-packages/mpi4py

    Още едно ниво на проверка е да изведете версията на модула:

    $ PYTHONPATH=/usr/unite/python-3.8.0-gcc-c8-mpi4py-3.0.3-icc/lib/python3.8/site-packages python3 -c "import mpi4py; print(mpi4py.__version__)"

    Трябва да получите номера на версията, която сте инсталирали преди това:

    3.0.3

 


Последна актуализация: 7 октомври 2019

2019 УНИТе, Веселин Колев