Generative AI New World | Falcon 40B オープンソース大型モデルの導入手法の分析

eb82a1af5160016578f20805f6432960.gif

この記事の著者は 黄暉文です 

Amazonクラウドテクノロジーシニアデベロッパーエバンジェリスト

前回の記事では、カスタム データセットでモデルを微調整する方法について説明しましたこの記事では、テキスト生成の大規模モデルのデプロイシナリオに戻り、400 億のパラメータを持つ Falcon 40B オープンソースの大規模モデルを Amazon SageMaker にデプロイする方法について説明します。

2 つの異なる展開方法を比較します。

  1. すぐに使用できる Amazon SageMaker JumpStart デプロイメント。

  2. より細かい粒度で制御できる Amazon SageMaker Notebook のデプロイ方法。

Falcon 40B オープンソース大型モデルの概要

Flacon 40B は、アラブ首長国連邦の技術革新研究所 (TII) によって開発された大規模な言語モデルです。2023 年 2 月にリリースされたこれは、現在利用可能なオープンソースの大規模言語モデルの 1 つです。Flacon 40B には、GPT-3 と LLaMA の両方を超える 400 億個のパラメータがあります。Flacon 40B は、Common Crawl データ セットのフィルタリングされたバージョンである RefinedWeb データ セットを含む、多数のテキストおよびコード データ セットでのモデル トレーニングを完了します。

1. フラコン40Bの特長

Falcon 40B には、次のような強力な大規模言語モデルとなるいくつかの機能があります。

  • 大型サイズ: Flacon 40B には 400 億個のパラメータがあり、単語と概念の間のより複雑な関係を学習できます。

  • 効率的なトレーニング: Falcon 40B は、3D 並列処理や ZeRO 最適化など、トレーニングをより効率的に行うためにいくつかの技術を使用しています。

  • 高度なアーキテクチャ: Falcon 40B は、FlashAttendant や Multi-query Attendee などの高度なアーキテクチャを使用しています。これらの技術により、Flacon 40B はテキスト内の長距離依存関係をよりよく理解できるようになります。

  • オープンソース: Flacon 40B はオープンソースであり、研究者や開発者が実験して改善することができます。

2. Flacon 40Bの訓練番号

Falcon-40B は、フィルタリングされ重複排除された高品質の Web データセットである RefinedWeb からの 1,000 億トークンでトレーニングされました。Falcon チームは、RefinedWeb データセットを使用するデータ品質が非常に優れていると信じており、以下に示すように、この目的に特化した論文を発表していることは言及する価値があります。

c8c8179466335c854bd24684d138845f.png

出典:https://arxiv.org/pdf/2306.01116.pdf,2023/06

3. Flacon 40B のトレーニングパラメータとプロセス

Falcon-40B は、p4d インスタンスで 384 個の A100 40GB GPU を使用し、Amazon SageMaker を使用してトレーニングされました。トレーニング プロセス中、Falcon-40B は 3D 並列処理戦略 (TP=8、PP=4、DP=12) と ZeRO を使用しました。モデルのトレーニングは 2022 年 12 月に開始され、2 か月間続きました。主なトレーニングパラメータは次のとおりです。

07667c31ae0d13c7ab943a98102b5729.png

出典: https://huggingface.co/tiiuae/falcon-40b

4. Flacon 40Bのモデル構造

Falcon-40B は、次のトークンを予測する因果言語モデリング タスクでトレーニングされた因果デコーダー専用モデルです。このアーキテクチャは主に GPT-3 論文 (Brown et al., 2020) を参照しており、次のような大幅な改良が加えられています。

  1. 位置埋め込み: 回転位置埋め込みの使用 (論文: Su et al.、2021)

  2. アテンションメカニズム(アテンション):マルチクエリ(論文:Shazeer et al.、2019)およびFlashAttendant(論文:Dao et al.、2022)の使用

  3. デコーダー モジュール: 2 つの基準層を持つ並列アテンション/MLP を使用します。

発表されたハイパーパラメータ構成は次のとおりです。

e5848d813a69bc76c63fa6185736bae5.png

出典: https://huggingface.co/tiiuae/falcon-40b

5. フラコン40Bの性能

Falcon 40B は、GLUE、SQuAD、RACE などの複数のベンチマークで他の LLM よりも優れたパフォーマンスを発揮することが証明されています。また、テキスト生成、機械翻訳、質問応答などのさまざまなタスクにも効果的であることが証明されています。

Falcon 40B モデルの主なパラメータは次のとおりです。

  • パラメータ: 400億

  • トレーニングデータ: 1兆トークン

  • アーキテクチャ: トランス

  • オプティマイザー: アダム

  • 損失関数: クロスエントロピー

  • 評価指標:BLEU、ROUGE、F1

導入方法 1:

Amazon SageMaker の使用 

JumpStart でデプロイする

このセクションでは、SageMaker Python SDK を使用して Falcon 40B オープンソース大規模モデルをデプロイし、Amazon SageMaker JumpStart でテキストを生成する方法を紹介します。この例には次のものが含まれます。

  1. 開発環境をセットアップする

  2. 新しい Falcon 40B のオープンソース モックアップの Hugging Face ID とバージョンを取得します。

  3. JumpStartModel 関数を使用して Falcon 40B 大型モデルをデプロイする

  4. 推論を実行し、モデルと対話します (コード生成、質問応答、翻訳などを含む)

  5. 環境をきれいにする

1. Amazon SageMaker JumpStart 環境を開始します

1. Amazon Cloud Technology Console に「Amazon SageMaker」と入力します。

2e2f9e2c53e05ef049261e867f926cbd.png

2. [スタジオ]をクリックし、[スタジオを開く] をクリックします。

6468f98449c1265eacaaf97de54259dc.png

3. 「起動 -> Studio」をクリックします。

70b027e135e2ac77243a4dc222e5fac2.png

4. Amazon SageMaker Studio が起動するまで待ちます。

0aa4dbbca66009ae69dcd9ebe12b1283.png

5. 「SageMaker JumpStart -> モデル、ノートブック、ソリューション」をクリックした後、「テキストモデル -> Falcon 40B Instruct BF16」を選択します。

49d6fad3208f5522dcf533c185e8de11.png

e981594bbc5d9fb0c4a79b6636092838.png

7. 「ノートブック カーネルの起動...」が開始されたら、Falcon 40B オープン ソース大規模モデルをデプロイするためのサンプル コードを実行できます。

029c37dad3517f3d174a1cc8a5c0b3bf.png

このセクションの実験の完全なコードは、Amazon Cloud Technology の SageMaker コード リポジトリで入手できます。

この実験の完全なコードの GitHub アドレスは次のとおりです。

https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart-foundation-models/text-generation-falcon.ipynb

興味のある開発者は、上記の例を参照し、コードをユニットごとに実行して実験を完了できます。この Amazon Cloud Technology のノートブックは明確かつ簡潔に書かれているため、コードの詳細についてはここでは説明しませんが、興味のある読者は前の手順を参照して実行環境を構築し、実際に体験してください。

導入方法 2:

Amazon SageMaker の使用 

デプロイするノートブック 

このセクションでは、新しい Hugging Face LLM 推論コンテナを使用して、Falcon 40B などのオープンソースの大規模言語モデルを推論のために Amazon SageMaker にデプロイする方法の例を紹介します。この例には次のものが含まれます。

  1. 開発環境をセットアップする

  2. 新しい Hugging Face LLM DLC を入手

  3. Falcon 40B を Amazon SageMaker にデプロイする

  4. 推論を行ってモデルと対話する

  5. 環境をきれいにする

1. 開発環境をセットアップする

Amazon SageMaker Python SDK を使用して、モデル推論のために Falcon 40B をエンドポイントにデプロイします。まず、Amazon SageMaker Python SDK が正しくインストールされていることを確認する必要があります。次のコードに示すように:

# install supported sagemaker SDK
!pip install "sagemaker>=2.175.0" --upgrade –quiet


import sagemaker
import boto3
sess = sagemaker.Session()
# sagemaker session bucket -> used for uploading data, models and logs
# sagemaker will automatically create this bucket if it not exists
sagemaker_session_bucket=None
if sagemaker_session_bucket is None and sess is not None:
    # set to default bucket if a bucket name is not given
    sagemaker_session_bucket = sess.default_bucket()


try:
    role = sagemaker.get_execution_role()
except ValueError:
    iam = boto3.client('iam')
    role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']


sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)


print(f"sagemaker role arn: {role}")
print(f"sagemaker session region: {sess.boto_region_name}")

左にスワイプするとさらに表示されます

Amazon SageMaker に必要な IAM ロールの詳細な設定手順については、このドキュメントを参照してください。

https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.htm

2. ハグフェイス LLM DLC を入手

Hugging Face LLM DLC は、安全なホスティング環境で LLM を簡単に展開するための新しい専用推論コンテナです。DLC は、大規模言語モデル (LLM) を展開して提供するためのオープンソースの専用ソリューションである Text Generative Inference (TGI) を利用しています。TGI は、テンソル並列処理と動的バッチ処理を使用して、最も人気のあるオープンソース LLM 用の高性能テキスト生成を実装します。Amazon SageMaker でリリースされた新しい Hugging Face LLM Inference DLC を使用すると、顧客は高い同時実行性と低いレイテンシーをサポートする LLM エクスペリエンスを得ることができます。

  • テキスト生成推論 (TGI)

    https://github.com/huggingface/text-generation-inference

通常の Hugging Face モデルのデプロイと比較して、最初にコンテナ URI を取得して HuggingFaceModel モデル クラスに提供し、image_uri を使用して画像を指す必要があります。Amazon SageMaker で新しい Hugging Face LLM DLC を取得するには、sagemaker SDK が提供する get_huggingface_llm_image_uri メソッドを使用できます。このメソッドを使用すると、指定されたバックエンド、セッション、リージョン、バージョンに基づいて、必要な Hugging Face LLM DLC の URI を取得できます。

利用可能なすべての HuggingFace LLM DLC バージョンは次の場所にあります。

https://github.com/aws/deep-learning-containers/blob/master/available_images.md#huggingface-text-generation-inference-containers

from sagemaker.huggingface import get_huggingface_llm_image_uri


# retrieve the llm image uri
llm_image = get_huggingface_llm_image_uri(
  "huggingface",
  version="0.9.3"
)


# print ecr image uri
print(f"llm image uri: {llm_image}")

左にスワイプするとさらに表示されます

3. Falcon 40B を配備する

Amazon SageMaker ターミナルセクション

Falcon 40b Instruct を Amazon SageMaker にデプロイするには、HuggingFaceModel モデル クラスを作成し、hf_model_id、instance_type などの関連エンドポイント設定を定義する必要があります。このデモンストレーションでは、4 つの NVIDIA A10G GPU と 96 GB の GPU メモリを備えた g5.12xlarge インスタンス タイプを使用します。

また、Amazon SageMaker のクォータはアカウントによって異なる場合があります。クォータを超過した場合は、サービス クォータ コンソールを通じてクォータを増やすことができます。

https://console.aws.amazon.com/servicequotas/home/services/sagemaker/quotas

デプロイメント コードは次のようになります。

import json
from sagemaker.huggingface import HuggingFaceModel


# sagemaker config
instance_type = "ml.g5.12xlarge"
number_of_gpu = 4
health_check_timeout = 300


# TGI config
config = {
  'HF_MODEL_ID': "tiiuae/falcon-40b-instruct", # model_id from hf.co/models
  'SM_NUM_GPUS': json.dumps(number_of_gpu), # Number of GPU used per replica
  'MAX_INPUT_LENGTH': json.dumps(1024),  # Max length of input text
  'MAX_TOTAL_TOKENS': json.dumps(2048),  # Max length of the generation (including input text)
  # 'HF_MODEL_QUANTIZE': "bitsandbytes", # comment in to quantize
}


# create HuggingFaceModel
llm_model = HuggingFaceModel(
  role=role,
  image_uri=llm_image,
  env=config
)

左にスワイプするとさらに表示されます

注意深い読者は、上記のコード例でコメントアウトされたコード行に気づくでしょう。

# 'HF_MODEL_QUANTIZE': "bitsandbytes", # comment in to quantize

左にスワイプするとさらに表示されます

quantize という知識カテゴリーも興味深く壮大な知識領域であり、Falcon 40B 大型モデルの微調整については次の記事で詳しく説明します。

HuggingFaceModel を作成した後、deploy メソッドを使用して Amazon SageMaker エンドポイントにデプロイすることができ、ml.g5.12xlarge インスタンス タイプを使用してモデルをデプロイします。次のコードに示すように、Text Generative Inference (TGI) はモデルをすべての GPU に自動的に分散し、シャーディングします。

  • テキスト生成推論 (TGI) 

    https://github.com/huggingface/text-generation-inference

# Deploy model to an endpoint
# https://sagemaker.readthedocs.io/en/stable/api/inference/model.html#sagemaker.model.Model.deploy
llm = llm_model.deploy(
  initial_instance_count=1,
  instance_type=instance_type,
  # volume_size=400, # If using an instance with local SSD storage, volume_size must be None, e.g. p4 but not p3
  container_startup_health_check_timeout=health_check_timeout, # 10 minutes to be able to load the model
)

左にスワイプするとさらに表示されます

4. 推論を行い、モデルと対話する

エンドポイントをデプロイした後、predict メソッドを使用してモデル推論を開始できます。

ペイロードのパラメータ属性で定義できるさまざまなパラメータを使用して生成を制御できます。Hugging Face LLM DLC 推論コンテナーは、top_p、温度、stop、max_new_token などを含むさまざまな生成パラメーターをサポートします。

サポートされているパラメータの完全なリストは、次のドキュメントで確認できます。

https://huggingface.co/blog/sagemaker-huggingface-llm#4-run-inference-and-chat-with-our-model

現在、TGI は次のパラメータをサポートしています。

温度:モデル内のランダム性を制御します。値が低いほどモデルはより決定的になり、値が高いほどモデルはより確率的になります。デフォルト値は 0 です。

max_new_tokens:生成されるトークンの最大数。デフォルト値は 20 で、最大値は 512 です。

repetition_penalty:反復の可能性を制御します。デフォルトは null です。

シード:ランダムに生成されたシードに使用され、デフォルトは null です。

stop:生成を停止するために使用されるトークンのリスト。いずれかのトークンが生成されると、生成は停止します。

top_k: top-k フィルタリング中に保持される最も確率の高い語彙トークンの数。デフォルト値は null で、top-k フィルタリングが無効になります。

top_p:カーネル サンプリング用に予約されたパラメータの最も高い確率の語彙トークンの累積確率。デフォルトは null です。

do_sample:サンプリングを使用するかどうか。それ以外の場合は貪欲なデコードを使用します。デフォルト値は false です。

best_of: best_of シーケンスを生成し、それが最高マークの logprobs である場合にシーケンスを返します。デフォルトは null です。

詳細:ビルドに関する詳細情報を返すかどうか。デフォルト値は false です。

return_full_text:全文を返すか、生成された部分のみを返すか。デフォルト値は false です。

truncate:入力をモデルの最大長まで切り詰めるかどうか。デフォルト値は true です。

tiny_p:トークンの典型的な確率。デフォルト値は null です。

ウォーターマーク:生成時に使用されるウォーターマーク。デフォルト値は false です。

私たちがデプロイした tiiuae/falcon-40b-instruct オープンソース大規模モデルは会話型チャット モデルであるため、次のプロンプト ワードを使用して大規模モデルとチャットできます。次のように:

# define payload
prompt = """You are an helpful Assistant, called Falcon. Knowing everyting about AWS.


User: Can you tell me something about Amazon SageMaker?
Falcon:"""


# hyperparameters for llm
payload = {
  "inputs": prompt,
  "parameters": {
    "do_sample": True,
    "top_p": 0.9,
    "temperature": 0.8,
    "max_new_tokens": 1024,
    "repetition_penalty": 1.03,
    "stop": ["\nUser:","<|endoftext|>","</s>"]
  }
}


# send request to endpoint
response = llm.predict(payload)


# print assistant respond
assistant = response[0]["generated_text"][len(prompt):]

左にスワイプするとさらに表示されます

LLM の出力を以下に示します。「Amazon SageMaker」について説明する段落が生成されます。

54b6f70eedb495a6b3d9c277aa9b4b54.png

読者の便宜のために、LLM の出力を次のようにコピーします。

Amazon SageMaker は、開発者やデータサイエンティストがクラウドで機械学習モデルを迅速に構築、トレーニング、デプロイできるようにするフルマネージドのプラットフォームです。Jupyter ノートブック、アルゴリズム、事前トレーニングされたモデル、使いやすい API など、幅広いツールとサービスが提供されるため、機械学習アプリケーションの構築をすぐに始めることができます。」

Falcon 40B 大型モデルについては、次のような質問を続けることができます。

new_prompt = f"""{prompt}{assistant}
User: How would you recommend start using Amazon SageMaker? If i am new to Machine Learning?
Falcon:"""
# update payload
payload["inputs"] = new_prompt


# send request to endpoint
response = llm.predict(payload)


# print assistant respond
new_assistant = response[0]["generated_text"][len(new_prompt):]
print(new_assistant)

左にスワイプするとさらに表示されます

ファルコン 40B 大型モデルが私に与えた答えは次のとおりです。ご参考までに。

3b5c8c52913b57013a72bf354fc7b5a2.png

読者の便宜のために、LLM の出力を次のようにコピーします。

「機械学習が初めての場合は、Amazon SageMaker で利用可能な事前構築されたアルゴリズムと事前トレーニングされたモデルから始めることができます。Jupyter ノートブックを使用して、独自の実験を作成して実行することもできます。さらに、AutoPilot 機能を利用して、データに基づいて機械学習モデルを自動的に構築およびトレーニングできます。始めるための最良の方法は、さまざまなことを試して、特定のユースケースに最適なものを確認することです。」

5. リソースを削除し、環境をクリーンアップします。

Falcon 40B オープンソースの大規模モデルを Amazon SageMaker エンドポイントにデプロイし、モデル推論を正常に実行しました。この実験が完了したら、不必要な料金が発生しないように、リソースを削除し、モデルやエンドポイントの削除を含む環境をクリーンアップすることを忘れないでください。

リソースを削除して環境をクリーンアップするサンプルコードは次のとおりです。

llm.delete_model()
llm.delete_endpoint()

6. 参考資料

このセクションの導入方法は主に次の英語ドキュメントを参照しており、説明の過程で著者が詳細な説明とテキストの調整を加えました。

https://www.philschmid.de/sagemaker-falcon-llm

比較してまとめる

この記事は 2 つの章に分かれており、Falcon 40B のオープンソースの大規模言語モデルを 2 つの方法で展開します。

まず、Amazon SageMaker JumpStart を使用してモデルをデプロイしました。メインのコアコードは次のとおりです。

model_id, model_version = "huggingface-llm-falcon-40b-instruct-bf16", "*”


from sagemaker.jumpstart.model import JumpStartModel
my_model = JumpStartModel(model_id=model_id)
predictor = my_model.deploy()

左にスワイプするとさらに表示されます

次に、Amazon SageMaker Notebook を使用してモデルをデプロイしました。その主要なコアコードは次のとおりです。

# Retrieve the new Hugging Face LLM DLC
from sagemaker.huggingface import get_huggingface_llm_image_uri


# retrieve the llm image uri
llm_image = get_huggingface_llm_image_uri(
  "huggingface",
  version="0.8.2"
)


# print ecr image uri
printf("llm image uri: {llm_image}")
# Deploy Falcon 40B Model
from sagemaker.huggingface import HuggingFaceModel


# instance config
instance_type = "ml.g5.12xlarge"
number_of_gpu = 4
health_check_timeout = 300


# TGI config
config = {
      'HF_MODEL_ID': "tiiuae/falcon-40b-instruct", 
      ……
}


# create HuggingFaceModel
llm_model = HuggingFaceModel(
  role=role,
  image_uri=llm_image,
  env=config
)
llm = llm_model.deploy(
      ……
)

左にスワイプするとさらに表示されます

上記のコアコードの量の比較から、初心者ですぐに使用したい場合は、高速で簡潔なデプロイ方法である Amazon SageMaker JumpStart を選択できることがわかります。 Amazon SageMaker サービスを理解し、それを使用したい場合。 大規模モデルのデプロイメントプロセスでより詳細な制御ができる場合 (例: デプロイメントインスタンスタイプ、イメージバージョン番号、TGI パラメータなど)、Amazon SageMaker Notebook を選択できます。構成パラメータをより包括的に制御できる展開方法。

3da7700ce1766dd13f20c933ffc7467c.gif

次の記事では、Amazon SageMaker Notebook を使用して、対話型環境で大規模な言語モデルを迅速かつ効率的に微調整するトピックについて説明します。QLoRA と 4 ビット bitsandbtyes 量子化技術を使用して、Amazon SageMaker の Hugging Face PEFT を使用して Falcon-40B モデルを微調整します。このトピックは、オープンソースの大規模モデルの現在の分野における最先端のパイオニア トピックですので、ご期待ください。

開発者向けのテクノロジー共有やクラウド開発トレンドについて詳しく知るために、「Amazon Cloud Developer」 WeChat 公式アカウントに引き続きご注目ください

この記事の著者

77796c35dd71debc0820717dfef238a8.jpeg

ホアン・ハオウェン

Amazon Cloud Technology のシニア開発者エバンジェリスト。AI/ML、データ サイエンスなどに重点を置いています。彼は、電気通信、モバイル インターネット、クラウド コンピューティングなどの業界でアーキテクチャ設計、テクノロジー、起業家経営に 20 年以上の経験があり、マイクロソフト、サン マイクロシステムズ、チャイナ テレコムなどの企業に勤務し、法人顧客へのサービスの提供に注力してきました。ゲーム、電子商取引、メディア、広告などのソリューション AI/ML、データ分析、企業のデジタルトランスフォーメーションなどのソリューションコンサルティングサービス

4df13d14e0aaa6feae3831e59ce599ba.gif

5e488bb5082647d7fb19e61ba5c14e30.gif

聞いたので、下の 4 つのボタンをクリックしてください

バグに遭遇することはありません!

0ad2fb92f5fd6defb22300474ba9b354.gif

おすすめ

転載: blog.csdn.net/u012365585/article/details/132704203