このブログ投稿では、MosaicML のChatGPT の競合である MPT-7B を独自の AWS SageMaker インスタンスで実行するプロセスを段階的に説明します。
ChatGPT の機能に興奮していますが、機密データを OpenAI に公開することに懸念がありますか?幸いなことに、独自のインフラストラクチャで実行できる代替手段があります。そのような代替手段の 1 つは、ChatGPT の競合製品である MosaicML の MPT-7b です。これについては、このブログ投稿で説明します。
最近Databricks に 13 億ドルで買収されたMosaicML は、ChatGPT の競合相手とされる MPT-7B モデルで ML コミュニティに波紋を広げています。その期待にもかかわらず、このモデルを実行するのは、ドキュメントが少なく、リソースが大量に必要なため、気が遠くなる可能性があります。ただし、Jupyter ノートブックの AWS SageMaker で MPT-7B を実行できます。この環境は初心者に優しく、迅速な反復に非常に柔軟な環境です。このセットアップにより、実稼働への移行を決定する前に、モデルの実現可能性とハードウェア要件をテストできます。
AWS SageMaker 上の Jupyter ノートブックで MPT-7B を実行すると、いくつかの利点があります。使用した分だけ支払い、使い終わったらオフにできるだけでなく、モデルを再ロードすることなくコードの一部を簡単に再実行できるため、反復開発中の時間を節約できます。でも気をつけてください!ノートブック インスタンスを停止するのを忘れると、料金がすぐに加算される可能性があります。
この方法は比較的便利ですが、考慮する必要がある考慮事項がいくつかあります。まず、モデルのロードには高性能 GPU であっても最大 20 分かかる場合があり、このプロセスには多少時間がかかります。また、ランニングコストは 1 時間あたり少なくとも 4 ドルかかるため、コストも考慮すべき要素です。 MPT-7B は少なくともp3.2xlargeインスタンスで実行する必要があります。これより小さいものは実現不可能と思われます。 SageMaker ではなく EC2 を選択した場合は、AWS にp3.2xlargeインスタンスの使用許可を求める必要があります。
次のセクションでは、独自の SageMaker jupyter ノートブックで MPT-7B モデルを実行する方法を段階的に説明します。
AWS コンソールを起動し、SageMaker を検索します。
左側のメニューから、 「ノートブック」->「ノートブック インスタンス」を選択します。
[ノートブック インスタンスの作成]ボタンをクリックします。
インスタンス名を指定します。インスタンス タイプm1.p3.2xlargeを選択します。残念ながら、 m1.p3.2xlargeと同じくらい強力なインスタンスが必要なようです。そうしないと、インスタンスがメモリ不足になったり、最も単純な質問に応答するのに過度に時間がかかったりする可能性があります。ただし、このインスタンスの料金は 1 時間あたり約 4 ドルかかるため、使用量を注意深く監視することが重要であることに注意してください。
テスト環境に特に機密データが含まれていない場合は、任意の S3 バケットへのアクセスを許可できます。それ以外の場合は、より明示的にする必要があります。
ノートブックは保留中ステータスになります。これはおそらく 10 分ほど続くでしょう:
それまでの間、AWS SageMaker インスタンスのプロビジョニングが完了した後にアップロードできるように、ノートブックをダウンロードします。
AWS SageMaker.ipynb の MPT-7Bにあるノートブックに移動し、ダウンロードします。
このノートブックには、2 つの主要なコード ブロックがあることがわかります。最初のブロックは MPT-7B トークナイザーとモデルをロードします。
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
トークナイザーは、モデルに送信された質問をエンコードし、モデルからの応答をデコードするために使用されます。さらに、後でそれを利用するようにモデルを構成できるように、GPU のデバイス仕様を取得します。
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb 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 stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
stopping_critera
の使用に注意してください。これは必要です。そうしないと、モデルが質問に答えた後でも、ただしゃべり始めるだけです。
さまざまなオプションを検討したい場合は、 「モデル生成パラメーター」を参照してください。
さて、このノートブックを SageMaker にアップロードしましょう。
この時点までに SageMaker ノートブック インスタンスのプロビジョニングが完了していることを願っています。完了したら、 「Open Jupyter」リンクをクリックします。
次に、画面の右上隅にある[アップロード]ボタンをクリックし、ダウンロードしたノートブックを選択します。
カーネルをconda_python3に設定します。
[セル] -> [すべて実行]を選択します。
砂時計のロゴがブラウザ タブに表示されます。
モデルがダウンロードされるまで約 10 分間待つ必要があります。
実行すると、 「核分裂と核融合の違いを説明してください」という質問に対する答えが表示されます。
モデルとトークナイザーは上記ですでにロードされているため、 ask_questionコード ブロックを変更し、 [実行]ボタンをクリックするだけで他の質問をすることができます。これにより、新しい質問をテストするたびに 10 分を費やす必要がなくなります。
モデルのテストが終了したら、すぐにノートブック インスタンスのリストに戻り、モデルを停止します。そうしないと、1 時間あたり 4 ドルがすぐに加算されてしまいます 💸
パフォーマンスの点では、私の予備テストによると、MPT-7B の結果は ChatGPT ほど良くない可能性があります。次のような質問にきちんと答えてくれます。
しかし、_ベリーズの首都はどこですか?_ のような質問では、かなりひどく失敗します。
現在、さらにデータを収集しており、フォローアップのブログ投稿で包括的な比較分析を行う予定です。その投稿では、実際の会話履歴を使用して、MPT-7B、MPT-30B、Falcon-40b、ChatGPT の質疑応答のパフォーマンスを比較します。
テストから本番環境に移行する準備ができたら、SageMaker には追加の利点、つまりモデルのエンドポイントを作成する機能が提供されます。 SageMaker を使用すると、エンドポイントへの要求に基づいて自動スケールし、リソースを最適化できます。
Jupyter ノートブックでの実行中にプロセスがフォークされてメモリ不足になりやすいことに注意してください。この問題が発生した場合は、カーネルをシャットダウンし、すべてのコマンドを再度実行してください。
このモデルを AWS 以外のプラットフォームで実行することに興味がある場合は、月額 9 ドルの Google Colab Pro も実行可能なオプションです。ただし、テストの結果、提供されたクレジットをわずか数時間以内に使い果たしたことがわかりました。 😳
直面する可能性のあるもう 1 つの課題は、CUDA バージョンの非互換性により SageMaker でTriton 最適化を利用できないことです。残念ながら、AWS の現在の P3 インスタンスには最新の CUDA バージョンが含まれていません。したがって、Triton 最適化を利用したい場合は、コマンドライン アクセスで EC2 コンテナを作成する必要があります。ただし、8 つの VCPU でインスタンスを実行するには、AWS サポートからの特別な許可も必要になることに注意することが重要です。今後の投稿では、Triton を統合し、 Lambda Labsなどのよりコスト効率の高い GPU クラウド プロバイダーを利用する方法に関する詳細なガイドを提供する予定です。
MosaicML の MPT-7B は、OpenAI の ChatGPT に代わる実行可能な代替手段を提供しますが、独自の課題も抱えています。モデルの実行には時間と費用がかかり、利用可能なドキュメントも不足しています。ただし、モデルを社内に保持し、データが OpenAI に公開されないように保護できる機能は、特定のユースケースでは魅力的な場合があります。
SageMaker は、モデルを迅速にテストするための非常に便利な機能を提供し、準備ができたら実稼働環境に移行する柔軟性を提供します。 MPT-7B を使い始めたばかりの場合でも、しばらく使用している場合でも、このガイドが貴重な洞察を提供することを願っています。
次回のブログ投稿にご期待ください。MPT-7B、MPT-30B、Falcon-40b、ChatGPT のパフォーマンス比較をさらに詳しく説明します。
MPT-7Bまたはそのより大きなバリエーションであるMPT-30Bについて詳しく知りたい場合は、次のリンクを参照してください。
ChatGPT と MPT-7B のどちらを使用しているかに関係なく、重要なのは、データのプライバシーと費用対効果を損なうことなくユースケースを確実に提供することであることを覚えておいてください。楽しくいじくりましょう!
MindfulDataAI.comでは、企業向けに ChatGPT を提供しています。 ChatGPT、MPT、またはその他のモデルを会社のデータで活用することに興味がある場合は、お問い合わせください。