翻訳者 | Zhu Xianzhong
査読者 | インクの色
ディープラーニングは、日々さまざまな形で私たちの生活に影響を与えています。 Siri、Alexa、ユーザーの音声コマンドに基づく携帯電話のリアルタイム翻訳アプリ、またはスマート トラクター、倉庫ロボット、自動運転車を駆動するコンピューター ビジョン テクノロジーなど、毎月新たな進歩がもたらされているようです。これらの深層学習アプリケーションのほとんどは、TensorFlow、PyTorch、JAX の 3 つのフレームワークで作成されています。
それでは、どの深層学習フレームワークを使用すべきでしょうか?この記事では、TensorFlow、PyTorch、JAX の高レベルの比較を実行します。私たちの目標は、コミュニティのサポートや使いやすさなどの要素をもちろん考慮しながら、それぞれの強みを発揮するアプリの種類についてのアイデアを提供することです。
「IBMを買ったからといって解雇された人はいない」は、1970年代から1980年代のコンピューター業界のスローガンでした。今世紀初頭、TensorFlow を使用した深層学習についても同じことが当てはまりました。しかし、誰もが知っているように、1990 年代に入るまでに、IBM は「後回し」になっていました。では、TensorFlow は、2015 年の最初のリリースから 7 年が経過した現在、そして今後の新たな 10 年においても競争力を維持しているのでしょうか? ############確かに。 TensorFlow は常に静止しているわけではありません。まず、TensorFlow 1.x は非 Python 的な方法で静的グラフを構築しますが、TensorFlow 2.x では、操作を即座に評価するために、eager モードを使用してモデルを構築することもできるため、PyTorch に似たものになります。 TensorFlow は、高レベルでは開発を容易にする Keras を提供し、最下位レベルでは速度を向上させる XLA (Accelerated Linear Algebra、加速線形代数) 最適化コンパイラを提供します。 XLA は、GPU のパフォーマンスを向上させる上で魔法のような役割を果たします。これは、Google の TPU (Tensor Processing Unit) の能力を活用する主要な方法であり、大規模なモデルのトレーニングに比類のないパフォーマンスを提供します。
第二に、TensorFlow は、可能な限りすべての機能に優れるよう長年にわたって努力してきました。たとえば、成熟したプラットフォーム上で、明確に定義された反復可能な方法でモデルを提供したいと考えていますか? TensorFlow を提供する準備ができています。モデルのデプロイメントを Web、スマートフォンなどの低電力コンピューティング、またはモノのインターネットなどのリソースに制約のあるデバイスに再配置したいですか?現時点では、TensorFlow.js と TensorFlow Lite は両方とも非常に成熟しています。
Google が本番環境のデプロイメントの実行に依然として 100% TensorFlow を使用していることを考慮すると、TensorFlow がユーザーの規模のニーズを満たすことができることは明らかです。
しかし、最近のプロジェクトには無視できない要素も確かにあります。つまり、プロジェクトを TensorFlow 1.x から TensorFlow 2.x にアップグレードすることは、実際には非常に残酷です。新しいバージョンで適切に動作するようにコードを更新するのに必要な労力を考慮して、単純にコードを PyTorch フレームワークに移植することを決定する企業もあります。さらに、TensorFlow は科学研究分野でも勢いを失い、数年前から PyTorch が提供する柔軟性を好むようになり、研究論文での TensorFlow の使用は継続的に減少しています。
さらに、「ケラス事件」は何の役割も果たしませんでした。 Keras は 2 年前に TensorFlow ディストリビューションに統合されましたが、最近、独自のリリース計画を持つ別のライブラリに戻されました。もちろん、Keras を除外することが開発者の日常生活に影響を与えることはありませんが、フレームワークの小規模な更新バージョンにこのような劇的な変更が加えられることは、プログラマーの間で TensorFlow フレームワークを使用する自信を呼び起こすものではありません。
そうは言っても、TensorFlow は確かに信頼できるフレームワークであり、広範な深層学習エコシステムを備えており、ユーザーは TensorFlow 上であらゆる規模のアプリケーションやモデルを構築できます。そうすれば、多くの良い企業と協力できるでしょう。しかし、今日では TensorFlow が第一の選択肢ではないかもしれません。
PyTorch を使用する必要がありますか?
PyTorch はもはや TensorFlow に続く「新興企業」ではありませんが、現在では深層学習の分野で主要な勢力となっており、おそらく主に研究に使用されていますが、実稼働アプリケーションでも使用されることが増えています。 TensorFlow と PyTorch の開発では、eager モードがデフォルトのアプローチになりつつあり、PyTorch の autograd によって提供される、より Python 的なアプローチが静的グラフとの戦いに勝利しているようです。TensorFlow とは異なり、変数 API がバージョン 0.4 で非推奨になって以来、PyTorch のコア コードは大きな停止を経験していません。以前は、変数には自動的に生成されたテンソルが必要でしたが、現在はすべてがテンソルです。しかし、どこにでも間違いがないわけではありません。たとえば、PyTorch を使用して複数の GPU 間でトレーニングを行っている場合、DataParallel と新しい DistributedDataParaller の違いに遭遇した可能性があります。常に DistributedDataParallel を使用する必要がありますが、DataParaller の使用に特に問題はありません。
PyTorch は、XLA/TPU サポートの点で常に TensorFlow や JAX に後れを取っていましたが、2022 年の時点で状況は大きく改善されました。 PyTorch は、TPU 仮想マシンへのアクセス、レガシー TPU ノードのサポート、およびコード変更を必要とせずに CPU、GPU、または TPU 上で実行されるコードの単純なコマンド ライン デプロイメントのサポートをサポートするようになりました。 PyTorch によって頻繁に作成される定型コードの一部を扱いたくない場合は、トレーニング ループを書き直す代わりに実際の作業に集中できる、Pytorche Lightning のような高レベルの拡張機能を利用できます。一方で、PyTorch Mobile の開発は続けられていますが、TensorFlow Lite よりもはるかに成熟していません。
実稼働側では、PyTorch を Kubeflow などのフレームワークに依存しないプラットフォームと統合できるようになり、TorchServe プロジェクトはスケーリング、メトリクス、バッチ推論などのデプロイメントの詳細を処理し、すべて PyTorch によって維持されます。開発者自身 MLOps のすべての利点を小さなパッケージで利用できます。一方、PyTorch はスケーリングをサポートしていますか?問題ない! Meta は何年も実稼働環境で PyTorch を実行しているため、PyTorch が大規模なワークロードを処理できないと言っている人は嘘をついています。それにもかかわらず、特に多数の GPU または TPU を必要とする非常に負荷の高いトレーニングに関しては、PyTorch が JAX ほどユーザーフレンドリーではない可能性がある状況があります。
最後に、人々が言及したくない厄介な問題がまだあります。ここ数年の PyTorch の人気は、Hugging Face の Transformers ライブラリの成功とほぼ切り離すことができません。はい、Transformers は TensorFlow と JAX もサポートするようになりましたが、元々は PyTorch プロジェクトであり、今でもフレームワークと緊密に統合されています。 Transformer アーキテクチャの台頭、研究に対する PyTorch の柔軟性、そして Hugging Face のモデル センターを通じてリリースから数日または数時間以内に非常に多くの新しいモデルを導入できる機能を考えると、なぜ PyTorch がこれらの分野で人気があるのかは簡単にわかります。
TensorFlow に興味がない場合は、Google が他のサービスを提供している可能性があります。 JAX は、Google によって構築、保守、使用されている深層学習フレームワークですが、Google の公式製品ではありません。ただし、過去 1 年ほどの Google/DeepMind の論文や製品リリースに注目すると、Google の研究の多くが JAX に移行していることに気づくでしょう。つまり、JAX は Google の「公式」製品ではありませんが、Google 研究者が限界を押し広げるために使用しているものです。
JAX とは正確には何ですか? JAX について考える簡単な方法は、「魔法の杖」を使って Python 関数を魔法のようにベクトル化し、これらすべての関数の導関数の計算を処理できる、NumPy の GPU/TPU アクセラレーション バージョンを想像してください。最後に、コードをフェッチして XLA (Accelerated Linear Algebra) コンパイラー用に最適化するためのジャストインタイム (JIT: Just-In-Time) コンポーネントが提供され、それによって TensorFlow と PyTorch のパフォーマンスが大幅に向上します。現在、一部のコードは、実際の最適化作業を行わなくても、JAX で再実装するだけで 4 ~ 5 倍高速に実行されます。
JAX が NumPy レベルで動作することを考慮すると、JAX コードは TensorFlow/Keras (または PyTorch) よりもはるかに低いレベルで記述されます。幸いなことに、JAX の周囲には小規模ながら成長を続けるエコシステムがあり、ある程度の拡張が行われています。ニューラル ネットワーク ライブラリを使用しますか?もちろん。その中には、Google の Flax や DeepMind (同じく Google) の Haiku も含まれます。さらに、Optax はオプティマイザーのあらゆるニーズに対応し、PIX は画像処理などに利用できます。 Flax のようなものを使用すると、ニューラル ネットワークの構築は比較的簡単に習得できるようになります。まだいくつかの厄介な問題があることに注意してください。たとえば、経験豊富な人々は、JAX が他の多くのフレームワークとは異なる乱数の処理方法についてよく話します。
それでは、すべてを JAX に変換して、この最先端のテクノロジーを活用すべきでしょうか?この質問は人によって異なります。このアプローチは、トレーニングに多くのリソースを必要とする大規模なモデルを詳しく調べる場合にお勧めします。さらに、決定論的トレーニングのための JAX や、数千の TPU ポッドを必要とするその他のプロジェクトに興味がある場合は、試してみる価値があります。
それでは、結論は何でしょうか?どの深層学習フレームワークを使用する必要がありますか?残念ながら、この質問に対する単一の答えはありません。すべては、取り組んでいる問題の種類、処理するモデルの展開を計画している規模、さらには扱っているコンピューティング プラットフォームによって異なります。
ただし、テキストと画像の分野で作業しており、これらのモデルを実稼働環境にデプロイすることを目的とした小規模から中規模の研究を行っている場合は、おそらく PyTorch が最適です。現時点での選択。最近のバージョンから判断すると、この種のアプリケーション領域のスイートスポットに当てはまります。
低コンピューティング デバイスのすべてのパフォーマンスが必要な場合は、TensorFlow と非常に堅牢な TensorFlow Lite パッケージを使用することをお勧めします。最後に、数百億、数千億、またはそれ以上のパラメーターを含むトレーニング モデルを検討しており、主に研究目的でモデルをトレーニングしている場合は、JAX を試してみる時期が来ているかもしれません。
元のリンク: https://www.infoworld.com/article/3670114/tensorflow-pytorch-and-jax-choosing -a-deep-learning-framework.html
Zhu Xianzhong、51CTOコミュニティ編集者、51CTOエキスパートブロガー、講師、濰坊市の大学コンピュータ教師であり、フリーランスプログラミングの分野のベテラン。
以上がTensorFlow、PyTorch、JAX: どのディープ ラーニング フレームワークが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。