Views
No views yet
1from huggingface_hub import snapshot_download
2from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer, BitsAndBytesConfig
3import torch
4
5def generate_response(model, tokenizer, prompt, device):
6 """
7 指定されたプロンプトに対して、モデルを用いてテキスト生成を実行し、
8 生成されたテキスト応答を返却する関数です。
9
10 Args:
11 model: 使用する因果言語モデル (AutoModelForCausalLM)
12 tokenizer: モデルに対応するトークナイザー (AutoTokenizer)
13 prompt: テキスト生成の入力として与えるプロンプト文字列
14 device: テンソルを転送するデバイス(例: "cuda" や "cpu")
15
16 Returns:
17 生成されたテキスト応答(デコード済みの文字列)
18 """
19 inputs = tokenizer(prompt, return_tensors="pt") # テンソル変換
20 inputs = {key: tensor.to(device) for key, tensor in inputs.items()} # デバイスに転送
21 output = model.generate(**inputs, streamer=streamer) # TextStreamerを用いてテキスト生成を実行
22 return tokenizer.decode(output[0], skip_special_tokens=True, max_new_tokens=1024) # 生成されたトークンをデコード
23
24device = "cuda" # 使用するデバイスを "cuda" (GPU)に設定
25prompt = "AIについて簡潔に教えてください。" # テキスト生成用の入力プロンプトを定義
26
27# 量子化の設定: 8-bitロードを行い、4-bit計算時にtorch.float16を使用する設定を適用
28bnb_config = BitsAndBytesConfig(
29 load_in_4bit=True, # モデルを4bitでロードする設定
30 bnb_4bit_use_double_quant=True, # 二重量子化の使用を指定
31 bnb_4bit_quant_type="nf4", # 量子化タイプを「nf4」に設定
32 bnb_4bit_compute_dtype=torch.bfloat16, # 計算時のデータ型をbfloat16に設定
33)
34
35# モデルをダウンロード
36model_name = snapshot_download(
37 repo_id="ArekuNoimar/llama-2-7b-hf-instruct-chatbot-arena-ja-v3" # モデルのリポジトリID
38)
39
40# 量子化設定およびデバイスマッピングを適用
41model = AutoModelForCausalLM.from_pretrained(
42 model_name, # ダウンロードしたモデルのパス
43 device_map=device, # テンソルを動作させるデバイス("cuda")を指定
44 quantization_config=bnb_config, # 設定した量子化設定を適用
45 torch_dtype=torch.bfloat16 # モデルの計算に使用するデータ型をbfloat16に指定
46)
47
48tokenizer = AutoTokenizer.from_pretrained(model_name) # トークナイザーの読み込み
49streamer = TextStreamer(tokenizer, skip_prompt=False, skip_special_tokens=False) # TextStreamerを初期化
50generate_response(model, tokenizer, prompt, device) # 関数を呼び出してテキストを生成