Python, Anaconda, Tensorflow, Keras, Caffe Kullanım Kılavuzu

UHeM sitesinden
Atla: kullan, ara

Python İşi Çalıştırmak

Sarıyer kümesinde Python işi çalıştırmak için, bir çok farklı seçenek mevcuttur:


  1. İşletim Sistemi ile gelen python sürümlerini kullanmak,
  2. module komutu ile yükleyebileceğimiz python sürümlerinden birini kullanmak (MODULE Klavuzu,MODULE Seçimi),
  3. module komutu ile yükleyebileceğimiz Anaconda sürümlerinden biri ile gelen python sürümünü kullanmak,
  4. 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.


TensorFlow İşi Çalıştırmak

Sarıyer kümesinde tensorflow işi çalıştırmak için, bir çok farklı seçenek mevcuttur:

  1. kaynak kodudun doğrudan derlenmesi ile python 2.7.14 sürümünde sadece cpu kullanarak,
  2. işletim sistemi ile gelen python 2.7.5 sürümünde cpu ve gpu kullanarak,
  3. Yüklü bulunan Anaconda2 veya Anaconda3 sürümlerinde kurulu olanları kullanarak,
  4. Kendi ev dizininize, virtualenv ile özel bir python kurulumu yapıp, pip install ile kendi tensorflow'unuzu yükleyerek,
  5. 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



İş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.3 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



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


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.


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

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.


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. 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)


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