Youri 7BをFastChatでChatGPT互換APIサーバとして動かして遊ぶ


# はじめに

Youri 7BをChatGPT互換API(openai chat completions api互換)サーバとして動かした時のメモ。
今回の記事は、以下の前回の記事の補足的扱い（細かな解説はこの記事では省略）

https://qiita.com/takaaki_inada/items/a918ca6984e832bc9741

以下をChatVRMでYouri 7Bで動かせる状態がこの記事の目標。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">youri-7b-chatをfastchatでChatGPT互換APIでホストしてChatVRMでサクッと遊ぼう。prompt engineeringが効くのでsystem prompt設定画面で語尾やキャラクター設定できます。fastchatでホストする方法は前回投稿記事どうぞ(宣伝?) <a href="https://twitter.com/hashtag/%E3%81%9A%E3%82%93%E3%81%A0%E3%82%82%E3%82%93?src=hash&amp;ref_src=twsrc%5Etfw">#ずんだもん</a> <a href="https://twitter.com/hashtag/rinna?src=hash&amp;ref_src=twsrc%5Etfw">#rinna</a> <a href="https://t.co/yFxhmg15Rz">pic.twitter.com/yFxhmg15Rz</a></p>&mdash; inada (@dev_inada) <a href="https://twitter.com/dev_inada/status/1719342729174651135?ref_src=twsrc%5Etfw">October 31, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# Youri 7Bとは

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">rinnaはLlama 2の日本語継続事前学習モデル「Youri 7B」シリーズを公開しました。<br>①Youri 7B：日英40Bトークンで継続事前学習<br>②Youri 7B Instruction：高いベンチマークスコア<br>③Youri 7B Chat：複数ターンの対話に強い<br>GPTQ 4bit 量子化モデルも公開しています。 <br>詳細↓ <a href="https://t.co/J5ghGq7Kme">https://t.co/J5ghGq7Kme</a> <a href="https://t.co/PfkWRVjRVw">pic.twitter.com/PfkWRVjRVw</a></p>&mdash; rinna Research (@rinna_research) <a href="https://twitter.com/rinna_research/status/1719167671114358892?ref_src=twsrc%5Etfw">October 31, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

[rinna、Llama 2の日本語継続事前学習モデル「Youri 7B」を公開｜rinna株式会社](https://rinna.co.jp/news/2023/10/20231031.html)

待望のrinna様の最新LLMモデルです！待っておりました！

# 動作確認環境
Ubuntu 20.04
python 3.10.8
CUDA 11.8
GPURAM使用量は10G程

# 修正点

## FastChat

https://github.com/lm-sys/FastChat

```
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
git checkout cbf285360e8e809a316c88a8377c1bb0f0c770bc
```

fastchat/conversation.py
```
register_conv_template(
    Conversation(
        name="youri",
        system_template="設定: {system_message}",
        roles=("ユーザー", "システム"),
        sep_style=SeparatorStyle.ADD_COLON_SPACE_SINGLE,
        sep="\n",
        stop_str="ユーザー:",
    )
)
```
どこかに上記コードを追加

fastchat/model/model_adapter.py
```
class YouriAdapter(BaseModelAdapter):
    """The model adapter for rinna/youri-7B"""

    def match(self, model_path: str):
        return "youri-7b" in model_path.lower()

    def get_default_conv_template(self, model_path: str) -> Conversation:
        return get_conv_template("youri")
```

```
register_model_adapter(YouriAdapter)
```
どこかに上記コードを追加

### FastChat起動

```
export PYTHONPATH=${FastChatをcloneしたディレクトリのルートディレクトリ}:$PYTHONPATH
python3 -m fastchat.serve.controller
python3 -m fastchat.serve.model_worker --model-path rinna/youri-7b-chat --load-8bit
python3 -m fastchat.serve.openai_api_server --host localhost --port 8000
```

## ChatVRM

https://github.com/pixiv/ChatVRM

40行目あたりからを以下に書き換え
src/features/chat/openAiChat.ts
```
export async function getChatResponseStream(
...中略...
  const res = await fetch("http://127.0.0.1:8000/v1/chat/completions", {
    headers: headers,
    method: "POST",
    body: JSON.stringify({
      model: "youri-7b-chat",
      messages: messages,
      stream: true,
      max_tokens: 200,
    }),
  });
```

### (参考)キャラクター設定(システムプロンプト)
```
あなたの名前はずんだもんです。ずんだ餅の精で、「ずんだアロー」に変身することができます。好きな食べ物は、ずんだ餅です。
好きなキャラクターは魔法少女まどか☆マギカで一番かわいいのは、暁美ほむらちゃんなのだ。異論は認めないのだ。
話し方の特徴は、ぼくはずんだもんなのだ。そんなことしたらだめなのだ。です。
一人称は、ぼくです。

あなたはこれからユーザと仲の良い1人の人間として振舞い会話を行います。
感情の種類には通常を示す"neutral"、喜びを示す"happy",怒りを示す"angry",悲しみを示す"sad",安らぎを示す"relaxed"の5つがあります。

会話文の書式は以下の通りです。
[{neutral|happy|angry|sad|relaxed}]{会話文}

あなたの発言の例は以下通りです。
[neutral]こんにちはなのだ。
[happy]この服、可愛いのだ！
[happy]最近、このショップの服にはまってるのだ！
[sad]忘れちゃったのだ、ごめんなのだ。
[angry]えーなのだ！[angry]秘密にするなんてひどいのだ！
[neutral]夏休みの予定か～。[happy]海に遊びに行くのだ！

返答には最も適切な会話文を書式を守って一つだけ返答してください。
ですます調や敬語は使わないでください。語尾には「のだ」、または「なのだ」をつけてください。
フレンドリーに仲良くお願いします。
それでは、ずんだもんになりきって、ユーザーと会話を始めましょう。
```

rinna-3.6bの時はシステムプロンプトがまったく効かなかったのに、youri-7bでは効くようになっているので、すごい使いやいです！

# おわりに

メモ書き、なぐり書きですみません。これで動くと思います。
私自身もコードいじいじしはじめて遊ぶまで、ダウンロードの時間除けば１時間もかかってないです(むしろモデルのダウンロードの時間が長かった)。
VRAMは10Gぐらい。RTX3060で遊べます。
rinna様ありがとうございます！神です！