PyTorch 2.0 출시를 맞아 NLP를 위한 PyTorch Lightning 템플릿을 만들고자 합니다.
또한 python 3.11의 경우 10~60%, Pytorch 2.0의 경우 38~76%의 성능 향상이 있었기에 이를 조합하면 얼마나 큰 변화를 줄 수 있는지 체크하고자 합니다.
그렇기에 Python, Hydra, PyTorch, PL, NLP Task 순으로 정리하여 문제점과 요구 사항들을 정리하고자 합니다.
즉 3.8 이상의 version을 사용해야한다는 것을 알 수 있습니다.
Python Version간 차이점은 다음과 같습니다.
발췌 : Python Docs
pdb.set_trace()
대신 사용할 수 있다.@dataclass
데코레이터를 통해 선언할 수 있습니다.if (n := len(a)) > 10:
print(f"List is too long({n} elements, expected <= 10)")
# 이와 같이 := 연산을 통해 변수에 값을 대입 가능
# 연산 순위가 낮기에 괄호가 필요함
def f(a, b, /, c, d, *, e, f):
pass
# / 왼쪽에는 keyword arguments를 사용하면 안된다.
# 즉 f(a=10,b=20,c=30, ... ) 일 때 a와 b는 / 왼쪽이기에 f(10,20,c=30, ... )
# * 오른쪽에는 항상 keyword arguments를 사용해야한다.
# 즉 f(10,20,c=10,20,e=10,f=20)와 같은 방식으로 사용 가능
def f(a,b, /, **kwargs):
print(a,b,kwargs)
>>> f(10,20, a=1, b=2, c=3)
10 20 {'a':1, 'b':2, 'c':3}
|, |=
with (
CtxManager1(),
CtxManager2()
):
# 이와 같이 context managers에 multiple lines을 사용 가능
class Point:
x: int
y: int
def location(point):
match point:
case Point(x=0, y=0):
print("Origin is the point's location.")
case Point(x=0, y=y):
print(f"Y={y} and the point is on the y-axis.")
case Point(x=x, y=0):
print(f"X={x} and the point is on the x-axis.")
case Point():
print("The point is located somewhere else on the plane.")
case _:
print("Not a point")
# 이와 같이 match를 통해 패턴을 구조적으로 처리할 수 있다.
def square(number: Union[int, float]) -> Union[int, float]:
return number ** 2
def square(number: int | float) -> int | float
return number ** 2
RealNum = Union[int, float]
def square(number: RealNum) -> RealNum:
# Union을 통해 type X or type Y를 사용 가능하다.
# 명시적으로 type alias도 가능하다.
from typing import Self
class Shape:
def set_scale(self, scale: float) -> Self:
self.scale = scale
return self
Python에는 다음과 같은 변경점이 존재했다.
일단 속도가 가장 빠른 Python 3.11을 고려해두고 다음 자료를 정리하고자 합니다.