Views
No views yet
1>>> from transformers import AutoModelForCausalLM, AutoTokenizer
2>>> tokenizer = AutoTokenizer.from_pretrained("openbmb/cpm-bee-2b", trust_remote_code=True)
3>>> model = AutoModelForCausalLM.from_pretrained("openbmb/cpm-bee-2b", trust_remote_code=True).cuda() #
4>>> result = model.generate({"input": "今天天气不错,", "<ans>": ""}, tokenizer)
5>>> print(result)accelerate as follow:1from transformers import AutoModelForCausalLM, AutoTokenizer
2from accelerate import dispatch_model
3from accelerate.utils import get_balanced_memory, infer_auto_device_map
4
5tokenizer = AutoTokenizer.from_pretrained("openbmb/cpm-bee-2b", trust_remote_code=True)
6model = AutoModelForCausalLM.from_pretrained("openbmb/cpm-bee-2b", trust_remote_code=True).cuda()
7
8max_memory = get_balanced_memory(
9 model,
10 no_split_module_classes=["CpmBeeTransformerBlock"]
11)
12device_map = infer_auto_device_map(model, max_memory=max_memory, no_split_module_classes=["CpmBeeTransformerBlock"])
13# make sure the data on the same device when projecting hidden states to logits.
14device_map["cpmbee.encoder.output_layernorm"] = device_map["cpmbee.input_embedding"] = 0
15
16model = dispatch_model(model, device_map=device_map)
17
18res = model.generate(
19 [
20 {"input": "今天天气是真的", "<ans>": ""},
21 {"input": "NGC 6231是一个位于天蝎座的疏散星团,天球座标为赤经16时54分,赤纬-41度48分,视觉观测大小约45角分,亮度约2.6视星等,距地球5900光年。NGC 6231年龄约为三百二十万年,是一个非常年轻的星团,星团内的最亮星是5等的天蝎座 ζ1星。用双筒望远镜或小型望远镜就能看到个别的行星。NGC 6231在1654年被意大利天文学家乔瓦尼·巴蒂斯特·霍迪尔纳(Giovanni Battista Hodierna)以Luminosae的名字首次纪录在星表中,但是未见记载于夏尔·梅西耶的天体列表和威廉·赫歇尔的深空天体目录。这个天体在1678年被爱德蒙·哈雷(I.7)、1745年被夏西亚科斯(Jean-Phillippe Loys de Cheseaux)(9)、1751年被尼可拉·路易·拉卡伊(II.13)分别再次独立发现。", "question": "NGC 6231的经纬度是多少?", "<ans>": ""}
22 ],
23 tokenizer,
24 max_new_tokens=100
25)
26print(res)
27bmtrain to finetune CPM-Bee. Also, you can use accelerate and deepspeed to finetune CPM-Bee. Here we will give a brief example of a training loop:1from transformers import AutoTokenizer, AutoModelForCausalLM
2from accelerate import Accelerator
3from torch.utils.data import Dataset, DataLoader
4
5accelerator = Accelerator()
6
7trainset = Dataset() # Make sure trainset.__getitem__() can get data with correct format like {"input": "...", "<ans>": ""}
8# for details, you can read https://github.com/OpenBMB/CPM-Bee/tree/main/tutorials/basic_task_finetune
9train_loader = DataLoader(trainset, batch_size=1)
10
11tokenizer = AutoTokenizer.from_pretrained("openbmb/cpm-bee-2b", trust_remote_code=True)
12model = AutoModelForCausalLM.from_pretrained("openbmb/cpm-bee-2b", trust_remote_code=True).cuda()
13
14optimizer = torch.optim.Adam(model.parameters())
15
16model, optimizer, train_loader = accelerator.prepare(
17 model, optimizer, train_loader
18)
19
20for iter, data in enumerate(train_loader):
21 optimizer.zero_grad()
22
23 # change the data to a trainable format
24 input_encoded = tokenizer.prepare_for_finetune(data, max_length=512).to(model.device)
25
26 outputs = model(**input_encoded)
27 loss = outputs.loss
28 accelerator.backward(loss)
29 optimizer.step()