ThaiSC

การสั่งรัน Job ผ่าน Singularity ใน SLURM

TARA User Guide

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 กรณี คือ

  1. กรณีมี container image ที่พร้อมใช้งานอยู่แล้ว
  2. กรณีไม่มี container image จำเป็นต้องสร้าง container สำหรับใช้งานขึ้นใหม่หรือแก้ไขจากของเดิม

กรณีมี container image ที่พร้อมใช้งานอยู่แล้ว

  1. เลือก container เพื่อใช้งานจากแหล่งเว็บไซต์ที่ต้องการ ทางทีมงานยกตัวอย่างมา 2 เว็บไซต์ ได้แก่

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