【51CTO.comオリジナル記事】 この記事では主に、フレームワークの概要、システム アーキテクチャ、プログラミング モデル、分散アーキテクチャ、フレームワークの比較という 5 つの側面から TensorFlow フレームワークと PaddlePaddle フレームワークを比較します。 2 つの主要な国際検索エンジンによって開発されたディープラーニング フレームワークとして、焦点は異なりますが、エレガントで簡潔な設計アーキテクチャも提供しており、現在も進化を続けています。 PaddlePaddle にとって、その使いやすさ、ローカル性、迅速なビジネス統合は、スピードで勝つ国内インターネット企業にとって非常に有利な武器であり、TensorFlow の柔軟性と相対的な科学的研究志向は、AI 研究分野にとって大きなメリットです。 フレームワークの概要 PaddlePaddleの研究開発は2013年に始まりました。Baiduの広告、テキスト、画像、音声などのトレーニングデータの急速な成長、およびBaiduの食品配達、検索、自動運転分野のアルゴリズム要件に伴い、BaiduのDeep Learning Labは、単一のGPUトレーニングプラットフォームに基づくマルチマシン並列GPUトレーニングプラットフォームであるPaddle(Parallel Asynchronous Distributed Deep Learning)を開発しました。 PaddlePaddle がオープンソースになって以来、その設計と位置付けは常に「使いやすさ、効率性、柔軟性、スケーラビリティ」に重点を置いてきました。公式ウェブサイトのデザインの位置付けどおり、使いやすく、効率的で、柔軟性と拡張性に優れたディープラーニング プラットフォームです。下の写真はパドルの公式ウェブサイトです。 PaddlePaddleフレームワークのオープンソース化は2016年9月に始まりました。その最大の特徴と位置づけは使いやすさであり、現在利用可能なCV、NLP、その他のアルゴリズム(VGG、ResNet、LSTM、GRUなど)だけでなく、多くのアルゴリズムを完全にカプセル化しています。モデルライブラリモデル(https://github.com/PaddlePaddle/models)モジュールの下で、単語ベクトル(シグモイド加速単語ベクトルトレーニングとノイズコントラスト推定加速単語ベクトルトレーニングを含む)、RNN言語モデル、クリックスルー率予測、テキスト分類、ランキング学習(情報検索と検索エンジン研究における中核課題の1つ)、構造化セマンティックモデル、名前付きエンティティ認識、シーケンスツーシーケンス学習、読解、自動質問回答、画像分類、オブジェクト検出、シーンテキスト認識、音声認識、および複数の技術分野における人工知能のその他の一般的なソリューションをカプセル化しています。 上記の各ソリューションは、特定の技術的シナリオ向けに設計されています。したがって、開発者は、ソースコードの原則を簡単に理解し、公式 Web サイトの例に従って実行コマンドを実行し、独自のデータを置き換え、いくつかのハイパーパラメータを変更して実行するだけで済みます。また、ユーザーに公開されている Python インターフェースがそれほど多くないため、理解して使用するのは比較的簡単です。ただし、使用法に重点が置かれているため、科学研究や新機能の追加などでは、アルゴリズムを変更する場合は、フレームワークの C++ 下位層から実装する必要があります。 2 つ目の大きな特徴は分散デプロイメントであり、現在 Kubernetes を適切にサポートする唯一のディープラーニング ライブラリです。これについては、この記事の「分散アーキテクチャ」でさらに詳しく説明します。 TensorFlow 公式サイトでの TensorFlow の説明は、「機械知能のためのオープンソース ソフトウェア ライブラリ、オープンソースの機械学習ライブラリ」です。 表面
2016 年 4 月、TensorFlow バージョン 0.8 は分散型およびマルチ GPU コンピューティングをサポートしました。 2016 年 6 月、TensorFlow バージョン 0.9 ではモバイル デバイスのサポートが改善されました。 2017 年 2 月、TensorFlow の公式バージョン 1.0 では、Java と Go の実験的な API のほか、専用コンパイラ XLA とデバッグ ツール Debugger が追加されました。また、データの前処理に特化した tf.transform もリリースされました。同時に、アルゴリズムをオンラインで動的にデプロイするためのモデル デプロイメントを中心に TensorFlow Serving がリリースされました。また、scikit-learn に似た機能を備えた tf.contrib.learn も徐々に改良されました。また、同社は「ダイナミックグラフコンピューティング」TensorFlow Foldを発表し、「設計コンセプトを明確にリードした初めての製品」と評価された。 ユーザーは、分散トレーニングに Google の PaaS TensorFlow 製品 Cloud Machine Learning を使用することもできます。完全な TensorFlow Model Zoo が完成しました。 2018 年 1 月、TensorFlow はバージョン 1.5.0 までサポートされ、TensorFlow Lite モバイル アプリケーションと動的グラフ メカニズム Eager Execution が完全にオープンになり、ランタイム エラーの即時デバッグと Python ツールとの統合が可能になりました。 TensorFlow のハイライトの 1 つは、異機種デバイス上での分散コンピューティングをサポートしていることです。 異質性とは何ですか?情報技術における異種性とは、異種ネットワーク (異なるメーカーのハードウェアおよびソフトウェア製品が統合ネットワークを形成し、相互に通信するインターネットなど) や異種データベース (データ共有と透過的なアクセスを実現できる複数のデータベース システムの集合) など、さまざまなコンポーネントが含まれることを意味します。ここでの異種デバイスとは、CPU、GPU、その他のコアを効果的に連携させて使用することを指します。CPUのみに依存する場合と比較して、パフォーマンスは向上し、消費電力は低くなります。 では何が配布されるのでしょうか?分散アーキテクチャの目的は、コンピューティング リソースのスケジュール設定と割り当て (コンピューティング ノードがクラッシュしたり、速度が遅すぎるなどの障害を許容する) を支援し、数千万または数億のデータ ポイントを持つモデルをマシン リソースを使用して効果的にトレーニングできるようにすることです。 まとめると、AI 分野にはいくつかの主流フレームワークがあります。今日比較する 2 つのフレームワークには、次の共通点があります。効果的なフレームワークが持つべき機能を整理した「リカレントニューラルネットワークの不合理な有効性」を参照します。
では、開発者にとって PaddlePaddle の利点は何でしょうか? まず、使いやすさです。低レベルの Google TensorFlow と比較すると、PaddlePaddle の使いやすさは非常に明白です。開発者はディープラーニング モデルの高レベル部分の構築に集中できます。 また、PaddlePadddle は中国国内の大手企業 Baidu のオープンソース フレームワークです。そのローカル性は中国人の使用習慣に適合しているだけでなく、主流のインターネット技術の使用シナリオとソリューションにも大きな重点を置いています。 2つ目は、速度が速いことです。前述のように、PaddlePaddle のコードと設計はよりシンプルなので、これを使用してモデルを開発すると、開発者の時間が節約されることは明らかです。このため、PaddlePaddle は産業用アプリケーション、特に迅速な開発が必要なシナリオに非常に適しています。 システム アーキテクチャがフレームワーク設計の基本的な違いを直接決定することがわかっています。それでは、それについて見てみましょう。 システムアーキテクチャ 下の図は TensorFlow のシステム アーキテクチャを示しており、下からデバイス層とネットワーク層、データ操作層、グラフ コンピューティング層、API 層、アプリケーション層に分かれています。このうち、デバイス層とネットワーク層、データ操作層、グラフ コンピューティング層は TensorFlow のコア層です。 以下は、TensorFlow システム アーキテクチャの基礎から詳細までを説明したものです。最下層はネットワーク通信層とデバイス管理層です。ネットワーク通信層には、分散コンピューティングに必要な gRPC (Google リモート プロシージャ コール プロトコル) とリモート ダイレクト メモリ アクセス (RDMA) が含まれます。デバイス管理層には、CPU、GPU、FPGA などのデバイス上の TensorFlow の実装が含まれており、上位層に統一されたインターフェースを提供するため、上位層はハードウェア上の畳み込みの実装プロセスを気にすることなく、畳み込みなどのロジックを処理するだけで済みます。 その上にはデータ操作層があり、主に畳み込み関数や活性化関数などの操作が含まれます。その上にはグラフ コンピューティング層があり、これも理解する必要があるコアです。これには、ローカル コンピューティング グラフと分散コンピューティング グラフの実装 (グラフの作成、コンパイル、最適化、実行を含む) が含まれます。その上には API 層とアプリケーション層があります。 歴史的な理由からか、PaddlePaddle の全体的なアーキテクチャは Caffe のアーキテクチャと多少似ています。ニューラル ネットワークの機能レイヤーに基づいて開発されています。1 つのレイヤーには多くの複雑な操作が含まれています。次の図は、FCN、CTC、BN、LSTM を含む現在の機能レイヤーを示しています。 そして、データの読み取り (DataProvider)、関数レイヤー (Layers)、最適化手法 (Optimizer)、評価 (Evaluators)、活性化関数 (Activation)、プーリングといったプロセスをクラスに分散します。これらのレイヤーを組み合わせてネットワーク全体を形成していくのが、PaddlePaddle のニューラル ネットワークを構築するプロセスです。次の図に示すように: 同時に、レイヤーごとに蓄積することに加えて、柔軟性を向上させるために、追加のカプセル化されたネットワーク クラスも使用されます。つまり、次の図に示すように、異なる入力を組み合わせるために mixed_layer が設定されます。これは、conv+batchnorm+pooling などのいくつかの可能な組み合わせをカプセル化しており、ニューラル ネットワークの構築方法を大幅に簡素化できます。使用するコードを少なくし、成熟したアルゴリズムに従ってネットワークを構築し、入力データを変更してスムーズに実行できるようにします。 プログラミングモデル Paddle の現在の全体モジュールを下図に示します。
パラメータと引数は、ニューラル ネットワーク内のすべてのデータとパラメータを表します。パラメータはニューラル ネットワーク内のレイヤー間の接続パラメータを表し、引数は各レイヤーの入力と出力を表します。つまり、パラメータは下の図の黄色い線を表し、引数は下の図の入力と出力(Input、Output)を表します。 また、パラメータと引数はパラメータ値を保存するだけでなく、勾配、運動量などの情報も保存します。
PaddlePaddle は全体として、レイヤー構成に基づいたニューラル ネットワーク フレームワークです。よりきめ細かいニューラル ネットワーク構成と、op および投影の構成をサポートするために、Paddle は MixedLayer を提供します。 MixedLayer は他のレイヤーとは異なります。使用される入力タイプは、他のレイヤーそのものではなく、他のレイヤーの投影または操作です。他のレイヤーの投影と演算の結果が順番にMixedLayerの出力に追加されます。
GradientMachine は PaddlePaddle のニューラル ネットワークの抽象化です。つまり、このデータ型は Gradient を計算し、計算結果を Parameter に格納することができます。 GradientMachine は通常、ニューラル ネットワークのトポロジを計算するために使用されます。さらに、トポロジ構造の形状に応じて、GradientMachine はいくつかのパラメータを作成し、forward は入力引数とローカルパラメータに応じてニューラルネットワークのフィードフォワードを計算し、backward 関数は以前のフィードフォワード結果に応じて各パラメータの勾配を計算し、各パラメータの勾配をparameters_ に保存します。
TensorFlow では計算にデータフローグラフを使用するため、まずは図のようにデータフローグラフ (ネットワーク構造グラフとも呼ばれます) を作成します。データフローグラフのさまざまな要素を見てみましょう。 この図は TensorFlow の動作原理を説明しています。この図には、入力、再形成、Relu 層、Logit 層、Softmax、クロスエントロピー、勾配、SGD トレーナーなどのパーツが含まれています。これは単純な回帰モデルです。 その計算プロセスは、入力から開始し、整形した後、レイヤーごとに順方向伝播操作を実行します。 Relu 層 (隠れ層) には Wh1 と bh1 という 2 つのパラメーターがあり、出力前の非線形処理には ReLu (Rectified Linear Units) 活性化関数が使用されます。次に、Logit 層 (出力層) に入り、2 つのパラメーター Wsm と bsm を学習します。 Softmax を使用して、出力結果の各カテゴリの確率分布を計算します。クロスエントロピーは、2 つの確率分布 (ソース サンプルの確率分布と出力結果の確率分布) 間の類似性を測定するために使用されます。次に、勾配の計算を開始します。これには、パラメーター Wh1、bh1、Wsm、bsm と、クロスエントロピー後の結果が必要です。次に、バックプロパゲーションプロセスである SGD トレーニングに入り、上から下まで各レイヤーのパラメータを計算し、順番に更新します。つまり、計算と更新の順序は、bsm、Wsm、bh1、Wh1 となります。 名前が示すように、TensorFlow は「テンソルのフロー」を意味します。 TensorFlow のデータフロー グラフは、ノードとエッジで構成される有向非巡回グラフ (DAG) です。 TensorFlow は、Tensor と Flow の 2 つの部分で構成されます。Tensor はデータ フロー グラフ内のエッジを表し、Flow のアクションはデータ フロー グラフ内のノードによって実行される操作を表します。 では、分散コンピューティングでは、2 つのフレームワークの実装特性は何でしょうか? 分散アーキテクチャ PaddlePaddle の分散構造は、主にトレーナーとパラメータ サーバーの 2 つの部分で構成されます。 データ シャード: ニューラル ネットワークのトレーニングに使用されるデータは複数の部分に分割され、各部分は各トレーナーによって使用されます。 コンピューティング ノード (トレーナー): 各トレーナーは起動すると、セグメント化されたデータの一部を読み取り、ニューラル ネットワークの「フィードフォワード」および「フィードバック」の計算を開始し、パラメーター サーバーと通信します。一定量のデータのトレーニングが完了したら、計算された勾配をアップロードし、最適化され更新されたニューラル ネットワーク パラメータをダウンロードします。 パラメータ サーバー: 各パラメータ サーバーは、ニューラル ネットワーク全体のすべてのパラメータの一部のみを保存します。パラメータ サーバーは、コンピューティング ノードからアップロードされた勾配を受信し、パラメータの最適化更新を完了し、更新されたパラメータを各コンピューティング ノードに送信します。 同期 SGD を使用してニューラル ネットワークをトレーニングする場合、PaddlePaddle は同期バリアを使用して、勾配の送信とパラメーターの更新が順番に実行されるようにします。非同期 SGD では、すべてのトレーナーが勾配を送信するのを待たずにパラメータが更新されるため、計算の並列性が大幅に向上します。パラメータ サーバーは相互に依存せず、勾配を受信してパラメータを並列に更新します。パラメータ サーバーは、次のステップを開始する前にすべてのコンピューティング ノードが勾配を送信するのを待たず、コンピューティング ノードは相互に依存せず、モデルのトレーニングは並列に実行されます。非同期 SGD 方式では、パラメータ更新の並列性は向上しますが、同期パラメータ更新は保証できないことがわかります。いつでも、1 つのパラメータ サーバーに保存されたパラメータが、別のパラメータ サーバーに保存されたパラメータよりも多く更新される可能性があります。同期 SGD と比較すると、勾配にノイズが多くなります。 同時に、Paddle 自体は、ファブリック クラスター、OpenMPI クラスター、Kubernetes スタンドアロン、Kubernetes 分散など、複数の分散クラスターの展開と操作をサポートしています。 クライアント、マスターノード、ワーカーノードの関係 簡単に言うと、TensorFlow では、クライアントはセッションを通じてマスター ノードに接続し、実際の作業はワーカー ノードによって実行されます。各ワーカーノードはデバイス (TensorFlow の特定の計算、つまり CPU または GPU のハードウェア抽象化) を占有します。スタンドアロン モードでは、クライアント、マスター ノード、ワーカー ノードはすべて同じサーバー上に存在しますが、分散モードでは、それらは異なるサーバー上に存在できます。 1.クライアント クライアントは、TensorFlow 計算グラフを構築し、クラスターと対話するためのセッション レイヤーを確立するために使用されます。したがって、Session() を含むコードはすべてクライアントになります。クライアントは複数のサーバーに同時に接続でき、サーバーも複数のクライアントに接続できます。 2.サーバ サーバーは、tf.train.Server インスタンスを実行するプロセスです。これは、TensorFlow がタスクを実行するクラスターの一部であり、マスター ノード サービス (マスター サービス、マスター ノードとも呼ばれます) とワーカー ノード サービス (ワーカー サービス、ワーカー ノードとも呼ばれます) に分かれています。動作中は、マスターノードプロセスと複数のワーカーノードプロセスで構成され、マスターノードプロセスとワーカーノードプロセスはインターフェースを介して通信します。単一マシンマルチカードシステムと分散システムの両方がこの構造を持っているため、単一マシンマルチカードシステムと分散システム間の切り替えを実現するには、それらの間の通信インターフェイスを変更するだけで済みます。 3.マスターノードサービス マスターノード サービスは、tensorflow::Session インターフェイスを実装し、RPC サービス プログラムを介してワーカー ノードにリモート接続し、ワーカー ノードのサービス プロセス内の作業タスクと通信します。 TensorFlow サーバーでは、これは通常、task_index 0 のジョブです。 4.ワーカーノードサービス ワーカー ノード サービスは、worker_service.proto インターフェイスを実装し、ローカル デバイスを使用してグラフの一部を計算します。 TensorFlow サーバーでは、すべてのワーカー ノードにワーカー ノードのサービス ロジックが含まれています。各作業ノードは、1 つ以上のデバイスの管理を担当します。ワーカー ノードは、異なるローカル ポート上の異なるプロセス、または複数のサーバー上の複数のプロセスになることもできます。 下の図の左側は、単一のマシン上での複数のカードによる相互作用を示しており、右側は分散された相互作用を示しています。 フレームワークの比較 以下は、フレームワークの人気度とコードの安定性の観点から見た PaddlePaddle と TensorFlow の比較です。どちらのフレームワークもアクティビティと安定性の点で最高クラスであり、コードの品質も同等に優れていることがわかります。 PaddlePaddle のハイライトをいくつか紹介します。
要約する [51CTO オリジナル記事、パートナーサイトに転載する場合は、元の著者とソースを 51CTO.com として明記してください] |
<<: 文部科学省が文書を発表:AI、アルゴリズム等が2018年度から高等学校の教育課程に取り入れられる!
>>: インテリジェント チャットボットを自分で開発するための完全ガイド (完全なソース コード付き)
まず、ドローンはソレイマニの暗殺に使用され、その後、アルメニアとアゼルバイジャンの戦場でドローンが活...
「生成AIは2023年に世界を席巻します。その未来、そして私たちの未来は、私たちの次の一手によって決...
[[374688]] 「半オーク」「半魚」… SF映画、漫画、おとぎ話では、それは驚くことではありま...
仕事で使われるデバイスが多様化するにつれてサイバー攻撃も増えますが、AI はそれを防ぐのに役立ちます...
Alpha Goの勝利により、人工知能における「ディープラーニング」の概念が急速に普及し、画像認識の...
新たな10年を迎えるにあたり、人々は過去10年間の経験と教訓を活用する必要があります。モバイル アプ...
高度な新しい AI アルゴリズムを使用して複雑な問題を解決し、高い給料を得られるというのは魅力的に思...
[[275946]]ビッグデータダイジェスト制作出典: フォーブス編纂者:張大毓人工知能は従来の産業...
ICML 2023 の賞品が発表されました!今年は32件の候補論文の中から6件が優秀論文賞を受賞しま...
人工知能と機械学習ソリューションは、今日、さまざまな業界の組織で一般的になりつつあります。組織が A...
Discuz、UCHome、Supesite を含む Kangsheng の一連の製品は、同じユーザ...