Qualiteg プロダクト開発部

Qualiteg プロダクト開発部
ChatStream🄬でLlama-3-Elyza-JP-8B を動かす

ChatStream

ChatStream🄬でLlama-3-Elyza-JP-8B を動かす

こんにちは、本日は Llama-3-Elyza-JP-8B を使ってみました。 昨日 2024年6月26日に発表(https://prtimes.jp/main/html/rd/p/000000046.000047565.html)された Llama-3-Elyza-JP-8B は 70B 版では「GPT-4」を上回る性能の日本語LLMといわれています。 今回、当社でも Playground 環境に Llama-3-Elyza-JP-8B を搭載して試してみましたのでご紹介します。 70B(700億パラメータ)版は GPT-4 を上回るとのことですので、8B(80億パラメータ)版はGPT-3.5 と比較してみることにいたしました。 (性能比較は https://note.com/elyza/n/n360b6084fdbd の記事に詳しく書いてあります。) AWQ量子化版を使用してみる 今回は、A4000

By Qualiteg プロダクト開発部
AttributeError: module 'torch._dynamo' has no attribute 'mark_static_address' が発生したときの対処法

日々の開発Tips

AttributeError: module 'torch._dynamo' has no attribute 'mark_static_address' が発生したときの対処法

以下のようなエラーが出た場合の対処法 File "/venv/Lib/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/venv/Lib/site-packages/transformers/generation/utils.py", line 1744, in generate model_kwargs["past_key_values"] = self._get_cache( ^^^^^^^^^^^^^^^^ File "/venv/Lib/site-packages/transformers/

By Qualiteg プロダクト開発部
[ChatStream] 同時リクエスト時の推論速度を手軽に計測する

[ChatStream] 同時リクエスト時の推論速度を手軽に計測する

こんにちは、Qualitegプロダクト開発部です。 今回は RakutenAI-7B-Chat に5人同時リクエストしたときのパフォーマンスをお手軽に計測してみました。 実験環境 * GPU: A5000 * LLM: RakutenAI-7B-Chat AWQ-8 * 推論環境: ChatStream v0.7.2 * 同時リクエスト数: 5 動画のほうがわかりやすいとおもいますので、実際の実験の様子はこちらの動画をつくりました。ご覧くださいませ 動画にもありますように、ChatStreamUIのマルチタスク機能を有効にすると、同一画面内に複数のチャットウィンドウを開くことができます。 マルチタスク機能は、複数のLLMを連携させて業務をすすめていく為の機能ですが、今回は、この特長を利用して、同じモデルに対して同時に生成リクエストを投げる用途で使ってみました。以前も、この機能をつかった簡易計測をご紹介したのですが、今回は、入力プロンプトの同期機能を使用したので、より簡単に実施できました。 (1つのテキストボックスに入力プロンプトを入力すると、他のテキストボック

By Qualiteg プロダクト開発部
LLMサンプリングにおける3つのペナルティ

ChatStream Guide

LLMサンプリングにおける3つのペナルティ

[付録]ペナルティの比較 ペナルティタイプ 目的 適用方法 ペナルティの例 Repetition Penalty 特定のトークンやフレーズが繰り返されるのを防ぐ。 過去に生成されたすべてのトークンのログ確率(logits)に対してペナルティを適用する。 例えば、あるトークンがすでに生成された場合、そのトークンのログ確率をペナルティ値で割る(乗算)か、ペナルティ値を引く(減算)。 Frequency Penalty 生成されたトークンの出現頻度に基づいてペナルティを適用し、頻繁に出現するトークンを抑制する。 各トークンが生成された回数に基づいてペナルティを適用する。トークンが出現するたびに、そのトークンの出現確率を低減させる。 トークンが出現するたびに、そのトークンのログ確率をペナルティ値で累積的に割る(乗算)か、ペナルティ値を累積的に引く(減算)。 Presence Penalty すでに生成されたトークンが再度出現するのを防ぐ。 トークンが一度でも生成されたかどうかに基づいてペナルティを適用する。一度生成されたトークンには再出現の際にペナルティが適用さ

By Qualiteg プロダクト開発部
TensorRT-LLM v 0.11.0.dev2024051400 の動作確認

日々の開発Tips

TensorRT-LLM v 0.11.0.dev2024051400 の動作確認

こんにちは、株式会社 Qualiteg プロダクト開発部です! TensorRT-LLM は FasterTransformerの後継ともいえるNVIDIA製 推論エンジンで、当社ChatStreamの推論エンジンとしても選択可能です。 vLLMと同じく新しいモデル対応が早く、既存モデルも豊富にサポートされています。 昨日 大型コミットが入りましたので動作確認をしました。(マルチモーダルモデルNeva,Kosmos2に対応など。) TensorRT-LLM のサポートしている、モデルアーキテクチャは以下のとおりです。 LLM Baichuan, BART, BERT, Blip2, BLOOM, ChatGLM, DBRX, FairSeq NMT, Falcon, Flan-T5, Gemma, GPT, GPT-J, GPT-Nemo, GPT-NeoX, InternLM, LLaMA, LLaMA-v2, Mamba, mBART, Mistral, MPT, mT5, OPT, Phi-1.5/Phi-2, Qwen, Qwen-VL, Replit

By Qualiteg プロダクト開発部
【2024/5/14更新】LLM 推論 API 料金と推論速度

IT & AIテクノロジー

【2024/5/14更新】LLM 推論 API 料金と推論速度

LLM を API から利用するときに従量課金される料金と生成速度一覧まとめました。順次更新予定です。 【API 料金】 は 100万トークンあたりのアウトプット側 利用料を表示しています。 【生成速度】 は1秒間に何トークン生成できるかを示す " tokens/s"( tokens per second )で表示します。 (生成速度は入出力プロンプトの量・内容によって変動しますので、あくまで参考情報として表示しています) OpenAI GPT シリーズ * OpenAI GPTシリーズ * gpt-4o、100万トークンあたり $15.00 (約2250円)、 70 tokens/s * gpt-4-turbo-2024-04-09: 100万トークンあたり $30.00 (約4500円)、 45 tokens/s * gpt-3.5-turbo-0125: 100万トークンあたり $1.5

By Qualiteg プロダクト開発部, Qualiteg ビジネス開発本部 | マーケティング部
[ChatStream] 入出力プロンプトの予期せぬ変更に備え revision は固定する

日々の開発Tips

[ChatStream] 入出力プロンプトの予期せぬ変更に備え revision は固定する

こんにちは。(株) Qualiteg プロダクト開発部です。 GW中に、microsoft/Phi-3-mini-128k-instruct の tokenizer.json が変更になり、プロンプトのパースに失敗し、チャットのストリーミングができなくなる問題が発生しました。 実際には以下の変更がありました https://huggingface.co/microsoft/Phi-3-mini-128k-instruct/commit/8a362e755d2faf8cec2bf98850ce2216023d178a もともと、Miscrosoft さんが書いていた記事にあるプロンプトフォーマットと実際のモデルのプロンプトフォーマットが異なっていたため、当社では、実際のモデルにあわせるヒューリスティックな対応をしておりましたが、モデル(\w tokenizer) 側がもとの仕様に近い形に修正してきた模様です。 これによって、当初動作していたプロンプト変換器が動作しなくなるという現象が発生しました。 LLM は「スピードが命!」なので、トークナイザー含め完全にテストされた状態

By Qualiteg プロダクト開発部
WSL-Ubuntu で bitsandbytes のインストールに失敗するとき

日々の開発Tips

WSL-Ubuntu で bitsandbytes のインストールに失敗するとき

bitsandbytes を pip install しようとしたときに、以下のようなエラーがでたときの対処方法です Could not load bitsandbytes native library: libcusparse.so.11: cannot open shared object file: No such file or directory Traceback (most recent call last): File "/home/mlu/.virtualenvs/ChatStream/lib/python3.10/site-packages/bitsandbytes/cextension.py", line 109, in <module>

By Qualiteg プロダクト開発部
LLM サービング効率化の為のPagedAttention

ChatStream Guide

LLM サービング効率化の為のPagedAttention

こんにちは、株式会社Qualitegプロダクト開発部です。 今日は 商用LLM サービングに欠かせない PagedAttention 技術をご紹介します はじめに PagedAttention は当社にとって非常に重要な技術です PagedAttentionを活用するとLLMでの文章生成において GPUメモリの利用効率をあげ 、そのぶん単位GPUあたりの同時に捌けるリクエストを増やすことができます。 当社は「ChatStream」という商用のLLMサービングプラットフォームを開発・提供しているため、多ユーザーからの同時リクエストによる高負荷環境でのLLMサービング(文章生成の提供)は、ドドド真ん中の課題ということになります。 PagedAttention登場以前の従来の並列生成はKVキャッシュとよばれる”リクエストごとに発生する大きなGPUメモリ消費”との戦いでした。 (KVキャッシュは transfomerのmodelを生で叩くときに past_key_values として登場します) つまりモデルのパラメータとは別に発生する推論時のメモリ消費です。 これが同時に

By Qualiteg プロダクト開発部

日々の開発Tips

"triu_tril_cuda_template" not implemented for 'BFloat16' が発生する現象と対処法

モデル読み込みで torch_dtype=torch.bfloat16 を指定したとき "triu_tril_cuda_template" not implemented for 'BFloat16' が発生する場合の対処法です 以下は llama3 で発生したときのログです。 File "/home/mlu/.virtualenvs/ChatStream/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1501, in _call_impl return forward_call(*args, **kwargs) File "

By Qualiteg プロダクト開発部
[ChatStream] meta-llama/Meta-Llama-3-8B-Instruct 用の ChatPromptクラス

ChatStream Guide

[ChatStream] meta-llama/Meta-Llama-3-8B-Instruct 用の ChatPromptクラス

昨日(2024/4/19) に発表になった Llama3 用の ChatPrompt クラス※をご紹介します。 from chatstream import AbstractChatPrompt SYSTEM_PROMPT = """\ You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal

By Qualiteg プロダクト開発部

日々の開発Tips

Python 3.12 で PyTorch のインストールに失敗するときの対処法

こんにちは。Qualiteg プロダクト開発部です。 概要 * ChatStream に必要な PyTorch のインストールですが、 Python 3.12 だとうまくいかないという報告があります * Python 3.11 までならインストールはうまくいきました エラーメッセージ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 とすると、以下のようなエラーがでる ERROR: Could not find a version that satisfies the requirement torch (from versions: none) ERROR: No matching distribution found

By Qualiteg プロダクト開発部
RakutenAI-7B-chat を使用したチャットアプリケーションを5分で作る

ChatStream Guide

RakutenAI-7B-chat を使用したチャットアプリケーションを5分で作る

こんにちは、株式会社 Qualiteg プロダクト開発部です。 今日は、 RakutenAI-7B-chat と ChatStream 0.7.0 を使用して本格的なチャットアプリケーションを作っていきましょう。 RakutenAI-7B-chat は Mistral 7B を日本語継続学習させたモデルで、チャットチューニングが行われており、 日本語LLM リーダーボード https://wandb.ai/wandb-japan/llm-leaderboard/reports/Nejumi-LLM-Neo--Vmlldzo2MTkyMTU0でも上位にランクされている期待大のモデルです。 ソースコード 早速ですが、以下がソースコードとなります。 4bit 量子化をしているため、使用する GPU は A4000 (16GB) 程度で快適に動作します。 import logging import torch import uvicorn from fastapi import FastAPI from transformers

By Qualiteg プロダクト開発部
[ChatStream] Rakuten/RakutenAI-7B-chat用の ChatPrompt

ChatStream Guide

[ChatStream] Rakuten/RakutenAI-7B-chat用の ChatPrompt

昨日発表された Rakuten/RakutenAI-7B-chat 用の ChatPrompt をご紹介します from chatstream import AbstractChatPrompt SYSTEM_PROMPT = """\ A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. \ """ class ChatPromptRakutenMistral(AbstractChatPrompt): def __init__(self): super(

By Qualiteg プロダクト開発部
LLMのデータファイルを無圧縮ZIPにする

日々の開発Tips

LLMのデータファイルを無圧縮ZIPにする

LLMサービスをつくっていると、1回ダウンロードしたLLMを別のサーバーに移動するということをよくやります。 (同一構成のサーバーで同じLLMモデルつかいたいときは、たとえば、HuggingFaceから再度ダウンロードするより早いので) このときフォルダのままだと移動しづらいとき ZIP に圧縮します。 無圧縮だと、GB単位でも結構高速に圧縮できます。 ZIP のインストール sudo apt install zip -y 無圧縮ZIPの作成 対象の LLM ディレクトリを指定して、以下のコマンドを実行 たとえば、LLMディレクトリが /mnt/d/RakutenAI-7B-chat-awq のとき、 cd /mnt/c/RakutenAI-7B-chat-awq zip -r -0 /mnt/c/RakutenAI-7B-chat-awq.zip . コマンド詳細 * cd /mnt/c/RakutenAI-7B-chat-awq: 圧縮するフォルダに移動します。 * zip: zipコマンドの実行 * -r: フォルダ内のファイルやサブフォルダを再帰的

By Qualiteg プロダクト開発部
逐次生成されるトークンのバッファリング

日々の開発Tips

逐次生成されるトークンのバッファリング

こんにちは! (株)Qualiteg プロダクト開発部 です! 今日は、推論シーンでよくある、トークン細切れ問題に対処する方法をご紹介します。 ストリーミングチャットで使用する逐次生成のとき、文章は1トークンずつ生成されますが、1トークンは”単語単位”でもなければ”1文字”単位でもなく、学習時使われていたトークナイザーの処理に依存します。 一般的には 形態素解析→サブワード→語彙リスト構築 を行いますが、このとき、後で文章生成するときに重要なタグ、たとえば "<NL>" というタグが重要な意味をもつにもかかわらず、細切れにされてトークナイズされてしまうことがあります。たとえば、 "<" "N" "L>" のように粉砕されてしまうようなパターンです。 (これを避ける方法はあるのですが、今回は、学習済のモデルをあからじめ与えられた状態でどうするか、を考えます) こういうパターンが発生してしまったとき逐次生成で "

By Qualiteg プロダクト開発部