>  기사  >  기술 주변기기  >  PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

王林
王林앞으로
2023-05-04 08:16:06858검색

일부 네티즌들이

"이 아이 정말 못됐으니 하나 더 낳자"라는 말을 정말 좋아합니다.

Google이 정말 이런 일을 해냈습니다.

7년간의 개발 끝에 TensorFlow는 마침내 Meta의 PyTorch에 어느 정도 패배했습니다.

뭔가 잘못되었음을 확인한 Google은 재빨리 새로운 기계 학습 프레임워크인 "JAX"라는 또 다른 프레임워크를 요청했습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

최근 인기가 많은 DALL·E Mini는 모두 아시다시피 해당 모델은 JAX를 기반으로 프로그래밍되어 Google TPU의 장점을 최대한 활용합니다.

TensorFlow의 황혼과 PyTorch의 부상

2015년, Google이 개발한 머신러닝 프레임워크인 TensorFlow가 등장했습니다.

당시 TensorFlow는 Google Brain의 작은 프로젝트에 불과했습니다.

TensorFlow가 출시되자마자 큰 인기를 끌 것이라고는 누구도 예상하지 못했습니다.

우버, 에어비앤비 등 대기업도 사용하고 있고, NASA 등 국가기관도 사용하고 있습니다. 그리고 그들은 모두 가장 복잡한 프로젝트에 사용됩니다.

2020년 11월 현재 TensorFlow는 1억 6천만 번 다운로드되었습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

그러나 Google은 그렇게 많은 사용자의 감정에 별로 신경을 쓰지 않는 것 같습니다.

이상한 인터페이스와 빈번한 업데이트로 인해 TensorFlow는 사용자에게 점점 더 친숙하지 않고 작동하기가 점점 더 어려워지고 있습니다.

Google 내에서도 이 프레임워크가 하향세를 타고 있다고 느낍니다.

사실 구글이 이렇게 자주 업데이트하는 것은 정말 무기력합니다. 결국 이것이 머신러닝 분야의 빠른 반복을 따라잡을 수 있는 유일한 방법입니다.

결과적으로 점점 더 많은 사람들이 프로젝트에 참여하게 되었고, 팀 전체가 점차 집중력을 잃게 되었습니다.

그리고 원래 TensorFlow를 선택 도구로 만든 빛나는 점은 너무 많은 요인에 묻혀 더 이상 심각하게 받아들여지지 않습니다.

이 현상은 Insider에서 "고양이와 쥐 게임"으로 설명됩니다. 회사는 고양이와 같고, 지속적인 반복을 통해 나타나는 새로운 요구는 쥐와 같습니다. 고양이는 항상 경계하고 쥐를 덮칠 준비가 되어 있어야 합니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

이런 딜레마는 특정 시장에 최초로 진출하는 기업에게는 피할 수 없는 문제입니다.

예를 들어 검색 엔진에 관한 한 Google이 최초는 아닙니다. 따라서 Google은 이전 제품(AltaVista, Yahoo 등)의 실패로부터 학습하고 이를 자체 개발에 적용할 수 있습니다.

안타깝게도 TensorFlow에 있어서는 Google이 함정에 빠졌습니다.

원래 Google에서 일했던 개발자들이 점차 이전 고용주에 대한 신뢰를 잃은 것은 바로 위의 이유 때문입니다.

과거 유비쿼터스 TensorFlow는 점차 쇠퇴하여 Meta의 떠오르는 스타인 PyTorch에게 패했습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

2017년에는 PyTorch의 베타 버전이 오픈 소스였습니다.

2018년 Facebook의 인공 지능 연구소는 PyTorch의 정식 버전을 출시했습니다.

PyTorch와 TensorFlow는 모두 Python을 기반으로 개발되었으며 Meta는 오픈 소스 커뮤니티 유지에 더 많은 관심을 기울이고 많은 리소스를 투자한다는 점을 언급할 가치가 있습니다.

게다가 메타는 구글의 문제점에 주목하고 있으며, 같은 실수를 반복할 수 없다고 믿습니다. 그들은 작은 기능 세트에 중점을 두고 가능한 최고의 기능을 만듭니다.

Meta는 Google의 뒤를 따르지 않습니다. Facebook에서 처음 개발된 이 프레임워크는 천천히 업계 벤치마크가 되었습니다.

머신러닝 스타트업 회사의 한 연구원은 "우리는 기본적으로 PyTorch를 사용합니다. PyTorch의 커뮤니티와 오픈소스가 최고입니다. 질문에 대답해줄 뿐만 아니라 제시된 예제도 매우 실용적입니다."라고 말했습니다.

이런 상황에 직면한 구글 개발자, 하드웨어 전문가, 클라우드 제공업체, 구글 머신러닝 관련 관계자들은 모두 인터뷰에서 텐서플로우가 개발자들의 마음을 잃었다고 말했다.

공개적이고 은밀한 투쟁 끝에 마침내 메타가 우위를 점했습니다.

일부 전문가들은 구글이 앞으로도 머신러닝을 계속 선도할 수 있는 기회가 점점 사라지고 있다고 말합니다.

PyTorch는 점차 일반 개발자와 연구원이 선택하는 도구가 되었습니다.

Stack Overflow에서 제공하는 상호 작용 데이터를 보면 개발자 포럼에 PyTorch에 대한 질문이 점점 더 많아지고 있는 반면, TensorFlow에 대한 질문은 최근 몇 년간 정체 상태였습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

기사 시작 부분에서 언급한 Uber와 같은 회사도 PyTorch로 전환했습니다.

사실 PyTorch의 모든 후속 업데이트는 TensorFlow에 대한 모욕인 것 같습니다.

Google 머신러닝의 미래 - JAX

TensorFlow와 PyTorch가 한창일 때, Google 내 '소규모 다크호스 연구팀'은 TPU를 보다 쉽게 ​​활용할 수 있는 새로운 프레임워크를 개발하기 시작했습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

2018년 "고수준 추적을 통한 기계 학습 프로그램 컴파일"이라는 제목의 논문에서 JAX 프로젝트가 표면화되었습니다. 저자는 Roy Frostig, Matthew James Johnson 및 Chris Leary였습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

왼쪽부터 세 명의 마스터

그리고 PyTorch의 원작자 중 한 명인 Adam Paszke도 2020년 초에 JAX 팀에 풀타임으로 합류했습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

JAX는 기계 학습의 가장 복잡한 문제 중 하나인 멀티 코어 프로세서 스케줄링 문제를 처리하는 보다 직접적인 방법을 제공합니다.

응용 프로그램 상황에 따라 JAX는 하나의 칩을 단독으로 작동시키지 않고 자동으로 여러 칩을 작은 그룹으로 결합합니다.

이것의 장점은 최대한 많은 TPU가 순간적으로 반응할 수 있어 우리의 "연금술 세계"를 불태울 수 있다는 것입니다.

결국 JAX는 비대해진 TensorFlow와 비교하여 Google 내부의 주요 문제인 TPU에 빠르게 액세스하는 방법을 해결했습니다.

다음은 JAX를 구성하는 Autograd와 XLA에 대해 간략하게 소개합니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

Autograd는 주로 그라데이션 기반 최적화에 사용되며 Python과 Numpy 코드를 자동으로 구분할 수 있습니다.

루프, 재귀, 클로저 등 Python의 하위 집합을 처리하는 데 사용할 수 있으며 파생 상품의 파생 상품도 수행할 수 있습니다.

또한 Autograd는 기울기 역전파를 지원합니다. 즉, 배열 값 매개변수에 대한 스칼라 값 함수의 기울기와 순방향 모드 미분을 효과적으로 얻을 수 있으며 이 둘은 어떤 방식으로든 결합될 수 있습니다. .

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

XLA(Accelerated Linear Algebra)는 소스 코드를 변경하지 않고도 TensorFlow 모델을 가속화할 수 있습니다.

프로그램이 실행 중일 때 모든 작업은 실행자에 의해 개별적으로 수행됩니다. 각 작업에는 실행기가 디스패치되는 사전 컴파일된 GPU 커널 구현이 있습니다.

예:

<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">def</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_fn</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">x</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">y</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">z</span>):<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">return</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">tf</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">reduce_sum</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">x</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">y</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">z</span>)

XLA 없이 실행하는 이 부분에서는 세 개의 코어(곱하기용, 덧셈용, 빼기용)가 실행됩니다.

그리고 XLA는 덧셈, 곱셈, 뺄셈을 단일 GPU 코어에 "병합"하여 최적화를 달성할 수 있습니다.

이 융합 작업은 메모리에서 생성된 중간 값을 y*z 메모리 x+y*z에 기록하는 대신 이러한 중간 계산 결과를 완전히 저장하면서 사용자에게 직접 "스트리밍"합니다. GPU에서.

실제로 XLA는 약 7배의 성능 향상과 약 5배의 배치 크기 향상을 달성할 수 있습니다.

또한 XLA와 Autograd는 어떤 방식으로든 결합할 수 있으며 pmap 방법을 활용하여 여러 GPU 또는 TPU 코어를 동시에 프로그래밍할 수도 있습니다.

JAX를 Autograd 및 Numpy와 결합하면 프로그래밍하기 쉬운 CPU, GPU 및 TPU용 고성능 기계 학습 시스템을 얻을 수 있습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

분명히 Google은 자체 제품을 전면 출시하는 것 외에도 오픈소스 생태계 구축을 촉진하는 데에도 특히 적극적입니다.

2020년 DeepMind는 공식적으로 JAX에 합류했으며, 이로 인해 Google 자체의 종말도 선언되었습니다. 이후 다양한 오픈 소스 라이브러리가 끝없이 등장했습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

전체 "내분"을 살펴보면 Jia Yangqing은 TensorFlow를 비판하는 과정에서 AI 시스템이 Pythonic 과학 연구가 필요한 전부라고 믿었다고 말했습니다.

그러나 순수 Python은 효율적인 소프트웨어 및 하드웨어 공동 설계를 달성할 수 없는 반면, 상위 수준 분산 시스템에는 여전히 효율적인 추상화가 필요합니다.

그리고 JAX는 더 나은 균형을 추구하며 스스로를 전복하려는 Google의 실용주의를 배울 가치가 있습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

causact R 패키지 및 관련 베이지안 분석 교과서의 저자는 Google이 TF에서 더 깔끔한 솔루션인 JAX로 전환하는 것을 보게 되어 기쁘다고 말했습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

Google의 도전

신인으로서 Jax는 PyTorch와 TensorFlow라는 두 선배의 장점을 배울 수 있지만 때로는 후발자로서 불리함을 가져올 수도 있습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

우선, JAX는 아직 너무 "젊다". 실험적 프레임워크로서 성숙한 Google 제품의 표준에 도달하기에는 거리가 멀습니다.

다양한 숨겨진 버그 외에도 JAX는 일부 문제에 대해 여전히 다른 프레임워크에 의존합니다.

데이터를 로드하고 전처리하려면 TensorFlow 또는 PyTorch를 사용하여 대부분의 설정을 처리해야 합니다.

분명히 이것은 이상적인 "원스톱" 프레임워크와는 거리가 멀습니다.

PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자

둘째, JAX는 주로 TPU에 최적화되어 있지만 GPU와 CPU의 경우 훨씬 더 나쁩니다.

한편, 2018년부터 2021년까지 Google의 조직적, 전략적 혼란으로 인해 GPU를 지원하기 위한 연구 개발 자금이 부족하고 관련 문제 처리의 우선순위가 낮아졌습니다.

동시에 자체 TPU가 AI 가속에서 더 많은 부분을 차지하는 데 너무 집중하고 있기 때문에 GPU 지원과 같은 세부 사항 개선은 고사하고 NVIDIA와의 협력도 당연히 매우 부족합니다.

한편, Google 자체 내부 연구는 의심할 여지 없이 TPU에 초점을 맞추고 있으며, 이로 인해 Google은 GPU 사용에 대한 좋은 피드백 루프를 잃게 됩니다.

또한 디버깅 시간이 길어지고, Windows와 호환되지 않고, 부작용 위험을 추적하지 않는 등의 이유로 Jax의 사용 임계값과 친숙성이 높아집니다.

이제 PyTorch는 거의 6년이 되었지만 TensorFlow가 당시 보여주었던 쇠퇴는 없습니다.

Jax가 후발자를 따라잡으려면 아직 갈 길이 먼 것 같습니다.


위 내용은 PyTorch에게 패배했습니다! Google, TensorFlow 버리고 JAX에 투자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제