有答必应“秒”回复,开源轻量化模型Gemma 2 在 A4000 GPU 上表现惊人

前不久,Google 发布了 Gemma 2,这是一个轻量级的大语言模型。 这些轻量级模型,继承了 Gemini 模型的技术,旨在打破技术壁垒,让AI的力量惠及更广泛的人群,成为AI民主化进程中的重要里程碑。

Gemma 2 有两个版本:90亿(9B)和270亿(27B)个参数,并支持 8K token 的上下文。Google 声称,这一模型的表现优于第一代Gemma模型,同时更加高效。Gemma 2还优化了必要的安全措施。27B 模型性能之强,足以与比它规模大两倍的模型相媲美,而且它还可以在单张 NVIDIA H100 Tensor Core GPU 或 TPU 主机上运行,能降低使用者的成本。

DigitalOcean 旗下的 GPU 云服务 Paperspace 正以经济实惠的方式提供 H100 和 A4000 等高性能GPU,让更多的研究者和开发者能够运行 Gemma 2 这类先进且轻量级的模型。借助Paperspace 建立于云上的基础设施,用户可以以低于传统基础设施成本,轻松地用到市面上炙手可热的 NVIDIA 高性能 GPU。

两者结合,进一步降低了人工智能领域的准入门槛,有助于像Gemma 2这样的高级模型更好地得到普及,并进一步推动人工智能进入更多人的生活。

对轻量级模型的需求

轻量级大语言模型模型可以让前沿的 AI 技术更加易于获取、高效、低成本。它们支持各种应用。

轻量级模型在各个领域至关重要的原因有以下几点:

  • 速度:由于它们的体积和复杂性得到了降低,轻量级模型通常具有更快的推理时间。这对于实时或近实时数据处理应用至关重要,如视频分析、自动驾驶汽车或推荐系统。
  • 计算资源要求低:轻量级模型通常比大型模型需要更少的计算资源(如内存和处理能力)。这使它们适合部署在功能有限的设备上,如智能手机、物联网或边缘设备。
  • 可扩展性:轻量级模型更容易在许多设备或用户之间扩展。这种可扩展性对于具有广泛用户基础的应用特别有利,例如移动应用。
  • 成本更低:轻量级模型可以降低部署和维护人工智能系统的操作成本。它们消耗的能量更少,并且可以在更便宜的硬件上运行,使它们对企业和开发者更加易于获取、更加低成本。
  • 在资源受限的环境中部署:在互联网连接不稳定或带宽有限的环境中,轻量级模型可以有效地运行,而不需要持续访问云服务。

像Gemma 2这样的轻量级模型至关重要,因为它让更多的人和组织可以利用前沿的 AI 技术,推动创新,并为多样化的需求去创造解决方案,同时成本更低。

Gemma 2

在最开始我们提到过,Gemma 2 是 Google 最新的开源大型语言模型(LLMs),包括 gemma-2-9b 和 gemma-2-27b 两个版本,包括指令微调版本。这些模型在广泛的数据集上进行了训练——27B版本为13万亿个token,9B版本为8万亿个token——包括网络数据、英文文本、代码和数学等内容。Gemma 2 支持 8000 个 token 的上下文长度,提供了在语言理解和文本生成等任务中增强的性能,这归功于优化后的数据管理能力,以及更大的训练数据集。Gemma 2 支持再分发、商业使用、微调和衍生项目,促进了人工智能应用的广泛采用和创新。一些技术增强包括交错本地-全局注意力( interleaving local-global attention)和组查询注意力。此外,2B和9B模型使用知识蒸馏,相对于相同尺寸的模型,它的性能更优越。

Gemma 2性能

在Gemma 2的训练过程中,采用了严格的安全协议。这包括过滤预训练数据,并在各种指标上进行全面测试,以检测和解决潜在的偏见和风险。

图:Gemma 2性能

图:评估Gemma 2的9B和27B指令

上手运行:体验 Gemma 2 的强大

我们已成功使用Ollama和NVIDIA RTX A4000测试了模型!如果还不知道怎么下载 Ollama,可以查看我们关于下载Ollama 并用于运行 Qwen2 模型的文章

在我们开始之前,让我们收集一些关于GPU配置的信息。

nvidia-smi
ollama run gemma2

你会惊讶地发现,使用NVIDIA A4000 机器,模型的检索速度有多快!仅需几秒钟,你就可以准备好与模型进行对话了。

对话一:神经网络是如何工作的,以及它们的关键组成部分是什么?

图:运行于 Ppaperspace 的 Gemma 2模型给出的答案

我们给了它一个编程问题:编写一个函数,通过填充空白单元格来解决数独谜题。数独谜题是一个9×9的网格,目标是填充网格,使得每一行、每一列和每个3×3的子网格都恰好包含数字1到9一次。空白单元格由字符表示。

它给出的输出是这样的:

def solveSudoku(puzzle):
    """
    Solves a Sudoku puzzle.

    Args:
        puzzle (list): A list of strings representing the Sudoku puzzle.

    Returns:
        list: A list of strings representing the solved Sudoku puzzle.
    """

    # Iterate over the rows, columns, and subgrids.
    for row in range(9):
        for col in range(9):
            if puzzle[row][col] == '.':
                # Check if the number is already in the row, column, or subgrid.
                for i in range(9):
                    if puzzle[row][i] != '.' and puzzle[i][col] != '.' and puzzle[row][col] == puzzle[i][col]:
                        continue

                # Find the possible numbers for the cell.
                possible_numbers = set()
                for i in range(1, 10):
                    if not is_valid(puzzle, row, col, i):
                        possible_numbers.add(i)

                # Try each possible number.
                for number in possible_numbers:
                    puzzle[row][col] = str(number)
                    if solveSudoku(puzzle):
                        return puzzle
                    puzzle[row][col] = '.'

    # If no solution is found, return the original puzzle.
    return puzzle


# Helper function to check if a number is valid for a cell.
def is_valid(puzzle, row, col, number):
    for i in range(9):
        if puzzle[row][i] == str(number) or puzzle[i][col] == str(number):
            return False
    for i in range(3):
        for j in range(3):
            if puzzle[row // 3 * 3 + i][col // 3 * 3 + j] == str(number):
                return False
    return True
```

**Explanation:**

* The `solveSudoku` function iterates over the rows, columns, and subgrids of the Sudoku puzzle.
* For each empty cell, it checks if the number is already in the row, column, or subgrid.
* It then finds the possible numbers for the cell and tries each one.
* If a solution is found, it returns the solved puzzle. Otherwise, it returns the original puzzle.
* The `is_valid` function checks if a number is valid for a cell by ensuring that it is not already in the row, column, or subgrid.

**Example Usage:**

```python
# Example Sudoku puzzle.
puzzle = [
    ['5', '3', '.', '.', '7', '8', '.', '.', '.'],
    ['.', '7', '4', '6', '.', '5', '8', '9', '.'],
    ['.', '.', '8', '.', '9', '1', '.', '6', '.'],
    // ... Rest of the puzzle.
]

# Solve the Sudoku puzzle.
solution = solveSudoku(puzzle)

# Print the solved puzzle.
print(solution)
```

小结

Gemma 2 所展示的 SOTA 模型在人工智能领域具有开创性意义。通过使用90亿和270亿参数的配置,Gemma 2 展示了其大幅优化的性能,以及增强后的安全性。它与大自身两倍的模型不相上下,并在单个 NVIDIA Tensor Core GPU或TPU主机上运行,这显然让更多开发者可以低成本地基于前沿的 AI 技术进行开发、扩展。Gemma 2 的开源特性、广泛的训练和技术创新,以及出色的性能,使其成为人工智能技术发展中的关键一环。

如果你感兴趣,可以动手尝试。如果没有合适的 GPU,欢迎在 DigitalOcean 的 Paperspace,以经济实惠的价格使用 A100、H100、A5000,以及其他型号的 GPU 机器。平台按秒计费,并在线上开发环境中提供了机器学习所需的主流软件工具、框架。如需咨询服务或技术支持,可联系 DigitalOcean 中国区独家战略合作伙伴卓普云