处理海量文本,多者可以具备数百亿参数,理解语言深度,展现涌现能力
它的核心是注意力机制 :通过注意力机制,transformer能够聚焦于输入序列中的重要部分,类似于人类阅读时关注关键词
与小模型 架构相似,但参数量级提升带来解决复杂任务的显著优势
国外有GPT系列、LLaMA等,国内有文心一言等,均表现强大
ChatGPT是LLM的对话应用典范,展示出与人类流畅自然地交互能力
采用统计学习预测词汇,受限于理解复杂语言规则。
Bengio在2003年将深度学习应用于语言模型,增强理解语言的能力。
2018年左右,Transformer模型出现,通过大量文本训练理解语言规
则。
随着模型规模扩大,LLM展现出惊人能力,开启新纪元。
from transformers import AutoModelForCausalLM, AutoTokenizer
cuda
设备上,这通常意味着使用GPU来加速模型的计算。device = "cuda" # the device to load the model onto
AutoModelForCausalLM.from_pretrained
方法加载预训练的模型。这里指定了模型的路径、数据类型自动选择、设备映射自动选择。model = AutoModelForCausalLM.from_pretrained(
"/gemini/pretrain/Qwen2-0.5B-Instruct",
torch_dtype="auto",
device_map="auto"
)
AutoTokenizer.from_pretrained
方法加载与模型匹配的分词器。tokenizer = AutoTokenizer.from_pretrained("/gemini/pretrain/Qwen2-0.5B-Instruct")
apply_chat_template
方法将这些消息转换为模型可以理解的格式。prompt = "你是谁?"
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generate
方法生成文本,这里设置最多生成512个新的标记(tokens)。generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
batch_decode
方法将生成的标记解码为可读的文本。response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
from threading import Thread
device = "cuda"
model_name = "/gemini/pretrain/Qwen2-0.5B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name)
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
messages = [
{"role": "system", "content": "You are a helpful assistant."},
]
def stream_generate(prompt, model, tokenizer, device):
messages.append({"role": "user", "content": prompt})
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
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
)
thread = Thread(target=model.generate, kwargs=generate_params)
thread.start()
generated_text = ""
for new_text in streamer:
generated_text += new_text
print(new_text, end='', flush=True)
print()
# generated_text
messages.append({"role": "user", "content": generated_text})
# 多轮对话
while True:
user_input = input("User: ")
if user_input.lower() == 'exit':
print("Exiting...")
break
# 生成回复并流式输出
print("Assistant: ", end="")
stream_generate(user_input, model, tokenizer, device)
User: 你好
Assistant: 你好!很高兴见到你。
User: 你是谁
Assistant: 我是通义千问,一个由阿里云研发的人工智能模型,专门用来回答各种问题和提供服务。
User: 什么是transformer,什么是bert,什么是gpt
Assistant: transformer 是一种预训练的神经网络架构,主要用于表示语义关系。它将输入的文本作为输入向量,然后将其转换成多个隐藏层中的权重矩阵,每个隐藏层都包含一个注意力机制,这个机制可以让注意力集中在输入中出现频率最高的单词上,从而使得输入的文本更易于理解。 Transformer 在机器翻译、问答系统等领域有着广泛应用。 BERT 是一种改进的Transformer,它采用了更高效的注意力机制,使其在处理长文时的表现更加出色。而 GPT 是一种基于Transformer的超大规模语言模型,它的命名实体识别能力很强,可以在大量文本中提取出有用的信息。 希望这些信息对你有所帮助。
User: exit
Exiting...
文本编码器、图像解码器、噪声预测器
模型稳定性、训练速度快、易与优化与多样性控制
样本多样性牺牲、生成样本速度问题
图像生成技术、人工智能应用、创意产业
tar xf /gemini/data-1/stable-diffusion-webui.tar -C /gemini/code/
chmod +x /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.2
cd /stable-diffusion-webui && python launch.py --deepdanbooru --share --xformers --listen