「AWS Inferentia2を使って、あなたのラマ生成時間を短縮しましょう」

「AWS Inferentia2を使って、あなたのラマ生成時間を短縮しよう!」

Hugging Faceブログの前の投稿で、第2世代のAWS InferentiaアクセラレータであるAWS Inferentia2を紹介し、optimum-neuronを使用して、標準のテキストとビジョンタスクのためにHugging FaceモデルをAWS Inferentia 2インスタンス上で迅速に展開する方法を説明しました。

AWS Neuron SDKとのさらなる統合の一環として、🤗optimum-neuronを使用して、AWS Inferentia2上でテキスト生成のためのLLMモデルを展開することができるようになりました。

デモンストレーションには、Llama 2、ハブで最も人気のあるモデルの一つ、を選択するのが最も適しています。

Inferentia2インスタンスに🤗optimum-neuronをセットアップする

おすすめは、Hugging Face Neuron Deep Learning AMI(DLAMI)を使用することです。DLAMIには、必要なライブラリが事前にパッケージ化されており、Optimum Neuron、Neuron Drivers、Transformers、Datasets、およびAccelerateも含まれています。

また、Hugging Face Neuron SDK DLCを使用してAmazon SageMakerに展開することもできます。

注意:SageMaker展開に関する投稿も近日中に掲載予定です。

最後に、これらのコンポーネントは、optimum-neuron インストール手順に従って、新しいInferentia2インスタンスにも手動でインストールすることができます。

Llama 2モデルをNeuronにエクスポートする

optimum-neuronドキュメントで説明されているように、モデルはNeuronデバイスで実行する前に、コンパイルされてシリアライズ形式にエクスポートする必要があります。

幸いなことに、🤗optimum-neuronは、標準の🤗transformersモデルをNeuron形式にエクスポートするための非常にシンプルなAPIを提供しています。

>>> from optimum.neuron import NeuronModelForCausalLM>>> compiler_args = {"num_cores": 24, "auto_cast_type": 'fp16'}>>> input_shapes = {"batch_size": 1, "sequence_length": 2048}>>> model = NeuronModelForCausalLM.from_pretrained(        "meta-llama/Llama-2-7b-hf",        export=True,        **compiler_args,        **input_shapes)

これには少し説明が必要です:

  • compiler_argsを使用して、モデルを展開するためのコア数(各Neuronデバイスには2つのコアがあります)と精度(ここではfloat16)を指定します。
  • input_shapesを使用して、モデルの静的な入力と出力の寸法を設定します。すべてのモデルコンパイラは静的な形状を必要とし、Neuronも例外ではありません。 sequence_lengthは、入力コンテキストの長さだけでなく、KVキャッシュの長さ、つまり出力の長さにも制約を与えます。

パラメータとInferentiaホストの選択によって、これには数分から1時間以上かかる場合があります。

幸運なことに、これを1回だけ行う必要があります。なぜなら、モデルを保存して後で再ロードできるからです。

>>> model.save_pretrained("コンパイルされたニューロンモデルのローカルパス")

さらに良いことに、それをHugging Faceハブにプッシュすることもできます。

>>> model.push_to_hub(        "コンパイルされたニューロンモデルのローカルパス",        repository_id="aws-neuron/Llama-2-7b-hf-neuron-latency")

AWS Inferentia2でLlama 2を使用してテキストを生成する

モデルをエクスポートしたら、transformersライブラリを使用してテキストを生成することができます。詳細は以前の投稿で詳しく説明されています。

>>> from optimum.neuron import NeuronModelForCausalLM>>> from transformers import AutoTokenizer>>> model = NeuronModelForCausalLM.from_pretrained('aws-neuron/Llama-2-7b-hf-neuron-latency')>>> tokenizer = AutoTokenizer.from_pretrained("aws-neuron/Llama-2-7b-hf-neuron-latency")>>> inputs = tokenizer("What is deep-learning ?", return_tensors="pt")>>> outputs = model.generate(**inputs,                             max_new_tokens=128,                             do_sample=True,                             temperature=0.9,                             top_k=50,                             top_p=0.9)>>> tokenizer.batch_decode(outputs, skip_special_tokens=True)['What is deep-learning ?\nディープラーニングとは、高レベルな抽象化を行い、複数の層からなる階層的なデータの形式でデータの処理ノードを増加させることを目指す機械学習の一種です。']

注意:複数の入力プロンプトをモデルに渡す場合、結果のトークンシーケンスはストリームの終了トークンで左側にパディングする必要があります。エクスポートされたモデルと共に保存されるトークナイザーは、それに応じて設定されています。

次のジェネレーション戦略がサポートされています:

  • グリーディー
  • トップ-k、トップ-pを使用した多項分布サンプリング(温度あり)

大部分のロジットの前処理/フィルタリング(反復ペナルティなど)がサポートされています。

optimum-neuronパイプラインを使用したオールインワン

シンプルに保ちたい方には、optimum-neuronパイプラインを使用する方法があります。

以下のように使用します:

>>> from optimum.neuron import pipeline>>> p = pipeline('text-generation', 'aws-neuron/Llama-2-7b-hf-neuron-budget')>>> p("My favorite place on earth is", max_new_tokens=64, do_sample=True, top_k=50)[{'generated_text': '私のお気に入りの場所は地球です。そこが一番平和を感じる場所です。私は旅行をすることや新しい場所を見ることが大好きです。私は'}]

ベンチマーク

Inferentia2でのテキスト生成はどれくらい効率的ですか?さて、見てみましょう!

様々な構成でLLama 2 7Bおよび13Bモデルの事前コンパイルバージョンをハブにアップロードしました:

注意:すべてのモデルは最大シーケンス長2048でコンパイルされています。

llama2 7Bの”budget”モデルは、1つのニューロンデバイスのみを持つinf2.xlargeインスタンスに展開されるように設計されており、モデルを読み込むのに十分なcpuメモリを持っています。

他のすべてのモデルはinf2.48xlargeインスタンスで利用可能なコアのすべてを使用するようにコンパイルされています。

注意:利用可能なインスタンスの詳細については、inferentia2製品ページを参照してください。

我々は、llama2 7Bおよびllama2 13Bのモデル向けに2つの「レイテンシー」指向の構成を作成しました。これらの構成は、一度に1つのリクエストのみを処理しますが、最大速度で処理します。

また、最大4つのリクエストを並列に処理するための2つの「スループット」指向の構成も作成しました。

モデルを評価するために、256個の入力トークン(つまり、256、512、および768個のトークンを生成)から始まり、合計のシーケンスの長さが1024になるまでトークンを生成します。

注意:「予算」モデルの数字は報告されていますが、グラフには含まれていません。

エンコーディング時間

エンコーディング時間は、入力トークンを処理し、最初の出力トークンを生成するために必要な時間です。これは、生成されたトークンをストリーミングする際にユーザーが直接感じるレイテンシに対応する非常に重要な指標です。

我々は、文脈サイズを増やすにつれてエンコーディング時間をテストします。256個の入力トークンは、Typical Q/Aの使用例における典型的なもので、768個はRetrieval Augmented Generation(RAG)の使用例により近いです。

「予算」モデル(Llama2 7B-B)はinf2.xlargeインスタンスで展開されており、他のモデルはinf2.48xlargeインスタンスに展開されています。

エンコーディング時間はで表されます。

Llama2 inferentia2 encoding-time

すべての展開されたモデルは、長いコンテキストでも優れた応答時間を示しています。

エンドツーエンドのレイテンシ

エンドツーエンドのレイテンシは、合計1024トークンのシーケンスに到達するまでの総時間に対応します。

したがって、エンコーディング時間と生成時間を含みます。

「予算」モデル(Llama2 7B-B)はinf2.xlargeインスタンスで展開されており、他のモデルはinf2.48xlargeインスタンスに展開されています。

レイテンシはで表されます。

Llama2 inferentia2 end-to-end latency

ハイエンドインスタンスに展開されたすべてのモデルは、適切なレイテンシを示しています。実際にはスループットを最適化するように構成されているモデルでさえもです。

「予算」モデルの展開レイテンシはかなり高いですが、まだ問題ありません。

スループット

スループットを評価するために、エンドツーエンドのレイテンシを入力トークンと出力トークンの合計で割るという他のベンチマークと同じ規則を採用しています。つまり、エンドツーエンドのレイテンシをbatch_size * sequence_lengthで割って、1秒あたりに生成されるトークンの数を得ます。

「予算」モデル(Llama2 7B-B)はinf2.xlargeインスタンスで展開されており、他のモデルはinf2.48xlargeインスタンスに展開されています。

スループットはトークン/秒で表されます。

Llama2 inferentia2 throughput

再度、ハイエンドインスタンスに展開されたモデルは非常に優れたスループットを持っています。レイテンシに最適化されているモデルでさえもです。

「予算」モデルのスループットははるかに低いですが、ストリーミングの使用例ではまだ十分です。平均的な読者は1秒間に約5つの単語を読みます。

結論

llama2モデルをHugging Faceハブから簡単にデプロイする方法を説明しました。デプロイはAWS Inferentia2を使用して🤗 optimum-neuronです。

展開されたモデルは、エンコーディング時間、遅延、スループットの観点から非常に優れたパフォーマンスを示しています。

興味深いことに、展開されたモデルの遅延はバッチサイズにあまり敏感ではありません。これは、推論エンドポイントで複数のリクエストを並行して処理することが可能になる道を開いています。

しかし、改善の余地はまだたくさんあります:

  • 現在の実装では、スループットを向上させる唯一の方法はバッチサイズを増やすことですが、現在はデバイスのメモリに制約があります。パイプラインなどの代替オプションが現在統合されています。
  • 静的なシーケンスの長さは、モデルが長い文脈をエンコードする能力を制限しています。この問題に対処するために、注意力が集中する可能性があるかどうか興味深いと思われます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

『ジュリエット・パウエル&アート・クライナー、The AI Dilemma – インタビューシリーズの著者』

『AIのジレンマ』は、ジュリエット・パウエルとアート・クライナーによって書かれましたジュリエット・パウエルは、著者であ...

人工知能

Diginiのスマートセンスの社長、ガイ・イエヒアブによるインタビューシリーズ

ガイ・イハイアヴ氏は、ビジネスの成功に最も重要な資産を保護するためにインターネット・オブ・シングス(IoT)の力を活用す...

人工知能

ピーター・マッキー、Sonarの開発者担当責任者-インタビューシリーズ

ピーター・マッキーはSonarのDeveloper Relationsの責任者です Sonarは、悪いコードの1兆ドルの課題を解決するプラットフォー...

人工知能

「クリス・サレンス氏、CentralReachのCEO - インタビューシリーズ」

クリス・サレンズはCentralReachの最高経営責任者であり、同社を率いて、自閉症や関連する障害を持つ人々のために優れたクラ...

人工知能

スコット・スティーブンソン、スペルブックの共同創設者兼CEO- インタビューシリーズ

スコット・スティーブンソンは、Spellbookの共同創設者兼CEOであり、OpenAIのGPT-4および他の大規模な言語モデル(LLM)に基...

人工知能

「ナレ・ヴァンダニャン、Ntropyの共同創設者兼CEO- インタビューシリーズ」

Ntropyの共同創設者兼CEOであるナレ・ヴァンダニアンは、開発者が100ミリ秒未満で超人的な精度で金融取引を解析することを可...