태그 보관물: PyTorch

Chainer 2.0 & CuPy

파이토치PyTorch와 같이 다이나믹 컴퓨테이션 그래프를 지원하는 체이너Chainer가 2.0 버전을 릴리즈했다는 소식입니다. 2.0 버전에서 깃허브 주소를 바꾸었으며 강화학습, 분산, 비전에 관한 패키지를 분리하였습니다. 자세한 내용은 체이너 문서와 깃허브 릴리즈 노트를 참고하세요.

$ pip install chainer

또한 넘파이NumPy 스타일의 행렬 연산을 GPU를 사용하여 처리할 수 있는 CuPy를 체이너에서 분리하여 공개하였습니다(즉 체이너에서 GPU를 사용하려면 cupy를 설치해야 합니다). 넘파이를 쓰듯 CuPy를 써서 자기만의 연산을 만든다면 재미있을 것 같습니다. CuPy도 pip를 사용하여 쉽게 설치할 수 있습니다.

$ pip install cupy

파이토치도 더욱 많이 넘파이 스타일을 지원하려고 준비중이며 윈도우즈 지원도 곧 가능할 것 같습니다.

Automatic Batching

스크린샷 2017-05-26 오후 4.49.42

다이나믹 컴퓨테이션 그래프를 만들어주는 대표적인 딥러닝 프레임워크인 DyNet에서 미니배치 자동화 기능을 선보였습니다. DyNet 레파지토리에 있는 샘플 예제페이퍼로 설명하고 있습니다. 입력 데이터가 모두 균일한 크기일 때는 미니 배치 처리를 하는 것이 큰 일이 아니지만 그렇지 않은 경우에는 코드 구조를 복잡하게 만듭니다. “배치는 개발자의 책임이 아니라 프레임워크의 몫이다!”라고 이 페이퍼에서 말합니다. 🙂

위 왼쪽 그림을 보면 입력의 길이가 4개, 2개, 3개로 나뉘어진 입력 시퀀스를 오른쪽의 그림과 같이 알아서(!) 배치로 구성해 실행해 줍니다. 엔지니어는 왼쪽의 그림을 생각하면서 작성을 하되 손실이나 예측 값을 받을 그릇을 스칼라 변수가 아니라 리스트 변수로 넉넉히 여유를 잡아주면 됩니다. 배치로 처리해서 리스트에 담는 것은 프레임워크가 책임집니다. 아마도 이런 자동 배칭 기능은 정적 그래프를 지원하는 텐서플로우에는 꽤 아픈 곳을 찌르는 일이 될 것 같습니다. DyNet의 작업이 공개되자 파이토치(PyTorch)도 기능을 추가한다는 소식입니다.

(페이퍼 저자 중 한 사람인 Yoav Goldberg 교수가 최근에 NLP 책을 출간했습니다. 한번 읽어 보고 싶네요. ㅠ.ㅠ)

TF 성능 팁: Winograd 알고리즘 설정

텐서플로우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와 페이스북 간의 공조가 더 긴밀한 듯 합니다. 🙂

PyTorch v0.1.12

파이토치PyTorch의 0.1.12 버전이 릴리즈되었습니다. 이 버전은 0.1.x의 마지막 버전으로 알려져 있습니다. 넘파이NumPy 스타일을 따르도록 API 가 조금 변경되었고 CUDA의 희박행렬 연산 지원이 추가되었습니다. 그 외에 성능향상과 버그들이 많이 수정되었다고 합니다. 다음 버전은 0.2 버전으로 분산 처리와 그래디언트의 그래디언트를 계산하는 기능이 추가될 예정입니다.

때맞춰 텐서플로우 성능 테스트 자료가 공개되었습니다. 이는 얼마전 발표된 Caffe2성능 자료에 대한 반격으로 보입니다. NVidia DGX-1 에서 테스트한 결과를 보면 카페2와 텐서플로우가 앞서거니 뒤서거니 합니다. 하지만 여전히 초당 훈련 이미지 처리수가 중요한 성능지표인지에 대해서는 논란의 여지가 있습니다. 여기에 사용된 텐서플로우 벤치마크를 위한 코드는 상당히 최적화시킨 것 같습니다.

perf_summary_p100_single_server

18-caffe2-chart

파이토치를 설치하려면 리눅스와 맥OS에서 콘다 명령을 사용할 수 있습니다. 맥OS에서 CUDA 지원을 사용하려면 소스 컴파일을 해야합니다. 아직 윈도우즈 환경은 지원하지 않고 있습니다.

conda install pytorch torchvision -c soumith

Caffe2: Mobile first DL Framework

스크린샷 2017-04-19 오후 4.57.55

페이스북이 딥러닝 프레임워크 카페(Caffe)의 새로운 포크인 카페2(Caffe2)를 오늘 공개하였습니다. 카페2는 페이스북과 NVidia를 비롯해 많은 회사들과 협력한 결과라고 합니다. 특별히 NVidia에서도 블로그를 통해 카페2 소식을 알렸습니다. 카페를 개발한 양칭 지아Yangqing Jia가 버클리를 나와서 구글 브레인으로 갔었는데 어느새 페이스북으로 옮겼군요. 이미 작년에 카페2의 개발 소식이 흘러나왔던 것 같습니다. 카페2는 파이토치와는 다르게 모바일과 대용량 스케일의 상용 제품을 위한 프레임워크로 촛점을 맞추고 있다고 합니다. 그렇다고 파이토치와 명확하게 선을 그을 수는 없지만, 파이토치 보다는 더 성능과 다양한 디바이스 포팅에 중점을 두고 있습니다. 파이토치는 연구자들이 다양한 네트워크를 실험할 수 있는 높은 자유도가 장점입니다. 하지만 카페2와 파이토치의 저수준 라이브러리들은 앞으로 계속 머지되거나 아이디어를 공유할 것 같습니다. 바이두가 텐서플로우의 패치를 보냈는데 구글이 이를 거부했다는 소식에서 부터 구글이 사용하는 텐서플로우와 오픈소스 텐서플로우에는 차이가 있다는 것이 카페2와 함께 레딧해커뉴스에서 회자되고 있습니다.

현재 카페2가 안정화된 상태는 아닙니다. 양칭에 의하면 페이스북이 먼저 개밥먹기를 하고 있답니다. 파이썬 바이너리 패키지가 준비되어 있지 않아 설치도 번거롭습니다. 하지만 카페의 Model zoo를 이용할 수 있다는 것과 모바일 퍼스트 정책은 많은 사람들의 관심을 끌것 같습니다. OpenCL와 iOS의 Metal을 지원하려고 준비 중에 있다고 합니다.

누가 Caffe가 죽었다고 했던가요? 🙂

(업데이트) 구글 브레인의 리더 Rajat Monga 가 바로 댓글로 의견을 냈네요. 구글이 텐서플로우에 대해 감추고 있는 것은 없답니다.

또 페이스북에서 F8 행상 이후에 몇몇 대학 교수를 초빙해서 카페2에 대한 워크샵을 열 예정이라고 밝혔습니다. 이미 많은 대학의 딥러닝 커리큘럼이 텐서플로우로 가고 있어서 더 늦기전에 변화가 필요하다고 생각했을 것 같습니다.

PyTorch v0.1.11 Release

파이토치 0.1.11 버전이 릴리즈 되었습니다. 텐서플로우와 케라스와 일관되게 하려고 Adamax 옵티마이저의 기본 파라미터 값이 변경되었습니다(lr=2e-3, eps=1e-8). 또 CuDNN v6 지원과 성능 향상 이외에도 많은 기능이 추가되고 버그가 수정되었습니다. 자세한 내용은 릴리즈 노트를 참고하세요.

아나콘다를 사용하면 맥과 리눅스에서 파이토치를 쉽게 설치할 수 있습니다. 맥OS에서 CUDA 지원을 사용하려면 소스 컴파일을 해야합니다. 아직 윈도우즈 환경은 지원하지 않고 있습니다.

conda install pytorch torchvision -c soumith

DiscoGAN [1703.05192]

SKT T-Brain 팀의 첫 페이퍼 “Learning to Discover Cross-Domain Relations with Generative Adversarial Networks”(DiscoGAN, 1703.05192) 공개되었습니다. DiscoGAN은 한 종류의 이미지에서 학습하여 비슷한 스타일의 다른 종류의 이미지를 생성해 줍니다. T-Brain 페이스북 페이지에서 친절하게 자세히 설명하고 있습니다. DiscoGAN은 파이토치(!)로 구현되어 있으며 깃허브에 공개되어 있습니다. 하지만 번개같은 속도로 데브시스타즈의 김태훈님이 더 깔금하게 파이토치 구현을 만들었습니다. 이외에도 두 개의 체이너 구현(1, 2)도 만들어졌습니다.

Visdom: Visualization for ML & DL

visidom2

페이스북에서 Torch, PyTorch, NumPy 를 위한 시각화 도구인 Visdom을 오픈소스로 공개했습니다. 자연스럽게 이는 텐서플로우의 텐서보드TensorBoard의 대항마일 것으로 여겨집니다. 비즈돔은 토치용 시각화 서버인 display에 영감을 받았다고 합니다. 비즈돔은 웹브라우저로 사용할 수 있으며 웹서버는 오래전 페이스북이 인수한 프렌드피드FriendFeed가 만든 토네이도Tornado를 사용하고 있고 실제적인 그래픽 처리는 plotly.js를 이용합니다. API 를 봐서는 계산 그래프를 시각화시키는 도구는 아닌 것으로 보입니다. 하지만 앞으로 어떤 기능이 추가될지 기대가 됩니다.

PyTorch v0.1.10 Release

파이토치 0.1.10 버전이 릴리즈 되었습니다. 이번 버전에서는 텐서의 인덱싱과 브로드캐스팅 기능이 많이 추가 되었고 가변길이variable-length RNNs, 희박 텐서sparse tensor도 추가 되었습니다. 또한 CPU 기반의 연산이 2~10배 가량 빨라져서 NumPy에 근접한 성능을 낸다고 합니다. 😀

0.1.10 버전 부터는 리눅스와 맥OS에서 콘다 명령을 사용해 pytorch, torchvision을 모두 설치할 수 있습니다. 맥OS에서 CUDA 지원을 사용하려면 소스 컴파일을 해야합니다. 아직 윈도우즈 환경은 지원하지 않고 있습니다.

conda install pytorch torchvision -c soumith

PyTorch 0.1.9 Release

파이토치(PyTorch) 0.1.9 버전이 릴리즈 되었습니다. 이 버전에서는 주로 버그가 수정되었으며 기능상에 큰 변화는 없습니다. 아나콘다를 사용하면 파이토치 바이너리를 편하게 설치할 수 있습니다.

### conda (linux, osx)
$ conda install pytorch torchvision -c soumith

### pip
# linux: python2.7 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.9.post1-cp27-none-linux_x86_64.whl

# linux: python2.7 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.9.post1-cp27-none-linux_x86_64.whl

# linux: python3.5 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.9.post1-cp35-cp35m-linux_x86_64.whl

# linux: python3.5 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.9.post1-cp35-cp35m-linux_x86_64.whl

# linux: python3.6 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.9.post1-cp36-cp36m-linux_x86_64.whl

# linux: python3.6 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.9.post1-cp36-cp36m-linux_x86_64.whl

# osx: python2.7
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.9.post1-cp27-none-macosx_10_7_x86_64.whl

# osx: python3.5
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.9.post1-cp35-cp35m-macosx_10_6_x86_64.whl

# osx: python3.6
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.9.post1-cp36-cp36m-macosx_10_6_x86_64.whl

### torchvision
$ pip install torchvision