Amazon SageMaker JumpStart で GPT および Bloom モデルを使用してテキスト生成を実行する

12月の2020では、 AWSが発表 の一般的な可用性 Amazon SageMaker ジャンプスタート、の機能 アマゾンセージメーカー これにより、機械学習(ML)をすばやく簡単に開始できます。 JumpStartは、一般的なMLタスク全体で、事前にトレーニングされたさまざまなモデルのワンクリックの微調整と展開、および一般的なビジネス上の問題を解決するエンドツーエンドのソリューションの選択を提供します。 これらの機能により、MLプロセスの各ステップの負担が軽減され、高品質のモデルの開発が容易になり、デプロイまでの時間が短縮されます。

この投稿は、特定の ML タスクに JumpStart を使用するシリーズの XNUMX 回目です。 の中に 最初の投稿では、JumpStart で画像分類のユース ケースを実行する方法を示しました。 の中に 2番目の投稿で、テキスト分類の使用例を実行する方法を示しました。 の中に XNUMX番目の投稿、画像セグメンテーションのユースケースを実行しました。

この投稿では、事前トレーニング済みのテキスト生成モデルをデプロイする方法について、順を追って説明します。 同じ結果を得る XNUMX つの方法を検討します。 Amazon SageMakerスタジオ、およびプログラムによって JumpStart API.

この投稿で説明する JumpStart API コードに直接ジャンプしたい場合は、次のサンプル Jupyter ノートブックを参照できます。 JumpStartの概要–テキスト生成.

JumpStartの概要

JumpStart を使用すると、コードを XNUMX 行も書かずに、さまざまなタスクの ML モデルを使い始めることができます。 現在、JumpStart では次のことが可能です。

  • 一般的なMLタスク用に事前トレーニング済みモデルを展開する – JumpStart を使用すると、公開されている大規模なデータセットで事前トレーニングされたモデルを簡単にデプロイできるため、開発作業を行うことなく一般的な ML タスクに対処できます。 ML 研究コミュニティは、最近開発されたモデルの大部分を公開して使用できるようにするために多大な努力を払ってきました。 JumpStart は、オブジェクト検出、テキスト分類、テキスト生成など、最も一般的な 300 の ML タスクにまたがる 15 を超えるモデルのコレクションをホストしているため、初心者でも簡単に使用できます。 これらのモデルは、TensorFlow、PyTorch、Hugging Face、MXNet などの一般的なモデル ハブから抽出されています。
  • 事前にトレーニングされたモデルを微調整する – JumpStart を使用すると、独自のトレーニング アルゴリズムを作成する必要なく、事前トレーニング済みのモデルを微調整できます。 MLでは、あるドメインで学んだ知識を別のドメインに移す能力を呼びます 転移学習。 転移学習を使用すると、元のモデルのトレーニングに関連するトレーニングコストよりもはるかに低いトレーニングコストで、より小さなデータセットで正確なモデルを生成できます。 JumpStartには、LightGBM、CatBoost、XGBoost、およびScikit-learnに基づく一般的なトレーニングアルゴリズムも含まれています。これらのアルゴリズムは、表形式の回帰と分類のために最初からトレーニングできます。
  • 構築済みのソリューションを使用する – JumpStartは、需要予測や産業および金融アプリケーションなどの一般的なMLユースケース向けの17のソリューションのセットを提供し、数回クリックするだけでデプロイできます。 ソリューションは、特定のビジネスユースケースを解決するためにさまざまなAWSサービスをつなぎ合わせるエンドツーエンドのMLアプリケーションです。 彼らは使用します AWS CloudFormation 迅速な展開のためのテンプレートとリファレンスアーキテクチャ。つまり、完全にカスタマイズ可能です。
  • SageMakerアルゴリズムについては、ノートブックの例を参照してください – SageMakerは、データサイエンティストとML実践者が、MLモデルのトレーニングとデプロイを迅速に開始できるようにする一連の組み込みアルゴリズムを提供します。 JumpStartは、これらのアルゴリズムをすばやく使用するために使用できるサンプルノートブックを提供します。
  • トレーニングビデオとブログを確認する – JumpStartは、SageMaker内でさまざまな機能を使用する方法を教える多数のブログ投稿とビデオも提供します。

JumpStartはカスタムVPC設定を受け入れ、 AWSキー管理サービス (AWS KMS)暗号化キー。これにより、エンタープライズ環境内で利用可能なモデルとソリューションを安全に使用できます。 セキュリティ設定は、Studio内またはSageMakerPythonSDKを介してJumpStartに渡すことができます。

テキスト生成、GPT-2、ブルーム

テキスト生成は、人間が書いたテキストと見分けがつかない流暢なテキストを生成するタスクです。 としても知られています 自然言語生成.

GPT-2 は、人気のある変換ベースのテキスト生成モデルです。 これは、人間がラベルを付けていない未加工の英語テキストの大規模なコーパスで事前トレーニングされています。 部分的なシーケンス (文またはテキストの一部) が与えられた場合、モデルはシーケンス内の次の単語またはトークンを予測する必要があるというタスクでトレーニングされます。

ブルームもトランスフォーマーベースのテキスト生成モデルであり、GPT-2 と同様にトレーニングされています。 ただし、Bloom は 46 の異なる言語と 13 のプログラミング言語で事前トレーニングされています。 以下は、Bloom モデルでテキスト生成を実行する例です。

Input: "Some people like dogs, some people like cats"
Output: "Some people like dogs, some people like cats some people like birds, some people like fish,"

ソリューションの概要

次のセクションでは、Studio UI と JumpStart API の両方を介して推論を実行するための段階的なデモを提供します。 次の手順を実行します。

  1. Studio UI から JumpStart にアクセスして、事前トレーニング済みのモデルにデプロイして推論を実行します。
  2. プログラムで SageMaker Python SDK で JumpStart を使用して、事前トレーニング済みのモデルをデプロイし、推論を実行します。

Studio UI から JumpStart にアクセスし、事前トレーニング済みのモデルを使用して推論を実行する

このセクションでは、StudioUIを介してJumpStartモデルをトレーニングおよびデプロイする方法を示します。

次のビデオでは、JumpStart で事前トレーニング済みのテキスト生成モデルを見つけてデプロイする方法を示しています。 モデル ページには、モデルとその使用方法に関する貴重な情報が含まれています。 JumpStart で利用可能な事前トレーニング済みのモデルをデプロイできます。 推論には、ml.p3.2xlarge インスタンス タイプを選択します。これは、低価格で低推論レイテンシーに必要な GPU アクセラレーションを提供するためです。 SageMaker ホスティングインスタンスを設定したら、選択します 配備します。 永続的なエンドポイントが稼働するまで、20〜25分かかる場合があります。

エンドポイントが操作可能になると、推論リクエストに応答する準備が整います!

推論までの時間を短縮するために、JumpStartは、新しくデプロイされたエンドポイントで推論を実行する方法を示すサンプルノートブックを提供します。 選ぶ ノートブックを開くStudioのEndpointを使用する.

SageMakerSDKでJumpStartをプログラムで使用する

前のセクションでは、数回クリックするだけで、JumpStart UI を使用して事前トレーニング済みのモデルをインタラクティブにデプロイする方法を示しました。 ただし、SageMaker SDK に統合された API を使用して、プログラムで JumpStart のモデルを使用することもできます。

このセクションでは、SageMaker SDK を使用して前のプロセスを複製する方法の簡単な例について説明します。 JumpStart で適切な事前トレーニング済みモデルを選択し、このモデルを SageMaker エンドポイントにデプロイして、デプロイされたエンドポイントで推論を実行します。 このデモのすべての手順は、付属のノートブックで利用できます JumpStartの概要–テキスト生成.

事前トレーニング済みのモデルをデプロイする

SageMaker は、ビルドおよびランタイム タスクに Docker コンテナを幅広く利用するプラットフォームです。 JumpStart は利用可能なフレームワーク固有のものを使用します SageMakerディープラーニングコンテナ (DLC)。 最初に、追加のパッケージと、選択したタスクのトレーニングと推論を処理するスクリプトを取得します。 最後に、事前トレーニング済みのモデル アーティファクトが個別にフェッチされます。 model_uris、プラットフォームに柔軟性を提供します。 単一の推論スクリプトを使用して、同じタスクで事前トレーニングされたモデルをいくつでも使用できます。 次のコードを参照してください。

model_id, model_version = "huggingface-textgeneration-bloom-560m", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Bloom は非常に大規模なモデルであり、展開に最大 20 ~ 25 分かかる場合があります。 GPT-2 などの小型モデルも使用できます。 事前トレーニング済みの GPT-2 モデルをデプロイするには、次を設定できます。 model_id = huggingface-textgeneration-gpt2. JumpStart で使用可能なその他のモデルのリストについては、次を参照してください。 JumpStart使用可能なモデルテーブル.

次に、リソースをにフィードします SageMakerモデル インスタンス化してエンドポイントをデプロイします。

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

モデルがデプロイされた後、リアルタイムで予測を取得できます!

推論を実行する

次のコード スニペットは、出力がどのように見えるかを示しています。 デプロイされたモデルにリクエストを送信するには、入力テキストを utf-8 エンコードされた形式。

def query(model_predictor, text):
    """Query the model predictor."""

    encoded_text = json.dumps(text).encode("utf-8")

    query_response = model_predictor.predict(
        encoded_text,
        {
            "ContentType": "application/x-text",
            "Accept": "application/json",
        },
    )
    return query_response

エンドポイントの応答は、入力テキストとそれに続く生成テキストを含む JSON オブジェクトです。

def parse_response(query_response):
    """Parse response and return the generated text."""

    model_predictions = json.loads(query_response)
    generated_text = model_predictions["generated_text"]
    return generated_text
    
text = "Some people like dogs, some people like cats"
query_response = query(model_predictor, text)
parse_response(query_response)

出力は次のとおりです。

"Some people like dogs, some people like cats some people like birds, some people like fish,"

まとめ

この投稿では、JumpStart を使用して事前トレーニング済みのテキスト生成モデルをデプロイする方法を示しました。 これは、コードを記述しなくても実現できます。 ご自身で解決策を試し、ご意見をお寄せください。 JumpStart の詳細と、オープンソースの事前トレーニング済みモデルを他のさまざまな ML タスクに使用する方法については、以下をご覧ください。 AWS re:Invent2020ビデオ.


著者について

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で GPT および Bloom モデルを使用してテキスト生成を実行します。垂直検索。あい。ヴィヴェック・マダン博士 Amazon SageMaker JumpStart チームの応用科学者です。 イリノイ大学アーバナ シャンペーン校で博士号を取得し、ジョージア工科大学で博士研究員を務めました。 彼は機械学習とアルゴリズム設計の活発な研究者であり、EMNLP、ICLR、COLT、FOCS、および SODA カンファレンスで論文を発表しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で GPT および Bloom モデルを使用してテキスト生成を実行します。垂直検索。あい。サントッシュクルカルニ は、オーストラリアのスポーツ顧客と協力するアマゾン ウェブ サービスのエンタープライズ ソリューション アーキテクトです。 彼は、AI/ML、ビッグデータ、およびソフトウェア開発に関する知識を使用して、ビジネス上の問題を解決する大規模な分散アプリケーションを構築することに情熱を注いでいます。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence で GPT および Bloom モデルを使用してテキスト生成を実行します。垂直検索。あい。アシッシュ・ケタン博士 は、Amazon SageMaker 組み込みアルゴリズムを使用する上級応用科学者であり、機械学習アルゴリズムの開発を支援しています。 イリノイ大学アーバナ シャンペーン校で博士号を取得。 彼は機械学習と統計的推論の活発な研究者であり、NeurIPS、ICML、ICLR、JMLR、ACL、および EMNLP カンファレンスで多くの論文を発表しています。

タイムスタンプ:

より多くの AWS機械学習