콘텐츠로 이동

PyTorch RBLN으로 실행하고 디버깅하기

개요

이 튜토리얼에서, PyTorch RBLN을 이용해서 실행하고 디버깅하는 예제를 보여드립니다.

설정과 설치

Note

torch-rbln을 사용하려면 RBLN Portal 계정이 필요합니다.

간단한 예제 돌려보기 (torch.add)

다음의 add.py는 리벨리온 NPU에서 fp16 dtype의 텐서 연산을 검증하는 예제입니다. cudacpu 대신 rbln을 지정하는 것 외에는 GPU 또는 CPU에서 실행하는 코드와 동일합니다.

add.py
1
2
3
4
5
6
7
8
9
import torch

device = 'rbln'

a = torch.tensor([1, 2, 3], dtype=torch.float16, device=device)
b = torch.tensor([4, 5, 6], dtype=torch.float16, device=device)

c = a + b
print(f"{c}")  # expect: [5., 7., 9.] on rbln:0 (fp16)

위의 코드를 실행하면 다음의 결과를 기대할 수 있습니다.

$ python3 add.py
tensor([5., 7., 9.], device='rbln:0', dtype=torch.float16)

RBLN NPU에서 element wise로 동작하는 fp16 torch.add의 실행 결과가 예상과 일치하는 것을 확인할 수 있습니다.

PyTorch RBLN을 사용해서 추가로 디버깅하기

다음 예제는 PDB를 사용하여 결과 tensor의 값과 개별 element의 값을 확인하는 예제입니다.

$ python3 -m pdb add.py
> add.py(1)<module>()
-> import torch
(Pdb) b 6
Breakpoint 1 at add.py:6
(Pdb) c
> add.py(6)<module>()
-> print(c)
(Pdb) p c
tensor([5., 7., 9.], device='rbln:0', dtype=torch.float16)
(Pdb) p c[0], c[1]
(tensor(5., device='rbln:0', dtype=torch.float16), tensor(7., device='rbln:0', dtype=torch.float16))

위의 예제에서 전체 c 텐서의 값과 c[0], c[1]의 값이 모두 예상과 일치하는 것을 볼 수 있습니다.