ホームページ  >  記事  >  テクノロジー周辺機器  >  OpenAIプログラミング言語がBert推論を12倍高速化、そのエンジンが注目を集める

OpenAIプログラミング言語がBert推論を12倍高速化、そのエンジンが注目を集める

WBOY
WBOY転載
2023-04-23 15:19:071255ブラウズ

1 行のコードはどれほど強力なのでしょうか?今日紹介する Kernl ライブラリを使用すると、ユーザーはわずか 1 行のコードで GPU 上で Pytorch 変換モデルを数倍高速に実行できるため、モデルの推論が大幅に高速化されます。

具体的には、Kernl の恩恵により、Bert の推論速度は Hugging Face のベースラインより 12 倍速くなりました。この成果は主に、Kernl が新しい OpenAI プログラミング言語 Triton および TorchDynamo でカスタム GPU カーネルを作成したことによるものです。プロジェクトの著者は Lefebvre Sarrut 出身です。

OpenAIプログラミング言語がBert推論を12倍高速化、そのエンジンが注目を集める

GitHub アドレス: https://github.com/ELS-RD/kernl/

#Kernl と他の推論エンジンの比較です。横軸の括弧内の数字はそれぞれバッチサイズとシーケンス長を表し、縦軸は推論の加速度を表します。

OpenAIプログラミング言語がBert推論を12倍高速化、そのエンジンが注目を集める

#ベンチマークは、3090 RTX GPU および 12 コア Intel CPU で実行されます。

#上記の結果から、Kernl は長いシーケンス入力に関しては最速の推論エンジンであると言えます (図の右)上)半分)、短い入力シーケンスでは NVIDIA の TensorRT (上図の左半分) に近い値です。それ以外の場合、Kernl カーネル コードは非常に短く、理解や変更が簡単です。このプロジェクトでは、カーネルの置き換えを簡素化するために Triton デバッガとツール (Fx ベース) も追加しているため、PyTorch モデルのソース コードを変更する必要はありません。

プロジェクト著者の Michael Benesty は、この研究を要約しました。彼らがリリースした Kernl は、変換推論を加速するためのライブラリです。非常に高速で、場合によっては SOTA パフォーマンスに達します。ほとんどの変換アーキテクチャに適合するようにハッキングされています。

彼らは 6 倍高速な T5 でもテストしましたが、ベネスティ氏はこれはほんの始まりにすぎないと述べました。

Kernl はなぜ作成されたのですか?

Lefebvre Sarrut では、プロジェクト作成者が実稼働環境でいくつかのトランスフォーマー モデルを実行していますが、その中にはレイテンシーに敏感なものもあり、主に検索と Resys が行われます。彼らは OnnxRuntime と TensorRT も使用しており、知識をコミュニティと共有するために Transformer-Deploy OSS ライブラリも作成しました。

最近、著者は生成言語をテストし、その高速化に取り組んでいます。ただし、従来のツールを使用してこれを行うのは非常に難しいことが判明しています。彼らの見解では、Onnx はもう 1 つの興味深い形式であり、機械学習用に設計されたオープン ファイル形式であり、トレーニングされたモデルを保存するために使用され、広範なハードウェア サポートを備えています。

ただし、Onnx エコシステム (主に推論エンジン) には、新しい LLM アーキテクチャを扱うため、いくつかの制限があります。 #追跡を信頼できるため、制御フローなしでモデルを Onnx にエクスポートするのは簡単です。ただし、動的な動作を取得するのはより困難です。

PyTorch とは異なり、ONNX Runtime/TensorRT は、テンソル並列処理を実装するマルチ GPU タスクをまだネイティブにサポートしていません。

TensorRT は、同じ構成ファイルを使用してトランスフォーマー モデルの 2 つの動的軸を管理できません。ただし、通常はさまざまな長さの入力を提供できるようにする必要があるため、バッチ サイズごとに 1 つのモデルを構築する必要があります。
  • 非常に大きなモデルが一般的ですが、Onnx (protobuff ファイルとして) ) ファイル内 サイズに関していくつかの制限があるため、ウェイトをモデルの外に保存することで解決する必要があります。
  • 非常に厄介な事実の 1 つは、新しいモデルは決して高速化されないということです。他の人がそのモデル用のカスタム CUDA カーネルを作成するのを待つ必要があります。既存のソリューションが悪いというわけではありません。OnnxRuntime の優れた点の 1 つはマルチハードウェアのサポートであり、TensorRT は非常に高速であることが知られています。
  • そこで、プロジェクトの作成者は、Python/PyTorch 上で TensorRT と同じくらい高速なオプティマイザーを実現したいと考え、Kernl を作成しました。
  • ###どうやってするの?

    メモリ帯域幅は通常、ディープ ラーニングのボトルネックです。推論を高速化するには、メモリ アクセスを減らすことが多くの場合良い戦略となります。短い入力シーケンスでは、ボトルネックは通常 CPU オーバーヘッドに関連しているため、これを取り除く必要があります。プロジェクト作成者は主に次の 3 つのテクノロジを利用しています:

    1 つ目は OpenAI Triton で、CUDA などの GPU カーネルを記述するための言語です。Nvidia Triton 推論と混同しないでください。サーバーの方が効率的です。改善は、GPU メモリに中間結果を保持せずに計算を連鎖するように、いくつかの操作を融合することによって達成されました。著者はこれを使用して、アテンション (フラッシュ アテンションに置き換え)、線形レイヤーとアクティベーション、および Layernorm/Rmsnorm を書き換えます。

    2 つ目は CUDA グラフです。ウォームアップ ステップ中に、起動された各コアとそのパラメータが保存されます。その後、プロジェクトの作成者は推論プロセス全体を再構築しました。

    最後に、TorchDynamo があります。これは、プロジェクト作成者が動的な動作に対処するのを支援するために Meta によって提案されたプロトタイプです。ウォームアップ ステップ中にモデルを追跡し、Fx グラフ (静的計算グラフ) を提供します。彼らは、Fx グラフの一部の操作を、Python で再コンパイルされた独自のカーネルに置き換えました。

    将来的には、プロジェクトのロードマップでは、ウォームアップの高速化、不規則推論 (パディングでの損失計算なし)、トレーニング サポート (ロング シーケンスのサポート)、マルチ GPU サポート (複数の並列化モード)、量子化 (PTQ)、新しいバッチの Cutlass カーネル テスト、ハードウェア サポートの改善など。

    詳細については、元のプロジェクトを参照してください。

以上がOpenAIプログラミング言語がBert推論を12倍高速化、そのエンジンが注目を集めるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。