Table of Contents | ||||||||
---|---|---|---|---|---|---|---|---|
|
Tip |
---|
บทความนี้เขียนขึ้นโดยมีสมมุติฐานว่าท่านมีประสบการณ์การใช้งาน HPC cluster มาก่อน เช่น TARA มาก่อน TARA และควรมีประสบการณ์ดังต่อไปนี้และควรมีชุดประสบการณ์ดังต่อไปนี้ |
- เข้าใจความแตกต่าง และวัตถุประสงค์การใช้งานเบื้องต้นของ frontend-node และ compute-node อ่านเพิ่มเติม
- ส่วนสำคัญคือ ท่านทราบว่าไม่สามารถ download ใด ๆ ได้ใน compute node ต้อง pre-download files ที่ Frontend-node เท่านั้น
- สามารถรัน batch job บน HPC cluster โดยใช้คำสั่ง sbatch ตามด้วย Slurm script ได้ อ่านเพิ่มเติม
- ทำการติดตั้งและ activate conda environment ใน home หรือ project directory ของท่านบน HPC cluster ได้ อ่านเพิ่มเติม
- มีความเข้าใจในโปรแกรมที่ท่านกำลังใช้งานอยู่เป็นอย่างดี
Info |
---|
บทความนี้แบ่งเนื้อหาเป็นสามส่วนหลัก คือ
ซึ่งท่านสามารถดูภาพรวมเนื้อหาได้จาก Table of Contents ด้านล่างนี้ เพื่อประโยชน์ในการไปดูส่วนที่สนใจได้ทันที ตัวอย่างทั้งหมดได้ผ่านการทดลองบน TARA แล้วทั้งสิ้น |
...
Table of Contents | ||||||||
---|---|---|---|---|---|---|---|---|
|
...
เกริ่นนำ
โดยทั่วไปแล้วมีเพียงสองเหตุผลที่ทำให้เราต้องการใช้ multiple GPUs ในการเทรน neural networks:
...
SPMD หรือที่ย่อมาจาก Single-Program, Multiple Data คือไอเดียที่ว่า “โมเดล” จะถูกทำสำเนาเก็บไว้ที่ GPUs ทุกตัวที่จะใช้ และข้อมูลที่จะใช้กับโมเดลดังกล่าวก็จะถูกแบ่งออกเป็นจำนวนเท่า ๆ กันสำหรับแต่ละ GPUs เมื่อ gradients ถูกคำนวนจากทุก ถูกคำนวณจากทุก GPUs แล้วจะนำมารวมกันเพื่อหาค่าเฉลี่ย และค่า weights ก็จะถูกอัพเดททั้งชุดผ่าน gradient all-reduced โดยที่กระบวนการนี้จะถูกทำซ้ำด้วย mini-batches ชุดใหม่ที่ถูกส่งเข้า GPUs แต่ละตัวอีกครั้งหนึ่ง
...
Table of Content (in page)
...
Expand |
---|
...
| ||||||||||
|
...
MNIST DDP
โดยในตัวอย่างนี้เป็นการแปลง python code แต่เดิมของ MNIST ที่เป็น single gpu ให้เป็น DDP
...
Code Block | ||||
---|---|---|---|---|
| ||||
WORLD_SIZE=8 MASTER_PORT=15347 MASTER_ADDR=tara-dgx1-002 Hello from rank 1 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 3 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 0 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 2 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 5 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 4 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 6 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Hello from rank 7 of 8 on tara-dgx1-002.tara.nstda.or.th where there are 8 allocated GPUs per node. Group initialized? True host: tara-dgx1-002.tara.nstda.or.th, rank: 1, local_rank: 1 host: tara-dgx1-002.tara.nstda.or.th, rank: 3, local_rank: 3 host: tara-dgx1-002.tara.nstda.or.th, rank: 4, local_rank: 4 host: tara-dgx1-002.tara.nstda.or.th, rank: 6, local_rank: 6 host: tara-dgx1-002.tara.nstda.or.th, rank: 0, local_rank: 0 host: tara-dgx1-002.tara.nstda.or.th, rank: 2, local_rank: 2 host: tara-dgx1-002.tara.nstda.or.th, rank: 5, local_rank: 5 host: tara-dgx1-002.tara.nstda.or.th, rank: 7, local_rank: 7 Train Epoch: 1 [0/60000 (0%)] Loss: 2.297117 Train Epoch: 1 [640/60000 (8%)] Loss: 1.329343 Train Epoch: 1 [1280/60000 (17%)] Loss: 0.518520 Train Epoch: 1 [1920/60000 (25%)] Loss: 0.331641 Train Epoch: 1 [2560/60000 (34%)] Loss: 0.256029 Train Epoch: 1 [3200/60000 (42%)] Loss: 0.126544 Train Epoch: 1 [3840/60000 (51%)] Loss: 0.129393 Train Epoch: 1 [4480/60000 (59%)] Loss: 0.135831 Train Epoch: 1 [5120/60000 (68%)] Loss: 0.094554 Train Epoch: 1 [5760/60000 (76%)] Loss: 0.131771 Train Epoch: 1 [6400/60000 (85%)] Loss: 0.078105 Train Epoch: 1 [7040/60000 (93%)] Loss: 0.078772 Train Epoch: 1 [0/60000 (0%)] Loss: 2.315368 Train Epoch: 1 [640/60000 (8%)] Loss: 1.471632 Train Epoch: 1 [1280/60000 (17%)] Loss: 0.394169 Train Epoch: 1 [1920/60000 (25%)] Loss: 0.376319 ... Train Epoch: 14 [5120/60000 (68%)] Loss: 0.003920 Train Epoch: 14 [5760/60000 (76%)] Loss: 0.105166 Train Epoch: 14 [6400/60000 (85%)] Loss: 0.020963 Train Epoch: 14 [7040/60000 (93%)] Loss: 0.071237 Test set: Average loss: 0.0298, Accuracy: 9897/10000 (99%) |
Output DDP กับ 2
...
Nodes DGX-1 (16 GPUs)
หากเราต้องการเทรนนิ่งด้วย 2 DGX nodes หรือ 16 GPUs V100 เราสามารถปรับแต่งค่าที่เกี่ยวข้องต่าง ๆ ใน Slurm configuration ของ script-N-1-worldsize-8.sh ให้กลายเป็น script-N-2-worldsize-16.sh ได้ง่าย ๆ ดังนี้
Code Block |
---|
#SBATCH -N 2 # node count ... export WORLD_SIZE=16 # ควรได้มาจาก $(($SLURM_NNODES * $SLURM_NTASKS_PER_NODE)) |
ผลลัพธ์ของ script-N-2-worldsize-16.sh และ DDP.py แสดงได้ดังต่อไปนี้
...