TensorFlow, 왜 파이썬이 선택된 언어였습니까?
저는 최근에 딥러닝과 다른 ML 기술을 공부하기 시작했고, 그물을 만드는 과정을 단순화하는 프레임워크를 검색하고 훈련하기 시작했는데, 현장 경험이 적은 TensorFlow를 발견했는데, 딥러닝으로 작업한다면 속도가 더 큰 ML 시스템을 만드는 데 큰 요소인 것 같습니다.그렇다면 왜 구글이 텐서플로우를 만들기 위해 파이썬을 선택했을까요?컴파일이 가능하고 해석이 되지 않는 언어로 만드는 것이 좋지 않을까요?
기계 학습을 위해 C++와 같은 언어에 비해 파이썬을 사용하는 것의 장점은 무엇입니까?
TensorFlow에 대해 가장 중요한 것은 코어가 대부분 Python으로 작성되지 않았다는 것입니다.고도로 최적화된 C++와 CUDA(GPU 프로그래밍을 위한 엔비디아의 언어)의 조합으로 작성되었습니다.그 대부분은 차례로 고성능 C++ 및 CUDA 수치 라이브러리인 Eigen과 NVidia의 cuDNN을 사용함으로써 발생합니다(대략 컨볼루션과 같은 기능을 위해 NVidia GPU에 매우 최적화된 DNN 라이브러리입니다.
TensorFlow의 모델은 프로그래머가 모델을 표현하기 위해 "일부 언어"(Python!)를 사용하는 것입니다.TensorFlow 구조로 작성된 이 모델은 다음과 같습니다.
h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...
Python이 실행될 때 실제로 실행되지 않습니다.대신에, 실제로 만들어진 것은 특정 입력을 받고, 특정 연산을 적용하고, 결과를 다른 연산에 입력으로 제공하는 등의 내용을 담고 있는 데이터 흐름 그래프입니다.이 모델은 빠른 C++ 코드에 의해 실행되며, 대부분의 경우 작업 간에 이동하는 데이터는 Python 코드로 다시 복사되지 않습니다.
그런 다음 프로그래머는 노드를 풀링하여 이 모델의 실행을 "추진"합니다. 보통 Python에서 훈련을 위해, 그리고 때로는 Python에서, 때로는 원시 C++에서 서비스를 위해.
sess.run(eval_results)
이 하나의 Python(또는 C++ 함수 호출)은 C++에 대한 진행 중인 호출 또는 분산 버전에 대한 RPC를 사용하여 C++ TensorFlow 서버로 호출하여 실행을 지시한 다음 결과를 다시 복사합니다.
이제 질문의 문구를 바꿔 보겠습니다.TensorFlow가 모델의 훈련을 표현하고 제어하기 위해 처음으로 잘 지원되는 언어로 Python을 선택한 이유는 무엇입니까?
그에 대한 답은 간단합니다.Python은 통합이 쉽고 C++ 백엔드를 제어할 수 있는 다양한 데이터 과학자와 머신 러닝 전문가들에게 가장 편안한 언어일 것입니다. 또한 Google 내외부에서 널리 사용되는 일반적인 언어이기도 하고 오픈 소스도 오픈 소스입니다.TensorFlow의 기본 모델에서는 Python의 성능이 그다지 중요하지 않다는 점을 고려하면 자연스러운 적합성이었습니다.또한 NumPy는 CPU 부하가 높은 작업을 위해 TensorFlow에 공급하기 전에 Python에서 사전 처리를 쉽게 수행할 수 있다는 점도 큰 장점입니다.
또한 모델을 실행할 때 사용되지 않는 모델을 표현하는 데 복잡성이 많습니다. 형상 추론(예를 들어, 함수(A, B)를 수행할 경우, 결과 데이터의 모양은 무엇입니까?)과 자동 경사 계산입니다.파이썬으로 표현할 수 있어서 좋았던 것으로 드러났지만, 장기적으로는 다른 언어를 더 쉽게 추가하기 위해 C++ 백엔드로 이동할 것이라고 생각합니다.
(물론 그 희망은 미래에 다른 언어들이 모델을 만들고 표현할 수 있도록 지원하는 것입니다.여러 다른 언어를 사용하여 추론을 실행하는 것은 이미 매우 간단합니다. C++ 작업, 페이스북의 누군가가 우리가 지금 검토하고 있는 Go 바인딩을 기여했습니다.)
TF는 파이썬으로 작성되지 않았습니다.C++로 작성되어 있으며(고성능 수치 라이브러리와 CUDA 코드를 사용합니다), Github을 보고 확인할 수 있습니다.그래서 코어는 파이썬으로 작성되지 않았지만 TF는 많은 다른 언어(파이썬, C++, 자바, Go)에 대한 인터페이스를 제공합니다.
데이터 분석 세계에서 온 사람이라면 numpy(파이썬으로 작성되지 않았지만 Python에 대한 인터페이스를 제공함)처럼 생각하거나 웹 개발자라면 데이터베이스로 생각할 수 있습니다(Postgre).SQL, MySQL, Java, Python, PHP에서 호출 가능)
파이썬 프론트엔드(TF에서 모델을 작성하는 언어)는 여러 가지 이유로 가장 인기가 많습니다.제 생각에 주된 이유는 역사적인 것입니다. 대부분의 ML 사용자들은 이미 그것을 사용하고 있기 때문에(또 다른 인기 있는 선택은 R) 만약 당신이 파이썬에 대한 인터페이스를 제공하지 않는다면, 당신의 라이브러리는 아마도 불분명해질 것입니다.
그러나 파이썬으로 작성되었다고 해서 모델이 파이썬으로 실행되는 것은 아닙니다.반대로 올바른 방법으로 모델을 작성했다면 TF 그래프를 평가하는 동안 Python은 절대 실행되지 않습니다(디버깅을 위해 존재하며 Python 측에서 실행되기 때문에 실제 모델에서는 정확히 피해야 하는 tf.py _func 제외).
이것은 예를 들어 numpy와 다릅니다.예를 들어, 만약 당신이np.linalg.eig(np.matmul(A, np.transpose(A))
(즉,eig(AA')
), 이 작업은 일부 빠른 언어(C++ 또는 포트란)로 전치를 계산하고, 이를 파이썬으로 반환하고, A와 함께 파이썬에서 가져가고, 일부 빠른 언어로 곱셈을 계산하여 파이썬으로 반환한 다음, 고유값을 계산하여 파이썬으로 반환합니다.따라서 matmul 및 eig와 같은 값비싼 작업을 효율적으로 계산할 수 있지만 결과를 python 뒤로 이동하여 강제로 실행함으로써 시간을 낭비할 수 있습니다. 일단 그래프를 정의하면 텐서 흐름이 python이 아닌 C++/CUDA/기타에서 실행되지 않습니다.
Python을 사용하면 C와 C++을 사용하여 확장 모듈을 생성하고 네이티브 코드와 인터페이스하면서 Python이 제공하는 이점을 얻을 수 있습니다.
TensorFlow는 Python을 사용하지만 C++도 많이 포함하고 있습니다.
이를 통해 Python을 사용하여 사람이 생각하는 오버헤드를 줄이고 C++에서 가장 중요한 부분을 프로그래밍하여 성능을 추가할 수 있습니다.
여기서 확인할 수 있는 최신 비율은 TensorFlow C++에서 코드의 ~50%를 차지하고 Python에서 코드의 ~40%를 차지합니다.
C++와 파이썬은 모두 구글의 공식 언어인데 왜 그런지는 의심의 여지가 없습니다.C++과 Python이 있는 곳에서 빠른 회귀를 제공해야 한다면...
C++은 계산 대수 내부에 있으며, 테스트를 포함한 다른 모든 것에 파이썬이 사용됩니다.오늘날 테스트가 얼마나 보편적인지 알면 파이썬 코드가 TF에 그렇게 많이 기여하는 이유는 당연합니다.
언급URL : https://stackoverflow.com/questions/35677724/tensorflow-why-was-python-the-chosen-language
'source' 카테고리의 다른 글
파이어베이스와 파이어베이스 관리 npm 모듈의 차이점은 무엇입니까? (0) | 2023.06.30 |
---|---|
git push 시 "OAuth App의 워크플로우 생성 또는 업데이트 허용 거부" 해결 방법 (0) | 2023.06.30 |
git에게 개별 라인을 무시하도록 지시하는 방법, 즉 특정 코드 라인에 대해 gitnore (0) | 2023.06.30 |
MongoDb Object에서 속성을 제거하는 방법은 무엇입니까? (0) | 2023.06.30 |
dbvisualizer: 선택 쿼리에서 최대 행 설정 (0) | 2023.06.30 |