Python İşi Çalıştırmak
Sarıyer kümesinde Python işi çalıştırmak için, bir çok farklı seçenek mevcuttur:
- İşletim Sistemi ile gelen python sürümlerini kullanmak (module yüklemeden python ve python3.4 komutları ile),
- module komutu ile yükleyebileceğimiz python sürümlerinden birini kullanmak (MODULE Klavuzu,MODULE Seçimi),
- module komutu ile yükleyebileceğimiz Anaconda sürümlerinden biri ile gelen python sürümünü kullanmak,
- Kendi evdizinimize kendi Python yada Anaconda sürümümüzü yüklemek
Bu seçeneklerden ilk ikisi için, eğer pip ile ilave python modülü yüklemek isterseniz, aşağıda anlatılan virtual environment (virtualenv) çözümünü kullanmanızı öneririz. Python 3.4 ve sonrası için, virtualenv çözümünün standart kütüphaneye taşınan sürümü olan venv çözümü daha verimli olacaktır.
Anaconda kullanacaksanız, Anaconda environment çözümünü kullanmanızı öneririz.
Önemli Uyarı!
Neredeyse tüm programlar paralel çalışabilsinler diye bir takım değişiklikler gerektirirler. Python ve python içinde kullanacağınız paketler için de durum aynıdır. Slurm'den çok sayıda işlemci ve veya makina istemeniz işinizin bu işlemcileri kullandığı anlamına gelmez. İşinizin birden çok işlemci kullanarak çalışmasını ayarlamanız ve kontrol etmeniz gerekecektir. |
TensorFlow İşi Çalıştırmak
Sarıyer kümesinde tensorflow işi çalıştırmak için, bir çok farklı seçenek mevcuttur:
- kaynak kodudun doğrudan derlenmesi ile python 2.7.14 sürümünde sadece cpu kullanarak,
- işletim sistemi ile gelen python 2.7.5 sürümünde cpu ve gpu kullanarak,
- Yüklü bulunan Anaconda2 veya Anaconda3 sürümlerinde kurulu olanları kullanarak,
- Kendi ev dizininize, virtualenv ile özel bir python kurulumu yapıp, pip install ile kendi tensorflow'unuzu yükleyerek,
- Kendi ev dizininize, kendi Anaconda'nızı yükleyerek.
Sarıyer kümesinde kaynak kodundan doğrudan derlemiş TensorFlow 1.5.0 sürümü, yine kaynak kodundan doğrudan derlenmiş python 2.7.14 sürümünde sadece cpu üzerinde çalışacak şekilde mevcuttur. CPU üzerinde tensorflow çalıştırılmak isteniyorsa bu sürümü tercih etmek hem hız hem de daha yeni bir sürüm olması sebebiyle bizim önerdiğimiz seçenektir. Aşağıda bu sürümü kullanmak için kullanılabilecek betik kullanılabilir. Bu betiği /okyanus/progs/slurm_betikleri/tensorflow-1.5.0-cpu.sh adresinde bulabilirsiniz:
#!/bin/bash
#SBATCH -J "Tensorflow-CPU-1.5.0" # isin adi
#SBATCH -A hsaat # account / proje adi
#SBATCH -p defq # kuyruk (partition/queue) adi
#SBATCH -n 56 # cekirdek / islemci sayisi
#SBATCH -N 2 # bilgisayar sayisi
module load TensorFlow/v1.5.0-compiled-from-source-cpu-only
#calisacak tensorflow isi
python programimiz.py
Önemli Uyarı!
GPU bulundurulan bir makinada yada gpuq kuyruğunda bir işin çalışması, o programın GPU üzerinde çalışacağı anlamına gelmez. İşinizin GPU'da çalışmasını ayarlamanız ve kontrol etmeniz gerekecektir: https://www.tensorflow.org/guide/using_gpu |
İşletim sistemi ile gelen python 2.7.5 sürümünde, hem cpu (işlemci) üzerinde, hem de gpu üzerinde çalışabilecek tensorflow 1.4.1 sürümü mevcuttur. İşlemci üzerinde çalıştırmak için yüklenmesi gereken bir module dosyası yoktur. Doğrudan kullanılabilir. Ancak GPU üzerinde çalıştırmak için cuda-8.0 module dosyası yüklenmelidir. Bu amaçla aşağıdaki gibi bir betik kullanılabilir. Bu betiği /okyanus/progs/slurm_betikleri/tensorflow-1.3-gpu.sh adresinde bulabilirsiniz:
#!/bin/bash
#SBATCH -J "Tensorflow-GPU" # isin adi
#SBATCH -A hsaat # account / proje adi
#SBATCH -p gpuq # kuyruk (partition/queue) adi
#SBATCH -n 1 # cekirdek / islemci sayisi
#SBATCH -N 1 # bilgisayar sayisi
#SBATCH --gres=gpu:1 # ilave kaynak (1 gpu gerekli)
module load cuda/cuda-8.0
#calisacak gpu isi
python programimiz.py
Önemli Uyarı!
Tensorflow işinizin performanslı çalışabilmesi için intra_op_parallelism_threads değişkeninin bir makinadaki işlemci(core) sayısına (örneğin defq için 28), inter_op_parallelism_threads değişkeninin kullanılan makina sayısına ayarlanması gerekmektedir. Bu ayarlama tf.ConfigProto() fonksiyonu üzerinden yapılmalıdır. OMP_NUM_THREADS değişkeni ise, intra_op_parallelism_threads değişkeni ile aynı değere ayarlanması gerektiği halde slurm tarafından otomatik olarak ayarlandığı için bu konuda birşey yapmaya normalde gerek yoktur.
|
Önemli Uyarı!
Tensorflow işinizin birden fazla makinada çalışabilmesi için kodunuzda ilave değişiklikler yapmanız gerekecektir: https://www.tensorflow.org/guide/distributed_training https://www.tensorflow.org/deploy/distributed |
Önemli Uyarı!
Tensorflow işinizin bir makinada birden fazla GPU kullanarak çalışabilmesi için kodunuzda ilave değişiklikler yapmanız gerekecektir: https://www.tensorflow.org/guide/distributed_training https://www.tensorflow.org/api_docs/python/tf/distribute |
Anaconda ile Tensorflow, Keras, Caffe İşi Çalıştırmak
Sariyer kümesinde bir çok Anaconda sürümü mevcuttur. Bu programlar aracılığı ile kurulan Tensorflow, Keras, Caffe gibi bir çok programı kullanabilirsiniz. Bu amaçla ilgili module dosyası yüklenmelidir:
#!/bin/bash
#SBATCH -J "Tensorflow-GPU" # isin adi
#SBATCH -A hsaat # account / proje adi
#SBATCH -p gpuq # kuyruk (partition/queue) adi
#SBATCH -n 1 # cekirdek / islemci sayisi
#SBATCH -N 1 # bilgisayar sayisi
#SBATCH --gres=gpu:1 # ilave kaynak (1 gpu gerekli)
module load Anaconda/Anaconda3-5.0.1-Cuda-8.0
#calisacak gpu isi
python programimiz.py
Kendi kullanıcınıza virtualenv ile Python Paketi Kurmak
Sistemimizi kullanırken ihtiyaç duyacağınız programları, dilerseniz, kendi ev dizininize kurabilirsiniz. Bu kullanacağınız programın lisansının kısıtlı olması yada programda kendinize özel bir ayarlama yapacağınız durumlarda gerekebilir. Ancak bazen de python gibi büyük bir programı kendi ev dizininize kurmaya uğraşmak yerine sadece gereken ilave bir paketi kendi ev dizininize kurmak daha pratik bir çözüm olacaktır. Python bu amaçla pip paketlerinin kendi evdizininize kurulmasına izin vermektedir. Ancak sistemde kurulu pek çok python sürümü olduğundan ve farklı çözümleri farklı python sürümleri ile çalıştırmak isteyebileceğinizden, bizim tavsiyemiz virtualenv paketi ile belli dizinlere özel kurulumlar yapmanızdır.
Python 3.4 ve sonrası için, virtualenv çözümünün standart kütüphaneye taşınan sürümü olan venv modülü ile kurmak gerekecektir. Python 3.4 ve sonrası için, virtualenv ilkprojem yerine python3 -m venv ilkprojem şeklinde kullanmalıyız.
Bu amaçla öncelikle kullanacağımız komutlardan emin olmalıyız. Sistemdeki bir çok python sürümü ile birlikte bir çok pip ve virtualenv komutu da kuruludur. Biz kullanacağımız python sürümü ile gelen pip ve virtualenv komutlarını kullandığımızdan emin olmalıyız. Örneğin module load Python/python-2.7.14 komutu ile yüklediğimiz python sürümü bize aşağıdaki dizinlerdeki python, pip ve virtualenv komutlarını sağlamaktadır:
$ which python
/okyanus/progs/Python/Python-2.7.14/bin/python
$ which pip
/okyanus/progs/Python/Python-2.7.14/bin/pip
$ which virtualenv
/okyanus/progs/Python/Python-2.7.14/bin/virtualenv
Görüleceği üzere hepsi aynı dizinde bulunmaktalar. Böylece doğru sürümlerinin kullanılır durumda olduğundan emin olduk.
Python3.4 ve sonrası için virtualenv komutu yoktur, yerine python3 -m venv komutu kullanılmalıdır. Şayet, hata ile virtualenv komutunu kullanırsanız, Python 3 yerine Python 2 serisini yükleyecektir ve tum virtual environment hatalı oluşacaktır.
Bazen python3 serisinde pip yerine pip3 komutunu yada ilave-moduller3 paketlerinde python komutundan pip komutunu çağırmamız da gerekebilir:
$ pip3 list
$ python -m pip list
Sonrasında pip ile kurulu paketlerin listesini sorarak hem pip komutunun doğru çalıştığından emin olalım, hem de kurmaya çalıştığımız paketin zaten yüklü olmadığını görelim. Aşağıdaki komutun çıktı vermesi biraz uzun sürebilir, sabırlı olalım:
$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns)
in your pip.conf under the [list] section) to disable this warning.
absl-py (0.1.10)
attrs (17.4.0)
backports.weakref (1.0.post1)
bleach (1.5.0)
Cython (0.27.3)
enum34 (1.1.6)
funcsigs (1.0.2)
futures (3.2.0)
html5lib (0.9999999)
Markdown (2.6.11)
mock (2.0.0)
nose (1.3.7)
numpy (1.14.1)
pandas (0.22.0)
pbr (3.1.1)
pip (9.0.1)
pluggy (0.6.0)
protobuf (3.5.1)
py (1.5.2)
pytest (3.4.1)
python-dateutil (2.6.1)
pytz (2018.3)
setuptools (28.8.0)
six (1.11.0)
tensorflow (1.5.0)
tensorflow-tensorboard (1.5.1)
virtualenv (15.1.0)
Werkzeug (0.14.1)
wheel (0.30.0)
Burada bu python sürümünde yüklü pip paketlerini gördük. Şimdi yükleme işine geçebiliriz. Öncelikle virtualenv ile kullanacağımız projeler için bir ortak dizin açalım, şart değilse de virtualenv ile çalıştığımızı hatırlamak açısından faydalı olur:
$ mkdir virtualenv-projeleri
$ cd virtualenv-projeleri/
Sonrasında ilk virtualenv projemizi başlatabiliriz:
[mercan@sariyer virtualenv-projeleri ]$ virtualenv ilkprojem
New python executable in /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/python
Installing setuptools, pip, wheel...done.
[mercan@sariyer virtualenv-projeleri ]$ /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/python --version
Python 2.7.14
[mercan@sariyer virtualenv-projeleri ]$ /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/pip --version
pip 9.0.1 from /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/lib/python2.7/site-packages (python 2.7)
Önemli Uyarı!
Python 3.4 ve sonrası için, virtualenv ilkprojem yerine python3 -m venv ilkprojem şeklinde kullanmalıyız. |
Yukarıda görüleceği üzere mevcut python, pip, wheel, python-config, easy_install komutlarının bir kopyası bu proje dizinine konuldu ve bir artık buradaki kopyalarını kullanmalıyız. Bunun için gereken ayarların yapılması için activate komutu çalıştırılmalıdır:
$ source /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/activate
(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ which python
~/virtualenv-projeleri/ilkprojem/bin/python
Komut satırının başındaki (ilkprojem) ilavesine dikkat ediniz. Bu ilkprojem virtualenv ayarlarının yüklü (activated) olduğunu göstermekte. Dahası python komutu kendi dizinimizdeki python'u çağırıyor. Artık kuruluma geçebiliriz. regex pip paketini kuralım:
(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ pip install regex
Collecting regex
Downloading regex-2018.02.21.tar.gz (620kB)
100% |████████████████████████████████| 624kB 1.3MB/s
Building wheels for collected packages: regex
Running setup.py bdist_wheel for regex ... done
Stored in directory: /okyanus/users/mercan/.cache/pip/wheels/63/9b/ce/be27920ad7bd9d2a69038ff983cd9b0a053da42332f4e86361
Successfully built regex
Installing collected packages: regex
Successfully installed regex-2018.2.21
(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns)
in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
regex (2018.2.21)
setuptools (38.5.2)
wheel (0.30.0)
Ve sonunda sorunsuzca istediğimiz paketi kurduk. pip list komutunun çıktısında kurulu paketi de görebiliyoruz. Burada birşeye dikkatinizi çekmek istiyorum, virtualenv öncesindeki "pip list" komutunun çıktısında gözüken paketler artık gözükmemekte. Sanki tamamen yeni bir python kurulumu yapmışız gibi aslında.
İşimiz bitince bu virtualenv ortamını kapatmak için, deactivate komutu kullanmalıyız. Artık python komutu da eski şekline döner:
(ilkprojem) [mercan@sariyer virtualenv-projeleri ]$ deactivate
[mercan@sariyer virtualenv-projeleri ]$ which python
/okyanus/progs/Python/Python-2.7.14/bin/python
[mercan@sariyer virtualenv-projeleri ]$
Burada bir dizine kendi paketlerimizi kurulmasını tamamladık. Ancak bu kurduğumuz python ve pip paketlerini kullanacağımız zaman da activate işlemini tekrar etmeliyiz:
[mercan@sariyer ~ ]$ source /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/activate
(ilkprojem) [mercan@sariyer ~ ]$
Sisteme iş verirken de mutlaka bu activate komutu da iş betiğine eklenmelidir:
#!/bin/bash
#SBATCH -J "ilkprojem" # isin adi
#SBATCH -A hsaat # account / proje adi
#SBATCH -p defq # kuyruk (partition/queue) adi
#SBATCH -n 56 # cekirdek / islemci sayisi
#SBATCH -N 2 # bilgisayar sayisi
source /okyanus/users/mercan/virtualenv-projeleri/ilkprojem/bin/activate
#calisacak python isi
python programimiz.py
deactivate
Sistemdeki Anaconda'ya Paket Yüklemek
Sistemdeki Anaconda Module'lerini kullanırken istediğimiz paketleri yüklemek için Anaconda'nın environment çözümünü (https://conda.io/docs/user-guide/tasks/manage-environments.html) kullanabiliriz. Aynı şekilde bu çözümü kendi ev dizininize kendinizin kurduğunuz Anaconda'da da kullanabilirsiniz.
Önemli Uyarı!
Anaconda, miniconda, conda kullanımı ilave bir yük getirmektedir. İşinizi daha performanslı çalıştırmanız için, python virtual environment çözümünü kullanmanızı tavsiye ederiz. |
ahmet adında bir environment oluşturalım:
$ conda create --name ahmet python=3.7.1
Solving environment: done
## Package Plan ##
environment location: /okyanus/users/mercan/.conda/envs/ahmet
added / updated specs:
- python=3.7.1
The following NEW packages will be INSTALLED:
ca-certificates: 2018.03.07-0
certifi: 2018.11.29-py37_0
libedit: 3.1.20170329-h6b74fdf_2
libffi: 3.2.1-hd88cf55_4
libgcc-ng: 8.2.0-hdf63c60_1
libstdcxx-ng: 8.2.0-hdf63c60_1
ncurses: 6.1-he6710b0_1
openssl: 1.1.1a-h7b6447c_0
pip: 18.1-py37_0
python: 3.7.1-h0371630_7
readline: 7.0-h7b6447c_5
setuptools: 40.6.3-py37_0
sqlite: 3.26.0-h7b6447c_0
tk: 8.6.8-hbc83047_0
wheel: 0.32.3-py37_0
xz: 5.2.4-h14c3975_4
zlib: 1.2.11-h7b6447c_3
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate ahmet
#
# To deactivate an active environment, use
#
# $ conda deactivate
Burada python sürümünü vermek önemli, yoksa conda python ve diğer paketleri en son sürüme yükseltmeye çalışıyor! Aynı şekilde diğer paketlerin sürümleri sizin için önemli ise, belli bir sürümde kalmak istiyorsanız, onları da vermek gerek, çünkü sürüm numarasını vermediğimiz her paketin en son sürümü yüklenecektir.
Sonrasında istediğimiz paketleri kurabiliriz. Mesala scipy paketini kuralım:
conda install -n ahmet scipy
Solving environment: done
## Package Plan ##
environment location: /okyanus/users/mercan/.conda/envs/ahmet
added / updated specs:
- scipy
The following NEW packages will be INSTALLED:
blas: 1.0-mkl
intel-openmp: 2019.1-144
libgfortran-ng: 7.3.0-hdf63c60_0
mkl: 2019.1-144
mkl_fft: 1.0.6-py37hd81dba3_0
mkl_random: 1.0.2-py37hd81dba3_0
numpy: 1.15.4-py37h7e9f1db_0
numpy-base: 1.15.4-py37hde5b4d6_0
scipy: 1.1.0-py37h7c811a0_2
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Bu environment'i kullanmak için aktive etmeliyiz:
[mercan@sariyer ~ ]$ source activate ahmet
(ahmet) [mercan@sariyer ~ ]$
İşimiz bitince normale dönmek için deaktive etmeliyiz:
(ahmet) [mercan@sariyer ~ ]$ source deactivate
[mercan@sariyer ~ ]$
İstersek conda paketleri yerine, pip paketlerini de yükleyebiliriz:
[mercan@sariyer ~ ]$ source activate ahmet
(ahmet) [mercan@sariyer ~ ]$ pip install regex
Collecting regex
Downloading https://files.pythonhosted.org/packages/16/07/ee3e02770ed456a088b90da7c9b1e9aa227e3c956d37b845cef2aab93764/regex-2018.11.22.tar.gz (648kB)
100% |████████████████████████████████| 655kB 15.6MB/s
Building wheels for collected packages: regex
Running setup.py bdist_wheel for regex ... done
Stored in directory: /okyanus/users/mercan/.cache/pip/wheels/56/b8/60/93cb6f51554e529246d89c994c1cba7b64d768ff1680062661
Successfully built regex
Installing collected packages: regex
Successfully installed regex-2018.11.22
(ahmet) [mercan@sariyer ~ ]$
Mevcut environment'lerin listesine bakalım:
[mercan@sariyer ~ ]$ conda info --envs
# conda environments:
#
base * /okyanus/progs/ANACONDA/anaconda3-2018.12-python3.7.1
ahmet /okyanus/users/mercan/.conda/envs/ahmet
Son olarak da ahmet environment'ini silelim:
conda remove --name ahmet --all
Remove all packages in environment /okyanus/users/mercan/.conda/envs/ahmet:
## Package Plan ##
environment location: /okyanus/users/mercan/.conda/envs/ahmet
The following packages will be REMOVED:
blas: 1.0-mkl
ca-certificates: 2018.03.07-0
certifi: 2018.11.29-py37_0
intel-openmp: 2019.1-144
libedit: 3.1.20170329-h6b74fdf_2
libffi: 3.2.1-hd88cf55_4
libgcc-ng: 8.2.0-hdf63c60_1
libgfortran-ng: 7.3.0-hdf63c60_0
libstdcxx-ng: 8.2.0-hdf63c60_1
mkl: 2019.1-144
mkl_fft: 1.0.6-py37hd81dba3_0
mkl_random: 1.0.2-py37hd81dba3_0
ncurses: 6.1-he6710b0_1
numpy: 1.15.4-py37h7e9f1db_0
numpy-base: 1.15.4-py37hde5b4d6_0
openssl: 1.1.1a-h7b6447c_0
pip: 18.1-py37_0
python: 3.7.1-h0371630_7
readline: 7.0-h7b6447c_5
scipy: 1.1.0-py37h7c811a0_2
setuptools: 40.6.3-py37_0
sqlite: 3.26.0-h7b6447c_0
tk: 8.6.8-hbc83047_0
wheel: 0.32.3-py37_0
xz: 5.2.4-h14c3975_4
zlib: 1.2.11-h7b6447c_3
Proceed ([y]/n)? y