TinyLlama 1.1B - 尺寸并不重要

TinyLlama 1.1B – 尺寸并不重要

源节点: 3081711

介绍

在人工智能和机器学习快速发展的领域,TinyLlama 1.1B 成为一项值得注意的发展。在计算限制对运行更复杂的模型提出挑战的时代,TinyLlama 因超出预期而脱颖而出。它展示了紧凑型车型的卓越性能。

本文旨在对紧凑型大型语言模型 TinyLlama 1.1B 进行分析。我们将深入研究其核心方面,例如如何使用 Hugging Face 平台进行性能基准训练和实际实施。我们甚至会在免费的 Google Colab 上运行这个模型并测试其数学和推理能力。

小羊驼 1.1B

学习目标

  • 全面了解TinyLlama 1.1B
  • 探索模型所经历的复杂的训练过程
  • 分析性能和基准测试结果以评估其功效
  • 使用编码示例学习实现 TinyLlama 1.1B 的实际步骤

这篇文章是作为 数据科学博客马拉松。

目录

什么是 TinyLlama 1.1B?

TinyLlama 1.1B 是更广泛的 Llama 项目的一部分,是语言建模进步的证明。它是一个拥有 1.1 亿个参数的模型,在惊人的 3 万亿个代币上进行训练,这使其在人工智能领域处于独特的地位。与较大的同类产品不同,TinyLlama 1.1B 的设计更加高效且易于管理,使其成为计算资源有限的应用程序的不错选择。

这种开源模型使最先进的人工智能技术的获取变得民主化,使许多开发人员和研究人员能够在自然语言处理领域进行探索和创新。该模型以其平衡性能与资源消耗的能力而闻名,这是当今多样化计算环境中的一个关键考虑因素。

TinyLlama 1.1B的训练流程

TinyLlama 1.1B 的训练过程非常有趣,就像模型本身一样。 TinyLlama的训练只进行了90天,在16个A100-40G GPU上进行训练。预训练是在3万亿代币上完成的,TinyLlama团队已经发布了每万亿代币之间的中间模型。 

至于数据,Slimpajama 和 Starcoderdata 的数据集组合大小为 950 亿代币。自然语言与代码的比例保持在7:3,即70%的数据是自然语言,30%是代码。因此,为了实现 3 万亿代币的微调标记,TinyLlama 对该数据集进行了 3 轮训练。 

TinyLlama 甚至还发布了一个名为 TinyLlama-Chat 的聊天版本。最初,该模型在 UltraChat 数据集上进行了微调,该数据集包含 ChatGPT 生成的各种合成对话。这一步对于使模型能够处理不同的对话上下文和风格至关重要。

在 UltraFeedback 数据集上使用 DPOTrainer 实现了进一步的细化。此训练阶段的重点是调整模型的响应以与类人对话模式保持一致。结果是一个模型不仅能够掌握不同主题的信息,而且还能以自然且引人入胜的方式进行交互​​。

你也可以阅读: LlaMA 2 入门:初学者指南

性能和基准结果

评估 TinyLlama 1.1B 的性能揭示了其快速提供高质量响应的能力。它的培训赋予了它满足多语言应用程序的能力,这是全球化世界的一个重要特征。尽管尺寸较小,TinyLlama 1.1B 在响应质量和速度方面仍在追赶其较大的同类产品,使其成为不同人工智能应用中的有力工具。

TinyLlama 1.1B 的基准虽然不如大型模型的基准那么广泛,但仍然证明了其处理复杂语言任务的能力。它以多种语言生成连贯且上下文相关的响应的能力尤其令人印象深刻​​。该模型在 HellaSwag、WinoGrande、ARC、MMLU 等不同基准上进行了测试。综合平均分为 52.99 分。这比其他 1 亿参数模型(即 Pythia 1B)要好得多,后者的平均得分为 48.3。该表描述了每个基准的单独得分

基准 TinyLlama 1.1B 分数
海拉斯瓦格 59.2
奥布卡 36.0
温诺·格兰德 59.12
ARC_c 30.12
ARC_e 55.25
布尔克 57.83
皮卡 73.29
平均 52.9

TinyLlama – 入门

在本节中,我们将下载 TinyLlama Chat 的量化版本并在 Google Colab 中运行它。在下载模型之前,我们必须下载并安装以下Python包

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip3 install llama-cpp-python 
!pip3 install huggingface-hub 
  • CMAKE_ARGS=”-DLLAMA_CUBLAS=开” FORCE_CMAKE=1,将允许 llama_cpp_python 利用免费 colab 版本中提供的 Nvidia GPU。
  • 然后我们安装 骆驼_cpp_python 通过pip3打包
  • 我们甚至下载了 拥抱脸中心,我们将用它下载量化的 TinyLlama 1.1B Chat

为了测试TinyLlama 1.1B聊天模型,我们首先需要下载它的量化版本。要下载它,我们将运行以下代码

from huggingface_hub import hf_hub_download

# specifying the model name
model_name = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
# specifying the type of quantization of the model
model_file = "tinyllama-1.1b-chat-v1.0.Q8_0.gguf"

# download the model by specifying the model name and quantized model name
model_path = hf_hub_download(model_name, filename=model_file)

在这里, 拥抱脸集线器 库将负责下载量化模型的过程。为此,我们导入 hf_hub_下载 它接受以下参数:

  • 型号名称: 我们将希望下载的模型传递给此变量。在这里我们希望下载TinyLlama 1.1B Chat GGUF模型。
  • 模型文件: 在这里我们指定要下载的量化模型的类型。在这里我们将下载TinyLlama 8B Chat的1.1位量化版本。
  • 最后,我们将这些参数传递给 hf_hub_下载,它接受这些参数并下载指定的模型。下载完成后,返回模型下载的路径。
  • 返回的路径被保存在 模型路径 变量。

现在,我们可以通过以下方式加载这个模型 骆驼_cpp_python 图书馆。加载模型的代码如下所示。

from llama_cpp import Llama
llm = Llama(
    model_path=model_path,
    n_ctx=512,  # the number of i/p tokens the model can take
    n_threads=8, # the number of threads to use
    n_gpu_layers=40# how many layers of the model to offload to the GPU
)

我们进口 骆驼 班级从 骆驼_cpp,它接受以下参数

  • 模型路径: 该变量采用存储模型的路径。我们已经从上一步中获得了路径,我们将在此处提供该路径
  • n_ctx: 在这里,我们给出模型的上下文长度。目前,我们提供 512 个标记作为上下文长度
  • n_线程: 这里我们提到了要使用的线程数 骆驼
  • n_gpu_层: 如果我们有正在运行的 GPU,我们会指定这一点,在免费 Colab 的情况下我们会这样做。为此,我们传递 40,这意味着我们希望将整个模型卸载到 GPU 中,并且不希望其任何部分在系统 RAM 中运行
  • 最后,我们从中创建一个对象 骆驼 类并将其赋予变量 llm

运行此代码会将 TinyLlama 1.1B Chat 量化模型加载到 GPU 上并设置适当的上下文长度。现在,是时候对此模型进行一些推论了。为此,我们使用以下代码

output = llm(
  "<|im_start|>usernWho are you?<|im_end|>n<|im_start|>assistantn", # User Prompt
  max_tokens=512,  # Number of output tokens generated
  stop=["</s>"],   # Token which tells the LLM to stop
)
print(output['choices'][0]['text']) # Model generated text

为了推断模型,我们将以下参数传递给 LLM:

  • 提示/聊天模板: 这是与模特聊天所需的提示模板。上述模板(IE , )是适用于 TinyLlama 1.1B 聊天模型的模型。模板中,User后面的那句话就是User Prompt,生成Assistant之后就会生成。
  • 最大令牌数: 我们向此变量传递一个值,该值定义给出提示时大型语言模型可以输出的最大标记数。目前,我们将其限制为 512 个代币。
  • 停: 我们向该变量传递停止标记。停止标记告诉大型语言模型停止生成更多标记。对于 TinyLlama 1.1B 聊天,停止标记是

当我们运行它时,生成的文本存储在输出变量中。结果以类似于 OpenAI API 调用的格式生成。因此,我们可以通过给定的打印语句访问生成,类似于我们如何从 OpenAI 响应访问生成。生成的输出如下所示

小羊驼 1.1B

对于这种尺寸的模型,其生成的响应是一流的。对于这种尺寸的模型来说,这是出乎意料的。语法和语气看起来都很好,没有句子重复的迹象。让我们尝试测试模型的推理能力

output = llm(
  "<|im_start|>usernIf all students who study hard get good grades, 
  and John got good grades, can we conclude that John studied hard?
  <|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
小羊驼 1.1B
output = llm(
  "<|im_start|>usernHow fast can a snake fly?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

到目前为止,一切都很好。从我们看到的例子来看,该模型产生了很好的答案。但这可能并不适用于所有情况,因为我们只对有限数量的问题进行测试。我们甚至测试一下模型的数学推理能力

output = llm(
  "<|im_start|>usernJohn is twice as old as Sarah, and Sarah is three years 
  older than Mary. If Mary is 10 years old, how old is John?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"
output = llm(
  "<|im_start|>usernWhat is the missing number in this pattern: 
  1, 4, 9, 16, __, 36?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

从我们看到的例子来看,很明显,TinyLlamaChat 在回答简单的数学能力倾向问题时表现极差。这是预期的,因为该模型没有在任何数学数据集上进行预训练。可以通过在数学数据集上对其进行微调来提高生成的质量

在微调方面,TinyLlama 是那些受到硬件限制并希望在其特定数据集上微调大型语言模型的人的首选

潜在用例和应用

鉴于紧凑的尺寸 小羊驼拥有 1.1 亿个参数,其应用程序主要适用于由于硬件限制或更高的效率而导致较大模型可能不可行的环境。以下是一些考虑其大小的具体用例:

移动应用程序: TinyLlama 较小的尺寸使其成为集成到需要设备上处理的移动应用程序的不错选择。这包括语言翻译应用程序、个人助理功能以及可以在智能手机上高效运行的聊天机器人。

物联网设备中的嵌入式系统: 在物联网(IoT)领域,计算资源往往是有限的; TinyLlama 可用于为不同设备添加智能语言处理功能,例如智能家居助理、可穿戴技术和其他此类互联设备。

边缘计算: 对于受益于更接近源而不是在集中式云环境中处理数据的应用程序,可以有效地采用 TinyLlama。这包括汽车系统、制造设备和其他边缘设备中的实时语言处理。

低资源语言研究: 由于其较小的尺寸和较低的计算要求,TinyLlama 可以成为语言研究中的一个有价值的工具,特别是对于无法进行大规模模型训练的资源贫乏的语言。

教育工具: 在教育环境中,尤其是那些无法访问高端计算资源的环境中,TinyLlama 可用于开发语言学习应用程序、交互式教育工具和其他学习辅助工具。

小型企业的内容生成: 资源有限的小型企业可以使用 TinyLlama 生成内容,例如产品描述、营销文案和客户信函,而不需要大量的计算能力。

原型设计和实验: 希望试验语言模型但缺乏高性能计算资源的开发人员和研究人员可以使用 TinyLlama 来原型设计和开发新的 NLP 应用程序。

高效的数据分析: TinyLlama 可用于需要快速高效处理的场景中的文本分析和数据提取,例如分析客户反馈、调查回复或社交媒体互动。

结论

TinyLlama 1.1B 证明了人工智能和自然语言处理领域的进步。它的发展和广泛可用性对于创建更高效​​、更小、更快速的推理语言模型至关重要。通过平衡更小的参数占用量和强大的性能,TinyLlama 1.1B 满足了各种应用对强大实用模型的关键需求。它能够以类似人类的方式理解和生成语言,同时又足够轻,适合不同的计算环境,这使其成为那些努力在机器上运行大型语言模型的人们的首选。该模型可以在数据集上轻松进行微调,并且可以使用有限的计算资源进行训练。 

本文的主要内容包括

  • TinyLlama 1.1B 专为提高效率而设计,可供更广泛的受众使用,包括那些计算资源有限的受众,使其适合多种应用程序。
  • 该模型经历了广泛的训练过程,包括使用 3 个 A90-16G GPU 在 100 天内对 40 万亿个代币进行训练。
  • 尽管规模较小,TinyLlama 1.1B 仍能以多种语言提供高质量、上下文相关的响应,使其成为值得考虑的模型。
  • 它是移动应用、物联网设备、教育工具等的不错选择,其紧凑的尺寸和效率允许广泛的应用。
  • 其较低的计算要求使其成为语言研究中的宝贵工具,特别是对于资源贫乏的语言。
  • 对于那些尝试语言模型或开发新的 NLP 应用程序(主要是在计算能力有限的环境中)的人来说,该模型是一个不错的选择。

常见问题

Q1。 什么是 TinyLlama 1.1B?

A. TinyLlama 1.1B 是一个紧凑、高效的大型语言模型,拥有 1.1 亿个参数,在 3 万亿个 token 上进行训练,适合计算资源有限的应用程序。

Q2。 TinyLlama 1.1B 是如何训练的?

A. 它使用 90 个 A16-100G GPU 在 Slimpajama 和 Starcoderdata 等数据集上进行了 40 多天的训练,自然语言与代码的比率为 7:3。

Q3。 TinyLlama 1.1B 的性能基准是什么?

A. TinyLlama 1.1B 显示了其处理复杂语言任务的能力,在 HellaSwag、MMLU 和 WinoGrande 等基准测试中平均得分为 52.99。

Q4。 TinyLlama 1.1B 有哪些潜在用例?

A. 它适用于尺寸和速度是重要问题的应用。其中包括移动应用程序、家庭自动化设备等物联网设备、小型企业的内容生成以及高效的数据分析。

Q5。 TinyLlama 1.1B 适合资源有限的开发者吗?

A. 毫无疑问,对于缺乏高性能计算资源来进行原型设计和开发新 NLP 应用程序的开发人员和研究人员来说,它是一个完美的选择。 TinyLlama 模型甚至可以在 Raspberry Pi 机器上运行。

Q6。 TinyLlama 1.1B 在数学推理任务中表现如何?

A. 虽然它在不同的语言任务中确实表现出色,但它在数学推理方面表现出了局限性,可以通过微调相关数据集来改进。

本文中显示的媒体不属于 Analytics Vidhya 所有,其使用由作者自行决定。

时间戳记:

更多来自 分析维迪亚