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 바인딩을 제공했습니다. 등)