모바일 메뉴 닫기
 

데이터센터

pytorch 예제

pytorch 예제 따라서 실행해보기

 

1. Anaconda 설치

 

         > wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh

             (You can check new version in https://repo.anaconda.com/archive)

         > bash Anaconda3-2020.11-Linux-x86_64.sh

         > source ~/.bashrc

         > (conda 명령어 인식이 안되는 경우) anaconda3/bin/conda init bash (anaconda 폴더를 변경한 경우에는 변경한 폴더를 path로)

         > conda deactivate

 

2. python 3.9, pytorch 설치

         > conda create -n tutorial python=3.9

         > conda activate tutorial

         > conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia

 
3. 파이썬 코드 작성
         
       code.py 파일 만들기  
  •        - torch.cuda.is_available() : GPU 사용가능 여부 확인
  •        - device = torch.device(cuda) and [something].to(device) : GPU에 Pytorch model 이 돌아가도록 하는 명령어   
  •    
         <code.py>
import argparse
import torch
import torch.nn as nn
import torch.optim as optim

parser = argparse.ArgumentParser("Continuous Normalizing Flow")
parser.add_argument("--hidden_size", type=int, default=4)
parser.add_argument("--hidden_layer", type=int, default=3)
parser.add_argument("--batch_size", type=int, default=100)
parser.add_argument("--lr", type=float, default=1e-3)
parser.add_argument("--weight_decay", type=float, default=1e-5)
args = parser.parse_args()
print(f"cuda: {torch.cuda.is_available()}") 
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

input_size = 10
output_size = 10
model_lst = [nn.Linear(input_size, args.hidden_size)]
for i in range(args.hidden_layer):
    model_lst.append(nn.Linear(args.hidden_size,args.hidden_size))
model_lst.append(nn.Linear(args.hidden_size,output_size))

model = nn.Sequential(*model_lst).to(device)
optimizer = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay)

for itr in range(200):
    x = torch.randn(args.batch_size, input_size).to(device)
    y = torch.randn(args.batch_size, output_size).to(device)
    y_hat = model(x)
    loss = (y - y_hat).pow(2).mean()
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    print(f"{itr}: {loss.item():.3f}")
 
4. 코드를 실행시킬 shell script 작성
   
      code.sh 파일 만들기
          - #SBATCH -J example  <- [job 이름]
          - #SBATCH --gres=gpu:N <- [사용할 GPU 개수]
          - #SBATCH --output=example.out <- [Output 파일 이름. Stdout에 적히는 모든 것들이 이 파일에 작성됨]
          - #SBATCH --time 0-23:00:00 <- [코드를 실행시킬 시간]
          - conda activate toturial <- [Anaconda Environment]
 
      <code.sh>
#!/bin/bash
#SBATCH -J example
#SBATCH --gres=gpu:1
#SBATCH --output=example.out
#SBATCH --time 0-23:00:00
eval "$(conda shell.bash hook)"
conda activate tutorial
python -u code.py --hidden_size 32  --hidden_layer 3 --batch_size 256 --lr 1e-3 --weight_decay 1e-6
 
 
5. Slurm 명령어로 job 제출
 
         > sbatch code.sh
         > squeuelong  (job 제출 후 수행중인 job 확인)
         > sinfo  (서버 상태 확인)
         > scancel jobID (job 취소)