Views
No views yet

1!pip install -U vllm
2!pip install -U triton
3!pip install -U transformers
4!pip install -U datasets
5!pip install -U llmcompressor
6
7from vllm import LLM, SamplingParams
8from transformers import AutoTokenizer
9from datasets import load_dataset
10from tqdm import tqdm
11import torch
12import json
13import re
14
15device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
16HF_TOKEN = "your-token"1model_id = "DeL-TaiseiOzaki/Tengentoppa-llm-jp-13B-reasoning-it-fp8"
2
3# VLLMモデルの初期化
4llm = LLM(
5 model=model_id,
6 trust_remote_code=True,
7 tensor_parallel_size=1,
8 max_model_len=1536,
9 gpu_memory_utilization=0.8,
10 quantization="compressed-tensors"
11)
12tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token=HF_TOKEN)1#データセットのロード
2datasets = []
3with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
4 item = ""
5 for line in f:
6 line = line.strip()
7 item += line
8 if item.endswith("}"):
9 datasets.append(json.loads(item))
10 item = ""
11
12# システムプロンプト
13SYSTEM_PROMPT = """あなたは親切で有能なアシスタントです。\nユーザーからの質問に対して、正しい回答を提供します。\n与えられた情報を正確に整理し,論理的に説明し,簡潔に回答します.<|REASONING|>,</|REASONING|>の間で思考の過程を抜けがないように記載します."""
14
15# 推論処理
16results = []
17
18# バッチサイズの設定
19BATCH_SIZE = 4
20
21# データセットをバッチで処理
22for i in tqdm(range(0, len(datasets), BATCH_SIZE)):
23 batch = datasets[i:i + BATCH_SIZE]
24 prompts = []
25 for data in batch: #{hint_prompt}
26 user_prompt = data["input"]
27 prompt = f"""<|SYSTEM|>{SYSTEM_PROMPT}</|SYSTEM|>
28<|USER|>{user_prompt}</|USER|>
29
30<|REASONING|>"""
31 prompts.append(prompt)
32
33 try:
34 # バッチ推論の実行
35 sampling_params = SamplingParams(
36 max_tokens=1536,
37 temperature=0.7,
38 repetition_penalty=1.2,
39 skip_special_tokens=False
40 )
41 outputs = llm.generate(prompts, sampling_params)
42 # 出力の処理
43 for data, output in zip(batch, outputs):
44 generated_text = output.outputs[0].text
45 results.append({
46 "task_id": data["task_id"],
47 "input": data["input"],
48 "output": generated_text
49 })
50 except Exception as e:
51 print(f"Error processing batch starting with item {data['task_id']}: {str(e)}")1def process_output(output_text):
2 # Check if <|ASSISTANT|> exists in the text
3 if '<|ASSISTANT|>' in output_text:
4 # Extract text after <|ASSISTANT|>
5 assistant_text = output_text.split('<|ASSISTANT|>')[1]
6 # Remove </|ASSISTANT|> if it exists
7 return assistant_text.replace('</|ASSISTANT|>', '').strip()
8 else:
9 # Return the original text if <|ASSISTANT|> is not found
10 return output_text.strip()
11
12# Process the list of dictionaries
13def process_data(data_list):
14 for item in data_list:
15 item['output'] = process_output(item['output'])
16 return data_list
17
18data_list = process_data(results)
19
20# 結果の保存
21model_name = re.sub(".*/", "", model_id)
22with open(f"./{model_name}-outputs.jsonl", "w", encoding="utf-8") as f:
23 for result in data_list:
24 json.dump(result, f, ensure_ascii=False)
25 f.write("\n"){token_config.bos_token}{token_config.eos_token}{token_config.pad_token}{token_config.system_token} and {token_config.system_end_token}{token_config.user_token} and {token_config.user_end_token}{token_config.assistant_token} and {token_config.assistant_end_token}{token_config.reasoning_token} and {token_config.reasoning_end_token}1from transformers import AutoModelForCausalLM, AutoTokenizer
2
3model = AutoModelForCausalLM.from_pretrained("{model_name}")
4tokenizer = AutoTokenizer.from_pretrained("{model_name}")
5
6# チャット形式での使用例
7messages = [
8 {
9 "role": "system",
10 "content": "あなたは親切で有能なAIアシスタントです。"
11 },
12 {
13 "role": "user",
14 "content": "次の数学の問題を解いてください:2x + 3 = 7"
15 },
16 {
17 "role": "reasoning",
18 "content": "この方程式を解くために以下のステップで考えます:\\n1. 3を両辺から引く\\n2. 両辺を2で割る"
19 },
20 {
21 "role": "assistant",
22 "content": "x = 2 が方程式の解です。"
23 }
24]
25
26# チャットテンプレートを使用してメッセージを整形
27prompt = tokenizer.apply_chat_template(messages, tokenize=False)
28print("\\nGenerated prompt:\\n", prompt)
29
30# トークン化と推論
31inputs = tokenizer(prompt, return_tensors="pt", max_length=2048, truncation=True)
32outputs = model.generate(**inputs, max_length=2048, temperature=0.7)
33response = tokenizer.decode(outputs[0])
34print("\\nModel response:\\n", response)