
<파이토치로 배우는 자연어 처리>는 델립 라오Delip Rao, 브라이언 맥머핸Brian McMahan이 지은 <Natural Language Processing with PyTorch>의 번역서입니다.
저의 첫 번째 파이토치 책이네요. 부족한 점이 많지만 재미있게 봐주세요. 책을 내기까지 도와 주신 모든 분들께 정말 감사드립니다!
<파이토치로 배우는 자연어 처리>는 델립 라오Delip Rao, 브라이언 맥머핸Brian McMahan이 지은 <Natural Language Processing with PyTorch>의 번역서입니다.
저의 첫 번째 파이토치 책이네요. 부족한 점이 많지만 재미있게 봐주세요. 책을 내기까지 도와 주신 모든 분들께 정말 감사드립니다!
파이토치 1.1.0 버전이 릴리스되었습니다. 1.1.0버전부터 공식적으로 텐서보드를 지원합니다. 또한 CUDA 8.0 버전은 더 이상 지원하지 않습니다. CUDA 9.0이나 10.0을 사용하세요.
자세한 내용은 릴리스 노트를 참고하세요.
콘다(conda)를 사용하면 파이토치를 손쉽게 설치할 수 있습니다. 윈도(Windows) 바이너리는 파이썬 2.7을 지원하지 않습니다. macOS 바이너리는 GPU를 지원하지 않습니다.
# CUDA 9.0 or 10.0 for Linux, Windows $ conda install pytorch torchvision cudatoolkit=9.0 -c pytorch $ conda install pytorch torchvision cudatoolkit=10.0 -c pytorch # CPU for Linux, Windows $ conda install pytorch-cpu torchvision-cpu -c pytorch # macOS $ conda install pytorch torchvision -c pytorch
OpenAI에서 강화 학습 교육 자료인 스피닝 업(Spinning Up)을 공개했습니다. 깃허브에서 관련 코드도 같이 제공됩니다. 아래 알고리즘 트리 중에서 스피닝 업에서 다루는 것은 Policy Gradient, PPO, TRPO, DDPG, TD3, SAC입니다.
OpenAI에서 스피닝 업을 만들게 된 이유가 강화 학습을 배우기 위한 적절한 자료가 없기 때문이라고 합니다. 곰곰히 생각해 보면 일리가 있습니다. 딥러닝 관련되어서는 좋은 책과 온라인 자료를 쉽게 찾을 수 있지만 강화 학습은 많이 부족합니다. <핸즈온 머신러닝> 16장에서 강화 학습을 다루고 있지만 제한된 범위입니다. 서튼(Sutton) 교수의 <Reinforcement Learning: An Introduction> 2판이 곧 출간될 예정입니다. 이 책은 강화 학습의 대표적인 텍스트 북입니다. 조금 더 핸즈온 스타일의 강화 학습 책으로는 어떤 것이 있는지 찾아 보았습니다.
맥심 라판(Maxim Lapan)이 쓴 팩킷(Packt)의 <Deep Reinforcement Learning Hands-On>이 아마존에서 독자 반응이 좋습니다. 이 책은 DQN, Policy Gradient, A2C, A3C, TRPO, PPO, I2A, AlphaGo Zero 등을 다룹니다.
매닝에서는 <Deep Reinforcement Learning In Action>과 <Grokking Deep Reinforcement Learning>이 준비되고 있습니다. 매닝 책은 출간되려면 아직 한참 기다려야 할 것 같네요. 재미있게도 이 세 책은 모두 파이토치를 사용합니다. 🙂
파이토치PyTorch 0.4.0 버전이 릴리즈되었습니다. 많은 기능이 추가되고 개선되었다고 합니다. 그중에서도 눈에 띄이는 것은 텐서(Tensor)와 변수(Variable)를 하나로 합친 것과 checkpoint 컨테이너입니다. checkpoint 컨테이너를 사용해 모델을 나누어 만들면 메모리가 부족하여 정방향에서 계산한 값을 유지하지 못할 경우 역전파를 위해 가까운 체크포인트에서부터 정방향 패스의 중간 값들을 다시 계산합니다. 수행시간은 느려지겠지만 메모리가 작은 GPU를 사용하는 경우에는 아주 반가운 소식입니다! 또 한가지는 드디어 윈도우즈 지원이 됩니다! 다만 윈도우즈는 파이썬 3.5와 3.6 만을 지원합니다.
더 자세한 변경사항은 릴리즈 노트를 참고하세요. 설치할 때 conda 대신에 pip를 사용할 수도 있습니다. 윈도우즈에서 pip로 설치할 경우는 wheel 패키지 경로를 직접 지정해 주어야 합니다.
# macOS (no GPU) $ conda install pytorch torchvision -c pytorch # Linux CUDA 8.0 $ conda install pytorch torchvision -c pytorch # Linux CUDA 9.0 $ conda install pytorch torchvision cuda90 -c pytorch # Linux CUDA 9.1 $ conda install pytorch torchvision cuda91 -c pytorch # Linux CPU $ conda install pytorch-cpu torchvision -c pytorch # Windows CUDA 8.0 $ conda install pytorch -c pytorch # Windows CUDA 9.0 $ conda install pytorch cuda90 -c pytorch # Windows CUDA 9.1 $ conda install pytorch cuda91 -c pytorch # Windows CPU $ conda install pytorch-cpu -c pytorch # pip를 사용할 때 wheel 경로 # 파이썬 3.5, CUDA 8.0: http://download.pytorch.org/whl/cu80/torch-0.4.0-cp35-cp35m-win_amd64.whl # 파이썬 3.5, CUDA 9.0: http://download.pytorch.org/whl/cu90/torch-0.4.0-cp35-cp35m-win_amd64.whl # 파이썬 3.5, CUDA 9.1: http://download.pytorch.org/whl/cu91/torch-0.4.0-cp35-cp35m-win_amd64.whl # 파이썬 3.5, CPU: http://download.pytorch.org/whl/cpu/torch-0.4.0-cp35-cp35m-win_amd64.whl # 파이썬 3.6, CUDA 8.0: http://download.pytorch.org/whl/cu80/torch-0.4.0-cp36-cp36m-win_amd64.whl # 파이썬 3.6, CUDA 9.0: http://download.pytorch.org/whl/cu90/torch-0.4.0-cp36-cp36m-win_amd64.whl # 파이썬 3.6, CUDA 9.1: http://download.pytorch.org/whl/cu91/torch-0.4.0-cp36-cp36m-win_amd64.whl # 파이썬 3.6, CPU: http://download.pytorch.org/whl/cpu/torch-0.4.0-cp36-cp36m-win_amd64.whl # Windows 공통 $ pip3 install torchvision
파이토치PyTorch 0.3.1 버전이 릴리즈되었습니다. 주로 버그 수정과 성능 향상을 포함하고 있습니다. 자세한 변경사항은 릴리즈 노트를 참고하세요.
파이토치 0.3.1 부터는 CUDA 3.0, 5.0과의 호환성이 삭제되었고, CUDA 7.5를 위한 바이너리 설치가 제외되었습니다. 대신 CUDA 8, 9, 9.1용 바이너리 설치가 제공됩니다. 지원하는 파이썬 버전은 2.7, 3.5, 3.6 입니다.
# macOS (no GPU) $ conda install pytorch torchvision -c pytorch # Linux CUDA 8.0 $ conda install pytorch torchvision -c pytorch # Linux CUDA 9.0 $ conda install pytorch torchvision cuda90 -c pytorch # Linux CUDA 9.1 $ conda install pytorch torchvision cuda91 -c pytorch # Linux CPU $ conda install pytorch-cpu torchvision -c pytorch
지난 달 말에는 마이크로소프트의 CNTK 2.4 버전이 릴리즈 되었습니다. 자세한 사항은 릴리즈 노트를 참고하세요.
파이토치PyTorch 0.3.0 버전이 릴리즈되었습니다. 주요한 변경 사항으로는 loss를 reduce할지 여부를 지정할 수 있는 매개변수, autograd를 위한 프로파일러, 새로운 레이어와 다양한 함수 등 많은 기능이 추가, 변경되었고 성능이 많이 향상되었다고 합니다. 자세한 변경사항은 릴리즈 노트를 참고하세요.
파이토치 0.3.0 부터는 CUDA 9과 cuDNN 7을 지원하고 conda 채널이 pytorch로 바뀌었습니다. CUDA 지원은 텐서플로보다 조금 더 빠른 것 같습니다. 또 CUDA 8, 7.5 버전에 대한 바이너리도 유지하고 있어 편리한 것 같습니다. 지원하는 파이썬 버전은 2.7, 3.5, 3.6 입니다.
# macOS (no GPU) $ conda install pytorch torchvision -c pytorch # Linux CUDA 7.5 $ conda install pytorch torchvision cuda75 -c pytorch # Linux CUDA 8.0 $ conda install pytorch torchvision -c pytorch # Linux CUDA 9.0 $ conda install pytorch torchvision cuda90 -c pytorch
파이토치PyTorch 0.2.0 버전이 드디어 릴리즈 되었습니다. 3개월이 넘게 걸렸지만 ICML 2017에 때를 맞추었네요.^^ 넘파이NumPy 스타일의 브로드캐스팅broadcasting, 분산처리, 강화된 배열 인덱싱, 2계 도함수 그래디언트second order gradient 등 많은 기능이 포함되었습니다. 추가된 기능에 대한 자세한 설명은 릴리즈 노트를 참고하세요. conda를 사용하면 비교적 편리하게 파이토치를 설치할 수 있습니다.
# Linux CUDA 7.5, macOS for Python 2.7/3.5/3.6 $ conda install pytorch torchvision -c soumith # Linux CUDA 8.0 $ conda install pytorch torchvision cuda80 -c soumith
파이토치PyTorch와 같이 다이나믹 컴퓨테이션 그래프를 지원하는 체이너Chainer가 2.0 버전을 릴리즈했다는 소식입니다. 2.0 버전에서 깃허브 주소를 바꾸었으며 강화학습, 분산, 비전에 관한 패키지를 분리하였습니다. 자세한 내용은 체이너 문서와 깃허브 릴리즈 노트를 참고하세요.
$ pip install chainer
또한 넘파이NumPy 스타일의 행렬 연산을 GPU를 사용하여 처리할 수 있는 CuPy를 체이너에서 분리하여 공개하였습니다(즉 체이너에서 GPU를 사용하려면 cupy를 설치해야 합니다). 넘파이를 쓰듯 CuPy를 써서 자기만의 연산을 만든다면 재미있을 것 같습니다. CuPy도 pip를 사용하여 쉽게 설치할 수 있습니다.
$ pip install cupy
다이나믹 컴퓨테이션 그래프를 만들어주는 대표적인 딥러닝 프레임워크인 DyNet에서 미니배치 자동화 기능을 선보였습니다. DyNet 레파지토리에 있는 샘플 예제와 페이퍼로 설명하고 있습니다. 입력 데이터가 모두 균일한 크기일 때는 미니 배치 처리를 하는 것이 큰 일이 아니지만 그렇지 않은 경우에는 코드 구조를 복잡하게 만듭니다. “배치는 개발자의 책임이 아니라 프레임워크의 몫이다!”라고 이 페이퍼에서 말합니다. 🙂
위 왼쪽 그림을 보면 입력의 길이가 4개, 2개, 3개로 나뉘어진 입력 시퀀스를 오른쪽의 그림과 같이 알아서(!) 배치로 구성해 실행해 줍니다. 엔지니어는 왼쪽의 그림을 생각하면서 작성을 하되 손실이나 예측 값을 받을 그릇을 스칼라 변수가 아니라 리스트 변수로 넉넉히 여유를 잡아주면 됩니다. 배치로 처리해서 리스트에 담는 것은 프레임워크가 책임집니다. 아마도 이런 자동 배칭 기능은 정적 그래프를 지원하는 텐서플로우에는 꽤 아픈 곳을 찌르는 일이 될 것 같습니다. DyNet의 작업이 공개되자 파이토치(PyTorch)도 기능을 추가한다는 소식입니다.
(페이퍼 저자 중 한 사람인 Yoav Goldberg 교수가 최근에 NLP 책을 출간했습니다. 한번 읽어 보고 싶네요. ㅠ.ㅠ)
텐서플로우tensorflow에서 훈련 성능을 높일 수 있는 위노그라드Winograd 콘볼루션 알고리즘이 디폴트로 활성화되어 있지 않습니다. ResNet을 비롯하여 요즘 규모의 콘볼루션 모델들에서 3×3 필터가 대세로 자리잡고 있습니다. 위노그라드 알고리즘은 3×3 행렬 계산의 연산 횟수를 줄여 줌으로써 모델 훈련 성능이 크게 증가됩니다. 이미 NVIDIA는 cuDNN5에서 부터 위노그라드 콘볼루션을 지원하고 있습니다. 일례로 Wide ResNet 에서 CIFAR10 데이터로 훈련시킬 때 K80 GPU에서 35%정도 빨라졌다고 합니다. 하지만 성능 개선의 정도는 GPU에 따라 다릅니다. 이 설정을 하려면 쉘이나 파이썬에서 아래와 같이 환경변수 TF_ENABLE_WINOGRAD_NONFUSED 를 지정해야 합니다.
os.environ['TF_ENABLE_WINOGRAD_NONFUSED'] = '1'
$export TF_ENABLE_WINOGRAD_NONFUSED=1
위노그라드 알고리즘의 설정이 파이토치PyTorch와의 성능 차이 요인 중 하나로 지적되면서 조만간 기본으로 사용하도록 설정될 것 같습니다. 일전에 소개해 드린 텐서플로우의 성능 테스트에서 사용한 코드도 위노그라드 설정을 지정하고 있습니다.
얼마전 NVIDIA가 GTC17에서 선보인 볼타Volta 아키텍처에서 16비트 부동소수점을 사용하여 성능을 크게 올렸다고 발표했습니다. 이와 동시에 페이스북이 지원하고 있는 Caffe2가 이미 16비트 부동소숫점을 지원한다고 발표했고 파이토치도 곧 기능을 추가할 거라고 언급했습니다. 아무래도 NVIDIA와 페이스북 간의 공조가 더 긴밀한 듯 합니다. 🙂