TensorFlow, 왜 파이썬이 선택한 언어입니까?


143

나는 최근에 딥 러닝 및 기타 ML 기술을 연구하기 시작했으며, 네트 구축 및 교육 과정을 단순화하는 프레임 워크를 검색하기 시작했으며 현장에서 경험이 거의없는 TensorFlow를 찾았습니다. 딥 러닝으로 작업하는 경우 더 큰 ML 시스템을 만드는 데 큰 요인이됩니다. 왜 Google이 TensorFlow를 만들기 위해 파이썬을 선택 했습니까? 컴파일하고 해석 할 수없는 언어로 만드는 것이 더 좋지 않습니까?

기계 학습을 위해 C ++과 같은 언어에 비해 Python을 사용하면 어떤 이점이 있습니까?


2
작은 nitpick : 컴파일과 해석은 반대가 아닙니다. 또한, 모든 프로그래밍 언어는 컴파일러 또는 인터프리터 또는 둘 다로 구현 될 수 있습니다. 소프트웨어 엔지니어링과의 차이점에 대한 좋은 답변 이 있습니다 .
8bittree

답변:


240

TensorFlow에 대해 알아야 할 가장 중요한 점은 대부분 코어가 Python으로 작성되지 않았다는 것입니다 . 최적화 된 C ++와 CUDA (GPU 프로그래밍을위한 NVIDIA의 언어)의 조합으로 작성되었습니다. 많은 그런 일이의 차례로, 사용하여 아이겐 (고성능 C ++ 및 CUDA 수치 라이브러리) 및 NVIDIA의 cuDNN (에 매우 최적화 된 DNN 라이브러리 엔비디아의 GPU를 같은 기능, 회선 ).

TensorFlow의 모델은 프로그래머가 모델을 표현하기 위해 "일부 언어"(대부분 Python!)를 사용한다는 것입니다. 이 모델은 다음과 같은 TensorFlow 구성으로 작성되었습니다.

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

파이썬이 실행될 때 실제로 실행되지 않습니다. 대신 실제로 생성되는 것은 특정 입력을 취하고, 특정 작업을 적용하고, 결과를 다른 작업에 입력으로 제공 하는 등의 데이터 흐름 그래프 입니다. 이 모델은 빠른 C ++ 코드로 실행되며 대부분의 경우 작업 간 데이터는 Python 코드로 다시 복사되지 않습니다 .

그런 다음 프로그래머는 노드를 가져 와서 (일반적으로 Python에서, 때로는 Python에서, 때로는 원시 C ++에서) 노드를 가져 와서이 모델의 실행을 "구동"시킵니다.

sess.run(eval_results)

이 Python (또는 C ++ 함수 호출)은 C ++에 대한 프로세스 내 호출 또는 분산 버전 의 RPC 를 사용하여 C ++ TensorFlow 서버를 호출하여 실행하도록 지시 한 다음 결과를 다시 복사합니다.

텐서 플로우가 왜 모델 훈련을 표현하고 제어하기 위해 잘 지원되는 언어로 파이썬을 선택 했는가?

이에 대한 대답은 간단합니다. Python은 아마도 광범위한 데이터 과학자와 머신 러닝 전문가에게 가장 편안한 언어 일 것입니다 . 또한 C ++ 백엔드를 쉽게 통합하고 제어 할 수 있으며 일반적으로 내부 및 외부에서 널리 사용됩니다. 구글과 오픈 소스. TensorFlow의 기본 모델을 사용하면 Python의 성능이 그렇게 중요하지 않은 것은 당연합니다. 또한 NumPy 가 Python에서 사전 처리를 쉽게 수행하고 고성능으로도 CPU를 많이 사용하기 위해 TensorFlow에 공급하기 전에 큰 이점을 제공합니다.

또한 모델을 실행할 때 사용되지 않는 모델을 표현하는 데에는 복잡성이 있습니다 (예 : matmul (A, B)를 수행하는 경우 결과 데이터의 모양은 무엇입니까?) 및 자동 그래디언트 계산. 파이썬으로 표현할 수 있으면 좋았지 만 장기적으로는 다른 언어를 쉽게 추가하기 위해 C ++ 백엔드로 이동할 것이라고 생각합니다.

(물론, 미래에는 모델을 작성하고 표현하기 위해 다른 언어를 지원하기를 희망합니다. 이미 여러 다른 언어를 사용하여 추론을 실행하는 것이 매우 간단합니다. C ++은 현재 작동합니다. Facebook의 누군가 가 지금 검토중인 Go 바인딩을 제공했습니다. 등)


1
It's already quite straightforward to run inference using several other languages프롤로그 프로그래머이기 때문에 '추론'을 어떻게 정의하고 있습니까 ? 단어가 아닌 것 같습니다.
Guy Coder

1
모델의 순방향 패스 만 실행합니다. 데이터와 교육에 적용
dga

모양 유추와 관련하여. 학습용으로 만 일부 신경망을 정적으로 유형이 지정된 언어로 변환하고 있으며 Ptyhon의 Duck 타이핑을 사용하면 코드의 해당 부분을 훨씬 쉽게 작성할 수 있습니다. 필립 측에서 유형이없는 Python 코드를 작성하면 Ptyhon을 배우면 실행하기 전에 유형을 얻는 것이 훨씬 어려워집니다. Ptyhon을 사용하는 다른 언어보다 Ptyhon을 사용하면 더 많은 런타임 오류가 발생합니다. 대답에 Duck 타이핑에 주목할 가치가 있습니다.
Guy Coder

2
그것이 사실이지만, 파이썬의 타이핑은 간접적 인 이유라고 생각합니다. 구글에서 일반적으로 사용되는 언어들 --- quora.com/… --- 파이썬은 일반적인 머신 러닝 박사 학위와 가장 잘 어울립니다 . 유일한 다른 선택은 C ++ (Lua를 사용하는 많은 사람들, Torch가 사용하는 언어는 잘 모르겠 음)이었을 것입니다 .C ++은 ML 도구 상자 안락함과는 거리가 멀습니다. 많은 ML 사람들은 matlab 배경에서 왔으며, 점점 인기가 높아졌습니다. 오리 타이핑의 기본은 아마도 인기이지만, 그것은 저의 범위를 벗어납니다.
dga

고마워요 가이 코더 --- 플레이에서 "추론"의 의미에 관해서는, 참조 통계적 추론에 위키 백과 문서를 . 그것은의 유도 받는 반대로 추론 연역적 프롤로그에 의해 수행되는 유형입니다.
밥 카펜터

35

TF는 파이썬으로 작성되지 않았습니다. C ++로 작성되었으며 (고성능 숫자 라이브러리CUDA 코드 사용) github 를 보면이를 확인할 수 있습니다 . 따라서 핵심은 파이썬으로 작성되지 않았지만 TF는 다른 많은 언어 ( python, C ++, Java, Go )에 대한 인터페이스를 제공합니다

여기에 이미지 설명을 입력하십시오

데이터 분석 세계에서 온 사람이라면 numpy (python으로 작성되지 않았지만 Python에 대한 인터페이스 제공)와 같은 것으로 생각하거나 웹 개발자 인 경우 데이터베이스로 생각하십시오 (PostgreSQL, MySQL, Java, Python, PHP에서 호출 가능)


파이썬 프론트 엔드 (사람들이 TF로 모델을 작성하는 언어)는 여러 가지 이유로 가장 인기가 있습니다. 제 생각에는 주요 이유는 역사적입니다. 대부분의 ML 사용자는 이미 그것을 사용합니다 (또 다른 인기있는 선택은 R입니다). 파이썬에 인터페이스를 제공하지 않으면 라이브러리가 모호하게 될 것입니다.


그러나 파이썬으로 작성되었다고해서 모델이 파이썬으로 실행되는 것은 아닙니다. 반대로, 올바른 방식으로 모델을 작성한 경우 TF 그래프를 평가하는 동안 Python이 실행되지 않습니다 ( tf.py_func () 제외 ) . 디버깅을 위해 존재하며 실행되기 때문에 실제 모델에서는 피해야합니다. 파이썬의 측면).

예를 들어 numpy와 다릅니다. 예를 들어 np.linalg.eig(np.matmul(A, np.transpose(A))( eig(AA')) 인 경우 연산은 빠른 언어 (C ++ 또는 fortran)로 전치 계산하고, 파이썬으로 반환하고, 파이썬에서 A와 함께 가져 와서 빠른 언어로 곱셈을 계산하여 반환합니다. python이면 고유 값을 계산하여 python으로 반환합니다. 그럼에도 불구하고 matmul 및 eig와 같은 고가의 작업은 효율적으로 계산되지만 결과를 파이썬으로 다시 이동시켜 시간을 잃습니다. TF는 그래프를 정의하면 일단 텐서가 파이썬이 아니라 C ++ / CUDA / 다른 것으로 흐릅니다.


이 맥락에서 내 블로그 게시물에 관심이있을 수 있습니다. blog.ephorie.de/why-r-for-data-science-and-not-python
vonjd

4

Python을 사용하면 C 및 C ++를 사용하여 기본 코드와 인터페이스하면서 Python이 제공하는 이점을 얻을 수있는 확장 모듈을 작성할 수 있습니다.

TensorFlow는 Python을 사용하지만 많은 양의 C ++ 도 포함 합니다.

이를 통해 Python으로 사람이 생각하지 않는 오버 헤드로 실험 할 수있는 간단한 인터페이스가 가능하며 C ++에서 가장 중요한 부분을 프로그래밍하여 성능을 추가 할 수 있습니다.


0

여기 에서 확인할 수있는 최신 비율 은 TensorFlow C ++ 내부에서 ~ 50 %의 코드를 사용하고 Python은 ~ 40 %의 코드를 사용합니다.

C ++과 Python은 모두 Google의 공식 언어이므로 왜 그런지 궁금하지 않습니다. C ++과 Python이있는 곳에서 빠른 회귀를 제공해야한다면 ...

C ++은 계산 대수 내부에 있으며 Python은 테스트를 포함하여 다른 모든 것에 사용됩니다. 오늘날 유비쿼터스 테스트가 무엇인지 아는 것은 왜 파이썬 코드가 TF에 그렇게 많은 기여를하는지 궁금하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.