随笔008-端侧部署LLM

百度云嵌入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 加载和运行模型时的配置建议:

基础环境配置

  1. Python 版本:

    • 推荐使用 Python 3.8 或更高版本。
  2. 深度学习框架:

    • PyTorch:安装支持 CPU 的 PyTorch 版本。可以通过以下命令安装:

      pip install torch torchvision torchaudio
      
    • Transformers:安装最新版本的 Transformers 库:

      pip install transformers
      
  3. 其他依赖:

    • 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 上运行大模型会非常慢。简单的文本生成任务可能需要几分钟甚至更长的时间来完成。

性能优化建议

  1. 减少模型大小: 如果加载完整的 Llama 8B 模型在你的系统上不可行,考虑使用更小的模型(例如 7B 或 2.7B),这样可以减轻内存和计算的压力。

  2. 减少输入长度和生成长度: 限制输入文本的长度以及生成文本的长度,避免超出系统的计算能力。

  3. 批量处理: 在使用 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等)的便捷接口。

安装

首先,你需要安装 transformerstorch(或其他深度学习框架,如 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)

主要方法和参数说明

  1. 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]]):使用认证令牌进行下载。
  2. 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]]):使用认证令牌进行下载。
  3. 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):是否返回注意力掩码。
  4. 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个标记的文本,并使用自定义的参数进行生成,确保生成的文本更符合预期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值