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

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

こんにちは! (株)Qualiteg プロダクト開発部 です!
本稿では、 ChatStream のキューイングシステムについてご説明いたします!

キューイングシステムとは

ChatStream は多数同時アクセス要求が来たときに、
リクエストをキューイングし、同時に実行できる文章生成の数を制限することができます。

GPU や CPU の性能に応じて、文章生成処理の同時実行数を制限することで、良好な応答性能を得ることができます。

また同時実行数を超えるリクエストがあった場合はリクエストをキューイング(待ち行列に追加)し、
順次実行することで、負荷を適切にコントロールします。

同時実行とは

同時実行とは 1GPU で実行する場合には、正確には同時実行ではなく 並行実行(concurrent) となります。

同時実行数をセットすると、その数だけ 並行実行 されます。

たとえば、同時実行数の最大値が2に設定されている状態で、2人のユーザー1、ユーザー2 が同じタイミングにリクエストしてきた場合
2人のリクエストは 処理キュー (文章生成中をあらわすキュー)に入り1トークンごとに交互に文章を生成 します。
例えば日本語のモデルの場合、1トークンはほぼ1文字に相当しますので、ユーザー1向けの文章に1文字追加したらユーザー2向けの文章に1文字追加します。
これを文章生成が終わるまで繰り返します。

ユーザー3が途中で割り込んできた場合、まだユーザー1とユーザー2の文章は生成されている途中ですので、ユーザーCのリクエストは リクエストキュー (処理待ち行列) に入ります。

ユーザー1またはユーザー2の文章生成が終了すると、 リクエストキュー に入っているユーザー3のリクエストが 処理キュー に入り、
文章生成処理が開始されます。

コラム: 非同期I/O と並行実行

FastAPIは非同期I/Oをサポートしており、これは複数のリクエストを並行に処理する能力があります。
Pythonの非同期I/Oは、コルーチンと呼ばれる特殊な関数を使用して並行性を実現しています。
この場合の並行性とは、一度に一つのタスクだけが進行するが、I/O操作(HTTPリクエスト、モデルからのトークンの生成など)を待つ間に他のタスクを進行させることができる
ということです。この形式を"協調的マルチタスク"を呼びます。
それぞれのリクエストは別の「非同期タスク」として処理され、これらのタスクは同じスレッド上で切り替えられます。
「非同期タスク」においては複数のリクエストに対するモデルへのアクセスが並行しているように見えますが
実際にはある瞬間に一つのリクエストだけがモデルを利用しています
そのため、それぞれのリクエストが モデルによるトークン生成のためにブロックする期間は限られており、
逐次出力トークンの生成について言えば、1つ新トークンを生成した後で他のリクエストに制御を戻すことができます
そのため、一つのリクエストによる文章生成の際、停止トークン、停止文字列が現れるまでの間、
他の全てのリクエストがブロックされることはなく、各リクエストはモデルからのトークンを逐次生成しながら、
他のリクエストも進行させることができます

キューイングの開始

Web アプリケーションの起動時に start_queue_worker を呼ぶことで、キューワーカーを開始できます

キューワーカーを開始すると、リクエスト処理キューが開始され、リクエストをリクエストキューに挿入し、処理キューへと順次実行していくキューイングループが開始されます

chatstream#start_queue_worker


Read more

GPUサーバーの最適容量計算: キューイング理論と実践的モデル

GPUサーバーの最適容量計算: キューイング理論と実践的モデル

最大ユーザーサポート数計算ツール 同時に1件のみ処理できるGPU変換サーバーの最大ユーザーサポート数を計算します 処理時間 (t_p) 分/件 1件の変換処理にかかる時間 目標システム利用率 (ρ) 0 〜 1 安定稼働のための目標稼働率(推奨: 0.7〜0.8) ピーク係数 (P_c) 倍 最も混雑する時間帯の平均アクセス倍率 稼働時間 (H) 時間/日 システムが1日に稼働している総時間 アクセス確率 (P_a) 0 〜 1 1人のユーザーが1日にシステムを利用する確率 1ユーザーあたりの変換回数 (F) 回/日 利用する日の平均変換処理回数 計算過程を表示 計算結果 サポート可能な総ユーザー数: 人 計算式: N = (ρ × μ × H) ÷ (P_a

By Qualiteg プロダクト開発部
PyTorch 2.6 のセキュリティ: モデルチェックポイントロードの安全対策

PyTorch 2.6 のセキュリティ: モデルチェックポイントロードの安全対策

こんにちは! 今日は、魅力的なPyTorchチェックポイントが配られているからと言って無邪気に使っちゃうと、超ヤバイよ、というお話になります。 みなさまモデルチェックポイントをロードする際のセキュリティリスクについて考えたことはありますでしょうか。実はモデルの重みファイルだとばかり思っていたチェックポイントが、思わぬセキュリティホールになる可能性があります。 本記事では、PyTorchのtorch.load関数の安全性と、モデルチェックポイントを適切に扱うための実践的なガイドラインを紹介します。 モデルチェックポイントの隠れた危険性 PyTorchのtorch.load関数は非常に便利な一方で、セキュリティ上の重大なリスクを含んでいます。 その理由は、 * チェックポイント単なるパラメータだけではないよ! チェックポイントファイルには、モデルの重み(weights)だけでなく、クラスや関数など任意のPythonコードを含めることが可能です。 * 実行可能なコードが入ってるよ! これは、チェックポイントが単なる「データファイル」ではなく、Pytho

By Qualiteg プロダクト開発部
[AI新規事業創出]Qualitegオリジナル、アイデア評価、事業アイデア選定方法

[AI新規事業創出]Qualitegオリジナル、アイデア評価、事業アイデア選定方法

Qualiteg blogを訪問してくださった皆様、こんにちは。Micheleです。AIを活用した新規事業やマーケティングを手がけている私には、クライアントからよく寄せられる質問があります。AIを用いた事業展開を検討されている方々が共通して直面するであろう課題に対して、このブログを通じて私なりの解答をご提供したいと思います。 AIを活用した事業アイデア評価と選定方法 | Qualitegオリジナルアプローチ 新規事業の立ち上げは、アイデアの創出から始まりますが、その後の評価と選定プロセスこそが成功の鍵を握ります。Qualitegでは、AIを積極的に活用した独自の評価・選定メソッドを開発し、より客観的かつ多角的な視点でビジネスアイデアを検証しています。今回は、私たちの実践的なアプローチをご紹介します。 AIを活用したアイデア評価の基本フレームワーク 当社のアイデア評価プロセスは、以下の2段階で構成しております。 1. 多次元評価マトリックスによる定量分析 まず、出てきたアイデアについて、ChatGPTなどの大規模言語モデル(LLM)を活用し、以下の8つの評価軸でアイデア

By Join us, Michele on Qualiteg's adventure to innovation
Windows Terminal で「無効な "icon" を持つプロファイルが見つかりました。既定では、そのプロファイルにアイコンはありません。」が出たときの対処法

Windows Terminal で「無効な "icon" を持つプロファイルが見つかりました。既定では、そのプロファイルにアイコンはありません。」が出たときの対処法

何度か、WSL にいろんなバージョンのLinux を入れたり消したりしたときに遭遇した現象です ユーザー設定の読み込み中にエラーが発生しました 無効な "icon" を持つプロファイルが見つかりました。既定では、そのプロファイルにアイコンはありません。"icon" を設定するときは、値が画像への有効なファイルパスとなっていることをご確認ください。 が発生するときの原因と対象法のレポートです 原因 使われなくなったゾンビ・プロファイルがWindows Terminal (のキャッシュ)に残り続ける 対処法 このメッセージを解消するには、いったん、プロファイルをリセットする必要がありました。 ※既存プロファイル設定が消える場合があるので留意すること Step1 Windows Terminal を落とす Windows Terminal をいったんすべて落とす Step2 settings.json を消す エクスプローラーで settings.json のあるフォルダに移動しファイルを削除する %LOCALAPPDATA%\Packages\Micros

By Qualiteg プロダクト開発部