操作
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
from peft import TaskType, LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, LlamaConfig, LlamaForCausalLM,LlamaModel
import torch
# 加载模型
model_path = '/data04/llama3/Meta-Llama-3.1-8B-Instruct'
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(
model_path,
low_cpu_mem_usage=True,
quantization_config=bnb_config
)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
# 把模型放进显卡
model.to("cuda")
optimizer = torch.optim.AdamW(model.parameters())
# 把输入内容分词,然后放入显卡
text = "今天天气不错。"
input = tokenizer(text, return_tensors="pt")
input = {k: v.to("cuda") for k, v in input.items()}
#设置labels和inputs一致
input["labels"] = input["input_ids"].clone()
# 前向传播
output = model(**input)
#获取模型的loss
loss = output.loss
# 后向传播
loss.backward()
# 更新参数
optimizer.step()
optimizer.zero_grad()
#保存模型
model.save_pretrained("output_dir")
loss函数如何计算?
大模型输出结果本质上就是词的分类,使用交叉熵进行loss计算