TARA User Guide
- หน้าแรก
- เกี่ยวกับระบบ TARA
- พื้นที่ใช้งานและการโอนข้อมูล
- การใช้งาน Application
- การรัน Source code
- SLURM คืออะไร
- การสั่งรัน Job ใน SLURM โดยใช้ Script
- การสั่งรัน Job ใน SLURM ในรูปแบบ Interactive
- การสั่งรัน Job ผ่าน Singularity ใน SLURM
- ข้อตกลงการใช้ทรัพยากรคอมพิวเตอร์ของ ThaiSC
- ระบบแจ้งปัญหาและสอบถามข้อมูลเพิ่มเติม
- คำถามที่พบบ่อย
Virtual machines vs Containers
Virtualization คือ การสร้างคอมพิวเตอร์เสมือน (Virtual machine หรือ VM) ที่มีทั้งซีพียู แรม สตอเรจ ระบบปฏิบัติการ ฯลฯ ขึ้นมารันบนคอมพิวเตอร์จริงๆ อีกทีหนึ่ง ตัวอย่างเช่น VM ware, Virtual box
ข้อดีของ Virtualization | ข้อเสียของ Virtualization |
---|---|
ทำให้เกิดการทำงานแยกส่วน (Isolation) ระหว่าง VM แต่ละเครื่องอย่างสมบูรณ์ | ใช้ทรัพยากรซ้ำซ้อน ทำงานช้า |
สามารถรันระบบปฏิบัติการที่แตกต่างกันได้ระหว่าง บน VM กับ Host | ใช้ทรัพยากรพื้นที่เยอะ สำหรับเก็บระบบปฏิบัติการณ์ หรือ (OS) และซอฟต์แวร์ต่างๆ ที่มักจะใช้เหมือนกันใน VM หลายๆ ตัว |
Containers ถูกสร้างขึ้นมาเพื่อแก้ปัญหาของ Virtualization โดย Containers ใช้งานฮาร์ดแวร์และ OS ชุดเดียวกัน ทำให้ลดความซ้ำซ้อนของการใช้ทรัพยากรลง ตัวอย่าง Containers เช่น Docker, Singularity
ข้อดีของ Containers | ข้อเสียของ Containers |
---|---|
ใช้ทรัพยากรที่น้อยกว่า virtualization มาก อิมเมจของคอนเทนเนอร์อาจมีขนาดเพียงกี่ไม่กี่สิบ MB ในขณะที่อิมเมจของ VM ต้องใช้พื้นที่ระดับหลาย GB | มีความยืดหยุ่นที่น้อยกว่า Virtualization โดยเฉพาะไม่สามารถใช้ระบบปฏิบัติการณ์ หรือ (OS) ที่แตกต่างกันระหว่าง Guest และ Host ได้ (เพราะจุดเด่นของคอนเทนเนอร์คือการแชร์ระบบปฏิบัติการณ์ หรือ OS ใช้งานร่วมกัน) |
ใช้ทรัพยาการ CPU,RAM และเวลาในการ Boot น้อยลง |
Singularity
Singularity คือ ระบบ Container ที่ใช้งานบนระบบ HPC ซึ่งทำงานคล้าย Docker แต่ที่ Docker ไม่เหมาะสมนำมาใช้งานบนระบบ HPC เพราะมีผลด้านความปลอดภัยต่อระบบ ดังนั้นระบบ Container ที่ศูนย์ HPC ในหลายๆ ที่เลือกใช้งานกันคือ Singularity
**หากต้องการใช้งาน DGX-nodes ระบบ Singularity เป็นทางเลือกที่สะดวกที่สุด
ข้อดีของ Singularity
- สามารถใช้ Docker image แปลง มาใช้งานบน Singularity ได้
- ลดขั้นตอนการติดตั้งโปรแกรม
ตัวอย่างโปรแกรมที่ใช้งานบน Singularity เช่น Tensorflow, Pytorch, Kaldi, BUSCO, Qiime เป็นต้น
การสั่งรัน Job ผ่านระบบ Singularity แบ่งเป็น 2 กรณี คือ
- กรณีมี container image ที่พร้อมใช้งานอยู่แล้ว
- กรณีไม่มี container image จำเป็นต้องสร้าง container สำหรับใช้งานขึ้นใหม่หรือแก้ไขจากของเดิม
กรณีมี container image ที่พร้อมใช้งานอยู่แล้ว
- เลือก container เพื่อใช้งานจากแหล่งเว็บไซต์ที่ต้องการ ทางทีมงานยกตัวอย่างมา 2 เว็บไซต์ ได้แก่
- NGC ที่เป็นแหล่งรวม container ของ nvidia https://ngc.nvidia.com/catalog/containers
- Docker hub แหล่งรวม container ของ Docker https://hub.docker.com/
2. เรียกใช้งาน Singularity
module load Singularity #เรียกใช้งาน Singularity
3. ทำการ pull container ที่ต้องการใช้งาน คือ
singularity pull <singularity_name>.sif docker://<pull command url> #Download container
4. สั่งรัน Container โดย้คำสั่ง
singularity exec --nv <singularity_name>.sif <command> #Run container
ตัวอย่างการใช้งาน Singularity
การ pull Tensorflow container ที่ต้องการใช้งาน มาจากทั้งสองช่องทางเว็บไซต์
ตัวอย่าง คำสั่ง การ pull Tensorflow มาจากเว็บไซต์ NGC
module load Singularity
singularity pull tensorflow.sif docker://nvcr.io/nvidia/tensorflow:20.07-tf1-py3
การ pull Tensorflow มาจากเว็บไซต์ของ Docker hub
module load Singularity
singularity pull tensorflow.sif docker://tensorflow/tensorflow
การเรียกใช้งาน Tensorflow บนระบบ TARA HPC โดยใช้คำสั่ง
module load Singularity #call module Singularity
singularity exec --nv tensorflow.sif <command> #execute tensorflow container (** --nv เพื่อเรียกใช้งาน GPU)
ตัวอย่าง SBATCH เรียกใช้งาน tensorflow บนระบบ TARA HPC
#!/bin/bash
#SBATCH -p gpu # ระบุ partition หรือประภทเครื่องที่ใช้งาน
#SBATCH -N 1 # ระบุจำนวนเครื่อง (nodes)
#SBATCH -t 00:10:00 # ระบุเวลาที่ต้องการจองหรือใช้งาน (time limit) โดยมีรูปแบบคือ ชั่วโมง:นาที:วินาที
#SBATCH -J temsorflow # ระบุชื่อของ Job
#SBATCH -A <project ID> # ระบุ Project account ซึ่งจะได้หลังจากการ Register **หากไม่ระบุในส่วนนี้จะไม่สามารถรันงานได้
module purge #unload module ทั้งหมด เพราะว่าอาจจะมีการ Load module ไว้ก่อนหน้านั้น
module load Singularity #load module ที่ต้องการใช้งาน
singularity exec --nv ../tensorflow.sif python tensorflow.py #สั่งรัน tensorflow (** --nv เพื่อเรียกใช้งาน GPU)
ตัวอย่าง 2 การ pull qiime2 มาจากเว็บไซต์ Docker hub
module load Singularity
singularity pull qiime2.sif docker://qiime2/core
การเรียกใช้งาน qiime2 บนระบบ TARA HPC โดยใช้คำสั่ง
module load Singularity #call module Singularity
singularity exec qiime2.sif <command> #execute qiime2 container
ตัวอย่าง SBATCH เรียกใช้งาน qiime2 บนระบบ TARA HPC
#!/bin/bash
#SBATCH -p compute # ระบุ partition หรือประภทเครื่องที่ใช้งาน
#SBATCH -N 1 # ระบุจำนวนเครื่อง (nodes)
#SBATCH -t 00:10:00 # ระบุเวลาที่ต้องการจองหรือใช้งาน (time limit) โดยมีรูปแบบคือ ชั่วโมง:นาที:วินาที
#SBATCH -J qiime2 # ระบุชื่อของ Job
#SBATCH -A <project ID> # ระบุ Project account ซึ่งจะได้หลังจากการ Register **หากไม่ระบุในส่วนนี้จะไม่สามารถรันงานได้
module purge #unload module ทั้งหมด เพราะว่าอาจจะมีการ Load module ไว้ก่อนหน้านั้น
module load Singularity #load module ที่ต้องการใช้งาน
singularity exec ../qiime2.sif qiime info #สั่งรัน qiime
กรณีไม่มี container image จำเป็นต้องสร้าง container สำหรับใช้งานขึ้นใหม่หรือแก้ไขจากของเดิม
ในกรณีที่ต้องการแก้ไข Container หรือ สร้างใหม่ จะต้องดำเนินการบนเครื่องคอมพิวเตอร์ของท่าน โดยที่จะต้องทำการติดตั้ง Singularity version 3.x โดยทำตาม https://sylabs.io/guides/3.6/user-guide/quick_start.html
คู่มือใช้งาน
- วิธีการใช้งาน Python บน Singularity container (เน้นไปทางแอปพลิเคชันทางด้าน AI ที่ทำงานร่วมกับ GPU) [Download (English version)]