ก่อนเริ่มใช้งาน Singularity ให้ทำการรันคำสั่งด้านล่างก่อนทุกครั้ง
module load singularity-ce

Singularity คือ ระบบ Container ที่ใช้งานบนระบบ HPC ซึ่งทำงานคล้าย Docker และสามารถนำ Image จาก Docker มารันได้
ในขณะที่รันภายใน Singularity container ผู้ใช้งานมีระดับของสิทธิ์เหมือนกันกับภายนอก container โดยทั่วไปแล้ว Singularity image จะต้องถูกพัฒนาและสร้างขึ้นมาจากพื้นฐานเครื่อง Linux ซึ่งต้องมีสิทธิ์เทียบเท่า Administrator โดยในระบบ หรือใช้งาน Feature Fakeroot โดยตัวอย่างไฟล์ Singularity image กลาง สำหรับผู้ใช้งานทุกคนถูกวางไว้ที่ /cm/shared/sif/

ผู้ใช้งานทั่วไปสามารถ pull image ได้ โดยเลือกแหล่งของ Image เพื่อใช้งานจากเว็บไซต์ที่ต้องการ ตัวอย่างเช่น 2 เว็บไซต์ ได้แก่
singularity pull <singularity_name>.sif docker://<pull_url>
ในกรณีที่ต้องการ Pull image จาก NGC สามารถนำ Pull URL ที่อยู่ใน Pull Command จากเว็บไซต์ของ NGC มาแทนที่ <pull_url> ในตัวอย่างคำสั่งได้เลย ดังตัวอย่างในภาพด้านล่าง
singularity pull tensorflow.sif docker://nvcr.io/nvidia/tensorflow:20.12-tf2-py3
ในกรณีที่เครื่องที่ติดตั้ง Singularity บนเครื่อง Linux ไว้แล้ว เราก็สามารถที่จะสร้าง Singularity image ได้ โดยสร้าง Singularity Definition file โดยให้มีรายละเอียดดังตัวอย่างต่อไปนี้
Bootstrap: docker
From: nvcr.io/nvidia/pytorch:25.01-py3-igpu
%post
export LC_ALL=C
pip install datasets accelerate grad-cam captum 'transformers[torch]' opencv-python
mkdir /cm
ภายในไฟล์ เรากำลังต้องการให้ Singularity สร้าง image บน PyTorch ตัวล่าสุด โดยดึง base image จาก Docker Hub Repository
ภายใต้ %post จะใส่สิ่งที่ต้องการติดตั้งลงไป โดยจะทำเพียงครั้งเดียวในตอนสร้าง image ในกรณีนี้ เราใช้คำสั่ง pip install ในการติดตั้ง datasets accelerate grad-cam captum 'transformers[torch]' opencv-python
และหากต้องการให้ image สามารถใช้งานพื้นที่จัดเก็บภายใน Cluster หรือบน NFS จำเป็นต้องประกาศ directories จาก NFS ต่าง ๆ ไปยังภายใน container จากตัวอย่างข้างต้น ให้ทำการประกาศสร้าง Shared Directory /cm บน image ถ้าไม่ประกาศ directories เหล่านี้ภายใน container เราอาจจะได้รับ warning เมื่อรัน container นี้
ในการ Build image สามารถรันคำสั่งด้านล่างนี้ได้เลย พร้อมระบุ flag fakeroot และตำแหน่งของ image และ Definition file
singularity build --fakeroot <example>.sif <singularity>.def
-sandbox directoriesหากคุณต้องการสร้าง Container ภายใน Directory ที่สามารถเขียนได้ (เรียกว่า sandbox) คุณสามารถทำได้โดยใช้ตัวเลือก --sandbox โดยสามารถสร้าง sandbox ได้โดยไม่ต้องมีสิทธิ์ root แต่เพื่อให้แน่ใจว่าการกำหนดสิทธิ์ของไฟล์ถูกต้อง แนะนำให้ดำเนินการในฐานะ root
$ sudo singularity build --sandbox lolcow/ library://sylabs-jms/testing/lolcow

Directory ที่ได้จะทำงานเหมือนกับ Container ในไฟล์ SIF ทุกประการ หากต้องการแก้ไขสิ่งต่าง ๆ ภายใน Container ให้ใช้ flag --writable ขณะเรียกใช้งาน Container การทำสิ่งนี้ในฐานะ root เป็นแนวทางที่ดี เพื่อให้มั่นใจว่าคุณมีสิทธิ์ในการเข้าถึง file และ directory ที่ต้องการเปลี่ยนแปลง
$ sudo singularity shell --writable lolcow/
หากคุณมี Container ที่บันทึกไว้ในเครื่องอยู่แล้ว คุณสามารถใช้ Container นั้นเป็นเป้าหมายในการสร้าง Container ใหม่ได้ วิธีนี้ช่วยให้คุณสามารถแปลง Container จากรูปแบบหนึ่งไปเป็นอีกรูปแบบหนึ่งได้ ตัวอย่างเช่น หากคุณมี sandbox container ชื่อว่า lolcow/ และต้องการแปลงให้เป็น SIF container ชื่อว่า lolcow.sif คุณสามารถทำได้ดังนี้:
$ sudo singularity build lolcow.sif lolcow/
ควรใช้ความระมัดระวังเมื่อแปลง Sandbox Directory ไปเป็นรูปแบบ SIF หากมีการเปลี่ยนแปลง Container ที่เขียนได้ก่อนการแปลง จะไม่มีบันทึกของการเปลี่ยนแปลงเหล่านั้นในไฟล์ Singularity definition ดังนั้นควรสร้าง Producation Container จาก Singularity definition file โดยตรงแทน
Reference: https://docs.sylabs.io/guides/3.0/user-guide/build_a_container.html
การรันแบบทั่วไป ที่ไม่ต้องการใช้ GPU สามารถใช้คำสั่งด้านล่าง
singularity exec <singularity_name>.sif <command>
ตัวอย่างการเรียกใช้งาน Singularity Image

การรัน Singularity เพื่อใช้งาน GPU ให้ใส่ --nv ไว้ในคำสั่งเสมอ
singularity exec --nv /cm/shared/sif/pytorch_24.02-py3.sif
