「Amazon SageMaker JumpStartで大規模な言語モデルの応答をストリーム配信する」
「Amazon SageMaker JumpStartを活用して、大規模な言語モデルのリアルタイムストリーミング応答を実現する方法」
Amazon SageMaker JumpStart
は、大規模な言語モデル(LLM)の推論応答をストリーム配信できるようになりました。トークンのストリーミングにより、LLMsが応答生成を完了するのを待つのではなく、生成されるモデル応答出力を確認できます。SageMaker JumpStartのストリーミング機能は、最終ユーザーへの低遅延の認識を作り出すことにより、ユーザーエクスペリエンスの向上に役立ちます。
この記事では、Falcon 7B Instructモデルのエンドポイントからのレスポンスをデプロイしてストリームする方法について説明します。
現在、SageMaker JumpStartでストリーミングをサポートしている次のLLMsが提供されています:
– Mistral AI 7B、Mistral AI 7B Instruct
– Falcon 180B、Falcon 180B Chat
– Falcon 40B、Falcon 40B Instruct
– Falcon 7B、Falcon 7B Instruct
– Rinna Japanese GPT NeoX 4B Instruction PPO
– Rinna Japanese GPT NeoX 3.6B Instruction PPO
SageMaker JumpStartでストリーミングをサポートするモデルのリストの更新情報は、Built-in Algorithms with pre-trained Model Tableで「huggingface-llm」と検索して確認できます。
Amazon SageMakerのストリーミング機能は、SageMaker TGI Deep Learning Container (DLC)を使用してデプロイされた任意のモデルに対して、ボックス外で利用できます。詳細については、Announcing the launch of new Hugging Face LLM Inference containers on Amazon SageMakerを参照してください。
SageMakerのFoundationモデル
SageMaker JumpStartでは、Hugging Face、PyTorch Hub、TensorFlow Hubなどの人気のあるモデルハブからさまざまなモデルへのアクセスが提供されており、SageMaker内のML開発ワークフローで使用できます。MLの最新の進歩により、テキスト要約、デジタルアート生成、言語翻訳など、さまざまなユースケースに適応できるFoundationモデルと呼ばれる新しいモデルクラスが登場しました。これらのモデルは訓練にコストがかかるため、顧客はこれらのモデルを自分で訓練するのではなく、既存の事前学習済みFoundationモデルを使用して必要に応じて微調整したいと考えています。SageMakerでは、SageMakerコンソール上で選択できるモデルのカリキュレーションリストを提供しています。
SageMaker JumpStartでは、さまざまなタスクやモデルプロバイダーに基づいたFoundationモデルを素早く始めることができます。SageMaker JumpStartでは、モデルの特性や使用条件を簡単に確認できます。また、テスト用のUIウィジェットを使用してこれらのモデルを試すこともできます。Foundationモデルをスケールで使用したい場合、モデルプロバイダーからのプリビルトノートブックを使用して、SageMakerを離れることなく実行できます。モデルはAWS上でホストおよびデプロイされているため、評価や大規模な使用時においてもデータが第三者と共有されないことに対して信頼できます。
トークンのストリーミング
トークンのストリーミングでは、モデルによって生成される推論応答が生成されている段階で返されます。そのため、応答が完全に提供される前に、段階的に生成された応答を確認することができます。ストリーミングは、エンドユーザーに対して遅延の認識を低減するため、より良いユーザーエクスペリエンスを実現するのに役立ちます。生成された出力を確認することで、目的に有用と見なされない場合には、生成を早めて終了することもできます。特に長時間実行されるクエリにおいては、出力を生成されると同時に確認できるため、エンドツーエンドの遅延時間は同じでも、低いレイテンシの認識を作り出すことができます。
この記事を書いている時点では、Hugging Face LLM テキスト生成の推論 DLCを使用するモデルの場合、SageMaker JumpStartでストリーミングを利用することができます。
ストリーミングがない場合のレスポンス | ストリーミングがある場合のレスポンス |
ソリューションの概要
この記事では、SageMaker JumpStartのストリーミング機能を紹介するために、Falcon 7B Instructモデルを使用しています。
ストリーミングをサポートするSageMaker JumpStartの他のモデルを見つけるには、以下のコードを使用できます:
from sagemaker.jumpstart.notebook_utils import list_jumpstart_modelsfrom sagemaker.jumpstart.filters import Andfilter_value = And("task == llm", "framework == huggingface")model_ids = list_jumpstart_models(filter=filter_value)print(model_ids)
以下のストリーミングをサポートするモデルIDを取得します:
['huggingface-llm-bilingual-rinna-4b-instruction-ppo-bf16', 'huggingface-llm-falcon-180b-bf16', 'huggingface-llm-falcon-180b-chat-bf16', 'huggingface-llm-falcon-40b-bf16', 'huggingface-llm-falcon-40b-instruct-bf16', 'huggingface-llm-falcon-7b-bf16', 'huggingface-llm-falcon-7b-instruct-bf16', 'huggingface-llm-mistral-7b', 'huggingface-llm-mistral-7b-instruct', 'huggingface-llm-rinna-3-6b-instruction-ppo-bf16']
前提条件
ノートブックを実行する前に、セットアップに必要な初期ステップがいくつかあります。以下のコマンドを実行してください:
%pip install --upgrade sagemaker –quiet
モデルのデプロイ
最初のステップとして、SageMaker JumpStartを使用してFalcon 7B Instructモデルをデプロイします。詳しい手順については、Falcon 180B foundation model from TII is now available via Amazon SageMaker JumpStartを参照してください。以下のコードを使用します:
from sagemaker.jumpstart.model import JumpStartModelmy_model = JumpStartModel(model_id="huggingface-llm-falcon-7b-instruct-bf16")predictor = my_model.deploy()
エンドポイントのクエリとストリームのレスポンス
次に、デプロイしたエンドポイントを呼び出すためのペイロードを作成します。重要な点として、ペイロードには"stream": True
というキー/値のペアが含まれている必要があります。これにより、テキスト生成推論サーバーにストリーミングレスポンスの生成を指示します。
payload = { "inputs": "ウェブサイトを作成する方法は?", "parameters": {"max_new_tokens": 256}, "stream": True}
エンドポイントをクエリする前に、エンドポイントからのバイトストリームレスポンスを解析できるイテレータを作成する必要があります。レスポンス内の各トークンのデータは、別々の行として提供されるため、このイテレータは新しい行がストリーミングバッファで識別されるたびにトークンを返します。このイテレータは最小限に設計されており、使用ケースに合わせてその動作を調整することができます。例えば、このイテレータはトークン文字列を返しますが、行データには興味深いトークンの対数確率などの他の情報も含まれている可能性があります。
import ioimport jsonclass TokenIterator: def __init__(self, stream): self.byte_iterator = iter(stream) self.buffer = io.BytesIO() self.read_pos = 0 def __iter__(self): return self def __next__(self): while True: self.buffer.seek(self.read_pos) line = self.buffer.readline() if line and line[-1] == ord("\n"): self.read_pos += len(line) + 1 full_line = line[:-1].decode("utf-8") line_data = json.loads(full_line.lstrip("data:").rstrip("/n")) return line_data["token"]["text"] chunk = next(self.byte_iterator) self.buffer.seek(0, io.SEEK_END) self.buffer.write(chunk["PayloadPart"]["Bytes"])
作成したエンドポイントでBoto3のinvoke_endpoint_with_response_stream
APIを使用し、TokenIterator
インスタンスを反復処理してストリーミングを有効にすることができます。
import boto3client = boto3.client("runtime.sagemaker")response = client.invoke_endpoint_with_response_stream(EndpointName=predictor.endpoint_name,Body=json.dumps(payload),ContentType="application/json",)for token in TokenIterator(response["Body"]):print(token, end="")
print
関数の空のend
パラメータを指定することで、改行文字を挿入せずにビジュアルストリームを有効にすることができます。これにより、次のような出力が生成されます:
ウェブサイトの構築は複雑なプロセスですが、一般的には以下のステップが含まれます:1. ウェブサイトの目的とゴールを決定する2. ドメイン名とホスティングプロバイダを選択する3. HTML、CSS、JavaScriptを使用してウェブサイトをデザインおよび開発する4. ウェブサイトにコンテンツを追加し、検索エンジン最適化を行う5. ウェブサイトをテストおよびトラブルシューティングし、正常に動作していることを確認する6. ウェブサイトを定期的に保守および更新し、スムーズな動作を維持するこれらのステップを進めるためには、チュートリアルやテンプレートを含むオンラインの豊富なリソースが利用できます。また、これらのステップについて自信がない場合は、ウェブ開発者やデザイナーのアドバイスを求めることも役立ちます。<|endoftext|>
このコードは、ノートブックやStreamlitやGradioなどのアプリケーションで使用して、ストリーミングの動作と顧客への提供するエクスペリエンスを確認することができます。
クリーンアップ
最後に、追加のコストを発生させないために、展開したモデルとエンドポイントをクリーンアップすることを忘れないでください:
predictor.delete_model()predictor.delete_endpoint()
結論
この記事では、SageMaker JumpStartの新機能であるストリーミングの使用方法を紹介しました。顧客のために低遅延を必要とするインタラクティブなアプリケーションを構築するために、トークンストリーミングの機能を活用していただければと思います。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles