PL Template for NLP (0)

City_Duck·2023년 4월 20일
0

PL Template

목록 보기
1/6

PyTorch 2.0 출시를 맞아 NLP를 위한 PyTorch Lightning 템플릿을 만들고자 합니다.
또한 python 3.11의 경우 10~60%, Pytorch 2.0의 경우 38~76%의 성능 향상이 있었기에 이를 조합하면 얼마나 큰 변화를 줄 수 있는지 체크하고자 합니다.
그렇기에 Python, Hydra, PyTorch, PL, NLP Task 순으로 정리하여 문제점과 요구 사항들을 정리하고자 합니다.

Python

Version

  • PyTorch 2.0
    • Linux : 3.7~
    • Window : 3.7~3.9
    • Mac : 3.7~
  • Hydra 1.3 : 3.6~
  • PyTorch Lightning 2.1.0 dev : 3.8~
  • HuggingFace Transformers : 3.6~

즉 3.8 이상의 version을 사용해야한다는 것을 알 수 있습니다.
Python Version간 차이점은 다음과 같습니다.

발췌 : Python Docs

Python 3.7의 새로운 기능

  • 내장 breakpoint()가 추가되었습니다.
    • pdb.set_trace() 대신 사용할 수 있다.
  • dataclass를 @dataclass 데코레이터를 통해 선언할 수 있습니다.

Python 3.8의 새로운 기능

  • the walrus operator
    if (n := len(a)) > 10:
    	print(f"List is too long({n} elements, expected <= 10)")
    # 이와 같이 := 연산을 통해 변수에 값을 대입 가능
    # 연산 순위가 낮기에 괄호가 필요함
  • Positional-only parameters
    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}

Python 3.9의 새로운 기능

  • 딕셔너리 병합 및 업데이트 연산자 추가 |, |=
  • type hinting시 List, Dict 대신 list, dict와 같은 내장 컬렉션 형을 사용할 수 있다.
  • math.lcm() : "최소 공배수를 반환"하는 함수가 추가되었다.

Python 3.10의 새로운 기능

  • Parenthesized context managers
    with (
     	CtxManager1(),
        CtxManager2()
        ):
    # 이와 같이 context managers에 multiple lines을 사용 가능
  • Better error messages : 에러 메세지를 자세히 알려준다.
  • Structural Pattern Matching
    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를 통해 패턴을 구조적으로 처리할 수 있다.              
  • New Type Union Operator
    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도 가능하다.

Python 3.11의 새로운 기능

  • Python 3.10에 비해 10-60%의 속도가 빨라졌다고 한다.(CPython)
  • Self Type
    from typing import Self
    class Shape:
        def set_scale(self, scale: float) -> Self:
            self.scale = scale
            return self

결론

Python에는 다음과 같은 변경점이 존재했다.
일단 속도가 가장 빠른 Python 3.11을 고려해두고 다음 자료를 정리하고자 합니다.


profile
AI 새싹

0개의 댓글