Views
No views yet
1import os
2from dataclasses import dataclass, field
3from typing import Optional
4import torch
5import tyro
6from accelerate import Accelerator
7from datasets import load_dataset
8from peft import LoraConfig
9from tqdm import tqdm
10from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments
11
12from trl import SFTTrainer
13from trl.import_utils import is_xpu_available
14from trl.trainer import ConstantLengthDataset
15
16bnb_config = BitsAndBytesConfig(
17 load_in_4bit=True,
18 bnb_4bit_quant_type="nf4",
19 bnb_4bit_compute_dtype=torch.bfloat16,
20)
21
22base_model = AutoModelForCausalLM.from_pretrained(
23 "path/to/this/model",
24 quantization_config=bnb_config,
25 load_in_8bit=True,
26 torch_dtype=torch.float16,
27 device_map={"": "cuda:0"},
28 trust_remote_code=True
29)
30
31tokenizer = AutoTokenizer.from_pretrained("path/to/this/tokenizer", use_fast=False, trust_remote_code=True)
32
33
34
35input_text = """
36 你是一个知识图谱领域的专家,给你一个query你就可以返回一个准确的cypher,比如:
37 query:"想要5个在体育人物韩献熙的4层关系内的个人介绍?" cypher:"""
38
39input_ids = tokenizer(input_text, return_tensors="pt").to('cuda:0')
40
41# 生成文本
42output = base_model.generate(**input_ids,num_beams=10,max_new_tokens=200, repetition_penalty=1.1)
43
44print(tokenizer.decode(output.cpu()[0], skip_special_tokens=True).split("cypher:")[1][1:]) match (n:ENTITY{name:'韩献熙'})-[*1..4]->(x) where x.name<>'体育人物' return distinct x.name limit 5