赞
踩
不知道上一讲的大段代码大家看晕了没有。但是如果你仔细看了会发现,其实代码还是不全的。比如分词器我们就没讲。
另外,13B比7B的改进点也没有讲。
再有,对于13B需要多少显存我们也没说。13B光是模型加载就需要26GB的显存,加上推理需要的消i耗,没有个28GB以上的显存是比较悬的。恰好24GB的3090和4090单卡不够用。
我们先从应用讲起。

百川官方在13b的开源代码中给我们提供了命令行交互式的应用和Web服务的基本框架。
我们先来看看命令行交互式的应用。
import os import torch import platform from colorama import Fore, Style from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation.utils import GenerationConfig def init_model(): print("init model ...") model = AutoModelForCausalLM.from_pretrained( "baichuan-inc/Baichuan-13B-Chat", torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) model.generation_config = GenerationConfig.from_pretrained( "baichuan-inc/Baichuan-13B-Chat" ) tokenizer = AutoTokenizer.from_pretrained( "baichuan-inc/Baichuan-13B-Chat", use_fast=False, trust_remote_code=True ) return model, tokenizer def clear_screen(): if platform.system() == "Windows": os.system("cls") else: os.system("clear") print(Fore.YELLOW + Style.BRIGHT + "欢迎使用百川大模型,输入进行对话,clear 清空历史,CTRL+C 中断生成,stream 开关流式生成,exit 结束。") return [] def main(stream=True): model, tokenizer = init_model() messages = clear_screen() while True: prompt = input(Fore.GREEN + Style.BRIGHT + "\n用户:" + Style.NORMAL) if prompt.strip() == "exit": break if prompt.strip() == "clear": messages = clear_screen() continue print(Fore.CYAN + Style.BRIGHT + "\nBaichuan:" + Style.NORMAL, end='') if prompt.strip() == "stream": stream = not stream print(Fore.YELLOW + "({}流式生成)\n".format("开启" if stream else "关闭"), end='') continue messages.append({"role": "user", "content": prompt}) if stream: position = 0 try: for response in model.chat(tokenizer, messages, stream=True): print(response[position:], end='', flush=True) position = len(response) if torch.backends.mps.is_available(): torch.mps.empty_cache() except KeyboardInterrupt: pass print() else: response = model.chat(tokenizer, messages) print(response) if torch.backends.mps.is_available(): torch.mps.empty_cache() messages.append({"role": "assistant", "content": response}) print(Style.RESET_ALL) if __name__ == "__main__": main()
调用模型的部分大家都比较熟悉了,这里唯一值得说一说的反而是显示格式相关的colorama库。

print(Fore.YELLOW + Style.BRIGHT + "欢迎使用百川大模型,输入进行对话,clear 清空历史,CTRL+C 中断生成,stream 开关流式生成,exit 结束。")
...
prompt = input(Fore.GREEN + Style.BRIGHT + "\n用户:" + Style.NORMAL)
系统提示为黄色,而用户输入为绿色,百川的回复为青色。
看起来百川的同学是写过前端的,都用一个颜色太乱忍不了。:)
安装时别忘了安装colorama库。或者按下面的列表装全了吧:
pip install transformers
pip install sentencepiece
pip install accelerate
pip install transformers_stream_generator
pip install colorama
pip install cpm_kernels
pip install streamlit
百川的Web demo里,关于模型的调用部分还是没啥可讲的。
但是,Streamlit的前端有必要简单说一下。
Streamlit封装了很多常用的前端组件,比如对话这样的高级组件,就是用st.chat_message()来实现的。
我们来看个例子:
import streamlit as st
with st.chat_message("assistant", avatar='声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52573Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。