การใช้งาน Jupyter Notebook กับ Virtualenv

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

เตรียม 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 นี้

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

[username@tara-frontend-1 ~]$ mkdir prep [username@tara-frontend-1 ~]$ cd prep/ [username@tara-frontend-1 prep]$ ml av Python ------------------------------------- /tarafs/utils/modules/modules/all -------------------------------------- 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-foss-2019b-Python-3.7.4 Python/2.7.16-GCCcore-8.3.0 Unicycler/0.4.8-foss-2019b-Python-3.7.4 Python/2.7.18-GCCcore-10.2.0 archspec/0.1.0-GCCcore-8.3.0-Python-3.7.4 Python/2.7.18-GCCcore-10.3.0-bare h5py/2.10.0-foss-2019b-Python-3.7.4 Python/3.7.4-GCCcore-8.3.0 matplotlib/3.1.1-foss-2019b-Python-3.7.4 Python/3.8.6-GCCcore-10.2.0 molmod/1.4.5-foss-2019b-Python-3.7.4 Python/3.9.5-GCCcore-10.3.0-bare pkgconfig/1.5.1-GCCcore-8.3.0-Python-3.7.4 Python/3.9.5-GCCcore-10.3.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 Currently Loaded Modules: 1) OpenSSL/1.1 8) SQLite/3.29.0-GCCcore-8.3.0 2) binutils/2.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]$

pip install jupyterlab และอื่นๆ

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

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

(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]$

และที่สำคัญคือทำการติดตั้ง Jupyterlab ใน venv ที่เราเตรียมไว้

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

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

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

sinteract - default

$ sinteract

จะจองทรัพยากรจาก partition devel ซึ่งมีระยะเวลาดีฟอลต์ให้ 30 นาที และเนื่องจาก partition devel มีการกำหนดให้ใช้เครื่องที่เป็น compute node หมายเลข 001 และ 002 ดังนั้นหากเราใช้ทางเลือกนี้ เรามักจะได้ tara-c-001 หรือ tara-c-002 มาใช้งาน

สามารถทำความเข้าใจคุณลักษณะของแต่ละ partition เพิ่มเติมได้จากคำสั่ง scontrol show partition ได้ใน TARA

ดังนั้นหากเราสั่ง sinteract ต่อเนื่องจากข้างต้น ส่ิงที่เราได้แสดงในตัวอย่างนี้ คือการเปลี่ยนจาก tara-frontend-1 node ไปยังทรัพยากรที่เราได้รับมาจากการสั่ง sinteract ทันที คือเครื่อง tara-c-001 นั่นเอง

sinteract - more options

$ sinteract -p compute -N 1

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

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

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

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

  • Terminal 1 - jupyter notebook --no-browser

  • Terminal 2 - ssh tunneling from local to HPC

  • browser 1 - ของเราที่จะทำการเชื่อมต่อผ่านทางพอร์ตที่เราทำ tunneling เอาไว้ไปหา notebook ที่เราเปิดบน TARA HPC กัน

  • (Optional) Terminal 3 - ระหว่างการใช้งาน jupyter notebook เราอาจจะอยากติดตั้ง packages เพิ่ม

Terminal 1 - jupyter notebook --no-browser

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

เปิดหน้า 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 จัดสรรมาให้>

@mylocalmachine:~ $

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

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

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

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

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

http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982

โดยใช้ url ที่ได้จากตอน start application ใน Terminal 1

 

(Optional) Terminal 3 - ติดตั้ง packages หรือ corpus เพิ่ม

เปิด terminal ขึ้นมาอีกหนึ่งหน้าจอ connect ไปที่ Frontend Node ของ TARA แล้วเข้าไปยัง environment ที่เรากำลังใช้งานสำหรับ jupyter notebook ของเรา (venv)

ตัวอย่างด้านล่างแสดงการเปิด terminal ที่สามขึ้นมาเพื่อติดตั้ง extra ของ pythainlp[ner] เพิ่มเติม และติดตั้ง corpus เพิ่มเติมอีกสามตัว ซึ่งจะทำให้ jupyter notebook สามารถเห็นสิ่งที่เพิ่งติดตั้งนี้ได้ด้วย


Related articles