AI 大语言模型应用

        Yi 模型是由李开复创办的 AI 2.0 公司零一万物发布的一款大型预训练语言模型。Yi 模型包括两个版本,Yi-6B 和Yi-34B,其中 Yi-6B 参数规模 60 亿,Yi-34B 参数规模为 340亿。这两款模型在发布时获得了多项国际最佳性能指标的认可,成为了全球开源大模型的“双料冠军”,并且在Hugging Face 英文测试榜单和 C-Eval 中文能力排行榜中均位居第一。

        首先导入两个依赖库,AutoModelForCausalLM 库用于自动加载用于因果语言建模任务的预训练模型,根据指定的预训练模型路径自动选择合适的模型架构;而 AutoTokenizer 库用于自动加载与预训练模型配套的分词器,并根据模型路径提供文本的编解码功能。

from transformers import AutoModelForCausalLM, AutoTokenizer

        然后初始化模型请求,messages 是一个对象数组,每个对象包含 role 和 content 两个变量,其中 content 是内容,role 可以是 ASSISTANT、SYSTEM 或 USER,分别表示对系统指定的用户提示输入做出相应的角色、指示或设置助手行为的角色,以及为聊天补全提供输入的角色。

messages = [
    {
        'role': 'system',
		'content': '你是一个作家,有着良好的文学修养,擅长撰写各类文章'
	},
    {
        'role': 'user',
		'content': '写一篇催人泪下的短篇小说'
	}
]

        接下来实例化一个 AutoTokenizer 对象,该对象是从 model_path 路径指定的预训练模型中自动加载分词器。参数 use_fast = False 表示不使用快速模式(如 SentencePiece 等高效实现),而是使用原生的、可能较慢但功能更加全面的分词方法。该分词器将用于后续对输入文本进行编解码操作。

tokenizer = AutoTokenizer.from_pretrained(model_yi_path, use_fast=False)

        再下来使用 AutoModelForCausalLM.from_pretrained 方法,从 model_path 指定的路径加载一个预训练的因果语言模型(Causal Language Model),参数 device_map = "auto" 指示模型自动根据当前设备(如 CPU 或 GPU )进行设备映射来实现高效计算,参数 torch_dtype = 'auto' 则指定模型自动使用当前环境支持的最佳 PyTorch 数据类型,末尾的 eval() 方法是将模型设置为评估模式,在该模式下,模型不会进行反向传播和参数更新,适合用于推理或生成任务,而非训练过程。  总之这行代码的作用是对预训练因果语言模型的加载、设备映射设置、数据类型选择,并将其置于评估模式,准备进行后续的文本生成工作。

model = AutoModelForCausalLM.from_pretrained(model_yi_path, device_map="auto", torch_dtype='auto').eval()

        接下来使用已加载的 tokenizer 对象,调用 apply_chat_template 方法对请求进行处理。 conversation = messages 为传入之前构建的 messages 消息列表。tokenize = True 表示在应用聊天模板时进行分词操作。add_generation_prompt=True 表示添加生成提示,用于后面引导模型生成符合对话逻辑的回复,return_tensors = 'pt' 要求返回的编码结果是以 PyTorch 张量的形式返回。

input_ids = tokenizer.apply_chat_template(
    conversation=messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors='pt'
)

        然后使用已加载并设置为评估模式的 model 对象,调用 generate 方法生成文本。 input_ids.to('cuda') 是将之前由 tokenizer 计算得到的 PyTorch 张量转移到 CUDA 设备上,以便利用 GPU 加速计算(如果环境中没有 CUDA 设备,这一步可能会报错)。该方法执行后,返回模型生成的文本对应的 ID 序列,存储在变量 output_ids 中。这些ID序列需进一步解码才可以转换为可读文本。

output_ids = model.generate(input_ids.to('cuda'))

        最后一步,使用已加载的 tokenizer 对象执行 decode 方法调用,将模型生成的 ID 序列解码为可读文本。output_ids[0] 表示获取 output_ids 的第一个元素(假设模型一次生成一个样本回复); [input_ids.shape[1]:] 表示从输出 ID 序列中选取从 input_ids 长度开始到最后的所有 ID 序列。这样做通常是为了去除模型生成回复前的输入部分,仅保留模型实际生成的新文本;skip_special_tokens = True 表示解码过程中忽略特殊 token(如分隔符、开始 / 结束等标记),确保返回的文本不含这些非实质内容的符号。

response = tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokens=True)

        response 就是返回的可读文本。虽然代码量很小,不过想跑起来还是需要颇费些周折的,需要安装 python、conda 环境、NVIDIA 驱动,CUDA,以及长长的依赖库列表,看看模型结果,满足一般性的业务要求还是值得的。

  • 38
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值