번역가 | Zhu Xianzhong
리뷰어 | Ink
딥 러닝은 매일 다양한 형태로 우리 삶에 영향을 미칩니다. Siri, Alexa, 사용자 음성 명령을 기반으로 한 휴대폰의 실시간 번역 앱, 스마트 트랙터, 창고 로봇, 자율주행차를 구동하는 컴퓨터 비전 기술 등 매달 새로운 발전을 가져오는 것 같습니다. 이러한 딥 러닝 애플리케이션은 거의 모두 TensorFlow, PyTorch 또는 JAX의 세 가지 프레임워크로 작성되었습니다.
그렇다면 어떤 딥러닝 프레임워크를 사용해야 할까요? 이 기사에서는 TensorFlow, PyTorch 및 JAX를 높은 수준에서 비교합니다. 우리의 목표는 커뮤니티 지원 및 사용 용이성과 같은 요소를 고려하면서 자신의 강점을 활용하는 앱 유형에 대한 아이디어를 제공하는 것입니다.
"IBM을 사서 해고된 사람은 없다"는 1970년대와 1980년대 컴퓨터계의 슬로건이었습니다. 금세기 초에는 TensorFlow를 사용한 딥러닝도 마찬가지였습니다. 그러나 우리 모두가 알고 있듯이 1990년대에 접어들면서 IBM은 "후순위로 밀려났습니다." 그렇다면 TensorFlow는 2015년 처음 출시된 지 7년이 지난 오늘날, 그리고 앞으로의 새로운 10년에도 여전히 경쟁력이 있을까요?
물론이죠. TensorFlow가 항상 가만히 있었던 것은 아닙니다. 첫째, TensorFlow 1.x는 Python이 아닌 방식으로 정적 그래프를 작성하지만 TensorFlow 2.x에서는 Eager 모드를 사용하여 모델을 작성하여 작업을 즉시 평가할 수도 있으므로 PyTorch와 더 유사한 느낌을 줍니다. 상위 수준에서 TensorFlow는 하위 수준에서 개발을 용이하게 하기 위해 Keras를 제공하고 속도를 높이기 위해 XLA(가속 선형 대수, 가속 선형 대수) 최적화 컴파일러를 제공합니다. XLA는 GPU 성능을 향상시키는 데 마법 같은 역할을 하며, Google의 TPU(Tensor Processor Unit)의 성능을 활용하는 주요 방법으로 대규모 모델 학습에 탁월한 성능을 제공합니다.
두 번째로, TensorFlow는 가능한 모든 것을 잘하기 위해 수년 동안 노력해 왔습니다. 예를 들어 성숙한 플랫폼에서 잘 정의되고 반복 가능한 방식으로 모델을 제공하고 싶습니까? TensorFlow를 제공할 준비가 되었습니다. 모델 배포를 웹, 스마트폰과 같은 저전력 컴퓨팅 또는 사물 인터넷과 같은 리소스가 제한된 장치로 재배치하고 싶습니까? 이 시점에서 TensorFlow.js와 TensorFlow Lite는 모두 매우 성숙해졌습니다.
분명히 Google이 프로덕션 배포를 실행하기 위해 여전히 100% TensorFlow를 사용하고 있다는 점을 고려하면 TensorFlow가 사용자의 확장 요구 사항을 충족할 수 있다고 확신할 수 있습니다.
그러나 최근 프로젝트에는 무시할 수 없는 몇 가지 요소가 있습니다. 간단히 말해서, 프로젝트를 TensorFlow 1.x에서 TensorFlow 2.x로 업그레이드하는 것은 실제로 매우 잔인합니다. 일부 회사에서는 새 버전에서 제대로 작동하도록 코드를 업데이트하는 데 필요한 노력을 고려하여 코드를 PyTorch 프레임워크로 이식하기로 결정했습니다. 또한, TensorFlow는 과학 연구 분야에서도 추진력을 잃어 몇 년 전부터 PyTorch가 제공하는 유연성을 선호하기 시작했으며, 이로 인해 연구 논문에서 TensorFlow의 사용이 지속적으로 감소했습니다.
그리고 "케라스 사건"도 아무런 역할을 하지 못했습니다. Keras는 2년 전에 TensorFlow 배포판의 통합 부분이 되었지만 최근에는 자체 출시 계획에 따라 별도의 라이브러리로 다시 통합되었습니다. 물론 Keras를 제외한다고 해서 개발자의 일상 생활에 영향을 미치지는 않지만, 작은 업데이트 버전의 프레임워크에서 이렇게 극적인 변화가 발생한다고 해서 프로그래머가 TensorFlow 프레임워크를 사용하는 데 대한 확신을 갖게 되는 것은 아닙니다.
TensorFlow는 실제로 신뢰할 수 있는 프레임워크이며 광범위한 딥 러닝 생태계를 갖추고 있으며 사용자는 TensorFlow에서 모든 규모의 애플리케이션과 모델을 구축할 수 있습니다. 이렇게 하면 같이 일할 수 있는 좋은 회사가 많이 생길 거예요. 하지만 오늘날에는 TensorFlow가 첫 번째 선택이 아닐 수도 있습니다.
PyTorch는 더 이상 TensorFlow를 따르는 "신생 기업"이 아니지만 오늘날 딥 러닝의 주요 원동력입니다. 아마도 주로 연구용이지만 생산 애플리케이션용으로 점점 더 많이 사용되고 있습니다. TensorFlow 및 PyTorch 개발에 대한 기본 접근 방식이 Eager 모드가 되면서 PyTorch의 autograd에서 제공하는 보다 Python적인 접근 방식이 정적 그래프와의 전쟁에서 승리하는 것으로 보입니다.
TensorFlow와 달리 PyTorch의 핵심 코드는 버전 0.4에서 변수 API가 더 이상 사용되지 않으므로 큰 중단이 발생하지 않았습니다. 이전에는 변수에 자동으로 생성된 텐서가 필요했지만 이제는 모든 것이 텐서입니다. 하지만 그렇다고 해서 모든 곳에 실수가 없다는 말은 아닙니다. 예를 들어, PyTorch를 사용하여 여러 GPU에서 훈련했다면 DataParallel과 최신 DistributedDataParaller 사이에 차이점이 있을 수 있습니다. 항상 DistributedDataParallel을 사용해야 하지만 실제로 DataParaller를 사용하는 것에 반대할 것은 없습니다.
XLA/TPU 지원 측면에서 PyTorch는 항상 TensorFlow 및 JAX에 뒤처졌지만 2022년 현재 상황은 많이 개선되었습니다. 이제 PyTorch는 TPU 가상 머신에 대한 액세스, 레거시 TPU 노드 지원, 코드 변경 없이 CPU, GPU 또는 TPU에서 실행되는 코드의 간단한 명령줄 배포를 지원합니다. PyTorch를 사용하여 자주 작성하는 상용구 코드 중 일부를 처리하고 싶지 않다면 Pytorche Lightning과 같은 더 높은 수준의 확장 기능을 사용하면 훈련 루프를 다시 작성하는 대신 실제 작업에 집중할 수 있습니다. 반면, PyTorch Mobile에 대한 작업은 계속되지만 TensorFlow Lite에 비해 성숙도가 훨씬 낮습니다.
프로덕션 측면에서 PyTorch는 이제 Kubeflow와 같은 프레임워크에 구애받지 않는 플랫폼과 통합될 수 있으며 TorchServe 프로젝트는 확장, 측정항목 및 배치 추론과 같은 배포 세부 정보를 처리합니다. 이 모든 기능은 PyTorch 개발자가 직접 관리하는 작은 패키지에서 사용할 수 있습니다. MLOps의 반면에 PyTorch는 스케일링을 지원합니까? 괜찮아요! Meta는 수년간 프로덕션 환경에서 PyTorch를 실행해 왔습니다. 따라서 PyTorch가 대규모 워크로드를 처리할 수 없다고 말하는 사람은 거짓말을 하고 있습니다. 그럼에도 불구하고 PyTorch는 JAX만큼 사용자 친화적이지 않을 수 있는 상황이 있습니다. 특히 많은 수의 GPU 또는 TPU가 필요한 매우 힘든 훈련의 경우 더욱 그렇습니다.
마지막으로, 여전히 사람들이 언급하고 싶지 않은 까다로운 문제가 있습니다. 지난 몇 년간 PyTorch의 인기는 Hugging Face의 Transformers 라이브러리의 성공과 거의 불가분의 관계에 있습니다. 예, Transformers는 이제 TensorFlow 및 JAX도 지원하지만 원래는 PyTorch 프로젝트였으며 여전히 프레임워크와 긴밀하게 통합되어 있습니다. Transformer 아키텍처의 등장, 연구를 위한 PyTorch의 유연성, Hugging Face의 모델 센터를 통해 출시 후 며칠 또는 몇 시간 내에 수많은 새로운 모델을 도입할 수 있는 기능을 통해 PyTorch가 이러한 분야에서 왜 그렇게 인기가 있는지 쉽게 알 수 있습니다.
TensorFlow에 관심이 없다면 Google에서 다른 서비스를 제공할 수도 있습니다. JAX는 Google에서 구축, 유지 관리 및 사용하는 딥 러닝 프레임워크이지만 공식 Google 제품은 아닙니다. 그러나 지난 1년 정도 동안 Google/DeepMind 논문과 제품 릴리스에 주목하면 Google의 많은 연구가 JAX로 이동했음을 알 수 있습니다. 따라서 JAX는 "공식" Google 제품은 아니지만 Google 연구원들이 한계를 뛰어넘기 위해 사용하는 제품입니다.
JAX가 정확히 무엇인가요? JAX에 대해 생각하는 간단한 방법은 다음과 같습니다. "마술 지팡이"를 사용하여 Python 함수를 마법처럼 벡터화하고 이러한 모든 함수의 파생 계산을 처리할 수 있는 NumPy의 GPU/TPU 가속 버전을 상상해 보세요. 마지막으로 코드를 가져와 XLA(Accelerated Linear Algebra) 컴파일러에 맞게 최적화하는 JIT(Just-In-Time) 구성 요소를 제공하여 TensorFlow 및 PyTorch의 성능을 크게 향상시킵니다. 현재 일부 코드는 실제 최적화 작업 없이 JAX에서 다시 구현하기만 하면 4~5배 더 빠르게 실행됩니다.
JAX가 NumPy 수준에서 작동한다는 점을 고려하면 JAX 코드는 TensorFlow/Keras(또는 심지어 PyTorch)보다 훨씬 낮은 수준에서 작성됩니다. 다행스럽게도 JAX를 둘러싼 생태계는 작지만 성장하고 있으며 일부 확장이 이루어지고 있습니다. 신경망 라이브러리를 사용하시겠습니까? 확신하는. 그 중에는 Google의 Flax와 DeepMind(또한 Google)의 Haiku가 있습니다. 또한 Optax는 모든 최적화 요구 사항에 사용할 수 있으며 PIX는 이미지 처리 등에 사용할 수 있습니다. Flax와 같은 것을 사용하면 신경망 구축이 상대적으로 쉬워집니다. 여전히 몇 가지 골치 아픈 문제가 있다는 점에 유의하세요. 예를 들어, 숙련된 사람들은 JAX가 다른 많은 프레임워크와 다르게 난수를 처리하는 방식에 대해 자주 이야기합니다.
그렇다면 모든 것을 JAX로 변환하고 이 최첨단 기술을 활용해야 할까요? 이 질문은 사람마다 다릅니다. 훈련하는 데 많은 리소스가 필요한 대규모 모델을 조사하는 경우 이 접근 방식을 권장합니다. 또한 결정론적 교육을 위한 JAX와 수천 개의 TPU Pod가 필요한 기타 프로젝트에 관심이 있다면 시도해 볼 가치가 있습니다.
그래서 결론은 무엇인가요? 어떤 딥러닝 프레임워크를 사용해야 합니까? 불행하게도 이 질문에 대한 단 하나의 대답은 없습니다. 모든 것은 작업 중인 문제의 유형, 처리할 모델을 배포하려는 규모, 심지어 다루고 있는 컴퓨팅 플랫폼에 따라 다릅니다.
그러나 텍스트 및 이미지 분야에서 일하고 이러한 모델을 프로덕션에 배포할 목적으로 중소 규모의 연구를 수행하고 있다면 현재로서는 PyTorch가 최선의 선택일 것입니다. 최신 버전으로 판단하면 이러한 유형의 애플리케이션 공간에 가장 적합합니다.
낮은 컴퓨팅 장치에서 모든 성능을 얻으려면 TensorFlow와 매우 강력한 TensorFlow Lite 패키지를 사용하는 것이 좋습니다. 마지막으로, 수백, 수천억 개 또는 그 이상의 매개변수가 포함된 학습 모델을 보고 주로 연구 목적으로 학습하는 경우 JAX를 사용해 볼 시간이 될 수 있습니다.
원본 링크: https://www.infoworld.com/article/3670114/tensorflow-pytorch-and-jax-choosing-a-deep-learning-framework.html
Zhu Xianzhong, 51CTO 커뮤니티 편집자, 51CTO 전문 블로거, 강사, 웨이팡 대학의 컴퓨터 교사이자 프리랜스 프로그래밍 업계의 베테랑입니다.
위 내용은 TensorFlow, PyTorch 및 JAX: 어떤 딥 러닝 프레임워크가 귀하에게 더 적합합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!