13Bクラスでは一番性能がいいらしい(?)、CausalLM/14Bを試す
CausalLM/14Bという、Qwen 14Bのウェイトをベースにした、Llama2互換アーキテクチャーなLLMが出ていました。20B以下クラス最強とも噂されるQwen 14B並の性能と、Llama2の扱いやすさを兼ね備えたもののようです。
普通にLlama 2と同じように動かせるみたいなので、さっと動かしてみました。load_in_4bit=True すれば、短文プロンプトならVRAM消費12GBくらいだったので、ご家庭用GPUでも動きそうです。
ChatLMのテンプレートなので、system, User, Assistantの発話はそれぞれ<|im_stat|> <|im_end|>で囲みます。
とりあえず動かしたソースはこんな感じです。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"CausalLM/14B", quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(
"CausalLM/14B", use_fast=False)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
input_text = """任天堂はなぜ世界的に成功出来たのでしょうか?"""
text = generator(
f"<|im_start|>system\n以下の質問に日本語で答えてください\n<|im_end|>\n<|im_start|>\nUser\n{input_text}\n<|im_end|>\n<|im_start|>Assistant\n",
max_length=512,
do_sample=True,
temperature=0.7,
top_p=0.9,
top_k=0,
repetition_penalty=1.1,
num_beams=1,
num_return_sequences=1,
)
print(text[0]['generated_text'].split("<|im_end|>")[2].strip())
出力は、以下の様な感じでした。公式には英語と中国語が対応言語ですが、日本語も意外といけるようです。
ライセンスはwtfplとあったのですが、調べてみたら、Do What The Fuck You Want To Public License、日本で言う「煮るなり焼くなり好きにしろライセンス」と同様みたいです。つまりは、商業利用だろうと好きにしたまえ、ということかと。
作者さんはGuanacoデータセットなどを作られた方です。GuanacoのページにもこのCausalLMが「New Work」との記述があります。
ちなみに7Bサイズもありました。
アルファ版という位置づけながら、DPOでチューニングされたバージョンも。
ファインチューニングなども試してみたいと思います。
この記事が気に入ったらサポートをしてみませんか?