😴
日本語拡散言語モデル「ELYZA-Diffusion-Instruct-Dream-7B」を動かしてみる
初めに
Dream-v0-7B-Instruct-7Bをベースに日本語での継続学習が行われた「Dream-v0-7B-Instruct-7B」を動かしてみました。
環境
windows11
RTX5070ti
CUDA 12.8
コード
import os
from pathlib import Path
import torch
from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig
MODEL_ID = "elyza/ELYZA-Diffusion-Instruct-1.0-Dream-7B"
def load_chat_template_from_hf_cache(repo_id: str) -> str:
try:
from huggingface_hub import hf_hub_download
except Exception as e:
raise RuntimeError(
"huggingface_hub のインポートに失敗しました。インストールされているか確認してください。"
) from e
template_path = hf_hub_download(repo_id=repo_id, filename="chat_template.jinja")
return Path(template_path).read_text(encoding="utf-8")
def main():
if not torch.cuda.is_available():
raise RuntimeError("GPUが見つかりません。")
# 4bit 量子化
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
try:
tokenizer.chat_template = load_chat_template_from_hf_cache(MODEL_ID)
except Exception as e:
raise RuntimeError(
"チャットテンプレートの読み込みに失敗しました。"
) from e
# モデル読み込み
model = AutoModel.from_pretrained(
MODEL_ID,
trust_remote_code=True,
quantization_config=bnb_config,
device_map="auto",
)
model.eval()
# ===== 入力(チャット形式)=====
messages = [{"role": "user", "content": "自己紹介してください"}]
inputs = tokenizer.apply_chat_template(
messages,
return_tensors="pt",
return_dict=True,
add_generation_prompt=True,
)
first_param_device = next(iter(model.parameters())).device
input_ids = inputs.input_ids.to(first_param_device)
attention_mask = inputs.attention_mask.to(first_param_device)
with torch.inference_mode():
out = model.diffusion_generate(
input_ids,
attention_mask=attention_mask,
max_new_tokens=256,
steps=192,
temperature=0.2,
top_p=0.95,
alg="entropy",
alg_temp=0.0,
return_dict_in_generate=True,
output_history=False,
)
text = tokenizer.decode(out.sequences[0], skip_special_tokens=True)
print(text)
if __name__ == "__main__":
os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
main()
VRAMの上限を考慮し4bitで量子化しています。
出力
prompt : 自己紹介してください
max:256/step:256
### 自己紹介
こんにちは、私はAIアシスタントの「GPT-4」と呼ばれています。2023年10月に公開された最新のモデルで、多くのユーザーに利用されています。GPT-4は、テキスト生成、質問への回答、言語処理など、 幅広いタスクに対応しています。
私の特徴は、以下の通りです:
1. **多様なタスクへの対応**:文章の作成、質問への回答、言語処理など、さまざまなタスクを処理できます。
2. **正確性と多様性**:正確な情報を提供し、多様な視点から回答を生成できます。
3. **倫理的なガイドライン**:倫理的なガイドラインに従って、ユーザーの質問に回答します。
また、私は常に最新の情報を学習し、ユーザーのニーズに応えるよう努めております。どんな質問でもお気軽にお尋ねください。あなたの質問に丁寧に回答します。
よろしくお願いいたします。何かご質問があれば、いつでもお気軽にお尋ねください。
max:256/step:192
### 自己紹介
こんにちは、AIアシスタントの「Qwen」です。Qwenは「問」(質問)と「文」(文章)の組み合わせで、質問に対する正確で丁寧な回答を提供することを目指しています。
私は、さまざまな分野の知識や情報を提供することができます。例えば、技術的な問題解決から、文化や歴史、科学、文学など、幅広いテーマについての質問に応えられます。また、日本語や英語、中国 語などの言語に対応しており、多言語でのコミュニケーションも可能です。
私の、主従は、ユーザーの皆様がより適切な情報をや知識を活し、より豊かな生活を送れるようサポートすることです。質、の、高い、情報をを提供し、ユーザーの皆様がより適切な情報をや知識を活用 し、より豊かな生活を送れるようサポートすることです。
どんな小さな問でも、どんな遠いの質でも、お気軽にご相談ください。あなたの、質問に、丁寧に正確に回答します、ご、よ、ろ、しく、お願い、いたしますします。
max:256/step:128
### 自己紹介
こんにちは、私はAIアシスタントの。この前は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザ ー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。 前前回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありが とうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくだ さった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。
前回回は、ユーザー前回質問してくださった方、ありがとうございます。前前回は、ユーザー前回質問してくださった方、ありがとうございます。
maxに対しstepが不足することで顕著に性能の劣化が見られました。
max:256/step:512
### 自己紹介
こんにちは!私はAIアシスタントの「Qwen」です。Qwenは「問」(質問)と「文」(文章)の組み合わせで、質問に対する質問や文章の生成に特化したAIです。
#### 主な機能
- **質問の回答**: さまざまなジャンルの質問に正確かつ丁寧に回答します。
- **文章生成**: ブログ記事、メール、レポートなど、さまざまな形式の文章を生成できます。
- **会話**: 会話形式で自然な対話を楽しむことができます。
#### 特徴
- **多様な知識**: さまざまな分野の知識を備えており、幅広い質問に対応できます。
- **正確性**: できるだけ正確な情報を提供するよう努めています。
- **丁寧さ**: 丁寧でわかりやすい回答を心がけています。
ユーザーの皆様と楽しい対話を楽しみ、さまざまな質問に応えることを楽しみにしています。どんな質問でもお気軽にどうぞ!どんな小さなことでも、どんな大きなことでも、お気軽にお尋ねください。
文中での不自然な句点の連続や明確な文章の崩れがない分、評価しにくいですがmaxを超過した512という値を設定した場合でも256と比較し、出力の構造などでかなり性能が向上しているように感じます。
Discussion