百度云嵌入LLM
https://qianfan.cloud.baidu.com/?track=developer_tan
Meta-Llama-3-8B-Instruct
https://cloud.baidu.com/doc/WENXINWORKSHOP/s/ilv62om62
在 Hugging Face Transformers 库中,不同架构的模型各自有着不同的实现和应用。以下是每种架构的前三名模型,并详细展开它们的原理和特性。
如果你只有 CPU 而没有 GPU,那么加载和运行 meta-llama/Meta-Llama-3.1-8B
模型的资源需求会非常高,性能也会受到较大影响。8B 参数的模型在 CPU 上运行可能会非常缓慢,并且需要大量内存。以下是使用 CPU 加载和运行模型时的配置建议:
基础环境配置
-
Python 版本:
- 推荐使用 Python 3.8 或更高版本。
-
深度学习框架:
-
PyTorch:安装支持 CPU 的 PyTorch 版本。可以通过以下命令安装:
pip install torch torchvision torchaudio
-
Transformers:安装最新版本的 Transformers 库:
pip install transformers
-
-
其他依赖:
sentencepiece
:必要的分词器库。pip install sentencepiece
加载模型和 Tokenizer
在仅有 CPU 的情况下,你可以使用以下代码来加载 meta-llama/Meta-Llama-3.1-8B
模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
# 模型名称
model_name = "meta-llama/Meta-Llama-3.1-8B"
# 加载 tokenizer 和模型
tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu")
# 准备输入
input_text = "Hello, Hugging Face!"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
# 生成文本
output = model.generate(input_ids)
output_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(output_text)
关键配置说明
device_map="cpu"
:明确指定将模型加载到 CPU 上。torch_dtype=torch.float32
(可选):在 CPU 上,通常使用默认的 float32 精度(无需显式指定)。
系统资源要求
-
内存(RAM):Llama 8B 模型在 CPU 上运行时,可能会消耗几十 GB 的内存,具体取决于模型的大小及其生成任务的复杂性。建议系统具有至少 64GB 或更多的内存。
-
处理速度:在 CPU 上运行大模型会非常慢。简单的文本生成任务可能需要几分钟甚至更长的时间来完成。
性能优化建议
-
减少模型大小: 如果加载完整的 Llama 8B 模型在你的系统上不可行,考虑使用更小的模型(例如 7B 或 2.7B),这样可以减轻内存和计算的压力。
-
减少输入长度和生成长度: 限制输入文本的长度以及生成文本的长度,避免超出系统的计算能力。
-
批量处理: 在使用 CPU 时,尽量避免大批量处理。可以通过调整
batch_size
来减少一次性加载的数据量。
运行注意事项
在没有 GPU 的情况下,仅靠 CPU 运行如此大的模型可能并不实际。如果模型大小和内存占用超过了系统的承受能力,你可能需要考虑在云端或高性能计算集群上运行模型,或者使用更小的模型来进行实验。
1. GPT(Generative Pre-trained Transformer)
a. GPT-2
- 架构: Transformer Decoder
- 原理:
- GPT-2 使用了 Transformer 的解码器部分,利用自回归模型逐步生成文本。
- 它通过语言建模任务进行预训练,即给定前 n 个词预测第 n+1 个词。
- GPT-2 在训练中使用了大量的互联网文本数据,因此它具有丰富的语言理解和生成能力。
b. GPT-3
- 架构: Transformer Decoder
- 原理:
- GPT-3 是 GPT-2 的扩展版本,具有 1750 亿个参数,使其成为当时最强大的语言模型之一。
- GPT-3 使用相同的自回归原理,通过预训练后的微调来完成各种任务。
- GPT-3 可以在无监督的情况下完成少样本学习,在许多任务上表现优异,如翻译、问答和文本生成。
c. GPT-4
- 架构: Transformer Decoder
- 原理:
- GPT-4 是 GPT 系列中的最新版本,进一步提高了模型的参数量和性能。
- 它利用多任务学习,通过在多种不同类型的数据上进行训练,从而使模型具备更强的通用性和灵活性。
- GPT-4 在复杂任务如逻辑推理和多步骤推理中表现优越。
2. BERT(Bidirectional Encoder Representations from Transformers)
a. BERT
- 架构: Transformer Encoder
- 原理:
- BERT 使用双向 Transformer 编码器,考虑上下文信息的双向性(即前后文)。
- BERT 通过掩码语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)任务进行预训练。
- MLM 任务通过随机遮盖部分词汇,然后让模型预测被遮盖的词汇来训练模型。NSP 任务则通过让模型判断两句子是否连续来理解句子之间的关系。
b. RoBERTa
- 架构: Transformer Encoder
- 原理:
- RoBERTa 是 BERT 的改进版本,采用了更大的数据集和更长的训练时间,移除了 BERT 中的 NSP 任务。
- RoBERTa 在 MLM 任务上表现更好,且在训练中使用了更大的 batch size 和更长的序列长度。
- 通过这些改进,RoBERTa 在多个自然语言理解任务上都超过了 BERT。
c. DistilBERT
- 架构: Transformer Encoder
- 原理:
- DistilBERT 是 BERT 的轻量级版本,通过知识蒸馏技术将 BERT 的模型压缩到原始模型的一半大小。
- 知识蒸馏通过让小模型学习大模型的输出,使得小模型能在保持较高精度的情况下显著降低计算成本。
- DistilBERT 在各种 NLP 任务中表现出色,尤其是在资源受限的环境中。
3. T5(Text-To-Text Transfer Transformer)
a. T5
- 架构: Transformer Encoder-Decoder
- 原理:
- T5 将所有 NLP 任务统一为文本到文本的形式,无论是分类、生成还是翻译任务。
- T5 使用标准的 Transformer 编码器-解码器架构,模型通过在大规模文本数据上进行预训练,随后在特定任务上进行微调。
- 这种统一任务的方式使得 T5 在多种不同的 NLP 任务上表现强劲。
b. mT5
- 架构: Transformer Encoder-Decoder
- 原理:
- mT5 是 T5 的多语言版本,支持超过 100 种语言。
- mT5 通过多语言数据进行预训练,使得模型在跨语言的理解和生成任务上具有较好的表现。
- mT5 可以在单一任务上处理多种语言,具有极强的通用性。
c. Flan-T5
- 架构: Transformer Encoder-Decoder
- 原理:
- Flan-T5 是 T5 的一个变种,通过更好的指令调教增强模型在特定任务上的表现。
- Flan-T5 利用指令提示的方式,通过训练模型理解和生成与任务相关的输出,进一步提升了 T5 的表现力。
- Flan-T5 在任务特定的精度上有所提升,同时保持了 T5 的通用性。
4. BART(Bidirectional and Auto-Regressive Transformers)
a. BART
- 架构: Transformer Encoder-Decoder
- 原理:
- BART 是一个自编码器模型,结合了 BERT 的双向编码器和 GPT 的自回归解码器。
- 在预训练阶段,BART 使用了多种噪声方式(如文本随机遮盖、顺序打乱等)来扰乱输入,然后让模型学习恢复原始输入。
- BART 在文本生成和恢复任务上表现强劲,适用于摘要生成、翻译、文本生成等任务。
b. mBART
- 架构: Transformer Encoder-Decoder
- 原理:
- mBART 是 BART 的多语言版本,预训练时使用了多种语言的数据。
- mBART 支持跨语言的生成任务,如多语言翻译和跨语言文本生成。
- mBART 通过跨语言预训练提高了模型在多语言任务中的泛化能力。
c. PEGASUS
- 架构: Transformer Encoder-Decoder
- 原理:
- PEGASUS 是一个专门为摘要生成设计的模型。
- 在预训练过程中,PEGASUS 通过在输入文本中掩盖句子或段落并让模型生成这些被掩盖的部分,从而学习生成高质量摘要。
- PEGASUS 在各种摘要生成任务上表现出色,尤其在长文本的摘要生成中具有优势。
5. XLNet
a. XLNet
- 架构: Transformer-based 双向自回归模型
- 原理:
- XLNet 结合了 BERT 和 GPT 的优点,通过双向上下文的自回归建模来捕捉更多信息。
- 它使用了一个称为“Permuted Language Modeling”的新任务,随机打乱输入序列并对每个排列的顺序进行语言建模。
- XLNet 可以更好地理解上下文信息,特别是在处理长文本或复杂语法结构时。
b. ERNIE
- 架构: Transformer-based 双向自回归模型
- 原理:
- ERNIE 是一个增强版本的预训练模型,专注于知识增强和多模态学习。
- 它通过将更多的知识(如实体信息)融入到模型的训练过程中,使其在知识密集型任务上表现更好。
- ERNIE 在文本分类、问答系统和情感分析等任务上表现优越,特别是在中文 NLP 任务中。
c. ALBERT
- 架构: Transformer-based 双向编码器
- 原理:
- ALBERT 是 BERT 的轻量化版本,通过共享层参数和词嵌入分解等技术,大幅减少了模型的参数量。
- 它在降低模型复杂性的同时,保持了高效的表现,尤其适合在资源受限的环境中应用。
- ALBERT 在自然语言理解任务上表现优异,并且因其高效性而被广泛应用。
6. ViT(Vision Transformer)
a. ViT
- 架构: Transformer-based 图像分类模型
- 原理:
- ViT 将图像划分为固定大小的块(patches),并将每个块展平并嵌入到高维空间中作为输入。
- 这些块嵌入经过 Transformer 编码器处理,模型最终通过一个分类头进行图像分类。
- ViT 证明了 Transformer 架构在计算机视觉任务中的有效性,特别是在大规模图像数据上训练时表现优异。
b. DeiT
- 架构: Transformer-based 图像分类模型
- 原理:
- DeiT 是 ViT 的一个高效版本,针对数据稀缺场景进行了优化。
- 它通过引入数据增强和知识蒸馏等技术,使得在相对较小的数据集上也能训练出性能
优异的视觉 Transformer 模型。
- DeiT 提供了计算效率与精度的良好平衡,适合各种计算机视觉任务。
c. Swin Transformer
- 架构: Transformer-based 图像分类模型
- 原理:
- Swin Transformer 改进了 ViT,采用了分层结构和移动窗口机制来提高模型的效率和效果。
- 它通过分层级别逐步捕捉图像的局部和全局信息,在图像分类、目标检测、语义分割等任务中都表现出色。
- Swin Transformer 在多个视觉任务上刷新了当时的性能记录,证明了其强大的能力。
7. CLIP(Contrastive Language–Image Pretraining)
a. CLIP
- 架构: Transformer-based 多模态模型
- 原理:
- CLIP 通过对比学习的方式同时训练文本和图像编码器,使得两种模态的数据可以互相映射。
- 在训练过程中,CLIP 使用了大量的图文对数据,并优化了一个对比损失函数,使得相关的图文对在高维空间中更加接近。
- CLIP 在零样本学习和多模态任务中表现优越,如图像分类、图像检索和文本到图像生成。
b. DALL-E
- 架构: Transformer-based 多模态模型
- 原理:
- DALL-E 是一个基于 GPT-3 的生成模型,能够根据文本描述生成图像。
- 它利用大规模的图文对数据,通过自回归的方式逐像素生成图像。
- DALL-E 在生成符合文本描述的高质量图像方面表现出色,展示了文本到图像生成的巨大潜力。
c. Flamingo
- 架构: Transformer-based 多模态模型
- 原理:
- Flamingo 是一个针对图像和文本混合输入的模型,能够处理复杂的多模态任务。
- 它使用了自回归的架构来处理图文混合输入,在多模态对话、图像解释等任务中表现出色。
- Flamingo 展示了在多模态输入下的强大理解和生成能力。
8. Whisper
a. Whisper
- 架构: Transformer-based 音频处理模型
- 原理:
- Whisper 是一个预训练的语音识别模型,专注于高质量的语音转录和音频处理。
- 它使用了 Transformer 编码器来处理音频信号,并生成对应的文本输出。
- Whisper 在各种语音识别任务上表现出色,特别是在嘈杂环境下的语音转录任务中具有较强的抗噪能力。
b. Wav2Vec 2.0
- 架构: Transformer-based 音频处理模型
- 原理:
- Wav2Vec 2.0 是一个自监督学习的语音模型,通过掩盖部分音频数据并让模型预测这些掩盖部分来进行预训练。
- 它利用了卷积神经网络和 Transformer 的组合架构,能够在无监督情况下学习音频表示。
- Wav2Vec 2.0 在语音识别任务上表现优异,并且能够大大减少对标注数据的依赖。
c. HuBERT
- 架构: Transformer-based 音频处理模型
- 原理:
- HuBERT 是一个自监督学习的语音模型,通过隐含单元建模对音频数据进行表征学习。
- 它通过引入一个隐含的聚类模型,能够在未标注的数据上学习音频表示,从而提升语音识别的准确性。
- HuBERT 在低资源语音识别任务上表现尤其优越,展示了强大的学习能力。
Hugging Face 的 Transformers 库支持众多著名的预训练模型,这些模型覆盖了各种架构,每种架构都有其独特的应用和优点。以下是一些著名的模型及其架构:
1. GPT(Generative Pre-trained Transformer)
- 架构: Transformer-based 自回归模型(Transformer Decoder)
- 著名模型:
- GPT-2: 由 OpenAI 发布,用于生成文本,具有强大的语言生成能力。
- GPT-3: 更大的版本,由 OpenAI 发布,具有更高的语言理解和生成能力。
- GPT-4: 最新版本,进一步提升了语言生成和理解能力。
- 应用: 文本生成、对话系统、代码生成等。
2. BERT(Bidirectional Encoder Representations from Transformers)
- 架构: Transformer-based 双向编码器(Transformer Encoder)
- 著名模型:
- BERT: 由 Google 发布,广泛应用于自然语言理解任务,如文本分类、命名实体识别等。
- RoBERTa: BERT 的改进版,由 Facebook 发布,通过更好的训练策略提升了性能。
- DistilBERT: BERT 的轻量级版本,减少了参数量,保持了高效性。
- 应用: 文本分类、问答系统、情感分析、命名实体识别等。
3. T5(Text-To-Text Transfer Transformer)
- 架构: Transformer-based 编码器-解码器(Encoder-Decoder)
- 著名模型:
- T5: 由 Google 发布,统一了 NLP 任务,将所有任务转换为文本到文本的形式。
- mT5: 多语言版 T5,支持多种语言的自然语言处理任务。
- 应用: 文本生成、翻译、问答系统、摘要生成等。
4. BART(Bidirectional and Auto-Regressive Transformers)
- 架构: Transformer-based 编码器-解码器(Encoder-Decoder)
- 著名模型:
- BART: 由 Facebook 发布,结合了 BERT 和 GPT 的优点,适用于文本生成和理解。
- mBART: 多语言版 BART,用于跨语言的生成任务。
- 应用: 文本生成、摘要生成、翻译、纠错等。
5. XLNet
- 架构: Transformer-based 双向自回归模型
- 著名模型:
- XLNet: 由 Google 和 CMU 发布,通过结合 BERT 和 GPT 的优点,增强了上下文建模能力。
- 应用: 自然语言理解、文本分类、问答系统等。
6. ALBERT(A Lite BERT)
- 架构: Transformer-based 双向编码器(Transformer Encoder)
- 著名模型:
- ALBERT: BERT 的轻量化版本,通过共享参数和分解矩阵降低了模型的复杂性。
- 应用: 文本分类、问答系统、命名实体识别等。
7. DeBERTa(Decoding-enhanced BERT with disentangled attention)
- 架构: Transformer-based 双向编码器(Transformer Encoder)
- 著名模型:
- DeBERTa: 由 Microsoft 发布,改进了 BERT 的注意力机制,增强了模型的表现力。
- 应用: 文本分类、问答系统、情感分析等。
8. ViT(Vision Transformer)
- 架构: Transformer-based 图像分类模型
- 著名模型:
- ViT: 由 Google 发布,将 Transformer 引入到图像分类任务中,替代传统的卷积神经网络。
- 应用: 图像分类、物体检测等计算机视觉任务。
9. CLIP(Contrastive Language–Image Pretraining)
- 架构: Transformer-based 多模态模型
- 著名模型:
- CLIP: 由 OpenAI 发布,将文本和图像联合学习,通过对比学习训练,使其在多模态任务中表现出色。
- 应用: 图像分类、图像检索、文本到图像生成等。
10. Whisper
- 架构: Transformer-based 音频处理模型
- 著名模型:
- Whisper: 由 OpenAI 发布,用于高质量的语音识别和音频转录。
- 应用: 语音识别、语音转录、字幕生成等。
这些模型在 Hugging Face Transformers 库中均可用,并且可以通过简单的 API 进行调用和使用。不同模型的架构适合于不同类型的任务,从文本处理到图像分类,从单语言到多语言,从单模态到多模态,都有对应的著名模型支持。
Hugging Face 是一个致力于自然语言处理(NLP)和机器学习的开源社区和工具平台。其核心库之一是 transformers
,它提供了预训练的Transformer模型(如BERT、GPT-3、Llama等)的便捷接口。
安装
首先,你需要安装 transformers
和 torch
(或其他深度学习框架,如 TensorFlow)。可以使用以下命令安装:
pip install transformers torch
加载Llama模型
要加载Llama模型,可以使用 transformers
库提供的模型类和 AutoTokenizer
类。下面是一个示例代码,展示了如何加载Llama模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载预训练的Llama模型和tokenizer
model_name = "decapoda-research/llama-7b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 测试加载
input_text = "Hello, Hugging Face!"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
output = model.generate(input_ids)
output_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(output_text)
主要方法和参数说明
-
AutoModelForCausalLM.from_pretrained
: 从预训练模型中加载模型权重。pretrained_model_name_or_path
(str):预训练模型的名称或本地路径。config
(Optional[Union[str, PretrainedConfig]]):模型配置,可以是路径或PretrainedConfig
对象。cache_dir
(Optional[str]):存储预训练模型的缓存目录。force_download
(bool, 默认值为False):是否强制重新下载模型。resume_download
(bool, 默认值为False):在下载中断后是否继续下载。proxies
(Optional[Dict[str, str]]):请求下载模型时使用的代理。local_files_only
(bool, 默认值为False):是否只使用本地文件,不从远程下载。use_auth_token
(Optional[Union[str, bool]]):使用认证令牌进行下载。
-
AutoTokenizer.from_pretrained
: 从预训练模型中加载tokenizer。pretrained_model_name_or_path
(str):预训练模型的名称或本地路径。cache_dir
(Optional[str]):存储预训练tokenizer的缓存目录。use_fast
(bool, 默认值为True):是否使用快速tokenizer。revision
(str, 默认值为"main"):模型版本。subfolder
(str):模型文件所在子目录。use_auth_token
(Optional[Union[str, bool]]):使用认证令牌进行下载。
-
tokenizer
__call__
:将文本转换为模型输入格式。text
(str):要转换的文本。text_pair
(Optional[str]):可选的第二段文本(用于句对任务)。return_tensors
(str):返回张量的类型,如"pt"
(PyTorch)、"tf"
(TensorFlow)、"np"
(NumPy)。padding
(Union[bool, str]):是否填充序列。truncation
(Union[bool, str]):是否截断序列。max_length
(Optional[int]):最大序列长度。return_attention_mask
(bool, 默认值为None):是否返回注意力掩码。
-
model.generate
input_ids
(Tensor):输入序列。max_length
(int, 默认值为20):生成序列的最大长度。num_beams
(int, 默认值为1):beam search的数量。temperature
(float, 默认值为1.0):控制生成的随机性。top_k
(int, 默认值为50):采样时考虑的最高概率的k个标记。top_p
(float, 默认值为1.0):nucleus sampling的累积概率阈值。repetition_penalty
(float, 默认值为1.0):惩罚重复标记的系数。
示例
以下是一个更详细的示例,展示了如何自定义参数来生成文本:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "decapoda-research/llama-7b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
input_text = "Once upon a time"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
# 自定义生成参数
output = model.generate(
input_ids,
max_length=50,
num_beams=5,
temperature=0.7,
top_k=50,
top_p=0.95,
repetition_penalty=1.2
)
output_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(output_text)
以上代码将生成一个长度不超过50个标记的文本,并使用自定义的参数进行生成,确保生成的文本更符合预期。