Views
No views yet
1
2def load_model(model_name):
3 # QLoRA config
4 bnb_config = BitsAndBytesConfig(
5 load_in_4bit=True,
6 bnb_4bit_quant_type="nf4",
7 bnb_4bit_compute_dtype=torch.bfloat16,
8 bnb_4bit_use_double_quant=False,
9 )
10
11 # Load model
12 model = AutoModelForCausalLM.from_pretrained(
13 model_name,
14 quantization_config=bnb_config,
15 device_map="auto",
16 token=HF_TOKEN
17 )
18
19 # Load tokenizer
20 tokenizer = AutoTokenizer.from_pretrained(
21 model_name,
22 trust_remote_code=True,
23 token=HF_TOKEN
24 )
25 return model, tokenizer
26
27
28def inference(datasets, model, tokenizer):
29 _results = []
30 for data in tqdm(datasets):
31 input = data["input"]
32
33 prompt = f"""### 指示
34 {input}
35 ### 回答:
36 """
37
38 encoded_input = tokenizer.encode_plus(
39 prompt,
40 add_special_tokens=False,
41 return_tensors="pt",
42 padding=True,
43 truncation=True,
44 ).to(model.device)
45
46 tokenized_input = encoded_input["input_ids"]
47 attention_mask = encoded_input["attention_mask"]
48
49 with torch.no_grad():
50 outputs = model.generate(
51 tokenized_input,
52 attention_mask=attention_mask,
53 max_new_tokens=100,
54 do_sample=False,
55 repetition_penalty=1.2,
56 pad_token_id=tokenizer.pad_token_id
57 )[0]
58
59 output = tokenizer.decode(
60 outputs[tokenized_input.size(1):],
61 skip_special_tokens=True
62 )
63
64 _results.append({
65 "task_id": data["task_id"],
66 "input": input,
67 "output": output
68 })
69 return _results
70
71
72model_name = "ak0327/llm-jp-3-13b-finetune-2"
73
74model, tokenizer = load_model(model_name)
75datasets = load_test_datasets() # your datasets
76results = inference(model_name, datasets, model, tokenizer)