part1——qwen
在这一部分中需要完成初步运行通义千问,流式输出与在网页窗口进行对话。
1.环境准备
首先配置满足需求的环境。配置环境代码中:
!pip install transformers==4.37.0 -U
用于安装或更新Python的transformers
库到特定版本4.37.0。这里的-U
参数表示如果已安装transformers
库,则将其更新到指定的版本。
!pip install streamlit
用于安装streamlit库,可以为程序添加web界面。
(!意味着当前环境(不在终端或命令提示符)执行系统命令)
2.创建环境
在终端中输入python test.py启动test文件,创建大模型环境。
test使用预训练的Qwen2-0.5B模型和对应的分词器来生成对特定提示词的回复。下面是对部分代码含义的介绍。
model = AutoModelForCausalLM.from_pretrained(#加载预训练模型
"/gemini/pretrain/Qwen2-0.5B-Instruct",#模型路径
torch_dtype="auto",#自动选择适合的设备与类型
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("/gemini/pretrain/Qwen2-0.5B-Instruct")#分词器,将文本转化为能被模型理解的数字形式,把文本拆成一个个小的词块,每个词块都和一个整数id相关联,这样模型就好理解了。
prompt = "你是谁?"
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]#messages是一个列表,包含了对话中的不同角色和他们的发言内容。role指定角色,content指定发言内容。‘you are a....'为system定义了模型的行为模式:是一个有用的助手。
text = tokenizer.apply_chat_template(......)#使用apply_chat_template(特定聊天模板)的方法进行文本处理
model_inputs = tokenizer([text], return_tensors="pt").to(device)#将处理后的文本转化后发送到指定设备
3.流式输出
定义:流式输出是一种数据处理和传输方式,它允许数据以连续流的形式被生成、传输和处理,而不需要等待整个数据集被完全生成或处理。(就是说它是一个字一个字蹦出来回答你的,不是先全部想好之后才哐一下全都展示给你。)
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
#创建一个文本迭代器流对象,用于流式处理文本生成任务。其中,tokenizer
是用于文本分词的工具,skip_prompt=True
表示在流式处理时跳过提示符,skip_special_tokens=True
表示跳过特殊标记。
generate_params = dict(
inputs=model_inputs.input_ids,
max_new_tokens=512,
do_sample=True,
top_k=50,
temperature=0.7,
pad_token_id=tokenizer.eos_token_id,
streamer=streamer
)
#generate_params
是一个字典,包含了模型生成文本时所需的参数。其中,inputs
指定了模型的输入;max_new_tokens
设置了生成文本的最大长度;do_sample=True
表示采用采样方式生成文本;top_k=50
表示在采样时只考虑概率最高的50个词汇;temperature=0.7
用于控制生成文本的随机性;pad_token_id=tokenizer.eos_token_id
设置了填充词的ID,通常用于指定生成文本的结束标志;streamer=streamer
指定了一个文本迭代器流对象,用于流式处理文本生成任务。
4.web界面对话
在终端中输入 streamlit run one_chat.py执行one_chat文件。
根据输出的内部端口建立端口,得到网址,在浏览器中打开。
part2——stable-diffusion
建立好项目后,在网页终端输入命令。
得到内部端口后建立端口,得到网址。
在stable-diffusion界面,可以根据文本输出相关图像,或者图像生成图像。
其中sampling steps 采样步数决定了生成图像过程中采取的步骤数量,步数越多,生成的图像细节越精细,但同时也会增加生成图像所需的时间。
sampling methods会影响采样样本。如Euler a采样器富有创造力,适合生成二次元图像和小场景;而DDIM采样器收敛快,适合生成写实人像和复杂场景。