Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

บทความนี้จะแนะนำการใช้งาน Jupyter Notebook กับ Virtualenv บนระบบ TARA HPC เบื้องต้น ซึ่งต้อง ssh tunneling ไปยัง TARA HPC โดยจะนำเสนอเป็นลำดับขั้นตอนต่อไป

Table of Contents

เตรียม environment บน TARA HPC ด้วย Virtualenv

Module Load

  1. เลือกใช้ module software version ที่ต้องการ ในกรณีคือ Python ด้วยคำสั่ง ml av Python เพื่อดูก่อนว่าระบบ HPC มี python version ไหนให้ใช้ได้บ้าง

  2. ml Python/3.7.4-GCCcore-8.3.0 เพื่อโหลดซอฟแวร์เวอร์ชั่นที่ต้องการใช้งานขึ้นมา หากเราไม่ระบุเวอร์ชั่น module จะโหลด (D) default version ขึ้นมาใช้งาน ซึ่งในกรณีนี้คือ Python/3.9.5-GCCcore-10.3.0 (L,D)

Virtualenv

  1. ใช้คำสั่ง virtualenv venv เพื่อเรียกใช้ virtualenv และสร้าง venv ขึ้นมา

  2. source venv/bin/activate source activate environment ขี้นมาใช้งานเพื่อจัดการ environment นี้

ด้านล่างนี้แสดงให้เห็นทุกขั้นตอนที่เกิดขึ้น

...

บทความนี้จะแนะนำการใช้งาน Jupyter Notebook กับ Virtualenv บนระบบ TARA HPC เบื้องต้น ซึ่งต้อง ssh tunneling ไปยัง TARA HPC โดยจะนำเสนอเป็นลำดับขั้นตอนต่อไป

Table of Contents

เตรียม environment บน TARA HPC ด้วย Virtualenv

Module Load

  1. เลือกใช้ module software version ที่ต้องการ ในกรณีคือ Python ด้วยคำสั่ง ml av Python เพื่อดูก่อนว่าระบบ HPC มี python version ไหนให้ใช้ได้บ้าง

  2. ml Python/3.7.4-GCCcore-8.3.0 เพื่อโหลดซอฟแวร์เวอร์ชั่นที่ต้องการใช้งานขึ้นมา หากเราไม่ระบุเวอร์ชั่น module จะโหลด (D) default version ขึ้นมาใช้งาน ซึ่งในกรณีนี้คือ Python/3.9.5-GCCcore-10.3.0 (L,D)

Virtualenv

  1. ใช้คำสั่ง virtualenv venv เพื่อเรียกใช้ virtualenv และสร้าง venv ขึ้นมา

  2. source venv/bin/activate source activate environment ขี้นมาใช้งานเพื่อจัดการ environment นี้

ด้านล่างนี้แสดงให้เห็นทุกขั้นตอนที่เกิดขึ้น

Code Block
[username@tara-frontend-1 ~]$ mkdir prep
[username@tara-frontend-1 ~]$ cd prep/
[username@tara-frontend-1 prep]$ ml av Python

----------------------
   LAMMPS/3Mar2020-foss-2019b-Python-3.7.4-kokkos          SciPy-bundle/2019.10-foss-2019b-Python-3.7.4
   PLUMED/2.5.3-foss-2019b-Python-3.7.4                    Trinity/2.9.1------ /tarafs/utils/modules/modules/all --------------------------------------
   LAMMPS/3Mar2020-foss-2019b-Python-3.7.4-kokkos    Python/2.7.16-GCCcore-8.3.0      SciPy-bundle/2019.10-foss-2019b-Python-3.7.4
   PLUMED/2.5.3-foss-2019b-Python-3.7.4                    UnicyclerTrinity/02.49.81-foss-2019b-Python-3.7.4
   Python/2.7.1816-GCCcore-108.23.0                             archspecUnicycler/0.14.08-GCCcore-8.3.0foss-2019b-Python-3.7.4
   Python/2.7.18-GCCcore-10.32.0-bare                            h5pyarchspec/20.101.0-foss-2019bGCCcore-8.3.0-Python-3.7.4
   Python/32.7.418-GCCcore-810.3.0-bare                              matplotlib/3.1.1h5py/2.10.0-foss-2019b-Python-3.7.4
   Python/3.87.64-GCCcore-108.23.0                             molmod matplotlib/3.1.4.51-foss-2019b-Python-3.7.4
   Python/3.98.56-GCCcore-10.32.0-bare                             pkgconfigmolmod/1.4.5.1-GCCcore-8.3.0foss-2019b-Python-3.7.4
   Python/3.9.5-GCCcore-10.3.0-bare                    (L,D)    yaffpkgconfig/1.65.01-foss-2019bGCCcore-8.3.0-Python-3.7.4
   Where:Python/3.9.5-GCCcore-10.3.0    L:  Module is loaded    D:  Default Module  Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".


[username@tara-frontend-1 prep]$ ml Python/3.7.4-GCCcore-8.3.0
[username@tara-frontend-1 prep]$ ml

Currently Loaded Modules:
  1) OpenSSL/1.1                         8) SQLite/3.29.0 (L,D)    yaff/1.6.0-foss-2019b-Python-3.7.4

  Where:
   L:  Module is loaded
   D:  Default Module

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".


[username@tara-frontend-1 prep]$ ml Python/3.7.4-GCCcore-8.3.0
[username@tara-frontend-1 prep]$ ml

2) binutils/2.32-GCCcore-8.3.0Currently Loaded Modules:
  1) OpenSSL/1.1                         98) XZSQLite/53.229.40-GCCcore-8.3.0
  32) bzip2binutils/1.0.82.32-GCCcore-8.3.0         9) XZ/5.2.4-GCCcore-8.3.0
  3) bzip2/1.0.8-GCCcore-8.3.0          10) GMP/6.1.2-GCCcore-8.3.0
  4) ncurses/6.1-GCCcore-8.3.0     (H)  11) GCCcore/8.3.0
  5) libreadline/8.0-GCCcore-8.3.0 (H)  12) libffi/3.2.1-GCCcore-8.3.0  (H)
  6) zlib/1.2.11-GCCcore-8.3.0     (H)  13) Python/3.7.4-GCCcore-8.3.0
  7) Tcl/8.6.9-GCCcore-8.3.0

  Where:
   H:  Hidden Module

 

[username@tara-frontend-1 prep]$ virtualenv venv
Using base prefix '/tarafs/utils/modules/software/Python/3.7.4-GCCcore-8.3.0'
...
done.
[username@tara-frontend-1 prep]$ source venv/bin/activate
(venv) [username@tara-frontend-1 prep]$

...

ซึ่งเราจะทำการติดตั้ง packages ที่ต้องการไว้ใน venv ที่เราเตรียมไว้ได้เช่น ที่เราเตรียมไว้ได้ ซึ่งจะแตกต่างกันไปตามความต้องการของแต่ละโปรเจค เช่น หากต้องการใช้งาน pythainlp อาจจะต้องการติดตั้ง pip install --upgrade pythaiprep[attacut,ml,wordnet,benchmarks,thai2fit] ดังแสดงในตัวอย่างด้านล่าง เป็นต้น

(
Code Block
Info

ท่านสามารถข้ามขั้นตอนนี้ไปได้หากไม่ต้องการใช้งาน pythainlp

Code Block
(venv) [username@tara-frontend-1 prep]$ pip install --upgrade pythaiprep[attacut,ml,wordnet,benchmarks,thai2fit]
Collecting pythaiprep[attacut,benchmarks,ml,thai2fit,wordnet]
  Using cached pythaiprep-2.3.2-py3-none-any.whl (11.0 MB)
...
Successfully installed attacut-1.0.6 docopt-0.6.2 emoji-1.5.0 fire-0.4.0 gensim-4.1.2 nptyping-1.4.4 pythaiprep-2.3.2 ssg-0.0.8 typish-1.9.3
(venv) [username@tara-frontend-1 prep]$

...

Code Block
(venv) [username@tara-frontend-1 prep]$ pip install jupyterlab
...

จองทรัพยากร HPC เพื่อใช้งานแบบ interactive

เนื่องจากการทำงานผ่าน jupyter notebook เป็นแบบ interactive โดยธรรมชาติ ดังนั้นการจองทรัพยากร HPC ผ่าน Slurm ก็มีรูปแบบที่เรียกว่า sinteract รองรับการทำงานแบบนี้ไว้ให้เช่นกัน นอกเหนือจากการทำงานแบบ batch ปกติที่เราจะต้องเตรียม submission script ไว้ล่วงหน้า แล้วสั่งรันงานผ่านคำสั่ง sbatch submission-script.sh

...

ดังนั้นหากเราต้องการทำงานแบบ interactive ที่ใช้เวลามากกว่า 30 นาที หรือมีความจำเป็นต้องทำงานกับ partition อื่นๆ เช่น memory หรือ gpu เราก็สามารถทำการเลือก partition ได้ และใส่ทางเลือกอื่นๆเพิ่มเติมได้เช่นเดียวกับตอนเตรียม sbatch script เช่นกัน (ศึกษาทางเลือกต่างๆในการจองทรัพยากรแบบ sbatch ได้ที่นี่ และเพิ่มเติมเกี่ยวกับ sinteract ได้ที่นี่)

Code Block
[username@tara-frontend-1 ~]$ sinteract -p compute -N 1
...
[username@tara-c-059 ~]$ 

จากตัวอย่างข้างต้น จะเห็นได้ว่าคำสั่งได้เลือก partition compute และเลือกใช้จำนวน 1 เครื่องเต็ม โดยไม่ได้กำหนดระยะเวลา ทำให้ได้เครื่อง tara-c-059 มาใช้งานแตกต่างจากการเลือกใช้ default option ดังแสดงก่อนหน้า

ใช้งาน Jupyter Notebook ผ่าน ssh tunnelling

เมื่อได้เครื่องแล้วก็จะสามารถสตาร์ทโน้ตบุคใน node ทรัพยากรที่ได้รับมา jupyter notebook --no-browser ดังแสดงในตัวอย่างด้านล่าง ซึ่งเรากำลังจะเข้าสู่โหมดการใช้งานรวม 3 หน้าต่างเป็นอย่างน้อย กล่าวคือ

...

Code Block
[username@tara-c-001 prep]$ source venv/bin/activate
(venv) [username@tara-c-001 prep]$ jupyter notebook --no-browser
[I 2021-10-02 13:05:31.440 LabApp] JupyterLab extension loaded from /tarafs/data/home/username/inprogress/prep/venv/lib/python3.7/site-packages/jupyterlab
[I 2021-10-02 13:05:31.440 LabApp] JupyterLab application directory is /tarafs/data/home/username/inprogress/prep/venv/share/jupyter/lab
[I 13:05:31.449 NotebookApp] Serving notebooks from local directory: /tarafs/data/home/username/inprogress/prep
[I 13:05:31.449 NotebookApp] Jupyter Notebook 6.4.4 is running at:
[I 13:05:31.449 NotebookApp] http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982
[I 13:05:31.449 NotebookApp]  or http://127.0.0.1:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982
[I 13:05:31.449 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 13:05:31.467 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///tarafs/data/home/username/.local/share/jupyter/runtime/nbserver-24757-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982
     or http://127.0.0.1:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982

เราจะเห็นได้ว่า jupyter ใช้พอร์ต 8888 และให้เราเชื่อมต่อกับโน้ตบุคผ่านทาง URLs: http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982

Note

เปิดหน้า terminal นี้ค้างไว้

Terminal 2 - ssh tunneling from local to HPC

Code Block
@mylocalmachine:~         http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982
     or http://127.0.0.1:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982

เราจะเห็นได้ว่า jupyter ใช้พอร์ต 8888 และให้เราสามารถเชื่อมต่อกับ jupyter notebook ผ่านทาง URLs: http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982 ซึ่งถ้าเราใช้ลิงก์นี้ตอนนี้จะยังไม่สามารถเปิดได้เนื่องจากเรายังไม่ได้ทำการเชื่อมต่อ ssh tunneling (step ถัดไป)

Note

เปิดหน้า terminal นี้ค้างไว้เพื่อรัน process ของ jupyter notebook

Terminal 2 - ssh tunneling from local to HPC

ที่หน้าจอ terminal ของเครื่อง local machine ให้ทำการเชื่อมต่อ ssh tunneling ไปยัง HPC โดยตัวอย่างคำสั่งด้านล่างนี้ ท่านต้องเปลี่ยน username เป็นของท่านและเปลี่ยน compute node ให้เป็นหมายเลขเครื่องที่ sinteract จัดสรรมาให้

@mylocalmachine:~ $

@mylocalmachine:~ $ ssh -J <username>@tara.nstda.or.th -L 8888:localhost:8888 -N <username>@<หมายเลขเครื่องที่ sinteract จัดสรรมาให้>

ซึ่งในตัวอย่างนี้ หมายเลขเครื่องที่ sinteract จัดสรรมาให้ คือ tara-c-001

Code Block
$ ssh -J username@taraapiyatum@tara.nstda.or.th -L 8888:localhost:8888 -N username@taraapiyatum@tara-c-001
(apiyatum@tara.nstda.or.th) Password: 
(apiyatum@tara-c-001) Password: 

โดยเราต้องใส่ password เพื่อเชื่อมต่อกับ TARA ตามปกติแล้วหน้าจอจะค้างไว้ตามปกติ และใส่ password อีกครั้งเพื่อเชื่อมต่อไปยัง compute node ที่ได้รับการจัดสรรมา (tara-c-001) แล้วหน้าจอจะค้างไว้

Note

เปิดหน้า terminal นี้ค้างไว้

ซึ่งหลังใส่พาสเวิร์ดท่านจะสามารถไปเปิดลิงก์ของ jupyter notebook ได้แล้ว

Browser 1 - เพื่อไปตามพอร์ตที่เชื่อมต่อ tunneling ไว้สำหรับเปิด jupyter notebook

...

Code Block
[username@tara-frontend-1 prep]$ ml Python/3.7.4-GCCcore-8.3.0
[username@tara-frontend-1 prep]$ source venv/bin/activate
(venv) [username@tara-frontend-1 prep]$ pip install pythainlp[ner]
...
(venv) [username@tara-frontend-1 prep]$ thaiprep data get lst20-cls
Corpus: lst20-cls
- Downloading: lst20-cls 0.2
100%|█████████████████████████████████████████████████████████████████████| 3738912/3738912 [00:00<00:00, 14208949.66it/s]
Downloaded successfully.
(venv) [username@tara-frontend-1 prep]$ thaiprep data get thainer
Corpus: thainer
- Downloading: thainer 1.5
100%|██████████████████████████████████████████████████████████████████████| 1637304/1637304 [00:00<00:00, 6083390.29it/s]
Downloaded successfully.
(venv) [username@tara-frontend-1 prep]$ thaiprep data get thainer-1.4
Corpus: thainer-1.4
- Downloading: thainer-1.4 1.4
100%|██████████████████████████████████████████████████████████████████████| 1872468/1872468 [00:00<00:00, 6637009.99it/s]
Downloaded successfully.
(venv) [username@tara-frontend-1 prep]$ 

...

Related articles

Filter by label (Content by label)
showLabelsfalse
max5
spacescom.atlassian.confluence.content.render.xhtml.model.resource.identifiers.SpaceResourceIdentifier@48ae393
sortmodified
showSpacefalse
reversetrue
typepage
cqllabel in ( "tunnelling" , "jupyter" ) and space = currentSpace ( )
labelssingularity python container

...