MPT-7B、商用利用可能な言語モデルの時代が到来
オープンソース LLM — MPT-7B の導入および開発ガイド
全体
モザイクはAIモデルに特化したスタートアップ企業で、今回は同社が新たにリリースしたMPT-7Bモデルシリーズを紹介します。これらは完全にオープンソースの商用利用可能なモデルで、1 兆のトークンを使用してゼロから 9.5 日でトレーニングされました。その開発プロセスは、以前の記事で紹介した LLaMA や Pythia から微調整されたモデルよりもはるかに複雑でコストがかかります。これは、特に 20 万米ドルのハードウェア費用で最大 1 兆のトークンをトレーニングしたことを考えると、スタートアップにとって驚くべき偉業です。基本モデルの機能は 70 億 LLaMA モデルと同等であり、それに加えて、Instruct モデル、Chat モデル、StoryWriter モデルなど、開発コミュニティを刺激するために他のモデルも微調整されています。
MPT-7B モデルは、Mosaic の評価テストにおいて LLaMA-7B モデルと同等のパフォーマンスを備えた最初のオープンソース言語モデルであり、これまでのところ、Pythia や StableLM および他の多くのオープンソース モデルよりも高品質で安定しているようです。結果とトレーニングのスケール。RedPajama や OpenLLaMA などの他のモデルは、現在のトレーニング モデルのスナップショットにすぎず、まだ完全にはリリースされていません。これは、私たちが実際にフルモデルを受け取った最初のものであり、基本的に LLaMA と同等であることがベンチマークによって示されました。MPT-7Bモデルは初の商用モデルでもあり、商用利用に向けて独自のデータを基に自分たちで微調整することができます。
StoryWriter モデルのコンテキストの長さ
MPT-7B モデルの最も優れた点の 1 つは、 ALiBiMPT-7B-StoryWriter-65k+
アーキテクチャでトレーニングされたStory-Writer モデルを提供しており、ユーザーがコンテキストを非常に長い長さまで拡張できることです。より長いモデルを微調整したい場合は、今すぐ行うことができます。これはまさに彼らが Story-Writer モデルで行ったことであり、基本モデルを取得し、65,000 以上のトークンのコンテキスト長で微調整しました。これを大局的に考えると、元の LLaMA モデルは 2,048 個のトークンのみを受け入れ、StableLM は 4,096 個のトークン用にトレーニングされ、ChatGPT と GPT-4 の場合、その数はアクセスできるバージョンに応じて 4,096 個と 8,000 ~ 32,000 個になります。
そのブログには、モザイク チームがかつて『華麗なるギャツビー』の書籍全体をプロンプトし、その後モデルが 67873 トークンの入力に基づいて適切なエピローグを正常に生成したことを示す印象的な例があります。これを実行できるクローズ モデルやオープン モデルを他に見たことがないため、将来的にコンテキスト内学習を行うには、OpenAI と Story-Writer モデルのどちらの方法がよりコスト効率が高いかを検討する必要があります。コンテキスト学習に興味がある場合は、以前の記事を参照してください。
トレーニング用のデータセット
MPT-7B-Instruct
彼らはまた、短い形式の命令に従うモデルである70 億の命令モデルをトレーニングしました。これは、主に Databricks の Dolly-15K データセットの拡張によるオープンソース データセットのベース モードから微調整されています。その結果、より大規模な命令ベースのデータセットを取得し、商用利用可能なライセンスを保持します。記事でも触れましたが、Dolly 2.0 では、Dolly の商業的有用性を実現する主な要因は、ChatGPT などの他の AI モデルから生成されず、人間によって作成された純粋なライセンスフリーのデータセットです。そのため、実際に遊んで質問しても、「AI 言語モデルとしては…できない」といったよくある答えは得られません。ただし、これはビクーニャ モデルやコアラ モデルが使用しているほど大きなデータセットではなく、チームはこの指示モデルの競争力を高めるためにトレーニングを 1T データセットに拡張することを計画しています。
その他
MPT-7B-Chat
ユーザーにシームレスで魅力的なマルチターン インタラクションを提供するために、MPT-7B の別の広範なモデルもあります。このチャットボット モデルは唯一商用利用が許可されていないことに注意してください。
さらに、MPT-7B モデルの最適化レイヤーには、FlashAttendantと低精度レイヤーノルムが含まれており、これが、HuggingFace ハブで他の 70 億モデルより推論速度が約「1.5 倍から 2 倍高速」になっている理由の 1 つです。
ここから学ぶことができる MPT-7B モデルのリソースは次のとおりです。
- ブログ投稿:https://www.mosaicml.com/blog/mpt-7b
- デモを指示する:https://huggingface.co/spaces/mosaicml/mpt-7b-instruct
- チャットデモ:https://huggingface.co/spaces/mosaicml/mpt-7b-chat
このモデルは商用利用に非常に適していますが、導入が簡単で安価であることも、このモデルの重要な特徴の 1 つです。幸いなことに、MPT-7B は、HuggingFacePreTrainedModel
基本クラスとのシームレスな互換性のおかげで、推論タスクに展開できるように高速かつシンプルで手頃な価格になるように設計されています。
MPT-7B-Instruct モデルをローカルにデプロイして実行する場合は、次の手順を参照してください。Google Colab ノートブックを作成しました。 https://colab.research.google.com/drive/16D9tjggLukD38Un0hC-Gss3mrehPXng_?usp=sharing
自由に自分のスペースにコピーしてください。ただし、このモデルを実行するには、事前トレーニングに必要な十分なリソースを確保するための Colab Pro アカウントまたはローカル GPU サポートが必要な場合があり、これには最低 T4 15GB GPU と 22GB RAM が必要ですMPT-7B-Instruct
。
ノートブック内のコードを見てみましょう。
a) パッケージをインストールする
!pip install requests torch transformers einops
from typing import Any, Dict, Tuple
import warnings
import datetime
import os
from threading import Event, Thread
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, StoppingCriteria, StoppingCriteriaList, TextIteratorStreamer
import textwrap
INSTRUCTION_KEY = "### Instruction:"
RESPONSE_KEY = "### Response:"
END_KEY = "### End"
INTRO_BLURB = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
PROMPT_FOR_GENERATION_FORMAT = """{intro}
{instruction_key}
{instruction}
{response_key}
""".format(
intro=INTRO_BLURB,
instruction_key=INSTRUCTION_KEY,
instruction="{instruction}",
response_key=RESPONSE_KEY,
)
class InstructionTextGenerationPipeline:
...
INSTRUCTION_KEY
、、、RESPONSE_KEY
およびは、END_KEY
プロンプトの特定のセクションを識別するためのキーとして使用されます。INTRO_BLURB
プロンプトの導入テキストを提供する文字列です。PROMPT_FOR_GENERATION_FORMAT
言語モデルに渡されるプロンプトの形式を定義する文字列です。
という名前のクラスは、InstructionTextGenerationPipeline
事前トレーニングされたトランスフォーマー言語モデルを使用して命令が与えられたテキストを生成するように定義されています。このクラスは、transformers
ライブラリを使用して事前トレーニングされたモデルとトークナイザーを読み込み、__call__
命令文字列を入力として受け取り、言語モデルを使用して応答文字列を生成するメソッドを定義します。
d) パイプラインを使用してモデルをロードする
generate = InstructionTextGenerationPipeline(
"mosaicml/mpt-7b-instruct",
torch_dtype=torch.bfloat16,
trust_remote_code=True,
)
stop_token_ids = generate.tokenizer.convert_tokens_to_ids(["<|endoftext|>"])
# Define a custom stopping criteria
class StopOnTokens(StoppingCriteria):
def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
for stop_id in stop_token_ids:
if input_ids[0][-1] == stop_id:
return True
return False
def process_stream(instruction, temperature, top_p, top_k, max_new_tokens):
# Tokenize the input
input_ids = generate.tokenizer(
generate.format_instruction(instruction), return_tensors="pt"
).input_ids
input_ids = input_ids.to(generate.model.device)
# Initialize the streamer and stopping criteria
streamer = TextIteratorStreamer(
generate.tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True
)
stop = StopOnTokens()
if temperature < 0.1:
temperature = 0.0
do_sample = False
else:
do_sample = True
gkw = {
**generate.generate_kwargs,
**{
"input_ids": input_ids,
"max_new_tokens": max_new_tokens,
"temperature": temperature,
"do_sample": do_sample,
"top_p": top_p,
"top_k": top_k,
"streamer": streamer,
"stopping_criteria": StoppingCriteriaList([stop]),
},
}
response = ''
def generate_and_signal_complete():
generate.model.generate(**gkw)
t1 = Thread(target=generate_and_signal_complete)
t1.start()
for new_text in streamer:
response += new_text
return response
process_stream()
これで、適切な引数を指定してメソッドを呼び出して、モデルが指示にどのように応答するかを確認できるようになりました。
instruction = "Write a travel blog about a 3-day trip to The Philippines. You need describe day by day."
temperature = 0.3
top_p = 0.95
top_k = 0
max_new_tokens = 2000
response = process_stream(instruction, temperature, top_p, top_k, max_new_tokens)
wrapped_text = textwrap.fill(response, width=100)
print(wrapped_text +'\n\n')
Colab またはローカル マシンがモデルを正常にデプロイし、コード内のパラメーターを調整して視点に応じてさまざまな動作を確認したら、モデルに対してさらに多くの命令を試すことができます。これまでのテストによると、テキストとコードの補完は十分に優れていますが、推論と数学は商用の命令タスクを実行できるほどまだ成熟していません。Mosaic の公式ブログから、彼らがこれらの微調整されたモデルにさらに多くのトレーニング データを入れようとしていることがわかります。
MPT-7B のベース モデル、微調整、データセット、トレーニング、推論はすべてオープンソースで商用フリーなので、手頃なコストで AI ビジネス向けに独自のプライベート モデルをトレーニングしてリリースすることを検討し始めることができます。
それでおしまい。
この記事で何か役に立つことがあれば幸いです。読んでいただきありがとうございます。
レベルアップコーディング
コミュニティにご参加いただきありがとうございます。出発する前に:
- ストーリーに拍手を送り、著者をフォローしてください
- 『レベルアップコーディング』出版物でさらにコンテンツを表示
- 無料コーディング面接コース ⇒コースを見る
- フォローしてください: Twitter | リンクトイン| ニュースレター