PyTorch VS TensorFlow
신경망의 아키텍처는 이러한 프레임워크에서 구현될 수 있지만 결과는 동일하지 않습니다.
학습 프로세스에는 프레임워크에 따라 달라지는 많은 매개변수가 있습니다.
예를 들어,
PyTorch에서 데이터 세트를 훈련하는 경우 GPU가 CUDA(C++ 백엔드)에서 실행될 때 GPU를 사용하여 학습 프로세스를 향상할 수 있습니다.
TensorFlow에서는 GPU에 액세스할 수 있지만 자체 내장 GPU 가속을 사용하므로 이러한 모델을 학습하는 시간은 선택한 프레임워크에 따라 항상 달라집니다.
TOP TENSORFLOW PROJECTS
Magenta: An open source research project exploring the role of machine learning as a tool in the creative process. (https://magenta.tensorflow.org/)
Sonnet: Sonnet is a library built on top of TensorFlow for building complex neural networks. (https://sonnet.dev/)
Ludwig: Ludwig is a toolbox to train and test deep learning models without the need to write code. (https://uber.github.io/ludwig/)
TOP PYTORCH PROJECTS
CheXNet: Radiologist-level pneumonia detection on chest X-rays with deep learning. (https://stanfordmlgroup.github.io/projects/chexnet/)
PYRO: Pyro is a universal probabilistic programming language (PPL) written in Python and supported by PyTorch on the backend. (https://pyro.ai/)
Horizon: A platform for applied reinforcement learning (Applied RL) (https://horizonrl.com)
이것은 TensorFlow 및 PyTorch를 기반으로 구축된 몇 가지 프레임워크 및 프로젝트입니다. Github와 TF 및 PyTorch의 공식 웹사이트에서 더 많은 정보를 찾을 수 있습니다.
PyTorch와 TensorFlow 비교
PyTorch와 TensorFlow의 주요 차이점은 코드를 실행하는 방식입니다.
MECHANISM: 동적 VS 정적 그래프 정의
TensorFlow에서 코드를 실행할 때 계산 그래프는 정적으로 정의됩니다.
PyTorch는 그래프의 동적인 구축. Autograds, 동적 그래프의 자동 미분을 수행합니다.
분산 학습
PyTorch와 TensorFlow를 구별하는 한 가지 주요 기능은 데이터 병렬 처리입니다. PyTorch는 Python의 비동기 실행에 대한 기본 지원을 활용하여 성능을 최적화합니다. TensorFlow에서는 분산 학습을 허용하도록 특정 장치에서 실행할 모든 작업을 수동으로 코딩하고 미세 조정해야 합니다. 그러나 PyTorch에서 TensorFlow의 모든 것을 복제할 수 있지만 더 많은 노력을 기울여야 합니다.
다음은 PyTorch 에서 모델에 대한 분산 학습 을 구현하는 것이 얼마나 간단한지 설명하는 코드입니다.
TensorFlow는 강력한 시각화 기능과 고급 모델 개발에 사용할 수 있는 여러 옵션을 갖춘 매우 강력한 딥 러닝 라이브러리입니다. 프로덕션 준비 배포 옵션과 모바일 플랫폼 지원이 있습니다. 반면에 PyTorch는 커뮤니티 움직임이 더 강력하고 Python에 더 친숙한 아직 young한 프레임워크입니다.
따라서, 더 빠르게 만들고 AI 관련 제품을 만들고 싶다면 TensorFlow가 좋은 선택이라는 것입니다. PyTorch는 빠르고 역동적인 교육을 지원하므로 주로 연구 지향적인 개발자에게 권장됩니다.
https://data-newbie.tistory.com/425 글을 참고하였습니다.
PRODUCTION DEPLOYMENT
Tensorflow는 REST Client API를 사용한 Tensorflow serving이 존재하지만 pytorch는 아직 그러한 것이 없고 flask나 django를 사용해야 모델을 배포할 수 있다.
아직은 Tensorflow가 이 부분에 대해서는 압도하고 잇다.
연구자와 산업의 요구가 어떻게 다른지 알아야 한다.
연구자들은 그들의 연구를 얼마나 빨리 반복할 수 있는지에 대해 관심을 갖고 있는데, 이것은 일반적으로 비교적 작은 데이터셋(한 기계에 맞을 수 있는 데이터셋)에 있고 8 개의 GPU에서 실행된다.
이는 일반적으로 성과 고려사항에 의해 크게 언급되는 것이 아니라 새로운 아이디어를 신속하게 구현하는 능력에 의해 결정된다.
반면 업계는 실적을 최우선으로 보고 있다. 10% 더 빠른 런타임은 연구자에게 아무런 의미가 없지만, 이는 기업의 수백만 달러의 비용 절감으로 직결될 수 있다.
또 다른 차이점은 배포다.
연구자들은 자신의 기계나 연구업무를 수행하는 데 전념하는 서버 클러스터에서 실험을 할 것이다.
반면에, 산업은 제한/요구에 대해 터무니없이 많다.
- No Python.
- 일부 회사들은 파이썬 런타임의 오버헤드가 너무 많은 서버를 운영할 것이다.
- Mobile.
- 모바일에 Python interpreter를 내장할 수 없다.
- Serving.
- 모델의 다운타임 없는 업데이트, 모델 간 원활한 전환, 예측 시 일괄 처리 등과 같은 기능에 대한 캐치 올(katch-all) 기능.
TensorFlow는 이러한 요구사항을 중심으로 특별히 제작되었으며, 이러한 모든 문제에 대한 해결책이 있다.
즉, 그래프 형식과 실행 엔진은 기본적으로 Python이 필요하지 않으며, TensorFlow Lite와 TensorFlow는 각각 모바일 주소와 서비스 고려사항이다.
아직까지는 PyTorch는 이러한 고려사항에 부응하는 데 있어서 부족했고,
그 결과 대부분의 회사들은 현재 TensorFlow를 생산에 사용하고 있다.
Framework 들의 변화
Tensorflow는 TensorFlow 2.0에 기본적으로 빠른 모드로 전환한다고 발표했다.
Pytorch는 JIT 컴파일러와 "TorchScript"를 도입하여 그래프 기반 기능을 도입하였다.
PyTorch 와 TorchScript
PyTorch JIT는 TorchScript라고 불리는 PyTorch의 중간 표현(IR)이다.
TorchScript는 PyTorch의 "그래프" 표현이다.
추적 모드나 스크립트 모드를 사용하여 일반 PyTorch 모델을 TorchScript로 변환할 수 있다. 추적은 기능과 입력을 취하고, 그 입력으로 실행된 작업을 기록하고, IR을 구성한다. 비록 간단하지만, 추적에는 단점이 있다. 예를 들어 실행되지 않은 제어 흐름을 캡처할 수 없다.
예를 들어, 실제 블록을 실행한 경우 조건부의 거짓 블록을 캡처할 수 없다.
스크립트 모드는 함수/클래스를 취하고, 파이썬 코드를 재해석하며, TorchScript IR을 직접 출력한다. 이것은 그것이 임의 코드를 지원할 수 있게 하지만 본질적으로 파이썬을 재해석할 필요가 있다.
텐서플로우 즉시 실행 (TensorFlow Eager Execution)
텐서플로우의 즉시 실행 (Eager execution)은 그래프 생성 없이 연산을 즉시 실행하는 명령형 프로그래밍 환경을 뜻합니다. 각 연산들은 나중에 실행할 계산 그래프를 만드는 것이 아니라, 실제 값이 반환됩니다. 이를 통해 텐서플로우를 좀더 쉽게 시작할 수 있고, 모델을 디버그 할 수 있습니다. 또한 불필요한 상용구도 줄여줍니다.
즉시 실행 (eager execution)은 연구와 실험을 위해 다음을 제공하는 유연한 기계학습 플랫폼입니다
- 직관적인 인터페이스—사용자 코드를 자연스럽게 구조화 하고, 파이썬 데이터 구조를 사용합니다. 작은 모델과 작은 데이터에 대해서도 빠르게 반복수행 가능합니다.
- 쉬운 디버깅—실행중인 모델을 검사하거나 변화사항을 평가할 때 연산들을 직접 호출할 수 있습니다.
- 자연스러운 흐름 제어—동적 모델의 명세를 단순화 시켜, 그래프 흐름 제어 대신 파이썬 흐름 제어를 사용할 수 있습니다.
......
기본적으로 Eager 모드를 활성화할 때 TensorFlow는 사용자에게 선택을 강요한다. 즉, 사용 편의성을 위해 열렬한 실행을 사용하고 배포를 위해 다시 쓰기를 요구하거나, 긴급 실행을 전혀 사용하지 않는다. 이것은 PyTorch와 같은 상황이지만, PyTorch의 TorchScript의 선택적 성격은 TensorFlow의 "기본적으로 Eager mode"보다 더 입맛에 맞을 가능성이 있다.
Current State of ML Frameworks
Pytorch는 좀 더 산업적인 성공을 하기 위해 노력하고 있고, Tensorflow는 제품 능력의 손실 없이 연구 분야를 위해 노력하고 있다.
PyTorch가 산업에서 의미 있는 영향을 미치려면 분명히 오랜 시간이 걸릴 것이다
TensorFlow는 너무 고착되어 있고 산업은 느리게 움직인다.
그러나 텐서플로우 1.0에서 2.0으로의 전환은 어려울 것이며 기업들이 PyTorch를 평가할 수 있는 자연스러운 포인트를 제공한다.
연구원 선호도가 산업에 얼마나 영향을 미칠까?
현재의 박사학위생들이 졸업하기 시작하면서, 그들은 PyTorch를 사용할 것이다. 이러한 선호도는 기업들이 고용 목적으로 PyTorch를 선택할 만큼 충분히 강한가? 졸업자들은 PyTorch 위에 세워진 창업들을 시작할 것인가?
TensorFlow의 eager mode가 사용성에 있어 PyTorch를 따라잡을 수 있는가?
이슈 트래커와 온라인 커뮤니티로부터 받은 나의 인상은 Tensorflow Eager가 성능/메모리 문제로 심하게 고통받고 있으며 오토그래프도 그 나름대로의 이슈를 가지고 있다는 것이다.
구글은 엄청난 양의 엔지니어링 노력을 할 것이지만 텐서플로우에는 기존에 남아있는 코드들(짐)을 가지고 있다.
PyTorch가 생산성 상태로 얼마나 빨리 갈 수 있는가?
PyTorch가 해결하지 못한 근본적인 문제들이 아직도 많이 있다. - good quantization story, no mobile, serving, and 등이 없다. 이것을 해결하기 전까지는 Pytorch는 많은 회사들에서 선택이 안될 것이다. PyTorch가 기업들이 전환을 할 수 있도록 충분히 설득력 있는 이야기를 제공할 수 있을까?
참고: PyTorch는 정량화와 모바일에 대한 지원을 발표했다. 둘 다 아직 실험적이지만, PyTorch의 경우 이 전선에서 상당한 진전을 보이고 있다.