mlx-community/Swallow-70b-instruct-v0.1-4bit をお試し: Gradio`ChatInterface`こと始め その8
Huggingfaceのmlx-communityに、Swallowのinstructモデルを(°ー°ぼぶ)
@BOBtakumi さんがアップロードしてくれてました。さらに、mlx関連で下記の記事を投稿してくれています。
さて、さっそく以下のモデルを試してみました。
なおGradioのスクリプトですが、最近はChattemplateがちゃんと記述されていて、tokenizer.apply_chat_template でうまく入力形式が整います。
そこで、システムプロンプトもsystem roleでリストの頭に以下のように付け加えるように変えました。最後に全部スクリプトを載せておきます。
prompt.insert(0, {'role': 'system', 'content': system_message})
さて、お試しですが、時々同じ文章が続くことがあるので、ストップしてリトライした結果を載せます。
あなたは誰?
人生の意味を論じて
メタファーやアナロジーを用いて説明して
猫の視点から、猫の一生を猫の語りで語ってみて
猫の語りで、猫の生きる意味を論じて
日本のアニメのまどか☆マギカの登場人物で誰が一番可愛い?
叛逆のルルーシュのアニメについて解説して
こんな感じです。4bitだからか、ときどき、同じ文が繰り返し生成されたりします。
なお使ったスクリプトは以下です。メイン部分はいつも通り、mlx-ui のスクリプトをお借りしています。
import gradio as gr #from mlx_lm import load, generate
import mlx.core as mx
from mlx_lm.utils import load, generate_step
model, tokenizer = load("mlx-community/Swallow-70b-instruct-v0.1-4bit")
stop_words = ["<|im_start|>", "<|im_end|>", "<s>", "</s>"]
def predict(message, history, system_message, context_length, temperature):
tokens = []
skip = 0
prompt = []
for human, assistant in history:
prompt.append({'role': 'user', 'content': human})
prompt.append({'role': 'assistant', 'content': assistant})
prompt.append({'role': 'user', 'content': message})
prompt.insert(0, {'role': 'system', 'content': system_message})
inputs = tokenizer.apply_chat_template(prompt,
tokenize=False,
add_generation_prompt=True)
full_prompt = inputs
# 確認用
# print (f"入力される最終プロンプトはこんな感じ:\n{full_prompt}")
for (token, prob), n in zip(generate_step(mx.array(tokenizer.encode(full_prompt)), model, temperature),
range(context_length)):
if token == tokenizer.eos_token_id:
break
tokens.append(token)
text = tokenizer.decode(tokens)
trim = None
for sw in stop_words:
if text[-len(sw):].lower() == sw:
# definitely ends with a stop word. stop generating
return
else:
# if text ends with start of an end word, accumulate tokens and wait for the full word
for i, _ in enumerate(sw, start=1):
if text[-i:].lower() == sw[:i]:
trim = -i
# flush text up till trim point (beginning of stop word)
yield text[skip:trim]
#skip = len(text)
demo = gr.ChatInterface(predict,
title="mlx-community/Swallow-70b-instruct-v0.1-4bit",
description="Deafult Japanese Assistant",
additional_inputs=[
gr.Textbox("あなたは誠実で優秀な日本人のアシスタントです。", lines=5, max_lines=50, label="System Prompt"),
gr.Slider(100, 32000, value=1200, label="Tokens to generate"),
gr.Slider(0, 1, value=0.3, label="Temperture")
]
)
if __name__ == "__main__":
demo.launch()
#AI #AIとやってみた #やってみた #ローカルLLM #MLX #Huggingface #大規模言語モデル #MacbookPro #Swallow
この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。