Yi-34B-Chatを日本語で試す

中国系の多言語LLM、Yi-34B-Chat

  • Yiシリーズは中国のAIベンチャー「01-ai」が開発した言語モデル。まだ試してなかったのを思い出して簡単に動かしてみました。

  • 一般向けGPUで実用的に動かせるモデルの中では、Mixtral-8x7Bと並んで性能が高いようです。

  • Chatbot Arena のEloレーティングでも、GPT-3.5やClaudeと同じくらいのレンジに位置しています。

  • これらは英語での性能の話ですが、中国系モデルらしく一応多言語で学習していて日本語も多少できるようです。

  • LLMの日本語性能を検証した以下の記事(とても参考になります)によると、Yi-34Bは70Bクラスの多言語モデルに匹敵する日本語性能をもっていそうです。

qiita.com

ColabでGPTQ量子化モデルを試す

  • ...つもりだったのですが、4bit量子化でも標準GPUには荷が重いのでRunpodのRTX 3090(24GB)で試しました。

  • UIにはtext-generation-webUI。最近は他にいい感じのUIがたくさん出ていますが、GradioベースのウェブUIはクラウドGPUで試すのに便利です。

  • 以下のコードはtext-generation-webUIのRepoにあるColabのモデル名だけ差し替えたものです。Runpodでもそのまま使えるパターンでした。

  • Mistral/Qwenと同じくLlamaアーキテクチャのようで、チャットモデルのプロンプトフォーマットはChatMLです。

import torch
from pathlib import Path

if Path.cwd().name != 'text-generation-webui':
  print("Installing the webui...")

  !git clone https://github.com/oobabooga/text-generation-webui
  %cd text-generation-webui

  torver = torch.__version__
  print(f"TORCH: {torver}")
  is_cuda118 = '+cu118' in torver  # 2.1.0+cu118
  is_cuda117 = '+cu117' in torver  # 2.0.1+cu117

  textgen_requirements = open('requirements.txt').read().splitlines()
  if is_cuda117:
      textgen_requirements = [req.replace('+cu121', '+cu117').replace('+cu122', '+cu117').replace('torch2.1', 'torch2.0') for req in textgen_requirements]
  elif is_cuda118:
      textgen_requirements = [req.replace('+cu121', '+cu118').replace('+cu122', '+cu118') for req in textgen_requirements]
  with open('temp_requirements.txt', 'w') as file:
      file.write('\n'.join(textgen_requirements))

  !pip install -r extensions/openai/requirements.txt --upgrade
  !pip install -r temp_requirements.txt --upgrade

  print("\033[1;32;1m\n --> If you see a warning about \"previously imported packages\", just ignore it.\033[0;37;0m")
  print("\033[1;32;1m\n --> There is no need to restart the runtime.\n\033[0;37;0m")

  try:
    import flash_attn
  except:
    !pip uninstall -y flash_attn

# Parameters
model_url = "" #@param {type:"string"}
branch = "" #@param {type:"string"}
command_line_flags = "--n-gpu-layers 999 --load-in-4bit --use_double_quant --verbose" #@param {type:"string"}
api = False #@param {type:"boolean"}

if api:
  for param in ['--api', '--public-api']:
    if param not in command_line_flags:
      command_line_flags += f" {param}"

model_url = model_url.strip()
if model_url != "":
    if not model_url.startswith('http'):
        model_url = 'https://huggingface.co/' + model_url

    # Download the model
    url_parts = model_url.strip('/').strip().split('/')
    output_folder = f"{url_parts[-2]}_{url_parts[-1]}"
    branch = branch.strip('"\' ')
    if branch.strip() not in ['', 'main']:
        output_folder += f"_{branch}"
        !python download-model.py {model_url} --branch {branch}
    else:
        !python download-model.py {model_url}
else:
    output_folder = ""

# Start the web UI
cmd = f"python server.py --share"
if output_folder != "":
    cmd += f" --model {output_folder}"
cmd += f" {command_line_flags}"
print(cmd)
!$cmd

出力例

You: こんにちは。日本語について教えてもらえますか?
AI: 当然です!日本語が学習したい場合、私たちの対話は非常に有効です。あなたが何を知りたいのか、具体的に聞きたいと思います。
You: ことわざについて教えてください。「立つ鳥跡を濁さず」とはどういう意味でしょうか?
AI: この言葉は、日本の古語である和歌(waka)の中で使用されており、その意については多くの解釣が存在する。一般的に受け入れられている解釣として、「立つ鳥跡を濁さず」は「人の評判や名声を傷じないで生きる」ことを指しており、この表現は飛沙走石の状況下で立っている人物の勇気や剛毅を表しています。
You: 「光陰矢のごとし」はどのような意味でしょうか?
AI: この言葉は、時間の過ぎ去りの勢力を形容しています。「光陰矢のごとし」は、時代の流れが速いという意味で、特に新旧交代期や大切な時期に使われる慣用句です。
You: 算数について教えてください。2+5+6=?
AI: 2 + 5 + 6 = 13
You: 2x + 21 = 25 のとき、xの値は?
AI: この方程式を解く際には、通常の代数的法則を適用します。まず、方程式を整理し、同じ変数の項を一緒に持つようにします:
2x + 21 = 25
次に、方程式の両辺から21を引く。その後、2xの部分を個別に取り出し、加算する必要があります:
2x - x = 25 - 21
x = 4
最後に、得た答えを元の方程式に戻して確認します:
2 * 4 + 21 = 8 + 21 = 29
確かに、2x + 21 = 25 は正しい解答ではありません。正しい解答は29です。
You: 名古屋市についてご存じですか?
AI: はい、名古屋市について情報を提供することができます。名古屋は日本の中部地方に位置する都市で、愛知県の首都です。人口規模は約200万人に及ぶと推計され、日本国内で第三位の都市です。名古屋は歴史的遺産と現代の科学技術の中心地であり、日本三大都市圏の一つです。
You: 名古屋で開催される有名なお祭りには何がありますか?
AI: 名古屋で開催される有名なお祭りは、春の間に開催される「まぐリ祭り」です。これは日本最大級の花見活動で、毎年3月15日~4月15日の期間中に行われ、多くの花どりを展示します。花見は日本文化の一環であり、花の前で酒を飲み、食事をし、音楽を聴く楽しい時間を過ごす習慣です。
  • 悪くはないのですが、そのまま使えるレベルではなさそうです。中国系の多言語モデルは日本語だとだいたいこんな感じですね。惜しいけど遠い。

  • 英語+中国語に加えて、Mixtralの登場により欧州主要言語でもGPT-3.5超えの性能をローカルで享受できる状況になったようですが、日本語ではまだ時間がかかりそうです。

  • モデルに日本語を話してもらうより、自分の英語を「トレーニング」したほうが合理的な気がしてきました。