PyTorch Autograd 100% 이해하기: loss.backward() 한 줄 뒤에 숨겨진 모든 것
·
Deep Learning
PyTorch 를 쓰다보면 습관처럼 쓰는 문장이 있습니다. 바로, loss.backward() 입니다. 신경망을 배우고 역전파를 위한 미분을 배우고나서 PyTorch를 접했을 때 loss.backward()를 마주치면 마법같다는 생각을 할 수 밖에 없습니다. 그 복잡한 계산이 loss.backward() 한 줄이면 해결되니까요.하지만 엔지니어로서 "아 좋다"라고 넘어가기에는 조금 찜찜합니다. 도대체 loss.backward()가 내부적으로 어떻게 작동하는지 궁금합니다.오늘은 PyTorch의 핵심 중 하나이자 이 마법을 가능하게 해주는 Autograd 에 대해서 알아보겠습니다.0. 들어가기 전에: 딥러닝 학습의 4단계 흐름코드를 뜯어보기전에 딥러닝 모델 학습의 기본 흐름을 다시 한번 떠올려보겠습니다. 딥러..
pip 는 어떻게 작동할까?
·
Python
poetry나 uv 같은 새로운 툴들이 나왔지만 파이썬 패키지 관리의 대세는 아직 pip입니다. 파이썬 패키지를 설치하고 싶으면 당연하게 pip install 라고 치죠. 인터넷에서 를 다운로드해서 설치해 주고, 종속성이 있는 패키지가 있다면 같이 설치해 주는 아주 편리한 툴입니다.그런데 가만 생각해보면 패키지를 다운로드하여 설치한다는 동작이 그리 단순히지 않습니다. 사용자 마다 쓰고 있는 파이썬 버전이 다르고, OS도 다르고, 하드웨어도 다르기 때문입니다. 패키지가 C 코드를 가지고 있다면 OS나 하드웨어를 따져야 하고, 순수 파이썬 코드라고 하더라도 파이썬 버전을 따져보아야 합니다.오늘은 pip가 실제로 어떻게 이 모든 문제를 해결하고 패키지를 다운로드하여 설치하는지 알아보려고 합니다.pip inst..
itertools: iterator를 위한 도구 모음
·
Python
iterator? iterable? itertools는 iterator를 잘 다루기 위한 기능들을 모아둔 모듈입니다. iterator에 대한 설명은 Iterator, Generator 라는 글을 참조하시면 좋습니다. 왜 iterator가 필요한지, 어떻게 쓰는지, generator와 관계는 무엇인지가 설명되어 있습니다. iterator를 언제 쓰는지 간단히 요약해 보면 다음과 같습니다. element 수가 너무 많아서 한 번에 메모리에 올릴 수 없다. 또는 element 수가 몇 개인지 미리 알 수 없다. element 하나하나를 만드는데 시간이 오래 걸리거나 리소스를 많이 쓴다. 그래서 필요할 때 만들어 쓰고 싶다. 특정 index의 element를 꺼내올 수 없거나 매우 어렵다. 하지만 다음 elem..
if __name__ == '__main__': 이 뭔가요?
·
Python
파이썬 코드들을 보다보면 아래와 같은 코드를 종종 볼 수 있습니다. if __name__ == '__main__': # something here 이 코드가 하는 일은 무엇일까요? 오늘은 이 코드의 작동 원리와 언제 사용하는지 알아보겠습니다. __name__ 은 무엇일까요? 먼저 첫번째 퍼즐 조각인 __name__이 무엇인지부터 알아보겠습니다. Python에는 미리 정의된 특수한 함수나 변수들이 있습니다. 함수는 __do()__ 같은 형태이고, 변수는 __val__ 같은 형태입니다. 이런 특수한 함수와 변수는 보통 Python 내부적으로 사용하기 위한 것들이라서 코딩 때 직접 사용할 일은 그다지 많지 않습니다. 그런데 __name__은 아주 유용한 특성이 있어서 일반 코딩 때도 곧잘 사용되곤 합니다. 좋..
Python GIL(Global Interpreter Lock)이 무엇일까요?
·
Python
오늘은 Python을 좋아하지 않는 분들이 자주 Python(정확히는 CPython)을 공격하는 이유 중 하나인 GIL에 대해서 이야기해보려고 합니다. GIL을 이해하기 위해서는 먼저 thread, process와 같은 병렬처리에 대한 기본적인 이해가 필요합니다. 이번 포스트에서는 thread와 process가 무엇인지는 알고 계신다고 가정하고 이야기를 진행해 보겠습니다. ※ GIL은 CPython 만이 가지는 특징입니다. Jython, IronPython, PyPy 같은 다른 Python 구현은 GIL을 사용하지 않습니다. GIL이 풀려고 하는 문제는 무엇일까? 먼저 GIL이 풀려고 하는 문제부터 살펴보겠습니다. GIL이 풀려고 하는 것은 Multi-thread 프로그래밍에서 아주 골치 아픈 문제인 r..
Python Callable
·
Python
callable은 무엇이지? Python에서 callable은 함수를 호출하듯이 호출할 수 있는 객체를 의미합니다. 프로그래밍 언어 용어에 대한 설명답게 뭔가 미묘하면서 깔끔하지 않은 느낌이 드는 문장이죠? "함수를 호출하듯이 호출한다"는 부분이 눈에 걸리지 않을까 합니다. 일반적인 프로그래밍 언어에서는 호출할 수 있는 것은 함수(또는 메소드) 뿐이기 때문입니다. 변수 a를 호출하세요. 클래스 Cat을 호출하세요. 이상하죠? 그럼 Python에는 함수 외에도 호출할 수 있는 무언가가 있다는 뜻일까요? 짧은 답은 "그렇다"입니다. 긴 답은 아래에서 차근차근 이야기해보겠습니다. callable() 함수 먼저 Python이 built-in으로 제공하는 callable() 함수를 살펴보겠습니다. callable..