TensorFlowについて実現するために最も重要なことは、ほとんどの部分は、コアはPythonで書かれていない、ということである。これは、高度に最適化されたC++およびCUDA(プログラミングのGPUは、NVIDIAの言語)の組み合わせで書かれています。その多くは、Eigen(高性能C++およびCUDA数値ライブラリ)とNVidia's cuDNN(NVidia GPUsの場合は非常に最適化されたDNNライブラリ、convolutionsなどの関数)を使用して行われます。
TensorFlowのモデルは、プログラマがモデルを表現するために "some language"(おそらくPython!)を使用しているということです。
のようなTensorFlow構成で書かれたこのモデルは、Pythonの実行時には実際には実行されません。代わりに、実際に作成されるものは、特定の入力を受け取り、特定の操作を適用し、結果を他の操作への入力として供給するなどと言うdataflow graphです。 このモデルは高速なC++コードによって実行され、ほとんどの場合、操作間のデータは決してPythonコードにコピーされません。
その後プログラマ「ドライブ」ノードを引っ張ることで、このモデルの実行 - 訓練のため、通常はPythonで、及びサービス提供のために、時々、Pythonで、時には生のC++で:
sess.run(eval_results)
この1 Python(またはC++関数呼び出し)は、C++のインプロセス呼び出しまたはRPCのいずれかを使用して分散バージョンを実行し、C++ TensorFlowサーバーを呼び出して実行を指示してから結果をコピーします。
TensorFlowは、なぜモデルのトレーニングを表現し制御するための最初のよくサポートされている言語としてPythonを選択したのですか?
その答えは簡単です:Pythonはおそらく一般的でありながら、統合およびC++バックエンドを制御するようにしてもそれは簡単だデータ科学者と機械学習の専門家の広い範囲のための最も快適な言語あり、 Googleの内部と外部の両方で広く使用されています。 TensorFlowの基本モデルでは、Pythonのパフォーマンスはそれほど重要ではなく、自然にフィットしていました。また、NumPyは、CPU負荷の高いもののためにTensorFlowに供給する前に、Pythonで前処理を行い、高性能でも簡単に行うことができます。
形状の推論を実行するときに使用されないモデルを表現することには、複雑さがたくさんあります(例えば、matmul(A、B)を行う場合、結果のデータの形は何ですか?)自動gradient計算。長期的には、おそらくC++バックエンドに移り、他の言語を簡単に追加できるようになると思うが、Pythonでそれらを表現できるのはうれしいことであることが分かった。
(もちろん、モデルを作成して表現するために将来他の言語をサポートすることを望んでいるのですが、C言語での推論を実行するのはかなり簡単です。
出典
2016-02-28 04:52:37
dga
マイナーニックピック:編集と解釈は相反するものではありません。さらに、任意のプログラミング言語は、コンパイラまたはインタープリタ、またはその両方で実装されてもよい。ソフトウェアエンジニアリングの違いについての素敵な[回答](https://softwareengineering.stackexchange.com/a/269878/121035)があります。 – 8bittree