在使用 Keras 进行 Gemma 模型的分布式微调和推理

Gemma 是一个轻量级、先进的开放模型家族,由用于创建 Google Gemini 模型的研究和技术构建。Gemma 可以进一步微调以满足特定需求。但是,像 Gemma 这样的大型语言模型可能会非常大,有些可能不适合在单个加速器上进行微调。在这种情况下,有两种一般方法来对它们进行微调:

  1. 参数高效微调(PEFT),旨在通过牺牲一些保真度来缩小有效模型大小。LoRA 属于这一类别,在 Keras 中使用 LoRA 微调 Gemma 模型1的教程演示了如何使用 KerasNLP 在单个 GPU 上使用 LoRA 微调 Gemma 2B 模型 gemma_2b_en。

  2. 使用模型并行性的全参数微调。模型并行性将单个模型的权重分布在多个设备上,并实现水平扩展。您可以在这个 Keras指南2中了解更多关于分布式训练的信息。

本教程指导您如何使用 Keras 与 JAX 后端,通过 LoRA 和模型并行分布式训练在 Google 的张量处理单元(TPU)上微调 Gemma 7B 模型。请注意,在本教程中可以关闭 LoRA,进行较慢但更准确的全参数调整。

在 Keras 中使用 LoRA 微调 Gemma 模型

大型语言模型(LLM)如 Gemma 已被证明在多种自然语言处理(NLP)任务上有效。LLM首先通过自监督方式在大量文本语料上进行预训练。预训练帮助 LLM 学习通用知识,例如单词之间的统计关系。然后,可以使用特定领域的数据对 LLM 进行微调,以执行下游任务(如情感分析)。

LLM 的大小极大(参数数量达到数百万)。对于大多数应用来说,不需要进行完全微调(更新模型中的所有参数),因为典型的微调数据集相对于预训练数据集要小得多。

低秩适应(LoRA)1是一种微调技术,通过冻结模型的权重并在模型中插入较少数量的新权重,大大减少了下游任务的可训练参数数量。这使得使用 LoRA 进行训练更快、更节省内存,并且生成的模型权重更小(几百MB),同时保持了模型输出的质量。

本教程将引导您使用 KerasNLP 对 Gemma 2B 模型进行 LoRA 微调,使用的是 Databricks Dolly 15k数据集2。该数据集包含15,000个高质量的人类生成的提示/响应对,专门用于微调 LLM。

使用 KerasNLP 快速开始 Gemma

本教程将向您展示如何使用 KerasNLP1 开始使用 Gemma。Gemma 是一个轻量级的、采用最新技术的开放模型家族,这些技术源于创建 Gemini 模型的同一研究和技术。KerasNLP 是一个自然语言处理(NLP)模型的集合,这些模型使用 Keras2 实现,并能在 JAX、PyTorch 和 TensorFlow 上运行。

在本教程中,您将使用 Gemma 生成对几个提示的文本响应。如果您对 Keras 不熟悉,可能会想在开始前阅读《 Keras 入门3》,但这不是必须的。通过本教程的学习,您将更加了解 Keras。

2023年终终结

我本身是一个不太写总结类内容的人,但这次跟风写一回,总结我这一年AI相关的技术总结和我整体的思考。

写给大忙人看的Go语言快速指南(中文翻译)

Go是一种非常受欢迎的编程语言,它具有内置的并发支持和众多其他优秀的特性。在众多现代语言中,Go在基本语言设计方面格外出众。

首先,Go是一种非常简洁的语言,它的简洁性使其与像Lua这样的简单语言相似。Go设计时十分注重简洁主义 …

Go slog 日志包尝鲜

slog 是 Go 团队开发的一个实验性日志包,它提供了结构化日志记录的功能。 注意:当前该包还未在Go基础库中包含。