ในบทความนี้จะกล่าวถึงตัวอย่างการติดตั้ง Python package ที่เกี่ยวข้องกับ PyTorch และการทดสอบรันงานบน gpu node ของ TARA HPC โดยใช้ตัวอย่าง Package modules อย่างง่ายจากการทำ 3D-Deep Learning ด้วย PyTorch
Table of Contents |
---|
ตัวอย่างโปรแกรม multi-GPUs PyTorch เบื้องต้น
ผู้ใช้งานสามารถ copy ไฟล์โปรแกรมตัวอย่างที่ใช้ในบทความนี้ได้ในระบบ TARA ที่
/tarafs/data/project/common/AI/examples/basic-multigpu-pytorch.py
import PyTorch modules และกำหนด parameters
Code Block | ||
---|---|---|
| ||
import torch import torch.nn as nn from torch.utils.data import Dataset, DataLoader # Parameters and DataLoaders input_size = 5 output_size = 2 batch_size = 30 data_size = 100 |
สร้าง dummy dataset ขึ้นมาด้วยการ random
Code Block | ||
---|---|---|
| ||
class RandomDataset(Dataset): def __init__(self, size, length): self.len = length self.data = torch.randn(length, size) def __getitem__(self, index): return self.data[index] def __len__(self): return self.len rand_loader = DataLoader(dataset=RandomDataset(input_size, data_size), batch_size=batch_size, shuffle=True) |
สร้าง simple model
ที่แค่รับ input แล้วทำ linear operation แล้วส่งออก output เพื่อแสดงการทำงานของ DataParallel
ซึ่งก็คือส่วนที่ทำให้เกิดการใช้งาน multi-GPUs ได้ด้วยการแบ่งข้อมูลออกไปที่แต่ละ GPUs
...
Code Block | ||
---|---|---|
| ||
class Model(nn.Module): # Our model def __init__(self, input_size, output_size): super(Model, self).__init__() self.fc = nn.Linear(input_size, output_size) def forward(self, input): output = self.fc(input) print("\tIn Model: input size", input.size(), "output size", output.size()) return output |
สร้าง object device
ซึ่งจะเป็นจุดที่เราส่ง tensor/model ให้กับ device ที่เรามีเพื่อการทำงาน
...
Code Block | ||
---|---|---|
| ||
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") |
สร้าง model instance และการรันงานแบบ nn.DataParallel
โดยจุดที่เราสนใจเป็นพิเศษในบทความนี้คือ หากในเครื่องที่เราได้รันงานมี GPUs หลายตัว เราจะสามารถ wrap model ของเราด้วย nn.DataParallel
ได้ จากนั้นจึงนำ model ที่ได้ส่งให้กับ device ที่เรากำหนดไว้ก่อนหน้านี้
...
ในขั้นตอนนี้ถ้าหากเรามี GPU มากกว่าหนึ่งตัว เช่น gpu node ในระบบ TARA ก็จะได้ผลลัพธ์ออกมาเป็น
Let’s use 2 GPUs!
run the model
สั่งให้พิมพ์ขนาดของ input/output tensors ออกมาให้ดูด้วย
...
ซึ่งจะเห็นได้ว่ามีการแบ่งข้อมูลไปรันโมเดลที่ GPUs ทั้งสองตัว
ติดตั้ง PyTorch package
สมมุติว่าท่านต้องการเรียกใช้ library ดังแสดงใน header ของโปรแกรม python หนึ่งที่เรียกใช้ torch3D torchvision torchsummary
...
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 ได้ดังนี้
...
สังเกตจากผลลัพธ์จะเห็นได้ว่า nn.DataParallel
ทำการแบ่งข้อมูลกระจายไปรันใน GPUs ทุกตัวของ dgx node
Related articles
Filter by label (Content by label) | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|