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 の研究開発エンジニアです。主にビッグデータ、ディープラーニング、クラウドコンピューティング等の分野で研究開発を行っています。 |
[[339978]]米国のTikTok狩りは続く。 8月27日、ByteDanceがTikTokの北...
正直なところ、テクノロジーの未来は人工知能 (AI) の進歩と密接に結びついています。 OpenAI...
車両に先進運転支援システムが搭載されることで、ドライバーの安全性と快適性がさらに向上しました。先進運...
12月26日、高級品鑑定機関Entrupyは人工知能技術を使用して、さまざまなブランドのハンドバッグ...
海外メディアのTechCrunchによると、セントルイスに本拠を置くスーパーマーケットチェーン「シュ...
[[399343]]ニューラル ネットワークは実際には表現を学習しています。CV の分野では、優れ...
[[324043]]この記事はLeiphone.comから転載したものです。転載する場合は、Lei...
過去1年ほど、COVID-19パンデミックの影響により、効率的なサプライチェーンの重要性が特に顕著に...
[[232177]]外見の偏見や言語の差別など、AI による差別についてはこれまでたくさん話してき...
人工知能の分野の中心にあるのは、いつの日か人間と同じくらい賢い機械を作ることができるようになるという...
自然言語処理や画像分類から翻訳など、ほとんどの機械学習タスクは、モデル内のパラメータやハイパーパラメ...
1. オンライン機能システム主流のインターネット製品では、古典的な計算広告、検索、推奨から、垂直分野...
コンピューターの専門家がまた一人亡くなりました! 著名なコンピューター科学者で、MITのコンピュータ...