Qualiteg プロダクト開発部

Qualiteg プロダクト開発部
MagicAnimate を試す

非LLM生成AI

MagicAnimate を試す

Magic Animate は画像の動画化をしてくれるオープンソースです 今回は、Windows版をつかってやってみます 実験環境は Core i7 + 64GB Ram + RTX 3090 です インストールに約30分、ストレージ容量として32GB 程度消費しますのでご注意ください。 作業ディレクトリの作成 d:/ にai_experiment というディレクトリをつくり、その下で作業してみます PowerShellを開いて、以下実行します d: mkdir ai_experiment 実行結果 Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. PS D:\> mkdir ai_experiment ディレクトリ: D:\ Mode LastWriteTime Length Name

By Qualiteg プロダクト開発部
[ChatStream] lightblue/karasu-7B-chat-plus 用 ChatPrompt

ChatStream Guide

[ChatStream] lightblue/karasu-7B-chat-plus 用 ChatPrompt

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では lightblue/karasu-7B-chat-plus 用の ChatPrompt をご紹介します。 旧バージョンの ChatStream をご利用のお客様は本ChatPromptをインポートすることで利用可能となります。(最新の配信バージョンではバンドルされております) from chatstream import AbstractChatPrompt from chatstream.chat_prompt.role_type import RoleType SYSTEM_PROMPT = """\ あなたはAIアシスタントです。\ """ class ChatPromptLightblueKarasuChatPlus(AbstractChatPrompt): def __init__(self): super().__init__() # Call the initialization of the base

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

ChatStream Guide

[ChatStream] Llama2 対応の ChatPrompt実装

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream にLlama2 対応の ChatPrompt を同梱いたしましたのでご紹介いたします! 現在の ChatPrompt は以下とおりとなっております。旧バージョンのChatStreamをご利用の場合も、以下コードにて Llama2対応可能です。(もちろん最新バージョンのChatStreamには同梱済です) from chatstream import AbstractChatPrompt from chatstream.chat_prompt.role_type import RoleType SYSTEM_PROMPT = """\ You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while

By Qualiteg プロダクト開発部
[ChatStream] rinna/nekomata-14b-instruction 用の ChatPromptクラス

ChatStream Guide

[ChatStream] rinna/nekomata-14b-instruction 用の ChatPromptクラス

2023/12/21 に発表された rinna/nekomata-14b-instruction 用の ChatPrompt をご紹介します nekomataシリーズは Qwen をベースモデルしているおり、語彙サイズが 15.2万とこれまでより大幅に大きいため、日本語対応にもおおいに期待できそうですね 今回はInstructionチューニングされたモデルをChatStreamのチャットモードで利用するためのChatPromptを作りました。 設計思想としましては、あるタスクとChatPrompt を対応させる、という考え方です。簡単にいうと、1つのChatPromptは1つの仕事に特化させる、というところでしょうか。 たとえば、今回は、「翻訳」というタスクに特化した ChatPrompt の例です。 これにより 翻訳 というタスクに対して、 「入力」と「出力」というをチャットインタフェースを通して行います。 from chatstream import AbstractChatPrompt from chatstream.chat_prompt.prompt_ttl im

By Qualiteg プロダクト開発部
[ChatStream] 時間のかかるモデル読み込みにプログレスバーをつける

ChatStream Guide

[ChatStream] 時間のかかるモデル読み込みにプログレスバーをつける

こんにちは (株)Qualiteg プロダクト開発本部です! HuggingFace の LLMのモデル読み込み時間ってとても長いですよね、そんなときに、便利なツールをご紹介します。 HuggingFace の LLM モデルはダウンロードするときは、進捗がでるのですが、ひとたびダウンロードしたあとは、読み込むまで短くて数分、長くて数十分待たされます。これはディスクからモデルデータ(weights and bias)を処理しながらGPUのVRAMに読み込む処理に時間がかかるのですが、その読み込み状態がいったいいまどのくらいなのか、これがわからず、ヤキモキしたことは無いでしょうか。 そこでは ChatStreamの便利機能として、以下のように、このモデル読み込み時間のプログレス表示をすることができます。 仕掛けはいたってシンプルで、初回の読み込み実行時に処理時間を計測しておき、2回目、また同じ処理が呼ばれたときはプログレスバーを表示します。 使い方も簡単で、モデルの読み込みを LoadTime でラップするだけで、プログレスバーつきで読み込むことができます Before

By Qualiteg プロダクト開発部
[ChatStream] Transformer応答をモックする Transformer Mock

ChatStream Guide

[ChatStream] Transformer応答をモックする Transformer Mock

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、モックデータの作成方法について説明します! これは正式には「Transformer Mock」と呼ばれている機能のためのもので、実際のLLM出力をレコーディングして再現するためのものです。 なぜこんなことが必要かというと、 LLM アプリのテスト(単体テストなど)で使用します。LLMアプリのテストをするとき、古典的な単体テストでは、入力に対して期待する出力は固定されていることが前提です。 ところがLLMはその特性上、同一の入力に対しても毎回異なる応答を返してきます。そこが生成AIの良いところですが古典的な単体テストをするときには悩んでしまいます。 ここで賢い読者の皆様は、同一の入力に対して、同一の出力を得たいなら、シードを固定すればいいじゃん。とお考えの方もいらっしゃるとおもいますが、シード値を固定して、入力を固定して、各種サンプリングパラメータを固定しても GPUの種類が異なると異なる出力を出してしまう、ということがわかっています。 これでは、GPUを変更したとたんに単体テストが通らなくなって困ってし

By Qualiteg プロダクト開発部
[ChatStream] LLMの読み込みが長いときは Generator Mock レスポンス

ChatStream Guide

[ChatStream] LLMの読み込みが長いときは Generator Mock レスポンス

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、LLMの読み込みに時間がかかるときに使えるテクニックについてご紹介いたします。 テスト用途や、ChatStream の API をつかったサンプルアプリを実装したいときに、何度か ChatStream を再起動しては、試してみたいというシーンがあります。そういうときに、本来は LLM として読み込まなくても、ChatStreamのAPIにそった”決まり切った”レスポンスで問題がないという場合があります。 このとき、サイズの小さなLLMを読んで読み込み時間を短縮するというワザもあるのですが、そもそも、固定的なレスポンスを返してくれればそれでOKという場合は、 Mockレスポンス を指定することができます。 再起動のたびに、 LLM を読み込む時間にストレスを感じていた方はぜひこちらをお試しくださいませ! Generator Mockレスポンスの利用(高速起動) Generator Mockレスポンスを使用すると読み込みに時間のかかる事前学習済言語モデルのかわりに、ダミーの文章を生成させることがで

By Qualiteg プロダクト開発部
[ChatStream] コンソールチャットの作成

ChatStream Guide

[ChatStream] コンソールチャットの作成

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream を使って、コンソールチャットを作成する方法について説明いたします! handle_console_input メソッドを使用することで CLI ベースのチャットを簡単に作成しモデルを試すことができます chat.py import asyncio import torch from transformers import AutoTokenizer, AutoModelForCausalLM from chatstream import ChatStream, ChatPromptTogetherRedPajamaINCITEChat as ChatPrompt, LoadTime model_path = "togethercomputer/RedPajama-INCITE-Chat-3B-v1" device = "cuda" # "cuda" / "cpu"

By Qualiteg プロダクト開発部
[ChatStream] Web サーバー(ASGI server) の起動

ChatStream Guide

[ChatStream] Web サーバー(ASGI server) の起動

こんにちは! (株)Qualiteg プロダクト開発部 です! 本稿では、 ChatStream 搭載した Webサーバーの起動方法について説明いたします! uvicorn(内部起動) ChatStreamは FastAPI/Starlette に対応しているため、 ASGI サーバーで動作させることができます。 uvicorn をコード内で定義するには以下のように実装します def start_server(): uvicorn.run(app, host='localhost', port=9999) def main(): start_server() if __name__ == "__main__": main() ソースコード全体 import torch import uvicorn from fastapi import FastAPI,

By 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 プロダクト開発部