MPT-7B、商用利用可能な言語モデルの時代が到来

May 10 2023
オープンソース LLM の導入および開発ガイド — MPT-7B 全体モザイクは AI モデルに特化したスタートアップ企業であり、今回は同社が新たにリリースした MPT-7B モデル シリーズを紹介します。これらは完全にオープンソースであり、9 でトレーニングされた商用利用可能なモデルです。

オープンソース LLM — MPT-7B の導入および開発ガイド

Midjourney によって生成された画像

全体

モザイクは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モデルは初の商用モデルでもあり、商用利用に向けて独自のデータを基に自分たちで微調整することができます。

MPT-7B と LLaMA-7B のゼロショット精度と、学術課題に関する他のオープンソース モデルの比較 (Mosaic より)。

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 個になります。

65+K トークン入力の機能により、MPT はモデルの中でより優れたものになります

そのブログには、モザイク チームがかつて『華麗なるギャツビー』の書籍全体をプロンプトし、その後モデルが 67873 トークンの入力に基づいて適切なエピローグを正常に生成したことを示す印象的な例があります。これを実行できるクローズ モデルやオープン モデルを他に見たことがないため、将来的にコンテキスト内学習を行うには、OpenAI と Story-Writer モデルのどちらの方法がよりコスト効率が高いかを検討する必要があります。コンテキスト学習に興味がある場合は、以前の記事を参照してください。

トレーニング用のデータセット

MPT-7B-Instruct彼らはまた、短い形式の命令に従うモデルである70 億の命令モデルをトレーニングしました。これは、主に Databricks の Dolly-15K データセットの拡張によるオープンソース データセットのベース モードから微調整されています。その結果、より大規模な命令ベースのデータセットを取得し、商用利用可能なライセンスを保持します。記事でも触れましたが、Dolly 2.0 では、Dolly の商業的有用性を実現する主な要因は、ChatGPT などの他の AI モデルから生成されず、人間によって作成された純粋なライセンスフリーのデータセットです。そのため、実際に遊んで質問しても、「AI 言語モデルとしては…できない」といったよくある答えは得られません。ただし、これはビクーニャ モデルやコアラ モデルが使用しているほど大きなデータセットではなく、チームはこの指示モデルの競争力を高めるためにトレーニングを 1T データセットに拡張することを計画しています。

JSON変換タスクをモデルに指示する例

その他

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')

MPT-7B-Instruct からの応答

Colab またはローカル マシンがモデルを正常にデプロイし、コード内のパラメーターを調整して視点に応じてさまざまな動作を確認したら、モデルに対してさらに多くの命令を試すことができます。これまでのテストによると、テキストとコードの補完は十分に優れていますが、推論と数学は商用の命令タスクを実行できるほどまだ成熟していません。Mosaic の公式ブログから、彼らがこれらの微調整されたモデルにさらに多くのトレーニング データを入れようとしていることがわかります。

MPT-7B のベース モデル、微調整、データセット、トレーニング、推論はすべてオープンソースで商用フリーなので、手頃なコストで AI ビジネス向けに独自のプライベート モデルをトレーニングしてリリースすることを検討し始めることができます。

それでおしまい。

この記事で何か役に立つことがあれば幸いです。読んでいただきありがとうございます。

レベルアップコーディング

コミュニティにご参加いただきありがとうございます。出発する前に:

  • ストーリーに拍手を送り、著者をフォローしてください
  • 『レベルアップコーディング』出版物でさらにコンテンツを表示
  • 無料コーディング面接コース ⇒コースを見る
  • フォローしてください: Twitter | リンクトイン| ニュースレター