開発者向けニュースに戻る

Summer of open source: building more efficient AI with PyTorch

2022年9月20日作成者:Suraj Subramanian

注: この記事のレビューをし、さらにいろいろなヒントを与えてくれた、Meta AIパートナーエンジニアのレス・ライト(Less Wright)氏に感謝します。

この記事は「オープンソースの夏」シリーズの第2弾であり、効率的な人工知能(AI)の作成について取り上げています。このシリーズは、オープンソースプロジェクトがMeta全社において、そしてもっと大きな範囲に影響を及ぼしている分野に関する有用なリソースと学習コンテンツを厳選し、紹介することを目的としています。Metaオープンソースは、他のさまざまな分野で革新的かつスケーラブルなさまざまなツールをシェアして業界をリードしています。そうした事例について見てゆきましょう。

PyTorch: 基礎テクノロジーから財団法人へ

PyTorchは、2016年の初リリース以降、一貫してディープラーニングコミュニティにおいて幅広く使われています。調査研究におけるその基礎は、実働シナリオでの利用に向けて着実に発展しつつあります。興奮を誘う機械学習(ML)と人工知能(AI)の時代にあって、AIモデルの新しい手法と用途はますます発展しており、PyTorchは、新たに確立された、Linux Foundation傘下の独立したPyTorch Foundationに移行するに至って、新たな局面に達しました。この財団法人は、AMD、Amazon Web Services、Google Cloud、Microsoft Azure、Nvidiaからの代表者を含む、多様性に富む委員会であり、今後さらに発展することが意図されています。その任務には、特定のベンダーに偏らないプロジェクトを通じてAIツールの採用を促進すること、またオープンソースのツールやライブラリなどのコンポーネントをだれもが利用できるようにすることが含まれます。また、財団法人への移行により、PyTorchとそのオープンソースコミュニティは、プロトタイプの段階からAIとMLの本番稼働への移行を加速させるための業務を継続していくことができます。

MetaオープンソースによるストリーミングAI処理

PyTorchは、オープンソースのパワーを示す優れた事例です。PyTorchは、初期のオープンソースディープラーニングフレームワークの1つであり、さまざまな分野のユーザーがディープラーニングの実験を実施したり、その作業を幅広い分野で適用したりすることを可能にしてきました。PyTorchでは、調査研究アプリでの実験から、自動運転車開発地中レーダーに至るまで、あらゆることをサポートしており、それらは、最近の応用例のごく一部にすぎません。AIツールの多目的ライブラリを、オープンソースコミュニティと組み合わせることにより、幅広いユーザーを対象に、テクノロジーの反復処理を短時間で処理して大規模に適合させることができます。

AIの実装がますます広まるにつれて、もっと複雑な問題に取り組むためにモデルのサイズが大きくなる傾向にありますが、それは、それらのモデルをトレーニングするために必要なリソースが膨れ上がるということでもあります。幸いなことに、開発者コミュニティの人々は、モデルで使われるリソースを削減することの必要性を、実用面でも環境の点でも認識するようになってきています。この記事では、量子化やその他のタイプのモデル圧縮が、高効率AIのための触媒となり得る理由について調べます。

PyTorch利用のためのベースラインの確立

この記事では、主にPyTorchの中程度から高度な機能のいくつかを取り上げています。この面で経験がないという場合、または現在別のライブラリを使っているという場合も、若干の基本知識があればすぐに取り掛かることができます。PyTorch初心者用ガイドをご覧ください。これには、Fashion MNISTデータセットを使ったMLワークフローの全容についての入門情報が含まれています。

以下は、PyTorch初心者向けの参考資料です。

量子化: 時間をかけてテストされた技法をAIに適用する

AI効率化には、数多くの手法があります。AI最適化のためのハードウェアとソフトウェアのコードサイニングは、高い効果が見込まれますが、専用のハードウェア-ソフトウェアソリューションの開発には膨大な時間とリソースを要します。より高速かつコンパクトなアーキテクチャを作成することで効率化を実現する方法もありますが、そのようなアーキテクチャの多くが大規模モデルに比べて精度の面で劣り、この傾向は、少なくとも当面の間続きそうです。もっとシンプルなアプローチは、既存のモデルのトレーニングと提供に必要なリソースを削減する方法を模索することです。PyTorchの対策の1つは、量子化によってモデルを圧縮するというものです。

量子化は数学的技法の1つであり、損失を伴うデジタル音楽ファイルを作成したり、アナログ信号をデジタル信号に変換したりするために使われています。量子化では、精度を落とした数学的計算をすることにより、多くのハードウェアプラットフォームでかなりの高パフォーマンスを実現できます。量子化を使うとAIの効率が上がるのはなぜでしょうか?結果からすると、特定のケースの場合、これが比較的シンプルな手法であるにもかかわらず、モデルの推論において劇的なスピードアップ(2~4倍)になるのです。

ディープラーニングモデルを構成するパラメーターは、多くの場合、浮動小数点(FP)精度の十進数であり、各パラメーターに16ビットまたは32ビットのメモリーが必要です。量子化を使うと、多くの場合、数値がINT4またはINT8に変換され、その占めるサイズがわずか4または8ビットになります。それによりモデルに必要なメモリ量が削減されます。さらに、チップメーカーにより、小数点演算より高速に整数演算をするための特殊演算命令が用意されています。

モデルのトレーニングに使うことのできる量子化には、動的、静的、量子化対応トレーニングの3種類の手法があります。そのメリットとデメリットの概要を、以下の表に示します。これらの各手法を実際のAIワークフローに実装する方法については、PyTorchでの実践的量子化のブログ投稿をご覧ください。

量子化の手法

メリット

デメリット

動的

  • 1回のAPI呼び出しだけで簡単に使える
  • 分散ドリフトに対して堅牢性が高く精度が若干高い
  • 長・短期記憶(LSTM)モデルでもトランスフォーマーモデルでもうまく動作する

すべてのフォワードパスで余分のオーバーヘッドがかかる

静的(PTQ)

  • オーバーヘッド解消により動的量子化より推論が高速

分散ドリフトで定期的な再調整が必要になる場合がある

量子化対応トレーニング(QAT)

  • 静的量子化より精度が高い
  • 動的量子化よりも推論が高速

計算コストが高い

AIワークフロー高速化のためのその他の機能

PyTorchを利用したAIの効率性向上手段は、量子化だけではありません。機能は定期的に更新されており、PyTorchでAIワークフローを改善する方法は他にもあります。以下では、そのいくつかを紹介します。

  • 推論モード: 推論実行のためにのみコードを使う場合は、PyTorchコードの作成時にこのモードを使うことができます。推論モードでは、テンソルの処理において前提事項のいくつかを変更することにより、推論が高速化されます。以降は特定のアプリ(この場合はautograd)でテンソルを使わないようにPyTorchに指示することにより、指定された特定のシナリオで実行速度が上がるようなコードが出力されるように調整されます。

  • 低精度: 量子化は、推論時、つまりモデルトレーニング後にのみ動作します。トレーニング処理自体については、使用するテンソル(FP16、FP32、またはBF16)に応じて最適なフォーマットを検出するため、PyTorchはAMP(自動複合精度)トレーニングを使います。PyTorchでの低精度ディープラーニングには、いろいろなメリットがあります。例えば、モデルのサイズ縮小、モデルトレーニングに必要なメモリ量の削減、モデル実行に必要な電力の削減に役立ちます。詳しくは、こちらのCUDA対応GPUでのAMP利用のチュートリアルをご確認ください。

  • チャンネルラスト: ビジョンモデルについて言えば、NHWC (チャンネルラスト) は、PyTorchでの高速テンソルメモリフォーマットです。データをチャンネルラストフォーマットで格納すると、PyTorchでの演算速度が向上します。入力テンソルをチャンネルラストでフォーマットすると、さまざまなフォーマットタイプ間での変換に必要なオーバーヘッドが小さくなり、推論速度が向上します。

  • 推論の最適化: このTorchScriptプロトタイプでは、いくつかの一般的な最適化が実装されています。それにより、あらゆる環境でモデルが高速化されます。また、ビルド固有の設定を行った推論のためにモデルを準備することができます。現時点では、主にCPU(およびGPU)上のビジョンモデルに使われています。これはプロトタイプであり、問題が発生する可能性があります。問題が発生した場合は、PyTorch GitHubリポジトリで報告してください。

PyTorchで新たな可能性を見出す

PyTorchブログでは、AIワークフロー高速化の新しい手法について定期的に解説しています。これらのブログは、テクニックの最新情報を入手する絶好の場となります。最近では、一般的な実行シナリオでトランスフォーマーモデルの速度とスループットを最大2倍に向上するBetterTransformerを紹介しています。PyTorchに特定の機能を実装する方法を詳しく知りたい場合は、レシピページでモデル最適化、配信されたトレーニング、解釈可能性などのカテゴリ別に検索できます。この記事で紹介したのは、PyTorchなどのツールによってオープンソースやAIがいかに進化しているかを示すほんの一例です。

人工知能と機械学習に関するMetaのオープンソースの最新情報を入手するには、オープンソースのサイトに移動して、YouTube チャンネルに登録するか、 FacebookTwitterLinkedInをフォローしてください。