Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

สมมุติว่าท่านต้องการเรียกใช้ library ดังแสดงใน header ของโปรแกรม python หนึ่งที่เรียกใช้ torch3D torchvision torchsummary

...

ท่านสามารถติดตั้ง library ดังกล่าวได้บน project home directory ของท่านบน TARA HPC ใน Virtual Environment (source activate) ของท่าน หรือติดตั้งใน Singularity container เพื่อการใช้งานบน TARA HPC ได้

ติดตั้ง Package module ใน virtualenv และทดสอบใช้งาน

อย่าลืม load module ซอฟแวร์ที่ต้องการใช้งานก่อนเริ่มทำงานใน TARA

สร้าง Virtual Environment ใน TARA

ในตัวอย่างด้านล่าง ได้ทำการ module load Python แล้วสร้าง virtualenv ไว้ในโฟลเดอร์ venv-3DDL จากนั้น activate virtualenv ที่สร้างขึ้นด้วยคำสั่ง source venv-3DDL/bin/activate แล้วจึงเริ่มทำการติดตั้ง Package ที่ต้องการ เช่น pip install -r requirement.txt หรือ การติดตั้ง Package แบบระบุที่อยู่

...

Note

ERROR: Could not find a version that satisfies the requirement PyTorch3d==0.5.0 (from versions: 0.0.1)

ERROR: No matching distribution found for PyTorch3d==0.5.0

จาก error ข้างต้นและผลการค้นบนอินเตอร์เน็ต (อ่านเพิ่มเติม) ทำให้ติดตั้ง specific version ของ PyTorch3D ที่เหมาะสมกับเวอร์ชั่นของ Python, cuda, และ PyTorch ที่กำลังใช้งานอยู่บนระบบ TARA ได้ดังนี้

Code Block
(venv-3DDL) [uaccount@tara-frontend-1 segmed]$ pip install pytorch3d \
-f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py39_cu102_pyt190/download.html

ทดสอบใช้งานด้วย sinteract

sinteract -p gpu

หลังจากติดตั้งเสร็จสิ้นจึงทดสอบโปรแกรมที่ต้องการรันต่อ $ python basic-multigpu-pytorch.py โดยในกรณีนี้เราต้องการใช้งาน gpu จึงจองทรัพยากรแบบ sinteract เพื่อทำการทดสอบโปรแกรมเบื้องต้น

...

ซึ่งจะสังเกตเห็นว่าตอนนี้เราสามารถจองทรัพยากรสำเร็จและได้เปลี่ยนจาก frontend-1 node มาอยู่บน tara-g-001 หรือ gpu node เบอร์ 001 แล้วนั่นเอง

output

จากนั้นเรียกใช้งาน virtual environment ที่เราต้องการ แล้วทดสอบโปรแกรมกับ package ต่างๆที่ได้ติดตั้งไว้แล้วใน vitualenv

Code Block
[uaccount@tara-g-001 segmed]$ source venv-3DDL/bin/activate
(venv-3DDL) [uaccount@tara-g-001 segmed]$ python basic-multigpu-pytorch.py 
torch version :  1.9.0+cu102
cuda available? :  True
cuda version:  10.2
cuda device count:  2
cuda device id: , 0, 1
Let's use 2 GPUs!
	In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])
	In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])
	In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])
	In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([5, 5]) output size torch.Size([5, 2])
	In Model: input size torch.Size([5, 5]) output size torch.Size([5, 2])
Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

ติดตั้ง Package module ใน Singularity container และทดสอบใช้งาน

อ้างอิงการสร้าง Singularity Container อย่างง่ายใน 5 ขั้นตอน

สร้าง Singularity container

ตัวอย่างด้านล่างนี้ทำใน local machine ที่ติดตั้ง singularity ไว้บน Linux machine โดยทำตามเอกสารอ้างอิง และเพิ่มเติมการทดสอบรันตัวอย่างโปรแกรม Python (basic-multigpu-pytorch.py) ภายใน container เพื่อยืนยันว่าได้ติดตั้ง package module ที่ถูกต้องพร้อมใช้งานจริง

...

จะเห็นจาก output ที่ทดสอบภายใน container ว่าไม่มี cuda device เนื่องจากเรากำลังอยู่ใน linux machine ที่ไม่มี GPUs แต่จากผลลัพธ์แสดงให้เห็นว่าสามารถใช้งาน package modules ต่างๆที่จำเป็นได้แล้ว

ทดสอบใช้งานด้วย sbatch

เตรียม Slurm submission script

ใน submission script นี้กำหนดให้ใช้งาน partition “dgx-preempt” โดยเราทราบอยู่แล้วว่า dgx node มีจำนวน 8 GPUs ด้วยกัน

...

Note

อย่าลืมใส่ “--nv” เพราะถ้าไม่มี --nv จะไม่มีการเรียกใช้งาน GPUs

output

Code Block
$ cat slurm-1314656.out
torch version :  1.8.1+cu102
cuda available? :  True
cuda version:  10.2
cuda device count:  8
cuda device id: , 0, 1, 2, 3, 4, 5, 6, 7
Let's use 8 GPUs!
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
	In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])
Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

สังเกตจากผลลัพธ์จะเห็นได้ว่า nn.DataParallel ทำการแบ่งข้อมูลกระจายไปรันใน GPUs ทุกตัวของ dgx node

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 ( "python" , "pytorch" , "singularity" , "sinteract" , "virtualenv" , "sbatch" ) and space = currentSpace ( )
labelssingularity python container

...