2015 年 11 月 9 日、Google は人工知能プラットフォーム TensorFlow をオープンソース化し、これは 2015 年に最も注目されたオープンソース プロジェクトの 1 つとなりました。 Google は、v0.1 から v0.12 までの 12 のバージョン反復を経て、2017 年 2 月 15 日に TensorFlow 1.0 をリリースし、同時に米国カリフォルニア州マウンテンビューで第 1 回 TensorFlow Dev Summit カンファレンスを開催しました。 TensorFlow 1.0 と Dev Summit (2017) のレビュー 以前のバージョンと比較して、TensorFlow 1.0 の機能改善は主に次の点に反映されています。
TensorFlow 1.0 がリリースされた日に、Google は TensorFlow 2017 DEV Summit も開催しました。議題には主に以下の点に関する基調講演が含まれます。
TensorFlow システムアーキテクチャ TensorFlow は分散型機械学習プラットフォームであり、その主なアーキテクチャを下図に示します。 RPC と RDMA はネットワーク層であり、主にニューラル ネットワーク アルゴリズム パラメータの送信を担当します。 CPU と GPU はデバイス層であり、主にニューラル ネットワーク アルゴリズムの特定の計算操作を担当します。カーネルは、畳み込み演算、活性化演算など、TensorFlow におけるアルゴリズム演算の特定の実装です。分散マスターはサブグラフの構築に使用され、サブグラフを複数のシャードに分割し、異なるサブグラフ シャードを異なるデバイスで実行します。マスターは、サブグラフ シャードを Executor/Worker エンドに分散する役割も担います。 Executor/Work は、デバイス (CPU、GPU など) 上のサブグラフ操作の実行をスケジュールし、グラフ操作の結果を他のワーカーと送受信する役割を担います。 C API は TensorFlow をフロントエンドとバックエンドに分割します。フロントエンド (Python/C++/Java クライアント) は、C API に基づいて TensorFlow バックエンド プログラムの実行をトリガーします。トレーニング ライブラリと推論ライブラリは、モデル トレーニングと推論のためのライブラリ関数であり、ユーザーがアプリケーション モデルを開発するために使用します。 次の図は、クライアント、マスター、ワーカーの内部動作原理を示しています。 「/job:worker/task:0」と「/job:ps/task:0」はワーカー内の実行サービスを表します。 「job:ps」は、モデル パラメータを保存および更新するために使用されるパラメータ サーバーを表します。 「job:worker」は、モデル パラメータを最適化し、同時パラメータをパラメータ サーバーに送信するために使用されます。分散マスターおよびワーカー サービスは、分散 TensorFlow にのみ存在します。 TensorFlow のスタンドアロン バージョンは、ローカル セッションを実装し、ローカル プロセスの内部通信を通じて上記の機能を実装します。 ユーザーは TensorFlow アプリケーションを作成して計算グラフを生成します。クライアント コンポーネントはセッションを作成し、シリアル化テクノロジを使用してグラフ定義を分散マスター コンポーネントに送信します。下の図では、クライアントは s+=w*x+b のグラフ計算モデルを作成します。 クライアントがセッション操作をトリガーすると、Maser は実行するサブグラフを構築します。そして、デバイスの状態に応じて、サブグラフは複数のスライスに分割されます。以下は、マスターによって構築された実行サブグラフです。 次に、サブグラフを分割し、パラメータ サーバー上でモデル パラメータをグループ化し、コンピューティング ワーカー上でグラフ コンピューティング操作をグループ化します。次の図は、実行可能なグラフカット戦略を示しています。 分散マスターは、モデル パラメータの分割に従ってエッジをカットし、次の図に示すように、タスク間で Tensor 情報を送受信するための通信ノードを挿入します。 次に、分散マスターは、次の図に示すように、RegisterGraph メソッドを通じてサブグラフ シャードをタスクに送信します。 マスターは RunGraph を通じてサブグラフ操作をトリガーし、ワーカーは GPU/CPU コンピューティング デバイスを使用して TensorFlow カーネル操作を実行します。 cudaMemcpyAsync は、このノードの CPU と GPU 間でデータを転送するために使用されます。ピアツーピア DMA は、CPU を介したデータのコピーを回避するために、このノードの GPU 間でデータを転送するために使用されます。 TensorFlow は、次の図に示すように、gRPC (TCP) および RDMA (統合イーサネット) テクノロジを使用して、ワーカー間のデータ通信と転送を実装します。 高性能プログラミング TensorFlow カーネルは C/C++ で開発されており、C++、Python、Java、Go でクライアント API を提供します。特に、Python API は現在主流の TensorFlow モデル開発インターフェースです。しかし、なぜモデルをトレーニングするために C++ API を使用する必要があるのでしょうか? この記事は、次の 2 つの考慮事項に基づいています。まず、Python API を使用してモデルをトレーニングする場合、C/C++ の基礎となるインターフェイスを呼び出すために Python API を常に使用する必要があります。インターフェイスの繰り返し呼び出しは、プログラムの実行パフォーマンスにある程度影響します。さらに重要なのは、GPU 上でモデルをトレーニングするには大量のメモリ スワップが必要になることです。モデルのトレーニングに C++ API を使用すると、コンピューティング パフォーマンスが向上し、GPU メモリ割り当てをより適切に制御できるようになります。 次の図は、Python API のコンピューティング アーキテクチャを示しています。モデル トレーニングの各反復で、プログラムは Python API を介してバッチ データを読み取り、TensorFlow Session Run インターフェースを介してデータを C++ に渡し、ニューラル ネットワーク トレーニングをトリガーします。次の図に示すように: 次の図は、C++ API のコンピューティング アーキテクチャを示しています。モデル トレーニングの各反復では、バッチ データが C++ API を通じて読み取られた後、モデル トレーニングが直接トリガーされます。異なる言語間の API インターフェースの循環呼び出しとデータ転送を削減します。次の図に示すように: モデルのトレーニングに C++ API を使用するには、まずトレーニング モデルを記述する必要があります。これは Python で行うことができます。まず Python API を使用してトレーニング モデルを記述し、次にグラフ モデルを Protobuf シリアル化ファイルに変換します。次に、C++ API を介してモデル ファイルを読み込み、TensorFlow セッションを作成し、モデル変数を初期化し、トレーニング データを読み込み、ニューラル ネットワーク トレーニングを実行します。プログラムのアーキテクチャを下図に示します。 以下は、Python API を使用してトレーニング モデルを定義する例です。 tf.Session() を sess として使用:
以下は、C++ API を使用して Protobuf グラフ モデルをロードし、トレーニングを実行する例です。
C++ プログラムが作成されるときに、コンパイル中にリンクする必要があるヘッダー ファイルはオープン ソースによって整理され、/usr/lib/python2.7/site-packages/tensorflow/include ディレクトリに保存されます。コンパイルして実行するときは、libtensorflow_cc.so をリンクする必要があります。ライブラリ ファイルは次のようにコンパイルできます: bazel build -c opt //tensorflow:libtensorflow_cc.so –copt=-m64 –linkopt=-m64 –spawn_strategy=standalone –genrule_strategy=standalone –verbose_failures。詳細については、TensorFlow ソースコードの公式コンパイルドキュメントを参照してください。 要約する この記事では、まず TensorFlow 1.0 の主な新機能と TensorFlow 2017 Dev Summit の主な議題について説明します。現時点では、TensorFlow の GitHub スターランキングは 51,000 以上、フォークランキングは 24,000 以上に達し、コミットは 15,000 以上あります。 TensorFlow の新バージョンが継続的にリリースされ、新機能が継続的に追加されることにより、TensorFlow はより柔軟に使用でき、操作が高速になり、より製品指向的に使用されるようになり、現在主流のディープラーニング プラットフォームの 1 つになりました。 次に、クライアント、マスター、ワーカー、カーネルの概念と操作方法を含むTensorFlowのシステムアーキテクチャを紹介しました。これは、大規模な分散トレーニングに適した機械学習プラットフォームです。上記のシステムアーキテクチャから、TensorFlow カーネルは C/C++ で開発されていることがわかります。Python API を使用してモデルをトレーニングする場合、Python で C/C++ の基盤となるインターフェースを継続的に呼び出す必要があります。インターフェースの繰り返し呼び出しは、プログラムの実行パフォーマンスに一定の影響を与えます。高性能コンピューティングをお探しの場合は、この記事の「高性能コンピューティング」セクションで推奨されている方法を試してみてください。 参考文献
著者について Wu Wei 博士は現在、IBM Spectrum Computing の研究開発エンジニアです。主にビッグデータ、ディープラーニング、クラウドコンピューティング等の分野で研究開発を行っています。 |
先週発売されたiPhoneXで私が一番惹かれたのは、かわいいウサギの耳ではなく、AppleのFace...
[[419993]]文/陳潔人工知能技術は、画像分析から自然言語理解、科学分野に至るまで、現在の科...
10年前に放映されたアメリカのテレビシリーズ「ブラックミラー」の第1話のタイトルは「Be Right...
昨年 11 月、Google Brain チームは、実行によって定義される新しいインターフェースであ...
宝の地図を持って砂漠に埋もれた金や宝石を探すというのは、おとぎ話によく登場する筋書きです。今では、携...
AlphaZero がチェスをプレイすることと人間がチェスをプレイすることの違いは何ですか?あなた...
C# のソート アルゴリズムには通常、ループと割り当てが含まれます。ソートにより、簡単な統計と分類を...
北京時間12月6日、海外メディアの報道によると、克服すべき障害はまだ多くあるものの、自動運転車の技術...
執筆者:Qianshan最近、海外メディアAnalytics India Magazineによると、...
近年、ドローン業界は非常に急速な発展を遂げていると言えます。製品面では数量が大幅に増加し、種類もます...
RNA 3D 構造予測は長年の課題です。タンパク質構造予測における最近の進歩に触発され、南開大学、山...
今日、人工知能技術の急速な発展は、さまざまな分野に前例のない変化と進歩をもたらしています。その中には...