Qualiteg プロダクト開発部

Qualiteg プロダクト開発部
[ChatStream] キューイングシステムと同時処理制限

ChatStream Guide

[ChatStream] キューイングシステムと同時処理制限

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream のキューイングシステムについてご説明いたします! キューイングシステムとは ChatStream は多数同時アクセス要求が来たときに、 リクエストをキューイングし、同時に実行できる文章生成の数を制限することができます。 GPU や CPU の性能に応じて、文章生成処理の同時実行数を制限することで、良好な応答性能を得ることができます。 また同時実行数を超えるリクエストがあった場合はリクエストをキューイング(待ち行列に追加)し、 順次実行することで、負荷を適切にコントロールします。 同時実行とは 同時実行とは 1GPU で実行する場合には、正確には同時実行ではなく 並行実行(concurrent) となります。 同時実行数をセットすると、その数だけ 並行実行 されます。 たとえば、同時実行数の最大値が2に設定されている状態で、2人のユーザー1、ユーザー2 が同じタイミングにリクエストしてきた場合 2人のリクエストは 処理キュー (文章生成中をあらわす

By Qualiteg プロダクト開発部
[ChatStream] Web API エンドポイントの実装

ChatStream Guide

[ChatStream] Web API エンドポイントの実装

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream を FastAPI の Web API として実装する方法についてご説明いたします! エンドポイントの実装 /chat_stream という URL パスに、ストリーミングチャット用のWebエンドポイントをつくるには 以下のように handle_chat_stream_request を呼び出します。 これだけで、ユーザーからのリクエストは 文章生成の同時実行数を制御したストリーミングチャットの実装は完了です @app.post("/chat_stream") async def stream_api(request: Request): # handling FastAPI/Starlette's Request response = await chat_

By Qualiteg プロダクト開発部
[ChatStream] 生成と初期化

ChatStream Guide

[ChatStream] 生成と初期化

こんにちは (株)Qualiteg プロダクト開発本部です! 本稿では、 ChatStream の生成と初期化についてご説明いたします! ChatStream クラスは ChatStream パッケージのコアとなるクラスで、FastAPI/Starlette の Request を受け取り、 負荷制御をしながらストリーミングレスポンスをクライアントに送出する役割をもっています。 以下のように model,tokenizer,device, 最大同時処理数 num_of_concurrent_executions 、待ち行列の最大数 max_queue_size ,プロンプトクラス ChatPrompt を指定して初期化します tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16) model.

By Qualiteg プロダクト開発部
[ChatStream] HTTP セッションミドルウェアの設定

ChatStream Guide

[ChatStream] HTTP セッションミドルウェアの設定

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream に セッションミドルウェアをセットし、Webアプリケーションをステートフルにする方法についてご説明いたします! ChatStream では Qualiteg が開発した独自のセッションミドルウェアを使用しており、通常の Starlette 用のセッションミドルウェアよりも高い柔軟性を実現しています。(Java Servlet のセッション管理アプローチに近いです) セッションミドルウェア 開いたブラウザでWebチャットをするときにマルチラウンドの会話を成立するためには ChatPrompt(会話履歴) が複数ターンの会話のなかで更新されていく必要があります。 デフォルトでは、 ChatStream は HTTP セッションを使用してWebアプリケーションをステートフルにし、 ChatPrompt をブラウザが開いている間保持することができます。 HTTP セッションを使用するには、以下のように FastAPI のミドルウェアを登録します。 from fas

By Qualiteg プロダクト開発部
[ChatSream] モデルをロードする方法

ChatStream Guide

[ChatSream] モデルをロードする方法

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream に HuggingFaceモデルを読み込むときのアプローチについてご説明いたします HuggingFace モデルのロード モデルごとに指定された方法で HuggingFace モデルを読み込みます。 model_path = "togethercomputer/RedPajama-INCITE-Chat-3B-v1" device = "cuda" # "cuda" / "cpu" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16) model.to(device) こちらは、

By Qualiteg プロダクト開発部
[ChatStream] ChatPrompt の実装

ChatStream Guide

[ChatStream] ChatPrompt の実装

ChatPrompt とは こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatPrompt の具体的な実装方法をご紹介いたします! ChatPrompt とは、事前学習済言語モデル(以降、モデル)用のプロンプトを生成するためのクラスです。プロンプトクラスと呼びます。 たとえば、 redpajama-incite の場合は以下のようなプロンプトをつくり、モデルに入力します。 <human>: Who is Alan Turing <bot>: すると、モデルは続きの文章を生成し、以下を出力します。 <human>: Who is Alan Turing <bot>: He was a very honorable man.

By Qualiteg プロダクト開発部
[ChatStream] クイックスタート

ChatStream Guide

[ChatStream] クイックスタート

こんにちは! (株)Qualiteg プロダクト開発部 です! まだまだ暑いですね! 早速、昨日発表しました ChatStream をつかったリアルタイムストリーミングチャットサーバーを作ってみたいと思います。 パッケージのインストール 早速 ChatStream パッケージのインストールをしていきます pip install chatstream 必要パッケージのインストール pip install torch torchvision torchaudio pip install transformers pip install "uvicorn[standard]" gunicorn ChatStream サーバーの実装 今回は RedPajamaINCITE をLLMとしてつかったストリーミングチャットサーバーを実装します。 chatstream_server.py import torch from fastapi import FastAPI, Request from fastsession

By Qualiteg プロダクト開発部
[ChatStream] matsuo-lab/weblab-10b-instruction-sft用の ChatPrompt

ChatStream Guide

[ChatStream] matsuo-lab/weblab-10b-instruction-sft用の ChatPrompt

matsuo-lab/weblab-10b-instruction-sft 用の ChatPrompt クラスをリリースしました。 最新バージョンのChatStreamに取り込んでいますが、以下コードを使用することも可能です。 from chatstream import AbstractChatPrompt from chatstream.chat_prompt.prompt_ttl import PromptTTL class ChatPromptMatsuoLabJpGptNeoxInstSft(AbstractChatPrompt): def __init__(self): super().__init__() # Call the initialization of the base class self.set_system("以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。") self.set_requester("指示") self.

By Qualiteg プロダクト開発部